mirror of
https://github.com/RPCSX/llvm.git
synced 2025-01-30 00:32:53 +00:00
[llvm-objdump] Move COFF function to where it belongs.
Ideally much more stuff should be moved out of llvm-objdump.cpp, but that will happen later. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@256118 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
5a75233380
commit
abe8418ff7
@ -542,3 +542,52 @@ void llvm::printCOFFFileHeader(const object::ObjectFile *Obj) {
|
||||
printImportTables(file);
|
||||
printExportTable(file);
|
||||
}
|
||||
|
||||
void llvm::printCOFFSymbolTable(const COFFObjectFile *coff) {
|
||||
for (unsigned SI = 0, SE = coff->getNumberOfSymbols(); SI != SE; ++SI) {
|
||||
ErrorOr<COFFSymbolRef> Symbol = coff->getSymbol(SI);
|
||||
StringRef Name;
|
||||
error(Symbol.getError());
|
||||
error(coff->getSymbolName(*Symbol, Name));
|
||||
|
||||
outs() << "[" << format("%2d", SI) << "]"
|
||||
<< "(sec " << format("%2d", int(Symbol->getSectionNumber())) << ")"
|
||||
<< "(fl 0x00)" // Flag bits, which COFF doesn't have.
|
||||
<< "(ty " << format("%3x", unsigned(Symbol->getType())) << ")"
|
||||
<< "(scl " << format("%3x", unsigned(Symbol->getStorageClass())) << ") "
|
||||
<< "(nx " << unsigned(Symbol->getNumberOfAuxSymbols()) << ") "
|
||||
<< "0x" << format("%08x", unsigned(Symbol->getValue())) << " "
|
||||
<< Name << "\n";
|
||||
|
||||
for (unsigned AI = 0, AE = Symbol->getNumberOfAuxSymbols(); AI < AE; ++AI, ++SI) {
|
||||
if (Symbol->isSectionDefinition()) {
|
||||
const coff_aux_section_definition *asd;
|
||||
error(coff->getAuxSymbol<coff_aux_section_definition>(SI + 1, asd));
|
||||
|
||||
int32_t AuxNumber = asd->getNumber(Symbol->isBigObj());
|
||||
|
||||
outs() << "AUX "
|
||||
<< format("scnlen 0x%x nreloc %d nlnno %d checksum 0x%x "
|
||||
, unsigned(asd->Length)
|
||||
, unsigned(asd->NumberOfRelocations)
|
||||
, unsigned(asd->NumberOfLinenumbers)
|
||||
, unsigned(asd->CheckSum))
|
||||
<< format("assoc %d comdat %d\n"
|
||||
, unsigned(AuxNumber)
|
||||
, unsigned(asd->Selection));
|
||||
} else if (Symbol->isFileRecord()) {
|
||||
const char *FileName;
|
||||
error(coff->getAuxSymbol<char>(SI + 1, FileName));
|
||||
|
||||
StringRef Name(FileName, Symbol->getNumberOfAuxSymbols() *
|
||||
coff->getSymbolTableEntrySize());
|
||||
outs() << "AUX " << Name.rtrim(StringRef("\0", 1)) << '\n';
|
||||
|
||||
SI = SI + Symbol->getNumberOfAuxSymbols();
|
||||
break;
|
||||
} else {
|
||||
outs() << "AUX Unknown\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1247,60 +1247,11 @@ void llvm::PrintSectionContents(const ObjectFile *Obj) {
|
||||
}
|
||||
}
|
||||
|
||||
static void PrintCOFFSymbolTable(const COFFObjectFile *coff) {
|
||||
for (unsigned SI = 0, SE = coff->getNumberOfSymbols(); SI != SE; ++SI) {
|
||||
ErrorOr<COFFSymbolRef> Symbol = coff->getSymbol(SI);
|
||||
StringRef Name;
|
||||
error(Symbol.getError());
|
||||
error(coff->getSymbolName(*Symbol, Name));
|
||||
|
||||
outs() << "[" << format("%2d", SI) << "]"
|
||||
<< "(sec " << format("%2d", int(Symbol->getSectionNumber())) << ")"
|
||||
<< "(fl 0x00)" // Flag bits, which COFF doesn't have.
|
||||
<< "(ty " << format("%3x", unsigned(Symbol->getType())) << ")"
|
||||
<< "(scl " << format("%3x", unsigned(Symbol->getStorageClass())) << ") "
|
||||
<< "(nx " << unsigned(Symbol->getNumberOfAuxSymbols()) << ") "
|
||||
<< "0x" << format("%08x", unsigned(Symbol->getValue())) << " "
|
||||
<< Name << "\n";
|
||||
|
||||
for (unsigned AI = 0, AE = Symbol->getNumberOfAuxSymbols(); AI < AE; ++AI, ++SI) {
|
||||
if (Symbol->isSectionDefinition()) {
|
||||
const coff_aux_section_definition *asd;
|
||||
error(coff->getAuxSymbol<coff_aux_section_definition>(SI + 1, asd));
|
||||
|
||||
int32_t AuxNumber = asd->getNumber(Symbol->isBigObj());
|
||||
|
||||
outs() << "AUX "
|
||||
<< format("scnlen 0x%x nreloc %d nlnno %d checksum 0x%x "
|
||||
, unsigned(asd->Length)
|
||||
, unsigned(asd->NumberOfRelocations)
|
||||
, unsigned(asd->NumberOfLinenumbers)
|
||||
, unsigned(asd->CheckSum))
|
||||
<< format("assoc %d comdat %d\n"
|
||||
, unsigned(AuxNumber)
|
||||
, unsigned(asd->Selection));
|
||||
} else if (Symbol->isFileRecord()) {
|
||||
const char *FileName;
|
||||
error(coff->getAuxSymbol<char>(SI + 1, FileName));
|
||||
|
||||
StringRef Name(FileName, Symbol->getNumberOfAuxSymbols() *
|
||||
coff->getSymbolTableEntrySize());
|
||||
outs() << "AUX " << Name.rtrim(StringRef("\0", 1)) << '\n';
|
||||
|
||||
SI = SI + Symbol->getNumberOfAuxSymbols();
|
||||
break;
|
||||
} else {
|
||||
outs() << "AUX Unknown\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void llvm::PrintSymbolTable(const ObjectFile *o) {
|
||||
outs() << "SYMBOL TABLE:\n";
|
||||
|
||||
if (const COFFObjectFile *coff = dyn_cast<const COFFObjectFile>(o)) {
|
||||
PrintCOFFSymbolTable(coff);
|
||||
printCOFFSymbolTable(coff);
|
||||
return;
|
||||
}
|
||||
for (const SymbolRef &Symbol : o->symbols()) {
|
||||
|
@ -67,6 +67,7 @@ void printMachOLazyBindTable(const object::MachOObjectFile* o);
|
||||
void printMachOWeakBindTable(const object::MachOObjectFile* o);
|
||||
void printELFFileHeader(const object::ObjectFile *o);
|
||||
void printCOFFFileHeader(const object::ObjectFile *o);
|
||||
void printCOFFSymbolTable(const object::COFFObjectFile *o);
|
||||
void printMachOFileHeader(const object::ObjectFile *o);
|
||||
void printExportsTrie(const object::ObjectFile *o);
|
||||
void printRebaseTable(const object::ObjectFile *o);
|
||||
|
Loading…
x
Reference in New Issue
Block a user