Fix PLT creation for i386

i386 target does not have PC relative loads. Its ABI therefore require
ebx register to points to the GOT when executing a PLT entry. This means
that PLT entry cannot be used transparently, the compiler needs to
expect execution of a PLT entry to be able to use one, that is a PLT
entry should only be created if the relocation explicitely asks for it
(eg. R_386_PLT32).

This patch creates a new target macro PCRELATIVE_DLLPLT to indicate
whether a target can do a PC relative load in PLT entry when building a
dynamic library. Executable do not normally pose a problem because they
are loaded at a fixed address and thus the absolute address of GOT can
be used.

Note that in such a case, if the compiler does not use a PLT aware
relocation for external access then the code relocation will fall on the
dynamic loader since there is no PLT entry to relocate too.
This commit is contained in:
Thomas Preud'homme
2016-12-10 09:14:29 +00:00
parent e0fe69050d
commit 0bf262864c
6 changed files with 16 additions and 1 deletions

View File

@ -14,6 +14,7 @@
#define ELF_PAGE_SIZE 0x1000
#define HAVE_SECTION_RELOC
#define PCRELATIVE_DLLPLT 1
#else /* !TARGET_DEFS_ONLY */