Improve DWARFDebugFrame::parse to also handle __eh_frame.
LLVM MC has single methods which can handle the output of EH frame and DWARF CIE's and FDE's. This code improves DWARFDebugFrame::parse to do the same for parsing. This also allows llvm-objdump to support the --dwarf=frames option which objdump supports. This option dumps the .eh_frame section using the new code in DWARFDebugFrame::parse. http://reviews.llvm.org/D15535 Reviewed by Rafael Espindola. llvm-svn: 256008
This commit is contained in:
@@ -22,6 +22,7 @@
|
||||
#include "llvm/ADT/StringExtras.h"
|
||||
#include "llvm/ADT/Triple.h"
|
||||
#include "llvm/CodeGen/FaultMaps.h"
|
||||
#include "llvm/DebugInfo/DWARF/DWARFContext.h"
|
||||
#include "llvm/MC/MCAsmInfo.h"
|
||||
#include "llvm/MC/MCContext.h"
|
||||
#include "llvm/MC/MCDisassembler.h"
|
||||
@@ -176,6 +177,11 @@ cl::opt<bool>
|
||||
cl::opt<bool> PrintFaultMaps("fault-map-section",
|
||||
cl::desc("Display contents of faultmap section"));
|
||||
|
||||
cl::opt<DIDumpType> llvm::DwarfDumpType(
|
||||
"dwarf", cl::init(DIDT_Null), cl::desc("Dump of dwarf debug sections:"),
|
||||
cl::values(clEnumValN(DIDT_Frames, "frames", ".debug_frame"),
|
||||
clEnumValEnd));
|
||||
|
||||
static StringRef ToolName;
|
||||
|
||||
namespace {
|
||||
@@ -1572,6 +1578,11 @@ static void DumpObject(const ObjectFile *o) {
|
||||
printRawClangAST(o);
|
||||
if (PrintFaultMaps)
|
||||
printFaultMaps(o);
|
||||
if (DwarfDumpType != DIDT_Null) {
|
||||
std::unique_ptr<DIContext> DICtx(new DWARFContextInMemory(*o));
|
||||
// Dump the complete DWARF structure.
|
||||
DICtx->dump(outs(), DwarfDumpType, true /* DumpEH */);
|
||||
}
|
||||
}
|
||||
|
||||
/// @brief Dump each object file in \a a;
|
||||
@@ -1664,7 +1675,8 @@ int main(int argc, char **argv) {
|
||||
&& !(DylibId && MachOOpt)
|
||||
&& !(ObjcMetaData && MachOOpt)
|
||||
&& !(FilterSections.size() != 0 && MachOOpt)
|
||||
&& !PrintFaultMaps) {
|
||||
&& !PrintFaultMaps
|
||||
&& DwarfDumpType == DIDT_Null) {
|
||||
cl::PrintHelpMessage();
|
||||
return 2;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user