This set of patches improves x86 Position-Independent codegen by 1. Use copy reloction to access externally defined global data from PIE if linker supports it. 2. Add -fsymbolic to control how references to global symbols are bound, avoiding copy relocation in PIE against DSO created by -Wl,-Bsymbolic. 3. Pass -fsymbolic to GCC if -Bsymbolic is used with -flto. 4. Properly handle -fno-plt in ix86_expand_call 5. Generate R_386_GOT32x relocation for -fno-plt -fno-pic if binutils supports R_386_GOT32x.
H.J. Lu (5): X86: Optimize access to globals in PIE with copy reloc Enable -fsymbolic in LTO if -Bsymbolic is used Properly handle -fno-plt in ix86_expand_call Check if x86 binutils supports R_386_GOT32X/R_X86_64_GOTPCRELX Generate R_386_GOT32x relocation for -fno-plt -fno-pic gcc/calls.c | 12 -- gcc/collect2.c | 51 ++++++++- gcc/common.opt | 4 + gcc/config.in | 29 ++++- gcc/config/i386/i386.c | 134 +++++++++++++++++------ gcc/config/i386/predicates.md | 7 +- gcc/configure | 129 ++++++++++++++++++++-- gcc/configure.ac | 109 ++++++++++++++++-- gcc/doc/invoke.texi | 13 ++- gcc/doc/tm.texi | 10 ++ gcc/doc/tm.texi.in | 2 + gcc/output.h | 4 +- gcc/target.def | 14 +++ gcc/testsuite/gcc.target/i386/pie-copyrelocs-1.c | 4 +- gcc/testsuite/gcc.target/i386/pie-copyrelocs-2.c | 4 +- gcc/testsuite/gcc.target/i386/pie-copyrelocs-3.c | 2 +- gcc/testsuite/gcc.target/i386/pie-copyrelocs-4.c | 4 +- gcc/testsuite/gcc.target/i386/pr32219-10.c | 16 +++ gcc/testsuite/gcc.target/i386/pr32219-9.c | 2 + gcc/testsuite/gcc.target/i386/pr65886-1.c | 17 +++ gcc/testsuite/gcc.target/i386/pr65886-2.c | 15 +++ gcc/testsuite/gcc.target/i386/pr65886-3.c | 16 +++ gcc/testsuite/gcc.target/i386/pr65886-4.c | 15 +++ gcc/testsuite/gcc.target/i386/pr65886-5.c | 18 +++ gcc/testsuite/gcc.target/i386/pr65886-6.c | 18 +++ gcc/testsuite/gcc.target/i386/pr66232-10.c | 13 +++ gcc/testsuite/gcc.target/i386/pr66232-11.c | 14 +++ gcc/testsuite/gcc.target/i386/pr66232-12.c | 13 +++ gcc/testsuite/gcc.target/i386/pr66232-13.c | 13 +++ gcc/testsuite/gcc.target/i386/pr67215-1.c | 20 ++++ gcc/testsuite/gcc.target/i386/pr67215-2.c | 20 ++++ gcc/testsuite/gcc.target/i386/pr67215-3.c | 13 +++ gcc/testsuite/lib/target-supports.exp | 114 ++++++++++++++++++- gcc/varasm.c | 69 +++++++++--- 34 files changed, 848 insertions(+), 90 deletions(-) create mode 100644 gcc/testsuite/gcc.target/i386/pr32219-10.c create mode 100644 gcc/testsuite/gcc.target/i386/pr65886-1.c create mode 100644 gcc/testsuite/gcc.target/i386/pr65886-2.c create mode 100644 gcc/testsuite/gcc.target/i386/pr65886-3.c create mode 100644 gcc/testsuite/gcc.target/i386/pr65886-4.c create mode 100644 gcc/testsuite/gcc.target/i386/pr65886-5.c create mode 100644 gcc/testsuite/gcc.target/i386/pr65886-6.c create mode 100644 gcc/testsuite/gcc.target/i386/pr66232-10.c create mode 100644 gcc/testsuite/gcc.target/i386/pr66232-11.c create mode 100644 gcc/testsuite/gcc.target/i386/pr66232-12.c create mode 100644 gcc/testsuite/gcc.target/i386/pr66232-13.c create mode 100644 gcc/testsuite/gcc.target/i386/pr67215-1.c create mode 100644 gcc/testsuite/gcc.target/i386/pr67215-2.c create mode 100644 gcc/testsuite/gcc.target/i386/pr67215-3.c -- 2.4.3