[LLVMdev] [lld] ELF needs type for SharedLibraryAtom.

Shankar Easwaran shankare at codeaurora.org
Tue Sep 24 08:49:36 PDT 2013


On 9/23/2013 9:05 PM, Shankar Easwaran wrote:
> On 9/23/2013 7:07 PM, Nick Kledzik wrote:
>> 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.
> Since we are at it, we should add a type for undefinedAtoms too, not 
> sure what to call it.
Also the shared library atoms would need to have content(for data 
symbols), for the issue that Joerg brought. With GNU linkers, any 
external data reference from the executable thats resolved from a shared 
library, is copied into the main executable.

Not sure why this is being done for a long time with the GNU linker.

Thanks

Shankar Easwaran

-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by the Linux Foundation




More information about the llvm-dev mailing list