[llvm-dev] Demotion of shared symbols resolved from the dynamic linker. (original) (raw)
Fāng-ruì Sòng via llvm-dev llvm-dev at lists.llvm.org
Fri Feb 28 12:43:48 PST 2020
- Previous message: [llvm-dev] Demotion of shared symbols resolved from the dynamic linker.
- Next message: [llvm-dev] [Job Ad] IBM is hiring contract LLVM compiler development engineer
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Fri, Feb 28, 2020 at 7:24 AM Sean Fertile via llvm-dev < llvm-dev at lists.llvm.org> wrote:
On PowerPC we have a failing address sanitizer test when linking with LLD. _The issue is that the symbol 'libcstackend' is resolved to an undefined weak symbol when linking with LLD but not when linking (with the exact same command/input) with other linkers. Tracing the symbol I see it is resolved to a definition in the dynamic linker as expected:
/home/sfertile/LLVMMonoRepo/build/lib/clang/11.0.0/lib/linux/libclangrt.asan-powerpc64le.a(sanitizerlinux.cpp.o): _reference to libcstackend _/lib/powerpc64le-linux-gnu/libpthread.so.0: reference to libcstackend _/lib/powerpc64le-linux-gnu/ld64.so.2: shared definition of libcstackend _: reference to libcstackend The last line in the trace output shows where we demote the shared definition to an undefined symbol here: https://github.com/llvm/llvm-project/blob/c8bfed05e21f945b5ac71cd01d62e2854a8ddcf9/lld/ELF/Driver.cpp#L1505 I'm guessing the fix is that if
needsInterpSection()
is true then the dynamic linker should be marked as needed. Its going to end up in the DTNEEDED anyway so the symbols can't become dangling references. In my case then, the demotion won't happen and everything works as expected. Is this the right direction?
Can you name the target and upload a reproduce file (--reproduce=) ?
I have checked the x86-64 case: clang -fsanitize=address -fuse-ld=lld a.c -o a -Wl,-y,__libc_stack_end The demotion works as expected. ld.so is linked because of AS_NEEDED(...) in libc.so (a linker script). It is dropped from DT_NEEDED entries because it only provides definitions resolving weak references.
--dynamic-linker= pointing to ld.so does not mean ld.so will be added to DT_NEEDED. -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200228/fdfb9b94/attachment.html>
- Previous message: [llvm-dev] Demotion of shared symbols resolved from the dynamic linker.
- Next message: [llvm-dev] [Job Ad] IBM is hiring contract LLVM compiler development engineer
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]