Index: ELF/Writer.cpp =================================================================== --- ELF/Writer.cpp +++ ELF/Writer.cpp @@ -569,7 +569,7 @@ static Symbol *addRegular(StringRef Name, InputSectionBase *IS, typename ELFT::uint Value) { typename ELFT::Sym LocalHidden = {}; - LocalHidden.setBindingAndType(STB_LOCAL, STT_NOTYPE); + LocalHidden.setBindingAndType(STB_WEAK, STT_NOTYPE); LocalHidden.setVisibility(STV_HIDDEN); LocalHidden.st_value = Value; return Symtab::X->addRegular(Name, LocalHidden, IS, nullptr); Index: test/ELF/duplicate-internal.s =================================================================== --- test/ELF/duplicate-internal.s +++ /dev/null @@ -1,11 +0,0 @@ -# Should print an expected message in case of conflict with an internally generated symbol. - -# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux %s -o %t.o -# RUN: not ld.lld -shared %t.o -o %t.so 2>&1 | FileCheck %s - -# CHECK: duplicate symbol '_gp' in {{.*}} and (internal) - -# REQUIRES: mips - - .globl _gp -_gp = 0 Index: test/ELF/linkerscript/dynamic-sym.s =================================================================== --- /dev/null +++ test/ELF/linkerscript/dynamic-sym.s @@ -0,0 +1,17 @@ +# REQUIRES: x86 +# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o +# RUN: echo "_DYNAMIC = 0x123;" > %t.script +# RUN: ld.lld -T %t.script %t.o -shared -o %t.so +# RUN: llvm-readobj -t %t.so | FileCheck %s + +# CHECK: Symbol { +# CHECK: Name: _DYNAMIC +# CHECK-NEXT: Value: 0x123 +# CHECK-NEXT: Size: 0 +# CHECK-NEXT: Binding: Local +# CHECK-NEXT: Type: None +# CHECK-NEXT: Other [ +# CHECK-NEXT: STV_HIDDEN +# CHECK-NEXT: ] +# CHECK-NEXT: Section: Absolute +# CHECK-NEXT: }