[ELF] Suppress duplicate symbol error for __x86.get_pc_thunk.bx
authorFangrui Song <i@maskray.me>
Wed, 16 Mar 2022 00:20:29 +0000 (17:20 -0700)
committerFangrui Song <i@maskray.me>
Wed, 16 Mar 2022 00:20:29 +0000 (17:20 -0700)
lld/ELF/Symbols.cpp
lld/test/ELF/Inputs/i386-linkonce.s
lld/test/ELF/i386-linkonce.s

index bd78de7b0780c8b336e45994e87d270bd15078b8..ffd5469b4550eae20be1e1d09c415ba7aeaa3f30 100644 (file)
@@ -546,7 +546,7 @@ void elf::reportDuplicate(const Symbol &sym, const InputFile *newFile,
   // .gnu.linkonce.t.__x86.get_pc_thunk.bx will be discarded, so there is
   // actually no duplicate.
   const Defined *d = dyn_cast<Defined>(&sym);
-  if (!d)
+  if (!d || d->getName() == "__x86.get_pc_thunk.bx")
     return;
   // Allow absolute symbols with the same value for GNU ld compatibility.
   if (!d->section && !errSec && errOffset && d->value == errOffset)
index b5906cc79657fe8cff9f1cb40329ffc5780360f0..a45832c7b0a06a45d149150b3e9e40679052952f 100644 (file)
@@ -5,7 +5,7 @@ __i686.get_pc_thunk.bx:
     ret
 
 .section .text
-.global _strchr1
+.weak _strchr1
 _strchr1:
     call __i686.get_pc_thunk.bx
     ret
index 08727e0c29d4f793dffa9e82baffe1daeb35fb34..87379c913179b9e4ea3c90d35fb827377afeb8eb 100644 (file)
@@ -6,7 +6,7 @@
 /// crti.o in i386 glibc<2.32 has .gnu.linkonce.t.__x86.get_pc_thunk.bx that is
 /// not fully supported. Test that we don't report
 /// "relocation refers to a symbol in a discarded section: __x86.get_pc_thunk.bx".
-// RUN: ld.lld %t.o %t2.a -o /dev/null
+// RUN: ld.lld %t.o %t2.a %t2.o -o /dev/null
 
     .globl _start
 _start: