mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 12:41:49 +01:00
[XCOFF][AIX] Put undefined symbol name into StringTable when neccessary
Summary: When we have a long name for the undefined symbol, we would hit this assertion: Assertion failed: I != StringIndexMap.end() && "String is not in table!" This patch addresses that. Reviewed by: DiggerLin, daltenty Differential Revision: https://reviews.llvm.org/D74924
This commit is contained in:
parent
07c06734bb
commit
de676f52d6
@ -343,29 +343,27 @@ void XCOFFObjectWriter::executePostLayoutBinding(MCAssembler &Asm,
|
||||
const MCSymbolXCOFF *XSym = cast<MCSymbolXCOFF>(&S);
|
||||
const MCSectionXCOFF *ContainingCsect = XSym->getContainingCsect();
|
||||
|
||||
// Handle undefined symbol.
|
||||
if (ContainingCsect->getCSectType() == XCOFF::XTY_ER) {
|
||||
// Handle undefined symbol.
|
||||
UndefinedCsects.emplace_back(ContainingCsect);
|
||||
SectionMap[ContainingCsect] = &UndefinedCsects.back();
|
||||
continue;
|
||||
} else {
|
||||
// If the symbol is the csect itself, we don't need to put the symbol
|
||||
// into csect's Syms.
|
||||
if (XSym == ContainingCsect->getQualNameSymbol())
|
||||
continue;
|
||||
|
||||
assert(SectionMap.find(ContainingCsect) != SectionMap.end() &&
|
||||
"Expected containing csect to exist in map");
|
||||
// Lookup the containing csect and add the symbol to it.
|
||||
SectionMap[ContainingCsect]->Syms.emplace_back(XSym);
|
||||
}
|
||||
|
||||
// If the symbol is the csect itself, we don't need to put the symbol
|
||||
// into csect's Syms.
|
||||
if (XSym == ContainingCsect->getQualNameSymbol())
|
||||
continue;
|
||||
|
||||
assert(SectionMap.find(ContainingCsect) != SectionMap.end() &&
|
||||
"Expected containing csect to exist in map");
|
||||
|
||||
// Lookup the containing csect and add the symbol to it.
|
||||
SectionMap[ContainingCsect]->Syms.emplace_back(XSym);
|
||||
|
||||
// If the name does not fit in the storage provided in the symbol table
|
||||
// entry, add it to the string table.
|
||||
if (nameShouldBeInStringTable(XSym->getName()))
|
||||
Strings.add(XSym->getName());
|
||||
}
|
||||
}
|
||||
|
||||
Strings.finalize();
|
||||
assignAddressesAndIndices(Layout);
|
||||
|
@ -4,10 +4,12 @@
|
||||
define void @bar() {
|
||||
entry:
|
||||
call void bitcast (void (...)* @foo to void ()*)()
|
||||
call void bitcast (void (...)* @long_undef_name to void ()*)()
|
||||
ret void
|
||||
}
|
||||
|
||||
declare void @foo(...)
|
||||
declare void @long_undef_name(...)
|
||||
|
||||
;CHECK: Symbol {
|
||||
;CHECK: Name: .foo
|
||||
@ -27,3 +29,21 @@ declare void @foo(...)
|
||||
;CHECK-NEXT: StabSectNum: 0x0
|
||||
;CHECK-NEXT: }
|
||||
;CHECK-NEXT: }
|
||||
;CHECK: Symbol {
|
||||
;CHECK: Name: .long_undef_name
|
||||
;CHECK-NEXT: Value (RelocatableAddress): 0x0
|
||||
;CHECK-NEXT: Section: N_UNDEF
|
||||
;CHECK-NEXT: Type: 0x0
|
||||
;CHECK-NEXT: StorageClass: C_EXT (0x2)
|
||||
;CHECK-NEXT: NumberOfAuxEntries: 1
|
||||
;CHECK-NEXT: CSECT Auxiliary Entry {
|
||||
;CHECK: SectionLen: 0
|
||||
;CHECK-NEXT: ParameterHashIndex: 0x0
|
||||
;CHECK-NEXT: TypeChkSectNum: 0x0
|
||||
;CHECK-NEXT: SymbolAlignmentLog2: 0
|
||||
;CHECK-NEXT: SymbolType: XTY_ER (0x0)
|
||||
;CHECK-NEXT: StorageMappingClass: XMC_PR (0x0)
|
||||
;CHECK-NEXT: StabInfoIndex: 0x0
|
||||
;CHECK-NEXT: StabSectNum: 0x0
|
||||
;CHECK-NEXT: }
|
||||
;CHECK-NEXT: }
|
||||
|
Loading…
x
Reference in New Issue
Block a user