mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-04-13 15:37:24 +00:00
Don't special case undefined symbol when deciding the symbol order.
ELF has no restrictions on where undefined symbols go relative to other defined symbols. In fact, gas just sorts them together. Do the same. This was there since r111174 probably just because the MachO writer has it. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@238513 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
6882d57ef2
commit
fb48de619e
@ -805,7 +805,6 @@ void ELFObjectWriter::computeSymbolTable(
|
||||
|
||||
std::vector<ELFSymbolData> LocalSymbolData;
|
||||
std::vector<ELFSymbolData> ExternalSymbolData;
|
||||
std::vector<ELFSymbolData> UndefinedSymbolData;
|
||||
|
||||
// Add the data for the symbols.
|
||||
bool HasLargeSectionIndex = false;
|
||||
@ -902,7 +901,7 @@ void ELFObjectWriter::computeSymbolTable(
|
||||
MSD.Name = StrTabBuilder.add(Name);
|
||||
|
||||
if (MSD.SectionIndex == ELF::SHN_UNDEF)
|
||||
UndefinedSymbolData.push_back(MSD);
|
||||
ExternalSymbolData.push_back(MSD);
|
||||
else if (Local)
|
||||
LocalSymbolData.push_back(MSD);
|
||||
else
|
||||
@ -930,7 +929,6 @@ void ELFObjectWriter::computeSymbolTable(
|
||||
// Symbols are required to be in lexicographic order.
|
||||
array_pod_sort(LocalSymbolData.begin(), LocalSymbolData.end());
|
||||
array_pod_sort(ExternalSymbolData.begin(), ExternalSymbolData.end());
|
||||
array_pod_sort(UndefinedSymbolData.begin(), UndefinedSymbolData.end());
|
||||
|
||||
// Set the symbol indices. Local symbols must come before all other
|
||||
// symbols with non-local bindings.
|
||||
@ -954,12 +952,6 @@ void ELFObjectWriter::computeSymbolTable(
|
||||
writeSymbol(Writer, StringIndex, MSD, Layout);
|
||||
assert(MCELF::GetBinding(MSD.Symbol->getData()) != ELF::STB_LOCAL);
|
||||
}
|
||||
for (ELFSymbolData &MSD : UndefinedSymbolData) {
|
||||
unsigned StringIndex = StrTabBuilder.getOffset(MSD.Name);
|
||||
MSD.Symbol->setIndex(Index++);
|
||||
writeSymbol(Writer, StringIndex, MSD, Layout);
|
||||
assert(MCELF::GetBinding(MSD.Symbol->getData()) != ELF::STB_LOCAL);
|
||||
}
|
||||
|
||||
uint64_t SecEnd = OS.tell();
|
||||
SectionOffsets[SymtabSection] = std::make_pair(SecStart, SecEnd);
|
||||
|
@ -105,24 +105,6 @@ global1:
|
||||
@ CHECK-NEXT: Section: .bss
|
||||
@ CHECK-NEXT: }
|
||||
@ CHECK-NEXT: Symbol {
|
||||
@ CHECK-NEXT: Name: g1@@zed
|
||||
@ CHECK-NEXT: Value: 0x14
|
||||
@ CHECK-NEXT: Size: 0
|
||||
@ CHECK-NEXT: Binding: Global (0x1)
|
||||
@ CHECK-NEXT: Type: None (0x0)
|
||||
@ CHECK-NEXT: Other: 0
|
||||
@ CHECK-NEXT: Section: .text
|
||||
@ CHECK-NEXT: }
|
||||
@ CHECK-NEXT: Symbol {
|
||||
@ CHECK-NEXT: Name: global1
|
||||
@ CHECK-NEXT: Value: 0x14
|
||||
@ CHECK-NEXT: Size: 0
|
||||
@ CHECK-NEXT: Binding: Global (0x1)
|
||||
@ CHECK-NEXT: Type: None (0x0)
|
||||
@ CHECK-NEXT: Other: 0
|
||||
@ CHECK-NEXT: Section: .text
|
||||
@ CHECK-NEXT: }
|
||||
@ CHECK-NEXT: Symbol {
|
||||
@ CHECK-NEXT: Name: bar2@zed
|
||||
@ CHECK-NEXT: Value: 0x0
|
||||
@ CHECK-NEXT: Size: 0
|
||||
@ -140,4 +122,22 @@ global1:
|
||||
@ CHECK-NEXT: Other: 0
|
||||
@ CHECK-NEXT: Section: Undefined (0x0)
|
||||
@ CHECK-NEXT: }
|
||||
@ CHECK-NEXT: Symbol {
|
||||
@ CHECK-NEXT: Name: g1@@zed
|
||||
@ CHECK-NEXT: Value: 0x14
|
||||
@ CHECK-NEXT: Size: 0
|
||||
@ CHECK-NEXT: Binding: Global (0x1)
|
||||
@ CHECK-NEXT: Type: None (0x0)
|
||||
@ CHECK-NEXT: Other: 0
|
||||
@ CHECK-NEXT: Section: .text
|
||||
@ CHECK-NEXT: }
|
||||
@ CHECK-NEXT: Symbol {
|
||||
@ CHECK-NEXT: Name: global1
|
||||
@ CHECK-NEXT: Value: 0x14
|
||||
@ CHECK-NEXT: Size: 0
|
||||
@ CHECK-NEXT: Binding: Global (0x1)
|
||||
@ CHECK-NEXT: Type: None (0x0)
|
||||
@ CHECK-NEXT: Other: 0
|
||||
@ CHECK-NEXT: Section: .text
|
||||
@ CHECK-NEXT: }
|
||||
@ CHECK-NEXT: ]
|
||||
|
@ -53,6 +53,6 @@ barf: @ @barf
|
||||
@ OBJ-NEXT: 0x4 R_ARM_MOVT_PREL
|
||||
@ OBJ-NEXT: ]
|
||||
@ OBJ-NEXT: SectionData (
|
||||
@ OBJ-NEXT: 0000: 00000000 2D060000 04000000 2E060000 |....-...........|
|
||||
@ OBJ-NEXT: 0000: 00000000 2D050000 04000000 2E050000 |....-...........|
|
||||
@ OBJ-NEXT: )
|
||||
@ OBJ-NEXT: }
|
||||
|
@ -119,15 +119,6 @@ leaq .Llocal1(%rip), %rdi
|
||||
// CHECK-NOT: Symbol {
|
||||
// CHECK: }
|
||||
// CHECK-NEXT: Symbol {
|
||||
// CHECK-NEXT: Name: bar3
|
||||
// CHECK-NEXT: Value: 0x0
|
||||
// CHECK-NEXT: Size: 0
|
||||
// CHECK-NEXT: Binding: Global
|
||||
// CHECK-NEXT: Type: None
|
||||
// CHECK-NEXT: Other: 0
|
||||
// CHECK-NEXT: Section: .text
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: Symbol {
|
||||
// CHECK-NEXT: Name: bar2
|
||||
// CHECK-NEXT: Value: 0x0
|
||||
// CHECK-NEXT: Size: 0
|
||||
@ -136,4 +127,13 @@ leaq .Llocal1(%rip), %rdi
|
||||
// CHECK-NEXT: Other: 0
|
||||
// CHECK-NEXT: Section: Undefined (0x0)
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: Symbol {
|
||||
// CHECK-NEXT: Name: bar3
|
||||
// CHECK-NEXT: Value: 0x0
|
||||
// CHECK-NEXT: Size: 0
|
||||
// CHECK-NEXT: Binding: Global
|
||||
// CHECK-NEXT: Type: None
|
||||
// CHECK-NEXT: Other: 0
|
||||
// CHECK-NEXT: Section: .text
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: ]
|
||||
|
@ -16,6 +16,6 @@ foobar:
|
||||
.Ltmp3:
|
||||
.size foobar, .Ltmp3-foobar
|
||||
|
||||
// CHECK: Name: foobar (16)
|
||||
// CHECK: Name: bar (19)
|
||||
// CHECK: Name: foo (23)
|
||||
// CHECK: Name: foobar (16)
|
||||
|
@ -104,24 +104,6 @@ global1:
|
||||
// CHECK-NEXT: Section: .bss
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: Symbol {
|
||||
// CHECK-NEXT: Name: g1@@zed
|
||||
// CHECK-NEXT: Value: 0x14
|
||||
// CHECK-NEXT: Size: 0
|
||||
// CHECK-NEXT: Binding: Global
|
||||
// CHECK-NEXT: Type: None
|
||||
// CHECK-NEXT: Other: 0
|
||||
// CHECK-NEXT: Section: .text
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: Symbol {
|
||||
// CHECK-NEXT: Name: global1
|
||||
// CHECK-NEXT: Value: 0x14
|
||||
// CHECK-NEXT: Size: 0
|
||||
// CHECK-NEXT: Binding: Global
|
||||
// CHECK-NEXT: Type: None
|
||||
// CHECK-NEXT: Other: 0
|
||||
// CHECK-NEXT: Section: .text
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: Symbol {
|
||||
// CHECK-NEXT: Name: bar2@zed
|
||||
// CHECK-NEXT: Value: 0x0
|
||||
// CHECK-NEXT: Size: 0
|
||||
@ -139,4 +121,22 @@ global1:
|
||||
// CHECK-NEXT: Other: 0
|
||||
// CHECK-NEXT: Section: Undefined
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: Symbol {
|
||||
// CHECK-NEXT: Name: g1@@zed
|
||||
// CHECK-NEXT: Value: 0x14
|
||||
// CHECK-NEXT: Size: 0
|
||||
// CHECK-NEXT: Binding: Global
|
||||
// CHECK-NEXT: Type: None
|
||||
// CHECK-NEXT: Other: 0
|
||||
// CHECK-NEXT: Section: .text
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: Symbol {
|
||||
// CHECK-NEXT: Name: global1
|
||||
// CHECK-NEXT: Value: 0x14
|
||||
// CHECK-NEXT: Size: 0
|
||||
// CHECK-NEXT: Binding: Global
|
||||
// CHECK-NEXT: Type: None
|
||||
// CHECK-NEXT: Other: 0
|
||||
// CHECK-NEXT: Section: .text
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: ]
|
||||
|
Loading…
x
Reference in New Issue
Block a user