forked from OSchip/llvm-project
[ELF] - Create _DYNAMIC symbol for dynamic output
lld needs to provide _DYNAMIC symbol when creating a shared library both bfd and gold do that. This should fix the https://llvm.org/bugs/show_bug.cgi?id=26732 Differential revision: http://reviews.llvm.org/D17607 llvm-svn: 262348
This commit is contained in:
parent
9fea531fec
commit
aa4dc20f09
|
|
@ -186,9 +186,9 @@ SymbolBody *SymbolTable<ELFT>::addAbsolute(StringRef Name, Elf_Sym &ESym) {
|
||||||
|
|
||||||
template <class ELFT>
|
template <class ELFT>
|
||||||
SymbolBody *SymbolTable<ELFT>::addSynthetic(StringRef Name,
|
SymbolBody *SymbolTable<ELFT>::addSynthetic(StringRef Name,
|
||||||
OutputSectionBase<ELFT> &Section,
|
OutputSectionBase<ELFT> &Sec,
|
||||||
uintX_t Value) {
|
uintX_t Val, uint8_t Visibility) {
|
||||||
auto *Sym = new (Alloc) DefinedSynthetic<ELFT>(Name, Value, Section);
|
auto *Sym = new (Alloc) DefinedSynthetic<ELFT>(Name, Val, Sec, Visibility);
|
||||||
resolve(Sym);
|
resolve(Sym);
|
||||||
return Sym;
|
return Sym;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -58,7 +58,7 @@ public:
|
||||||
SymbolBody *addUndefinedOpt(StringRef Name);
|
SymbolBody *addUndefinedOpt(StringRef Name);
|
||||||
SymbolBody *addAbsolute(StringRef Name, Elf_Sym &ESym);
|
SymbolBody *addAbsolute(StringRef Name, Elf_Sym &ESym);
|
||||||
SymbolBody *addSynthetic(StringRef Name, OutputSectionBase<ELFT> &Section,
|
SymbolBody *addSynthetic(StringRef Name, OutputSectionBase<ELFT> &Section,
|
||||||
uintX_t Value);
|
uintX_t Value, uint8_t Visibility);
|
||||||
SymbolBody *addIgnored(StringRef Name);
|
SymbolBody *addIgnored(StringRef Name);
|
||||||
|
|
||||||
void scanShlibUndefined();
|
void scanShlibUndefined();
|
||||||
|
|
|
||||||
|
|
@ -192,8 +192,9 @@ UndefinedElf<ELFT>::UndefinedElf(StringRef N, const Elf_Sym &Sym)
|
||||||
|
|
||||||
template <typename ELFT>
|
template <typename ELFT>
|
||||||
DefinedSynthetic<ELFT>::DefinedSynthetic(StringRef N, uintX_t Value,
|
DefinedSynthetic<ELFT>::DefinedSynthetic(StringRef N, uintX_t Value,
|
||||||
OutputSectionBase<ELFT> &Section)
|
OutputSectionBase<ELFT> &Section,
|
||||||
: Defined(SymbolBody::DefinedSyntheticKind, N, false, STV_DEFAULT,
|
uint8_t Visibility)
|
||||||
|
: Defined(SymbolBody::DefinedSyntheticKind, N, false, Visibility,
|
||||||
/*IsTls*/ false, /*IsFunction*/ false),
|
/*IsTls*/ false, /*IsFunction*/ false),
|
||||||
Value(Value), Section(Section) {}
|
Value(Value), Section(Section) {}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -250,8 +250,8 @@ template <class ELFT> class DefinedSynthetic : public Defined {
|
||||||
public:
|
public:
|
||||||
typedef typename llvm::object::ELFFile<ELFT>::Elf_Sym Elf_Sym;
|
typedef typename llvm::object::ELFFile<ELFT>::Elf_Sym Elf_Sym;
|
||||||
typedef typename llvm::object::ELFFile<ELFT>::uintX_t uintX_t;
|
typedef typename llvm::object::ELFFile<ELFT>::uintX_t uintX_t;
|
||||||
DefinedSynthetic(StringRef N, uintX_t Value,
|
DefinedSynthetic(StringRef N, uintX_t Value, OutputSectionBase<ELFT> &Section,
|
||||||
OutputSectionBase<ELFT> &Section);
|
uint8_t Visibility);
|
||||||
|
|
||||||
static bool classof(const SymbolBody *S) {
|
static bool classof(const SymbolBody *S) {
|
||||||
return S->kind() == SymbolBody::DefinedSyntheticKind;
|
return S->kind() == SymbolBody::DefinedSyntheticKind;
|
||||||
|
|
|
||||||
|
|
@ -1004,6 +1004,8 @@ template <class ELFT> bool Writer<ELFT>::createSections() {
|
||||||
addStartEndSymbols();
|
addStartEndSymbols();
|
||||||
for (OutputSectionBase<ELFT> *Sec : RegularSections)
|
for (OutputSectionBase<ELFT> *Sec : RegularSections)
|
||||||
addStartStopSymbols(Sec);
|
addStartStopSymbols(Sec);
|
||||||
|
if (isOutputDynamic())
|
||||||
|
Symtab.addSynthetic("_DYNAMIC", *Out<ELFT>::Dynamic, 0, STV_HIDDEN);
|
||||||
|
|
||||||
// Define __rel[a]_iplt_{start,end} symbols if needed.
|
// Define __rel[a]_iplt_{start,end} symbols if needed.
|
||||||
addRelIpltSymbols();
|
addRelIpltSymbols();
|
||||||
|
|
@ -1146,8 +1148,8 @@ template <class ELFT> void Writer<ELFT>::addStartEndSymbols() {
|
||||||
auto Define = [&](StringRef Start, StringRef End,
|
auto Define = [&](StringRef Start, StringRef End,
|
||||||
OutputSectionBase<ELFT> *OS) {
|
OutputSectionBase<ELFT> *OS) {
|
||||||
if (OS) {
|
if (OS) {
|
||||||
Symtab.addSynthetic(Start, *OS, 0);
|
Symtab.addSynthetic(Start, *OS, 0, STV_DEFAULT);
|
||||||
Symtab.addSynthetic(End, *OS, OS->getSize());
|
Symtab.addSynthetic(End, *OS, OS->getSize(), STV_DEFAULT);
|
||||||
} else {
|
} else {
|
||||||
Symtab.addIgnored(Start);
|
Symtab.addIgnored(Start);
|
||||||
Symtab.addIgnored(End);
|
Symtab.addIgnored(End);
|
||||||
|
|
@ -1177,10 +1179,10 @@ void Writer<ELFT>::addStartStopSymbols(OutputSectionBase<ELFT> *Sec) {
|
||||||
StringRef Stop = Saver.save("__stop_" + S);
|
StringRef Stop = Saver.save("__stop_" + S);
|
||||||
if (SymbolBody *B = Symtab.find(Start))
|
if (SymbolBody *B = Symtab.find(Start))
|
||||||
if (B->isUndefined())
|
if (B->isUndefined())
|
||||||
Symtab.addSynthetic(Start, *Sec, 0);
|
Symtab.addSynthetic(Start, *Sec, 0, STV_DEFAULT);
|
||||||
if (SymbolBody *B = Symtab.find(Stop))
|
if (SymbolBody *B = Symtab.find(Stop))
|
||||||
if (B->isUndefined())
|
if (B->isUndefined())
|
||||||
Symtab.addSynthetic(Stop, *Sec, Sec->getSize());
|
Symtab.addSynthetic(Stop, *Sec, Sec->getSize(), STV_DEFAULT);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class ELFT> static bool needsPtLoad(OutputSectionBase<ELFT> *Sec) {
|
template <class ELFT> static bool needsPtLoad(OutputSectionBase<ELFT> *Sec) {
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@
|
||||||
// CHECK-NEXT: Version: 1
|
// CHECK-NEXT: Version: 1
|
||||||
// CHECK-NEXT: Entry: 0x0
|
// CHECK-NEXT: Entry: 0x0
|
||||||
// CHECK-NEXT: ProgramHeaderOffset: 0x34
|
// CHECK-NEXT: ProgramHeaderOffset: 0x34
|
||||||
// CHECK-NEXT: SectionHeaderOffset: 0x2084
|
// CHECK-NEXT: SectionHeaderOffset: 0x209C
|
||||||
// CHECK-NEXT: Flags [ (0x0)
|
// CHECK-NEXT: Flags [ (0x0)
|
||||||
// CHECK-NEXT: ]
|
// CHECK-NEXT: ]
|
||||||
// CHECK-NEXT: HeaderSize: 52
|
// CHECK-NEXT: HeaderSize: 52
|
||||||
|
|
@ -157,13 +157,14 @@
|
||||||
// CHECK-NEXT: ]
|
// CHECK-NEXT: ]
|
||||||
// CHECK-NEXT: Address: 0x0
|
// CHECK-NEXT: Address: 0x0
|
||||||
// CHECK-NEXT: Offset: 0x2030
|
// CHECK-NEXT: Offset: 0x2030
|
||||||
// CHECK-NEXT: Size: 16
|
// CHECK-NEXT: Size: 32
|
||||||
// CHECK-NEXT: Link: 8
|
// CHECK-NEXT: Link: 8
|
||||||
// CHECK-NEXT: Info: 1
|
// CHECK-NEXT: Info: 1
|
||||||
// CHECK-NEXT: AddressAlignment: 4
|
// CHECK-NEXT: AddressAlignment: 4
|
||||||
// CHECK-NEXT: EntrySize: 16
|
// CHECK-NEXT: EntrySize: 16
|
||||||
// CHECK-NEXT: SectionData (
|
// CHECK-NEXT: SectionData (
|
||||||
// CHECK-NEXT: 0000: 00000000 00000000 00000000 00000000 |................|
|
// CHECK-NEXT: 0000: 00000000 00000000 00000000 00000000 |................|
|
||||||
|
// CHECK-NEXT: 0010: 00000001 00002000 00000000 00020005 |...... .........|
|
||||||
// CHECK-NEXT: )
|
// CHECK-NEXT: )
|
||||||
// CHECK-NEXT: }
|
// CHECK-NEXT: }
|
||||||
// CHECK-NEXT: Section {
|
// CHECK-NEXT: Section {
|
||||||
|
|
@ -173,7 +174,7 @@
|
||||||
// CHECK-NEXT: Flags [ (0x0)
|
// CHECK-NEXT: Flags [ (0x0)
|
||||||
// CHECK-NEXT: ]
|
// CHECK-NEXT: ]
|
||||||
// CHECK-NEXT: Address: 0x0
|
// CHECK-NEXT: Address: 0x0
|
||||||
// CHECK-NEXT: Offset: 0x2040
|
// CHECK-NEXT: Offset: 0x2050
|
||||||
// CHECK-NEXT: Size: 64
|
// CHECK-NEXT: Size: 64
|
||||||
// CHECK-NEXT: Link: 0
|
// CHECK-NEXT: Link: 0
|
||||||
// CHECK-NEXT: Info: 0
|
// CHECK-NEXT: Info: 0
|
||||||
|
|
@ -193,14 +194,14 @@
|
||||||
// CHECK-NEXT: Flags [ (0x0)
|
// CHECK-NEXT: Flags [ (0x0)
|
||||||
// CHECK-NEXT: ]
|
// CHECK-NEXT: ]
|
||||||
// CHECK-NEXT: Address: 0x0
|
// CHECK-NEXT: Address: 0x0
|
||||||
// CHECK-NEXT: Offset: 0x2080
|
// CHECK-NEXT: Offset: 0x2090
|
||||||
// CHECK-NEXT: Size: 1
|
// CHECK-NEXT: Size: 1
|
||||||
// CHECK-NEXT: Link: 0
|
// CHECK-NEXT: Link: 0
|
||||||
// CHECK-NEXT: Info: 0
|
// CHECK-NEXT: Info: 0
|
||||||
// CHECK-NEXT: AddressAlignment: 1
|
// CHECK-NEXT: AddressAlignment: 1
|
||||||
// CHECK-NEXT: EntrySize: 0
|
// CHECK-NEXT: EntrySize: 0
|
||||||
// CHECK-NEXT: SectionData (
|
// CHECK-NEXT: SectionData (
|
||||||
// CHECK-NEXT: 0000: 00 |.|
|
// CHECK-NEXT: 0000: 005F4459 4E414D49 4300 |._DYNAMIC.|
|
||||||
// CHECK-NEXT: )
|
// CHECK-NEXT: )
|
||||||
// CHECK-NEXT: }
|
// CHECK-NEXT: }
|
||||||
// CHECK-NEXT: ]
|
// CHECK-NEXT: ]
|
||||||
|
|
|
||||||
|
|
@ -61,6 +61,15 @@ foo:
|
||||||
// READ-NEXT: Section: .text
|
// READ-NEXT: Section: .text
|
||||||
// READ-NEXT: }
|
// READ-NEXT: }
|
||||||
// READ-NEXT: Symbol {
|
// READ-NEXT: Symbol {
|
||||||
|
// READ-NEXT: Name: _DYNAMIC
|
||||||
|
// READ-NEXT: Value: 0x2000
|
||||||
|
// READ-NEXT: Size: 0
|
||||||
|
// READ-NEXT: Binding: Local
|
||||||
|
// READ-NEXT: Type: None
|
||||||
|
// READ-NEXT: Other: 2
|
||||||
|
// READ-NEXT: Section: .dynamic
|
||||||
|
// READ-NEXT: }
|
||||||
|
// READ-NEXT: Symbol {
|
||||||
// READ-NEXT: Name: abc
|
// READ-NEXT: Name: abc
|
||||||
// READ-NEXT: Value: 0x0
|
// READ-NEXT: Value: 0x0
|
||||||
// READ-NEXT: Size: 0
|
// READ-NEXT: Size: 0
|
||||||
|
|
|
||||||
|
|
@ -21,4 +21,13 @@
|
||||||
// CHECK-NEXT: Other: 0
|
// CHECK-NEXT: Other: 0
|
||||||
// CHECK-NEXT: Section: Undefined
|
// CHECK-NEXT: Section: Undefined
|
||||||
// CHECK-NEXT: }
|
// CHECK-NEXT: }
|
||||||
|
// CHECK-NEXT: Symbol {
|
||||||
|
// CHECK-NEXT: Name: _DYNAMIC
|
||||||
|
// CHECK-NEXT: Value: 0x2000
|
||||||
|
// CHECK-NEXT: Size: 0
|
||||||
|
// CHECK-NEXT: Binding: Local
|
||||||
|
// CHECK-NEXT: Type: None
|
||||||
|
// CHECK-NEXT: Other: 2
|
||||||
|
// CHECK-NEXT: Section: .dynamic
|
||||||
|
// CHECK-NEXT: }
|
||||||
// CHECK-NEXT: ]
|
// CHECK-NEXT: ]
|
||||||
|
|
|
||||||
|
|
@ -13,4 +13,13 @@
|
||||||
// CHECK-NEXT: Other: 0
|
// CHECK-NEXT: Other: 0
|
||||||
// CHECK-NEXT: Section: Undefined
|
// CHECK-NEXT: Section: Undefined
|
||||||
// CHECK-NEXT: }
|
// CHECK-NEXT: }
|
||||||
|
// CHECK-NEXT: Symbol {
|
||||||
|
// CHECK-NEXT: Name: _DYNAMIC
|
||||||
|
// CHECK-NEXT: Value: 0x2000
|
||||||
|
// CHECK-NEXT: Size: 0
|
||||||
|
// CHECK-NEXT: Binding: Local
|
||||||
|
// CHECK-NEXT: Type: None
|
||||||
|
// CHECK-NEXT: Other: 2
|
||||||
|
// CHECK-NEXT: Section: .dynamic
|
||||||
|
// CHECK-NEXT: }
|
||||||
// CHECK-NEXT: ]
|
// CHECK-NEXT: ]
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@
|
||||||
// CHECK-NEXT: EntrySize:
|
// CHECK-NEXT: EntrySize:
|
||||||
// CHECK-NEXT: SectionData (
|
// CHECK-NEXT: SectionData (
|
||||||
// CHECK-NEXT: 0000: 002E4C6D 796F7468 65727661 72002E4C |..Lmyothervar..L|
|
// CHECK-NEXT: 0000: 002E4C6D 796F7468 65727661 72002E4C |..Lmyothervar..L|
|
||||||
// CHECK-NEXT: 0010: 6D797661 7200 |myvar.|
|
// CHECK-NEXT: 0010: 6D797661 72005F44 594E414D 494300 |myvar._DYNAMIC.|
|
||||||
// CHECK-NEXT: )
|
// CHECK-NEXT: )
|
||||||
// CHECK-NEXT: }
|
// CHECK-NEXT: }
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,42 @@
|
||||||
|
# REQUIRES: x86
|
||||||
|
# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-freebsd %s -o %t.o
|
||||||
|
|
||||||
|
## Check that _DYNAMIC symbol is created when creating dynamic output,
|
||||||
|
## and has hidden visibility and address equal to .dynamic section.
|
||||||
|
# RUN: ld.lld -shared %t.o -o %t.so
|
||||||
|
# RUN: llvm-readobj -sections -symbols %t.so | FileCheck %s
|
||||||
|
# CHECK: Section {
|
||||||
|
# CHECK: Index: 5
|
||||||
|
# CHECK: Name: .dynamic
|
||||||
|
# CHECK-NEXT: Type: SHT_DYNAMIC
|
||||||
|
# CHECK-NEXT: Flags [
|
||||||
|
# CHECK-NEXT: SHF_ALLOC
|
||||||
|
# CHECK-NEXT: SHF_WRITE
|
||||||
|
# CHECK-NEXT: ]
|
||||||
|
# CHECK-NEXT: Address: 0x[[ADDR:.*]]
|
||||||
|
# CHECK-NEXT: Offset: 0x1000
|
||||||
|
# CHECK-NEXT: Size:
|
||||||
|
# CHECK-NEXT: Link:
|
||||||
|
# CHECK-NEXT: Info:
|
||||||
|
# CHECK-NEXT: AddressAlignment:
|
||||||
|
# CHECK-NEXT: EntrySize:
|
||||||
|
# CHECK-NEXT: }
|
||||||
|
# CHECK: Symbols [
|
||||||
|
# CHECK: Symbol {
|
||||||
|
# CHECK: Name: _DYNAMIC
|
||||||
|
# CHECK-NEXT: Value: 0x[[ADDR]]
|
||||||
|
# CHECK-NEXT: Size: 0
|
||||||
|
# CHECK-NEXT: Binding: Local
|
||||||
|
# CHECK-NEXT: Type: None
|
||||||
|
# CHECK-NEXT: Other: 2
|
||||||
|
# CHECK-NEXT: Section: .dynamic
|
||||||
|
# CHECK-NEXT: }
|
||||||
|
|
||||||
|
# RUN: ld.lld %t.o -o %t.o
|
||||||
|
# RUN: llvm-readobj -sections -symbols %t.o | FileCheck -check-prefix=NODYN %s
|
||||||
|
# NODYN: Symbols [
|
||||||
|
# NODYN-NOT: Name: _DYNAMIC
|
||||||
|
# NODYN: ]
|
||||||
|
|
||||||
|
.globl _start
|
||||||
|
_start:
|
||||||
|
|
@ -21,7 +21,7 @@ zed:
|
||||||
// CHECK-NEXT: AddressAlignment:
|
// CHECK-NEXT: AddressAlignment:
|
||||||
// CHECK-NEXT: EntrySize:
|
// CHECK-NEXT: EntrySize:
|
||||||
// CHECK-NEXT: SectionData (
|
// CHECK-NEXT: SectionData (
|
||||||
// CHECK-NEXT: 0000: 00666F6F 00 |.foo.|
|
// CHECK-NEXT: 0000: 00666F6F 005F4459 4E414D49 4300 |.foo._DYNAMIC.|
|
||||||
// CHECK-NEXT: )
|
// CHECK-NEXT: )
|
||||||
|
|
||||||
// CHECK: Symbols [
|
// CHECK: Symbols [
|
||||||
|
|
@ -35,6 +35,15 @@ zed:
|
||||||
// CHECK-NEXT: Section: Undefined
|
// CHECK-NEXT: Section: Undefined
|
||||||
// CHECK-NEXT: }
|
// CHECK-NEXT: }
|
||||||
// CHECK-NEXT: Symbol {
|
// CHECK-NEXT: Symbol {
|
||||||
|
// CHECK-NEXT: Name: _DYNAMIC
|
||||||
|
// CHECK-NEXT: Value: 0x1000
|
||||||
|
// CHECK-NEXT: Size: 0
|
||||||
|
// CHECK-NEXT: Binding: Local
|
||||||
|
// CHECK-NEXT: Type: None
|
||||||
|
// CHECK-NEXT: Other: 2
|
||||||
|
// CHECK-NEXT: Section: .dynamic
|
||||||
|
// CHECK-NEXT: }
|
||||||
|
// CHECK-NEXT: Symbol {
|
||||||
// CHECK-NEXT: Name: foo
|
// CHECK-NEXT: Name: foo
|
||||||
// CHECK-NEXT: Value:
|
// CHECK-NEXT: Value:
|
||||||
// CHECK-NEXT: Size:
|
// CHECK-NEXT: Size:
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,15 @@
|
||||||
// CHECK-NEXT: Section: .text
|
// CHECK-NEXT: Section: .text
|
||||||
// CHECK-NEXT: }
|
// CHECK-NEXT: }
|
||||||
// CHECK-NEXT: Symbol {
|
// CHECK-NEXT: Symbol {
|
||||||
|
// CHECK-NEXT: Name: _DYNAMIC
|
||||||
|
// CHECK-NEXT: Value: 0x1000
|
||||||
|
// CHECK-NEXT: Size: 0
|
||||||
|
// CHECK-NEXT: Binding: Local
|
||||||
|
// CHECK-NEXT: Type: None
|
||||||
|
// CHECK-NEXT: Other: 2
|
||||||
|
// CHECK-NEXT: Section: .dynamic
|
||||||
|
// CHECK-NEXT: }
|
||||||
|
// CHECK-NEXT: Symbol {
|
||||||
// CHECK-NEXT: Name: _start
|
// CHECK-NEXT: Name: _start
|
||||||
// CHECK-NEXT: Value: 0x1000
|
// CHECK-NEXT: Value: 0x1000
|
||||||
// CHECK-NEXT: Size: 0
|
// CHECK-NEXT: Size: 0
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,15 @@
|
||||||
// CHECK-NEXT: Other: 0
|
// CHECK-NEXT: Other: 0
|
||||||
// CHECK-NEXT: Section: .text
|
// CHECK-NEXT: Section: .text
|
||||||
// CHECK-NEXT: }
|
// CHECK-NEXT: }
|
||||||
|
// CHECK-NEXT: Symbol {
|
||||||
|
// CHECK-NEXT: Name: _DYNAMIC
|
||||||
|
// CHECK-NEXT: Value:
|
||||||
|
// CHECK-NEXT: Size: 0
|
||||||
|
// CHECK-NEXT: Binding: Local
|
||||||
|
// CHECK-NEXT: Type: None
|
||||||
|
// CHECK-NEXT: Other: 2
|
||||||
|
// CHECK-NEXT: Section: .dynamic
|
||||||
|
// CHECK-NEXT: }
|
||||||
// CHECK-NEXT: ]
|
// CHECK-NEXT: ]
|
||||||
|
|
||||||
foo:
|
foo:
|
||||||
|
|
|
||||||
|
|
@ -144,6 +144,15 @@
|
||||||
// CHECK-NEXT: Section: Undefined
|
// CHECK-NEXT: Section: Undefined
|
||||||
// CHECK-NEXT: }
|
// CHECK-NEXT: }
|
||||||
// CHECK-NEXT: Symbol {
|
// CHECK-NEXT: Symbol {
|
||||||
|
// CHECK-NEXT: Name: _DYNAMIC
|
||||||
|
// CHECK-NEXT: Value: 0x12000
|
||||||
|
// CHECK-NEXT: Size: 0
|
||||||
|
// CHECK-NEXT: Binding: Local
|
||||||
|
// CHECK-NEXT: Type: None
|
||||||
|
// CHECK-NEXT: Other: 2
|
||||||
|
// CHECK-NEXT: Section: .dynamic
|
||||||
|
// CHECK-NEXT: }
|
||||||
|
// CHECK-NEXT: Symbol {
|
||||||
// CHECK-NEXT: Name: _start
|
// CHECK-NEXT: Name: _start
|
||||||
// CHECK-NEXT: Value: 0x11000
|
// CHECK-NEXT: Value: 0x11000
|
||||||
// CHECK-NEXT: Size: 0
|
// CHECK-NEXT: Size: 0
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,15 @@
|
||||||
// CHECK-NEXT: Section: .text
|
// CHECK-NEXT: Section: .text
|
||||||
// CHECK-NEXT: }
|
// CHECK-NEXT: }
|
||||||
// CHECK-NEXT: Symbol {
|
// CHECK-NEXT: Symbol {
|
||||||
|
// CHECK-NEXT: Name: _DYNAMIC
|
||||||
|
// CHECK-NEXT: Value: 0x2000
|
||||||
|
// CHECK-NEXT: Size: 0
|
||||||
|
// CHECK-NEXT: Binding: Local
|
||||||
|
// CHECK-NEXT: Type: None
|
||||||
|
// CHECK-NEXT: Other: 2
|
||||||
|
// CHECK-NEXT: Section: .dynamic
|
||||||
|
// CHECK-NEXT: }
|
||||||
|
// CHECK-NEXT: Symbol {
|
||||||
// CHECK-NEXT: Name: default
|
// CHECK-NEXT: Name: default
|
||||||
// CHECK-NEXT: Value:
|
// CHECK-NEXT: Value:
|
||||||
// CHECK-NEXT: Size: 0
|
// CHECK-NEXT: Size: 0
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue