To get the best possible results from cross-architecture analysis, there are a couple of things to consider:
Use the same word size on both architectures.
Compile the application with the same word size as it normally uses. If the application normally runs on a 32-bit processor, then compile it as a 32-bit x86 binary when sampling it. If the application normally runs on a 64-bit processor, then compile it as a 64-bit x86-64 binary when sampling it.
Using the same word size on both architectures ensures that data types that depend on the word size, for example, pointers, are the same size on on both architectures. This minimizes the differences in the memory layout of the application's data structures, and ensures that the application's memory access patterns are affected as little as possible by the change of architecture.
Use the same compiler and options for both architectures.
If possible, use the same compiler and compilation options when compiling for both architectures. The compiler and compilation options affect the compiler optimizations that are performed on the application, which in turn affect the memory access patterns observed by Freja.
For example, if different compilers or options are used, the compiler used when compiling for x86 may perform an optimization that fixes a performance problem in the application while the compiler normally used does not fix it. In that case Freja will not observe the problem when sampling on x86 and not report an issue, even though the problem shows up on the architecture where the application is normally run.
Similarly, the x86 compiler may not perform an optimization that the target compiler normally used performs. In that case Freja may observe the problem and report an issue, even though fixing the problem is actually unnecessary because the target compiler normally used fixes it for you.