http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55309
--- Comment #32 from Kostya Serebryany <kcc at gcc dot gnu.org> 2013-02-12
06:47:56 UTC ---
Good news, 0x7fff8000 seems great:
t0: orig
t1: short offset (0x7fff8000)
t2: zero offset + pie
t0 t1 t1/t0 t2 t2/t0 t2/t1
-----------------------------------------------------------
400.perlbench, 1206.00, 1151.00, 0.95, 1192.00, 0.99, 1.04
401.bzip2, 884.00, 842.00, 0.95, 821.00, 0.93, 0.98
403.gcc, 738.00, 722.00, 0.98, 716.00, 0.97, 0.99
429.mcf, 609.00, 596.00, 0.98, 586.00, 0.96, 0.98
445.gobmk, 844.00, 804.00, 0.95, 809.00, 0.96, 1.01
456.hmmer, 1304.00, 1223.00, 0.94, 1235.00, 0.95, 1.01
458.sjeng, 916.00, 868.00, 0.95, 897.00, 0.98, 1.03
462.libquantum, 547.00, 535.00, 0.98, 534.00, 0.98, 1.00
464.h264ref, 1328.00, 1313.00, 0.99, 1265.00, 0.95, 0.96
471.omnetpp, 628.00, 601.00, 0.96, 596.00, 0.95, 0.99
473.astar, 665.00, 646.00, 0.97, 657.00, 0.99, 1.02
483.xalancbmk, 480.00, 449.00, 0.94, 445.00, 0.93, 0.99
433.milc, 709.00, 655.00, 0.92, 656.00, 0.93, 1.00
444.namd, 636.00, 594.00, 0.93, 593.00, 0.93, 1.00
447.dealII, 649.00, 615.00, 0.95, 637.00, 0.98, 1.04
450.soplex, 390.00, 374.00, 0.96, 370.00, 0.95, 0.99
453.povray, 452.00, 402.00, 0.89, 421.00, 0.93, 1.05
470.lbm, 389.00, 378.00, 0.97, 387.00, 0.99, 1.02
482.sphinx3, 980.00, 930.00, 0.95, 926.00, 0.94, 1.00
So, 0x7fff8000 seems to be a win, even compared to pie+zerobase.
We'll do some more testing a flip the switch in clang.
There is another suggestion (from dvyukov) to use -Wl,-Ttext-segment=0x40000000
together with zerobase (pie is not required) which is worth investigating.