mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-13 04:38:24 +00:00
Modify llvm-readobj to dump symbol record bytes.
This will help us study the format of individual symbol records more closely. Differential Revision: http://reviews.llvm.org/D7664 Reviewed by: Timur Iskhodzhanov git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@229730 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -71,7 +71,7 @@ private:
|
||||
void printBaseOfDataField(const pe32_header *Hdr);
|
||||
void printBaseOfDataField(const pe32plus_header *Hdr);
|
||||
|
||||
void printCodeViewLineTables(const SectionRef &Section);
|
||||
void printCodeViewDebugInfo(const SectionRef &Section);
|
||||
|
||||
void printCodeViewSymbolsSubsection(StringRef Subsection,
|
||||
const SectionRef &Section,
|
||||
@ -469,7 +469,7 @@ void COFFDumper::printBaseOfDataField(const pe32_header *Hdr) {
|
||||
|
||||
void COFFDumper::printBaseOfDataField(const pe32plus_header *) {}
|
||||
|
||||
void COFFDumper::printCodeViewLineTables(const SectionRef &Section) {
|
||||
void COFFDumper::printCodeViewDebugInfo(const SectionRef &Section) {
|
||||
StringRef Data;
|
||||
if (error(Section.getContents(Data)))
|
||||
return;
|
||||
@ -477,7 +477,7 @@ void COFFDumper::printCodeViewLineTables(const SectionRef &Section) {
|
||||
SmallVector<StringRef, 10> FunctionNames;
|
||||
StringMap<StringRef> FunctionLineTables;
|
||||
|
||||
ListScope D(W, "CodeViewLineTables");
|
||||
ListScope D(W, "CodeViewDebugInfo");
|
||||
{
|
||||
// FIXME: Add more offset correctness checks.
|
||||
DataExtractor DE(Data, true, 4);
|
||||
@ -503,14 +503,17 @@ void COFFDumper::printCodeViewLineTables(const SectionRef &Section) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Print the raw contents to simplify debugging if anything goes wrong
|
||||
// afterwards.
|
||||
StringRef Contents = Data.substr(Offset, PayloadSize);
|
||||
W.printBinaryBlock("Contents", Contents);
|
||||
if (opts::CodeViewSubsectionBytes) {
|
||||
// Print the raw contents to simplify debugging if anything goes wrong
|
||||
// afterwards.
|
||||
W.printBinaryBlock("Contents", Contents);
|
||||
}
|
||||
|
||||
switch (SubSectionType) {
|
||||
case COFF::DEBUG_SYMBOL_SUBSECTION:
|
||||
printCodeViewSymbolsSubsection(Contents, Section, Offset);
|
||||
if (opts::SectionSymbols)
|
||||
printCodeViewSymbolsSubsection(Contents, Section, Offset);
|
||||
break;
|
||||
case COFF::DEBUG_LINE_TABLE_SUBSECTION: {
|
||||
// Holds a PC to file:line table. Some data to parse this subsection is
|
||||
@ -695,10 +698,20 @@ void COFFDumper::printCodeViewSymbolsSubsection(StringRef Subsection,
|
||||
InFunctionScope = false;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
default: {
|
||||
if (opts::CodeViewSubsectionBytes) {
|
||||
ListScope S(W, "Record");
|
||||
W.printHex("Size", Size);
|
||||
W.printHex("Type", Type);
|
||||
|
||||
StringRef Contents = DE.getData().substr(Offset, Size);
|
||||
W.printBinaryBlock("Contents", Contents);
|
||||
}
|
||||
|
||||
Offset += Size;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (InFunctionScope)
|
||||
@ -747,8 +760,8 @@ void COFFDumper::printSections() {
|
||||
}
|
||||
}
|
||||
|
||||
if (Name == ".debug$S" && opts::CodeViewLineTables)
|
||||
printCodeViewLineTables(Sec);
|
||||
if (Name == ".debug$S" && opts::CodeView)
|
||||
printCodeViewDebugInfo(Sec);
|
||||
|
||||
if (opts::SectionData &&
|
||||
!(Section->Characteristics & COFF::IMAGE_SCN_CNT_UNINITIALIZED_DATA)) {
|
||||
|
Reference in New Issue
Block a user