diff options
Diffstat (limited to 'contrib/llvm/tools/llvm-objdump')
| -rw-r--r-- | contrib/llvm/tools/llvm-objdump/MachODump.cpp | 31 | 
1 files changed, 5 insertions, 26 deletions
| diff --git a/contrib/llvm/tools/llvm-objdump/MachODump.cpp b/contrib/llvm/tools/llvm-objdump/MachODump.cpp index c43ccc211811..563084856f6f 100644 --- a/contrib/llvm/tools/llvm-objdump/MachODump.cpp +++ b/contrib/llvm/tools/llvm-objdump/MachODump.cpp @@ -1780,10 +1780,6 @@ void llvm::ParseInputMachO(StringRef Filename) {    llvm_unreachable("Input object can't be invalid at this point");  } -typedef std::pair<uint64_t, const char *> BindInfoEntry; -typedef std::vector<BindInfoEntry> BindTable; -typedef BindTable::iterator bind_table_iterator; -  // The block of info used by the Symbolizer call backs.  struct DisassembleInfo {    bool verbose; @@ -1797,7 +1793,7 @@ struct DisassembleInfo {    char *demangled_name;    uint64_t adrp_addr;    uint32_t adrp_inst; -  BindTable *bindtable; +  std::unique_ptr<SymbolAddressMap> bindtable;    uint32_t depth;  }; @@ -5311,9 +5307,6 @@ static void printObjc2_64bit_MetaData(MachOObjectFile *O, bool verbose) {      II = get_section(O, "__DATA", "__objc_imageinfo");    info.S = II;    print_image_info64(II, &info); - -  if (info.bindtable != nullptr) -    delete info.bindtable;  }  static void printObjc2_32bit_MetaData(MachOObjectFile *O, bool verbose) { @@ -6841,14 +6834,10 @@ static void DisassembleMachO(StringRef Filename, MachOObjectFile *MachOOF,        free(SymbolizerInfo.method);      if (SymbolizerInfo.demangled_name != nullptr)        free(SymbolizerInfo.demangled_name); -    if (SymbolizerInfo.bindtable != nullptr) -      delete SymbolizerInfo.bindtable;      if (ThumbSymbolizerInfo.method != nullptr)        free(ThumbSymbolizerInfo.method);      if (ThumbSymbolizerInfo.demangled_name != nullptr)        free(ThumbSymbolizerInfo.demangled_name); -    if (ThumbSymbolizerInfo.bindtable != nullptr) -      delete ThumbSymbolizerInfo.bindtable;    }  } @@ -9427,7 +9416,7 @@ void llvm::printMachOWeakBindTable(const object::MachOObjectFile *Obj) {  static const char *get_dyld_bind_info_symbolname(uint64_t ReferenceValue,                                                   struct DisassembleInfo *info) {    if (info->bindtable == nullptr) { -    info->bindtable = new (BindTable); +    info->bindtable = llvm::make_unique<SymbolAddressMap>();      SegInfo sectionTable(info->O);      for (const llvm::object::MachOBindEntry &Entry : info->O->bindTable()) {        uint32_t SegIndex = Entry.segmentIndex(); @@ -9435,21 +9424,11 @@ static const char *get_dyld_bind_info_symbolname(uint64_t ReferenceValue,        if (!sectionTable.isValidSegIndexAndOffset(SegIndex, OffsetInSeg))          continue;        uint64_t Address = sectionTable.address(SegIndex, OffsetInSeg); -      const char *SymbolName = nullptr;        StringRef name = Entry.symbolName();        if (!name.empty()) -        SymbolName = name.data(); -      info->bindtable->push_back(std::make_pair(Address, SymbolName)); -    } -  } -  for (bind_table_iterator BI = info->bindtable->begin(), -                           BE = info->bindtable->end(); -       BI != BE; ++BI) { -    uint64_t Address = BI->first; -    if (ReferenceValue == Address) { -      const char *SymbolName = BI->second; -      return SymbolName; +        (*info->bindtable)[Address] = name;      }    } -  return nullptr; +  auto name = info->bindtable->lookup(ReferenceValue); +  return !name.empty() ? name.data() : nullptr;  } | 
