mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-10 22:46:25 +00:00
Allow forward references to section symbols.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@219835 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
40edbf130e
commit
fc6e0f6f87
@ -119,11 +119,18 @@ MCSymbol *MCContext::getOrCreateSectionSymbol(const MCSectionELF &Section) {
|
||||
return Sym;
|
||||
|
||||
StringRef Name = Section.getSectionName();
|
||||
|
||||
StringMapEntry<MCSymbol*> &Entry = Symbols.GetOrCreateValue(Name);
|
||||
MCSymbol *OldSym = Entry.getValue();
|
||||
if (OldSym && OldSym->isUndefined()) {
|
||||
Sym = OldSym;
|
||||
return OldSym;
|
||||
}
|
||||
|
||||
StringMapEntry<bool> *NameEntry = &UsedNames.GetOrCreateValue(Name);
|
||||
NameEntry->setValue(true);
|
||||
Sym = new (*this) MCSymbol(NameEntry->getKey(), /*isTemporary*/ false);
|
||||
|
||||
StringMapEntry<MCSymbol*> &Entry = Symbols.GetOrCreateValue(Name);
|
||||
if (!Entry.getValue())
|
||||
Entry.setValue(Sym);
|
||||
|
||||
|
28
test/MC/ELF/section-sym2.s
Normal file
28
test/MC/ELF/section-sym2.s
Normal file
@ -0,0 +1,28 @@
|
||||
// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -t -r --expand-relocs | FileCheck %s
|
||||
|
||||
// Test that we can forward reference a section.
|
||||
|
||||
mov .rodata, %rsi
|
||||
.section .rodata
|
||||
|
||||
// CHECK:Relocations [
|
||||
// CHECK: Section (2) .rela.text {
|
||||
// CHECK: Relocation {
|
||||
// CHECK: Offset: 0x4
|
||||
// CHECK: Type: R_X86_64_32S (11)
|
||||
// CHECK: Symbol: .rodata
|
||||
// CHECK: Addend: 0x0
|
||||
// CHECK: }
|
||||
// CHECK: }
|
||||
// CHECK:]
|
||||
|
||||
// There is only one .rodata symbol
|
||||
|
||||
// CHECK:Symbols [
|
||||
// CHECK-NOT: Name: .rodata
|
||||
// CHECK: Name: .rodata
|
||||
// CHECK-NEXT: Value: 0x0
|
||||
// CHECK-NEXT: Size: 0
|
||||
// CHECK-NEXT: Binding: Local (0x0)
|
||||
// CHECK-NEXT: Type: Section (0x3)
|
||||
// CHECK-NOT: Name: .rodata
|
Loading…
x
Reference in New Issue
Block a user