diff options
Diffstat (limited to 'llvm/tools/obj2yaml/macho2yaml.cpp')
-rw-r--r-- | llvm/tools/obj2yaml/macho2yaml.cpp | 45 |
1 files changed, 4 insertions, 41 deletions
diff --git a/llvm/tools/obj2yaml/macho2yaml.cpp b/llvm/tools/obj2yaml/macho2yaml.cpp index cc82bbb717a..9cd05463edc 100644 --- a/llvm/tools/obj2yaml/macho2yaml.cpp +++ b/llvm/tools/obj2yaml/macho2yaml.cpp @@ -35,7 +35,6 @@ class MachODumper { ArrayRef<uint8_t> OpcodeBuffer, bool Lazy = false); void dumpExportTrie(std::unique_ptr<MachOYAML::Object> &Y); void dumpSymbols(std::unique_ptr<MachOYAML::Object> &Y); - void dumpDWARF(std::unique_ptr<MachOYAML::Object> &Y); void dumpDebugAbbrev(DWARFContextInMemory &DCtx, std::unique_ptr<MachOYAML::Object> &Y); void dumpDebugStrings(DWARFContextInMemory &DCtx, @@ -169,7 +168,10 @@ Expected<std::unique_ptr<MachOYAML::Object>> MachODumper::dump() { dumpHeader(Y); dumpLoadCommands(Y); dumpLinkEdit(Y); - dumpDWARF(Y); + + DWARFContextInMemory DICtx(Obj); + if(auto Err = dwarf2yaml(DICtx, Y->DWARF)) + return errorCodeToError(Err); return std::move(Y); } @@ -466,45 +468,6 @@ void MachODumper::dumpSymbols(std::unique_ptr<MachOYAML::Object> &Y) { } } -void MachODumper::dumpDWARF(std::unique_ptr<MachOYAML::Object> &Y) { - DWARFContextInMemory DICtx(Obj); - dumpDebugStrings(DICtx, Y); - dumpDebugAbbrev(DICtx, Y); -} - -void MachODumper::dumpDebugStrings(DWARFContextInMemory &DICtx, - std::unique_ptr<MachOYAML::Object> &Y) { - StringRef RemainingTable = DICtx.getStringSection(); - while (RemainingTable.size() > 0) { - auto SymbolPair = RemainingTable.split('\0'); - RemainingTable = SymbolPair.second; - Y->DWARF.DebugStrings.push_back(SymbolPair.first); - } -} - -void MachODumper::dumpDebugAbbrev(DWARFContextInMemory &DCtx, - std::unique_ptr<MachOYAML::Object> &Y) { - auto AbbrevSetPtr = DCtx.getDebugAbbrev(); - if(AbbrevSetPtr) { - for(auto AbbrvDeclSet : *AbbrevSetPtr) { - for(auto AbbrvDecl : AbbrvDeclSet.second) { - DWARFYAML::DWARFAbbrev Abbrv; - Abbrv.Code = AbbrvDecl.getCode(); - Abbrv.Tag = AbbrvDecl.getTag(); - Abbrv.Children = AbbrvDecl.hasChildren() ? dwarf::DW_CHILDREN_yes - : dwarf::DW_CHILDREN_no; - for(auto Attribute : AbbrvDecl.attributes()) { - DWARFYAML::DWARFAttributeAbbrev AttAbrv; - AttAbrv.Attribute = Attribute.Attr; - AttAbrv.Form = Attribute.Form; - Abbrv.Attributes.push_back(AttAbrv); - } - Y->DWARF.AbbrevDecls.push_back(Abbrv); - } - } - } -} - Error macho2yaml(raw_ostream &Out, const object::MachOObjectFile &Obj) { MachODumper Dumper(Obj); Expected<std::unique_ptr<MachOYAML::Object>> YAML = Dumper.dump(); |