[LLVMdev] [lld] ELF needs type for SharedLibraryAtom.
Nick Kledzik
kledzik at apple.com
Mon Sep 23 17:07:50 PDT 2013
On Sep 23, 2013, at 4:52 PM, Michael Spencer <bigcheesegs at gmail.com> wrote:
> The following code currently links incorrectly when linking against a dynamic libc on Ubuntu 12.10 unless -fpic is specified.
>
> #include <stdio.h>
>
> int main() {
> fputs("hi\n", stdout);
> }
>
> The reason is that stdout gets a R_X86_64_PC32 relocation, but is of type Object. The ELF writer can't see this, and assumes all R_X86_64_PC32 relocations in dynamic outputs are to functions and thus need PLT entries. The correct behavior is to treat this as a R_X86_64_GOTPCREL relocation. As this is what both gnu-ld and gold do.
>
> To handle this correctly we will need to add type information to SharedLibraryAtom. We will also need to know about STT_COMMON in the future.
Mach-o uses different relocations (X86_64_RELOC_BRANCH and X86_64_RELOC_SIGNED) to differentiate the two.
I don’t think we need to copy the full ContentType from DefinedAtom. We just need to know if the DSO symbol is code or data.
Also the mach-o linker will need to know if a SharedLibraryAtom is a weak-definition or not.
-Nick
More information about the llvm-dev
mailing list