[LLVMdev] [lld] Handling multiple -init/-fini command line options

Michael Spencer bigcheesegs at gmail.com
Mon Dec 8 15:41:40 PST 2014


On Sun, Dec 7, 2014 at 10:35 PM, Rui Ueyama <ruiu at google.com> wrote:
> I don't know whether or not it's intended, but it seems like a subtle but
> unnecessary incompatibility. I'd vote for making it compatible with GNU
> unless there's a real reason to not do so.

I agree. We should do whatever GNU ld does here.

- Michael Spencer

>
> On Mon, Dec 8, 2014 at 3:22 PM, Simon Atanasyan <simon at atanasyan.com> wrote:
>>
>> Hi,
>>
>> The LLD linker in gnu flavor mode accepts multiple -init/-fini command
>> line options. For _all_ symbols specified by these options the linker
>> creates appropriate entries in the .init_array/.fini_array sections.
>> But it looks like LD and Gold linkers do not support this feature and
>> take in account only the last -init/-fini options.
>>
>> % cat foo.c
>> int a = 0;
>> void foo() { a += 1; }
>> void bar() { a += 2; }
>>
>> % cat main.c
>> extern int a;
>> int printf(const char *, ...);
>> int main() { printf("a: %d\n", a); }
>>
>> % gcc -fPIC -shared -o libfoo.so -Wl,-init,foo -Wl,-init,bar foo.c
>> % gcc main.c -L. -lfoo -Wl,-rpath,.
>> % ./a.out
>> 2
>>
>> % gcc -fPIC -shared -o libfoo.so -Wl,-init,bar -Wl,-init,foo foo.c
>> % ./a.out
>> 1
>>
>> What is the reason of this incompatibility? The question is caused by
>> attempt to support DT_INIT/DT_FINI dynamic table tags. The table can
>> contain no more than one DT_INIT/DT_FINI tags. The LD and Gold linker
>> look up either default symbols (_init/_fini) or symbols specified by
>> the -init/-fini options and put their values to the tags.
>>
>> --
>> Simon Atanasyan
>> _______________________________________________
>> LLVM Developers mailing list
>> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>



More information about the llvm-dev mailing list