[PATCH] D136381: [ELF] Suppress "duplicate symbol" when resolving STB_WEAK and STB_GNU_UNIQUE in different COMDATs
Fangrui Song via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Oct 21 09:39:59 PDT 2022
MaskRay updated this revision to Diff 469662.
MaskRay edited the summary of this revision.
MaskRay added a comment.
Herald added a subscriber: kristof.beyls.
add comment
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D136381/new/
https://reviews.llvm.org/D136381
Files:
lld/ELF/InputFiles.cpp
lld/test/ELF/comdat-binding2.s
Index: lld/test/ELF/comdat-binding2.s
===================================================================
--- /dev/null
+++ lld/test/ELF/comdat-binding2.s
@@ -0,0 +1,42 @@
+# REQUIRES: x86
+## Test we don't report duplicate definition errors when mixing Clang STB_WEAK
+## and GCC STB_GNU_UNIQUE symbols.
+
+# RUN: rm -rf %t && split-file %s %t && cd %t
+# RUN: llvm-mc -filetype=obj -triple=x86_64 weak.s -o weak.o
+# RUN: llvm-mc -filetype=obj -triple=x86_64 unique.s -o unique.o
+# RUN: ld.lld weak.o unique.o -o weak
+# RUN: llvm-readelf -s weak | FileCheck %s --check-prefix=WEAK
+# RUN: ld.lld unique.o weak.o -o unique
+# RUN: llvm-readelf -s unique | FileCheck %s --check-prefix=UNIQUE
+
+# WEAK: OBJECT WEAK DEFAULT [[#]] _ZN1BIiE1aE
+# UNIQUE: OBJECT UNIQUE DEFAULT [[#]] _ZN1BIiE1aE
+
+#--- weak.s
+## Clang
+ .type _ZN1BIiE1aE, at object
+ .section .bss._ZN1BIiE1aE,"aGwR", at nobits,_ZN1BIiE1aE,comdat
+ .weak _ZN1BIiE1aE
+_ZN1BIiE1aE:
+ .zero 4
+
+ .type _ZGVN1BIiE1aE, at object
+ .section .bss._ZGVN1BIiE1aE,"aGw", at nobits,_ZN1BIiE1aE,comdat
+ .weak _ZGVN1BIiE1aE
+_ZGVN1BIiE1aE:
+ .quad 0
+
+#--- unique.s
+## GCC -fgnu-unique. Note the different group signature for the second group.
+ .weak _ZN1BIiE1aE
+ .section .bss._ZN1BIiE1aE,"awG", at nobits,_ZN1BIiE1aE,comdat
+ .type _ZN1BIiE1aE, @gnu_unique_object
+_ZN1BIiE1aE:
+ .zero 4
+
+ .weak _ZGVN1BIiE1aE
+ .section .bss._ZGVN1BIiE1aE,"awG", at nobits,_ZGVN1BIiE1aE,comdat
+ .type _ZGVN1BIiE1aE, @gnu_unique_object
+_ZGVN1BIiE1aE:
+ .zero 8
Index: lld/ELF/InputFiles.cpp
===================================================================
--- lld/ELF/InputFiles.cpp
+++ lld/ELF/InputFiles.cpp
@@ -1190,7 +1190,7 @@
continue;
}
- if (binding == STB_WEAK)
+ if (sym.binding == STB_WEAK || binding == STB_WEAK)
continue;
std::lock_guard<std::mutex> lock(mu);
ctx.duplicates.push_back({&sym, this, sec, eSym.st_value});
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D136381.469662.patch
Type: text/x-patch
Size: 1912 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20221021/a3793208/attachment.bin>
More information about the llvm-commits
mailing list