From 0bf262864c95e555fbd077b8f30e64652d9113a6 Mon Sep 17 00:00:00 2001 From: Thomas Preud'homme Date: Sat, 10 Dec 2016 09:14:29 +0000 Subject: 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. --- x86_64-link.c | 1 + 1 file changed, 1 insertion(+) (limited to 'x86_64-link.c') diff --git a/x86_64-link.c b/x86_64-link.c index 8769b3a..25ae29c 100644 --- a/x86_64-link.c +++ b/x86_64-link.c @@ -15,6 +15,7 @@ #define ELF_PAGE_SIZE 0x200000 #define HAVE_SECTION_RELOC +#define PCRELATIVE_DLLPLT 1 #else /* !TARGET_DEFS_ONLY */ -- cgit v1.3.1