[PATCH] D25544: ELF: Override DSO definitions when creating __start_* and __stop_* symbols.
Peter Collingbourne via llvm-commits
llvm-commits at lists.llvm.org
Thu Oct 13 15:29:38 PDT 2016
This revision was automatically updated to reflect the committed changes.
Closed by commit rL284168: ELF: Override DSO definitions when creating __start_* and __stop_* symbols. (authored by pcc).
Changed prior to commit:
https://reviews.llvm.org/D25544?vs=74469&id=74591#toc
Repository:
rL LLVM
https://reviews.llvm.org/D25544
Files:
lld/trunk/ELF/Writer.cpp
lld/trunk/test/ELF/Inputs/startstop-shared2.s
lld/trunk/test/ELF/startstop-shared2.s
Index: lld/trunk/test/ELF/Inputs/startstop-shared2.s
===================================================================
--- lld/trunk/test/ELF/Inputs/startstop-shared2.s
+++ lld/trunk/test/ELF/Inputs/startstop-shared2.s
@@ -0,0 +1,2 @@
+.globl __start_foo
+__start_foo:
Index: lld/trunk/test/ELF/startstop-shared2.s
===================================================================
--- lld/trunk/test/ELF/startstop-shared2.s
+++ lld/trunk/test/ELF/startstop-shared2.s
@@ -0,0 +1,14 @@
+// REQUIRES: x86
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %p/Inputs/startstop-shared2.s -o %t.o
+// RUN: ld.lld -o %t.so %t.o -shared
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t2.o
+// RUN: ld.lld -o %t %t2.o %t.so
+// RUN: llvm-objdump -s -h %t | FileCheck %s
+
+// CHECK: foo 00000000 0000000000011008
+
+// CHECK: Contents of section .text:
+// CHECK-NEXT: 11000 08100100 00000000
+
+.quad __start_foo
+.section foo,"ax"
Index: lld/trunk/ELF/Writer.cpp
===================================================================
--- lld/trunk/ELF/Writer.cpp
+++ lld/trunk/ELF/Writer.cpp
@@ -546,15 +546,15 @@
}
template <class ELFT>
-static Symbol *addOptionalSynthetic(StringRef Name,
- OutputSectionBase<ELFT> *Sec,
- typename ELFT::uint Val) {
+static Symbol *
+addOptionalSynthetic(StringRef Name, OutputSectionBase<ELFT> *Sec,
+ typename ELFT::uint Val, uint8_t StOther = STV_HIDDEN) {
SymbolBody *S = Symtab<ELFT>::X->find(Name);
if (!S)
return nullptr;
if (!S->isUndefined() && !S->isShared())
return S->symbol();
- return Symtab<ELFT>::X->addSynthetic(Name, Sec, Val, STV_HIDDEN);
+ return Symtab<ELFT>::X->addSynthetic(Name, Sec, Val, StOther);
}
template <class ELFT>
@@ -974,15 +974,9 @@
if (!isValidCIdentifier(S))
return;
StringSaver Saver(Alloc);
- StringRef Start = Saver.save("__start_" + S);
- StringRef Stop = Saver.save("__stop_" + S);
- if (SymbolBody *B = Symtab<ELFT>::X->find(Start))
- if (B->isUndefined())
- Symtab<ELFT>::X->addSynthetic(Start, Sec, 0, B->getVisibility());
- if (SymbolBody *B = Symtab<ELFT>::X->find(Stop))
- if (B->isUndefined())
- Symtab<ELFT>::X->addSynthetic(
- Stop, Sec, DefinedSynthetic<ELFT>::SectionEnd, B->getVisibility());
+ addOptionalSynthetic(Saver.save("__start_" + S), Sec, 0, STV_DEFAULT);
+ addOptionalSynthetic(Saver.save("__stop_" + S), Sec,
+ DefinedSynthetic<ELFT>::SectionEnd, STV_DEFAULT);
}
template <class ELFT>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D25544.74591.patch
Type: text/x-patch
Size: 2606 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20161013/a36ecf99/attachment.bin>
More information about the llvm-commits
mailing list