[llvm-readobj] Simplify usage of -codeview flag

llvm-svn: 255790
This commit is contained in:
Reid Kleckner 2015-12-16 18:18:39 +00:00
parent 2c5712051b
commit d37fe9acb5
3 changed files with 16 additions and 7 deletions

View File

@ -60,6 +60,7 @@ public:
void printCOFFExports() override;
void printCOFFDirectives() override;
void printCOFFBaseReloc() override;
void printCodeViewDebugInfo() override;
void printStackMap() const override;
private:
void printSymbol(const SymbolRef &Sym);
@ -71,7 +72,7 @@ private:
void printBaseOfDataField(const pe32_header *Hdr);
void printBaseOfDataField(const pe32plus_header *Hdr);
void printCodeViewDebugInfo(const SectionRef &Section);
void printCodeViewSection(const SectionRef &Section);
void printCodeViewSymbolsSubsection(StringRef Subsection,
const SectionRef &Section,
@ -474,7 +475,16 @@ void COFFDumper::printBaseOfDataField(const pe32_header *Hdr) {
void COFFDumper::printBaseOfDataField(const pe32plus_header *) {}
void COFFDumper::printCodeViewDebugInfo(const SectionRef &Section) {
void COFFDumper::printCodeViewDebugInfo() {
for (const SectionRef &S : Obj->sections()) {
StringRef SecName;
error(S.getName(SecName));
if (SecName == ".debug$S")
printCodeViewSection(S);
}
}
void COFFDumper::printCodeViewSection(const SectionRef &Section) {
StringRef Data;
error(Section.getContents(Data));
@ -516,8 +526,7 @@ void COFFDumper::printCodeViewDebugInfo(const SectionRef &Section) {
switch (SubSectionType) {
case COFF::DEBUG_SYMBOL_SUBSECTION:
if (opts::SectionSymbols)
printCodeViewSymbolsSubsection(Contents, Section, Offset);
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
@ -777,9 +786,6 @@ void COFFDumper::printSections() {
}
}
if (Name == ".debug$S" && opts::CodeView)
printCodeViewDebugInfo(Sec);
if (opts::SectionData &&
!(Section->Characteristics & COFF::IMAGE_SCN_CNT_UNINITIALIZED_DATA)) {
StringRef Data;

View File

@ -56,6 +56,7 @@ public:
virtual void printCOFFExports() { }
virtual void printCOFFDirectives() { }
virtual void printCOFFBaseReloc() { }
virtual void printCodeViewDebugInfo() { }
// Only implemented for MachO.
virtual void printMachODataInCode() { }

View File

@ -354,6 +354,8 @@ static void dumpObject(const ObjectFile *Obj) {
Dumper->printCOFFDirectives();
if (opts::COFFBaseRelocs)
Dumper->printCOFFBaseReloc();
if (opts::CodeView)
Dumper->printCodeViewDebugInfo();
}
if (Obj->isMachO()) {
if (opts::MachODataInCode)