aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-loop-im.c
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2021-07-02 10:21:11 +0200
committerEric Botcazou <ebotcazou@adacore.com>2021-07-02 10:24:26 +0200
commit496e1d6a1f973b3952a37163441f9149501dfb26 (patch)
tree5a269c1a72c464fa6c056b0842e383526547e20c /gcc/tree-ssa-loop-im.c
parentf7cad1a0ffe9f003ec347521dfd33f320f4c2b04 (diff)
downloadgcc-496e1d6a1f973b3952a37163441f9149501dfb26.zip
gcc-496e1d6a1f973b3952a37163441f9149501dfb26.tar.gz
gcc-496e1d6a1f973b3952a37163441f9149501dfb26.tar.bz2
Change EH pointer encodings to PC relative on Windows
A big difference between ELF and PE-COFF is that, with the latter, you can build position-independent executables or DLLs without generating PIC; as a matter of fact, flag_pic has historically been forced to 0 for 32-bit: /* Don't allow flag_pic to propagate since gas may produce invalid code otherwise. */ \ do { \ flag_pic = TARGET_64BIT ? 1 : 0; \ } while (0) The reason is that the linker builds a .reloc section that collects the absolute relocations in the generated binary, and the loader uses them to relocate it at load time if need be (e.g. if --dynamicbase is enabled). Up to binutils 2.35, the GNU linker didn't build the .reloc section for executables and defaulted to --enable-auto-image-base for DLLs, which means that DLLs had an essentially unique load address and, therefore, need not be relocated by the loader in most cases. With binutils 2.36 and later, the GNU linker builds a .reloc section for executables (thus making them PIE), --enable-auto-image-base is disabled and --dynamicbase is enabled by default, which means that essentially all the binaries are relocated at load time. This badly breaks the 32-bit compiler configured to use DWARF-2 EH because the loader corrupts the .eh_frame section when processing the relocations contained in the .reloc section. gcc/ * config/i386/i386.c (asm_preferred_eh_data_format): Always use the PIC encodings for PE-COFF targets.
Diffstat (limited to 'gcc/tree-ssa-loop-im.c')
0 files changed, 0 insertions, 0 deletions