forked from OSchip/llvm-project
Allow forward references to section symbols.
llvm-svn: 219835
This commit is contained in:
parent
90c2f1455a
commit
78206c3576
|
@ -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);
|
||||
|
||||
|
|
|
@ -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…
Reference in New Issue