From 64676499741cb985146ab982a67da859ff8f4f4d Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Mon, 18 May 2020 10:15:59 -0700 Subject: [PATCH] [ELF] Make --trace-symbol track preempted shared definitions Note, we still name a preempted SharedSymbol "shared definition", instead of "reference" as printed by GNU ld. This difference should not matter. ``` // GNU ld ld.bfd: t: definition of f@v1 ld.bfd: t.so: reference to f@v1 ``` Reviewed By: psmith Differential Revision: https://reviews.llvm.org/D80143 --- lld/ELF/Symbols.cpp | 3 ++- lld/test/ELF/trace-symbols.s | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lld/ELF/Symbols.cpp b/lld/ELF/Symbols.cpp index f1b4406..ff1e600 100644 --- a/lld/ELF/Symbols.cpp +++ b/lld/ELF/Symbols.cpp @@ -726,5 +726,6 @@ void Symbol::resolveShared(const SharedSymbol &other) { uint8_t bind = binding; replace(other); binding = bind; - } + } else if (traced) + printTraceSymbol(&other); } diff --git a/lld/test/ELF/trace-symbols.s b/lld/test/ELF/trace-symbols.s index b6f8bea..f5211b3 100644 --- a/lld/test/ELF/trace-symbols.s +++ b/lld/test/ELF/trace-symbols.s @@ -13,6 +13,11 @@ # RUN: rm -f %t2.a # RUN: llvm-ar rcs %t2.a %t2 +# RUN: ld.lld -y foo -shared %t1 %t1.so -o /dev/null | \ +# RUN: FileCheck --check-prefix=PREEMPT %s --implicit-check-not=foo +# PREEMPT: trace-symbols.s.tmp1: definition of foo +# PREEMPT-NEXT: trace-symbols.s.tmp1.so: shared definition of foo + # RUN: ld.lld -y foo -trace-symbol common -trace-symbol=hsymbol \ # RUN: %t %t1 %t2 -o %t3 | FileCheck -check-prefix=OBJECTRFOO %s # OBJECTRFOO: trace-symbols.s.tmp: reference to foo -- 2.7.4