diff options
Diffstat (limited to 'contrib/llvm-project/llvm/tools/llvm-readobj/MachODumper.cpp')
| -rw-r--r-- | contrib/llvm-project/llvm/tools/llvm-readobj/MachODumper.cpp | 61 | 
1 files changed, 44 insertions, 17 deletions
diff --git a/contrib/llvm-project/llvm/tools/llvm-readobj/MachODumper.cpp b/contrib/llvm-project/llvm/tools/llvm-readobj/MachODumper.cpp index 32a3866eb2f2..20a60b3df699 100644 --- a/contrib/llvm-project/llvm/tools/llvm-readobj/MachODumper.cpp +++ b/contrib/llvm-project/llvm/tools/llvm-readobj/MachODumper.cpp @@ -214,6 +214,31 @@ static const EnumEntry<uint32_t> MachOHeaderFlags[] = {    LLVM_READOBJ_ENUM_ENT(MachO, MH_APP_EXTENSION_SAFE),  }; +static const EnumEntry<unsigned> MachOSectionTypes[] = { +  { "Regular"                        , MachO::S_REGULAR }, +  { "ZeroFill"                       , MachO::S_ZEROFILL }, +  { "CStringLiterals"                , MachO::S_CSTRING_LITERALS }, +  { "4ByteLiterals"                  , MachO::S_4BYTE_LITERALS }, +  { "8ByteLiterals"                  , MachO::S_8BYTE_LITERALS }, +  { "LiteralPointers"                , MachO::S_LITERAL_POINTERS }, +  { "NonLazySymbolPointers"          , MachO::S_NON_LAZY_SYMBOL_POINTERS }, +  { "LazySymbolPointers"             , MachO::S_LAZY_SYMBOL_POINTERS }, +  { "SymbolStubs"                    , MachO::S_SYMBOL_STUBS }, +  { "ModInitFuncPointers"            , MachO::S_MOD_INIT_FUNC_POINTERS }, +  { "ModTermFuncPointers"            , MachO::S_MOD_TERM_FUNC_POINTERS }, +  { "Coalesced"                      , MachO::S_COALESCED }, +  { "GBZeroFill"                     , MachO::S_GB_ZEROFILL }, +  { "Interposing"                    , MachO::S_INTERPOSING }, +  { "16ByteLiterals"                 , MachO::S_16BYTE_LITERALS }, +  { "DTraceDOF"                      , MachO::S_DTRACE_DOF }, +  { "LazyDylibSymbolPointers"        , MachO::S_LAZY_DYLIB_SYMBOL_POINTERS }, +  { "ThreadLocalRegular"             , MachO::S_THREAD_LOCAL_REGULAR }, +  { "ThreadLocalZerofill"            , MachO::S_THREAD_LOCAL_ZEROFILL }, +  { "ThreadLocalVariables"           , MachO::S_THREAD_LOCAL_VARIABLES }, +  { "ThreadLocalVariablePointers"    , MachO::S_THREAD_LOCAL_VARIABLE_POINTERS }, +  { "ThreadLocalInitFunctionPointers", MachO::S_THREAD_LOCAL_INIT_FUNCTION_POINTERS } +}; +  static const EnumEntry<unsigned> MachOSectionAttributes[] = {    { "LocReloc"         , 1 <<  0 /*S_ATTR_LOC_RELOC          */ },    { "ExtReloc"         , 1 <<  1 /*S_ATTR_EXT_RELOC          */ }, @@ -440,10 +465,7 @@ void MachODumper::printSectionHeaders(const MachOObjectFile *Obj) {      MachOSection MOSection;      getSection(Obj, Section.getRawDataRefImpl(), MOSection);      DataRefImpl DR = Section.getRawDataRefImpl(); - -    StringRef Name; -    error(Section.getName(Name)); - +    StringRef Name = unwrapOrError(Obj->getFileName(), Section.getName());      ArrayRef<char> RawName = Obj->getSectionRawName(DR);      StringRef SegmentName = Obj->getSectionFinalSegmentName(DR);      ArrayRef<char> RawSegmentName = Obj->getSectionRawFinalSegmentName(DR); @@ -459,7 +481,7 @@ void MachODumper::printSectionHeaders(const MachOObjectFile *Obj) {      W.printHex("RelocationOffset", MOSection.RelocationTableOffset);      W.printNumber("RelocationCount", MOSection.NumRelocationTableEntries);      W.printEnum("Type", MOSection.Flags & 0xFF, -                makeArrayRef(MachOSectionAttributes)); +                makeArrayRef(MachOSectionTypes));      W.printFlags("Attributes", MOSection.Flags >> 8,                   makeArrayRef(MachOSectionAttributes));      W.printHex("Reserved1", MOSection.Reserved1); @@ -484,7 +506,8 @@ void MachODumper::printSectionHeaders(const MachOObjectFile *Obj) {      }      if (opts::SectionData && !Section.isBSS()) -      W.printBinaryBlock("SectionData", unwrapOrError(Section.getContents())); +      W.printBinaryBlock("SectionData", unwrapOrError(Obj->getFileName(), +                                                      Section.getContents()));    }  } @@ -493,9 +516,7 @@ void MachODumper::printRelocations() {    std::error_code EC;    for (const SectionRef &Section : Obj->sections()) { -    StringRef Name; -    error(Section.getName(Name)); - +    StringRef Name = unwrapOrError(Obj->getFileName(), Section.getName());      bool PrintedGroup = false;      for (const RelocationRef &Reloc : Section.relocations()) {        if (!PrintedGroup) { @@ -535,14 +556,13 @@ void MachODumper::printRelocation(const MachOObjectFile *Obj,      if (Symbol != Obj->symbol_end()) {        Expected<StringRef> TargetNameOrErr = Symbol->getName();        if (!TargetNameOrErr) -        error(errorToErrorCode(TargetNameOrErr.takeError())); +        reportError(TargetNameOrErr.takeError(), Obj->getFileName());        TargetName = *TargetNameOrErr;      }    } else if (!IsScattered) {      section_iterator SecI = Obj->getRelocationSection(DR); -    if (SecI != Obj->section_end()) { -      error(SecI->getName(TargetName)); -    } +    if (SecI != Obj->section_end()) +      TargetName = unwrapOrError(Obj->getFileName(), SecI->getName());    }    if (TargetName.empty())      TargetName = "-"; @@ -610,10 +630,12 @@ void MachODumper::printSymbol(const SymbolRef &Symbol) {    StringRef SectionName = "";    Expected<section_iterator> SecIOrErr = Symbol.getSection(); -  error(errorToErrorCode(SecIOrErr.takeError())); +  if (!SecIOrErr) +    reportError(SecIOrErr.takeError(), Obj->getFileName()); +    section_iterator SecI = *SecIOrErr;    if (SecI != Obj->section_end()) -    error(SecI->getName(SectionName)); +    SectionName = unwrapOrError(Obj->getFileName(), SecI->getName());    DictScope D(W, "Symbol");    W.printNumber("Name", SymbolName, MOSymbol.StringIndex); @@ -643,7 +665,11 @@ void MachODumper::printStackMap() const {    object::SectionRef StackMapSection;    for (auto Sec : Obj->sections()) {      StringRef Name; -    Sec.getName(Name); +    if (Expected<StringRef> NameOrErr = Sec.getName()) +      Name = *NameOrErr; +    else +      consumeError(NameOrErr.takeError()); +      if (Name == "__llvm_stackmaps") {        StackMapSection = Sec;        break; @@ -653,7 +679,8 @@ void MachODumper::printStackMap() const {    if (StackMapSection == object::SectionRef())      return; -  StringRef StackMapContents = unwrapOrError(StackMapSection.getContents()); +  StringRef StackMapContents = +      unwrapOrError(Obj->getFileName(), StackMapSection.getContents());    ArrayRef<uint8_t> StackMapContentsArray =        arrayRefFromStringRef(StackMapContents);  | 
