This patch unify the 39 and 42-bit VMA support for AArch64 by using indirect
calls instead of inline the address function transformation. The already
defined maps for both VMA are used. Although slower, this leads to same
instrumented binary to be independent of the kernel. It also has the advantage
to be easier to enable the remaining VMA for AArch64 (48-bits).
Along with this change this patch also fix some 42-bit failures with
ALSR disable by increasing the upper high app memory threshold and also
the 42-bit madvise value for non large page set.
Regarding performance, I did a run with speccpu2006 using 'test' set (mainly
to evaluate faster) and the results shows the new indirect calls are roughly
4.6% slower than the inline version:
DIFF 401.bzip2 5.12 403.gcc 5.24 429.mcf 1.00 445.gobmk 3.36 456.hmmer 6.72 458.sjeng 6.15 462.libquantum 4.55 464.h264ref 6.82 473.astar 5.68 483.xalancbmk 6.77 GEOMEAN 4.62
PS: 400.perlbench fails due missing longjmp family instrumentation for aarch64 and 471.omnetpp
the know issue with user defined new/delete operators.
I've noticed that this mapping does not have an application region at 0x55...
That's where PIE executables are mapped by the newer kernels.
Did you test this on an older kernel (I don't know exactly when the transition happened; it was around 4.1 for X86 and AFAIK a bit earlier for AArch 64)?
See http://reviews.llvm.org/D15308 for more context.