mirror of
https://github.com/intel/llvm.git
synced 2026-02-05 22:17:23 +08:00
[cleanup] Clean up the flow of creating a symbol body for regular symbols.
This uses a single cast and test to get the section for the symbol, and uses the cast_or_null<> pattern throughout to handle the known type but unknown non-null-ness. No functionality changed. Differential Revision: http://reviews.llvm.org/D10791 llvm-svn: 241000
This commit is contained in:
@@ -206,26 +206,26 @@ SymbolBody *ObjectFile::createSymbolBody(COFFSymbolRef Sym, const void *AuxP,
|
||||
auto *Aux = (const coff_aux_weak_external *)AuxP;
|
||||
return new (Alloc) Undefined(Name, &SparseSymbolBodies[Aux->TagIndex]);
|
||||
}
|
||||
|
||||
// Nothing else to do without a section chunk.
|
||||
auto *SC = cast_or_null<SectionChunk>(SparseChunks[Sym.getSectionNumber()]);
|
||||
if (!SC)
|
||||
return nullptr;
|
||||
|
||||
// Handle associative sections
|
||||
if (IsFirst && AuxP) {
|
||||
if (Chunk *C = SparseChunks[Sym.getSectionNumber()]) {
|
||||
auto *Aux = reinterpret_cast<const coff_aux_section_definition *>(AuxP);
|
||||
if (Aux->Selection == IMAGE_COMDAT_SELECT_ASSOCIATIVE) {
|
||||
auto *Parent =
|
||||
(SectionChunk *)(SparseChunks[Aux->getNumber(Sym.isBigObj())]);
|
||||
if (Parent)
|
||||
Parent->addAssociative((SectionChunk *)C);
|
||||
}
|
||||
}
|
||||
auto *Aux = reinterpret_cast<const coff_aux_section_definition *>(AuxP);
|
||||
if (Aux->Selection == IMAGE_COMDAT_SELECT_ASSOCIATIVE)
|
||||
if (auto *ParentSC = cast_or_null<SectionChunk>(
|
||||
SparseChunks[Aux->getNumber(Sym.isBigObj())]))
|
||||
ParentSC->addAssociative(SC);
|
||||
}
|
||||
Chunk *C = SparseChunks[Sym.getSectionNumber()];
|
||||
if (auto *SC = cast_or_null<SectionChunk>(C)) {
|
||||
auto *B = new (Alloc) DefinedRegular(this, Sym, SC);
|
||||
if (SC->isCOMDAT() && Sym.getValue() == 0 && !AuxP)
|
||||
SC->setSymbol(B);
|
||||
return B;
|
||||
}
|
||||
return nullptr;
|
||||
|
||||
auto *B = new (Alloc) DefinedRegular(this, Sym, SC);
|
||||
if (SC->isCOMDAT() && Sym.getValue() == 0 && !AuxP)
|
||||
SC->setSymbol(B);
|
||||
|
||||
return B;
|
||||
}
|
||||
|
||||
std::error_code ImportFile::parse() {
|
||||
|
||||
Reference in New Issue
Block a user