Index: lld/trunk/ELF/Writer.cpp =================================================================== --- lld/trunk/ELF/Writer.cpp +++ lld/trunk/ELF/Writer.cpp @@ -1261,11 +1261,11 @@ StringRef Stop = Saver.save("__stop_" + S); if (SymbolBody *B = Symtab.find(Start)) if (B->isUndefined()) - Symtab.addSynthetic(Start, *Sec, 0, STV_DEFAULT); + Symtab.addSynthetic(Start, *Sec, 0, STV_HIDDEN); if (SymbolBody *B = Symtab.find(Stop)) if (B->isUndefined()) Symtab.addSynthetic(Stop, *Sec, DefinedSynthetic::SectionEnd, - STV_DEFAULT); + STV_HIDDEN); } template static bool needsPtLoad(OutputSectionBase *Sec) { Index: lld/trunk/test/ELF/startstop-shared.s =================================================================== --- lld/trunk/test/ELF/startstop-shared.s +++ lld/trunk/test/ELF/startstop-shared.s @@ -5,21 +5,21 @@ .quad __start_foo .section foo,"a" -// By default the symbol is visible and we need a dynamic reloc. -// CHECK: R_X86_64_64 __start_foo 0x0 +// By default the symbol is hidden. +// CHECK: R_X86_64_RELATIVE - 0x[[ADDR1:.*]] .hidden __start_bar .quad __start_bar .section bar,"a" -// Test that we are able to hide the symbol. -// CHECK: R_X86_64_RELATIVE - 0x[[ADDR:.*]] +// References do not affect the visibility. +// CHECK: R_X86_64_RELATIVE - 0x[[ADDR2:.*]] // CHECK: Name: __start_bar -// CHECK-NEXT: Value: 0x[[ADDR]] +// CHECK-NEXT: Value: 0x[[ADDR2]] // CHECK-NEXT: Size: // CHECK-NEXT: Binding: Local // CHECK: Name: __start_foo -// CHECK-NEXT: Value: +// CHECK-NEXT: Value: 0x[[ADDR1]] // CHECK-NEXT: Size: -// CHECK-NEXT: Binding: Global +// CHECK-NEXT: Binding: Local