diff --git a/llvm/tools/llvm-objdump/MachODump.cpp b/llvm/tools/llvm-objdump/MachODump.cpp --- a/llvm/tools/llvm-objdump/MachODump.cpp +++ b/llvm/tools/llvm-objdump/MachODump.cpp @@ -8014,12 +8014,23 @@ (void)Kind; assert(Kind == 3 && "kind for a compressed 2nd level index should be 3"); + uint32_t NumCommonEncodings = CommonEncodings.size(); uint16_t EntriesStart = readNext(PageData, Pos); uint16_t NumEntries = readNext(PageData, Pos); - uint16_t EncodingsStart = readNext(PageData, Pos); - readNext(PageData, Pos); - StringRef PageEncodings = PageData.substr(EncodingsStart, StringRef::npos); + uint16_t PageEncodingsStart = readNext(PageData, Pos); + uint16_t NumPageEncodings = readNext(PageData, Pos); + SmallVector PageEncodings; + if (NumPageEncodings) { + outs() << " Page encodings: (count = " << NumPageEncodings << ")\n"; + Pos = PageEncodingsStart; + for (unsigned i = 0; i < NumPageEncodings; ++i) { + uint32_t Encoding = readNext(PageData, Pos); + PageEncodings.push_back(Encoding); + outs() << " encoding[" << (i + NumCommonEncodings) + << "]: " << format("0x%08" PRIx32, Encoding) << '\n'; + } + } Pos = EntriesStart; for (unsigned i = 0; i < NumEntries; ++i) { @@ -8028,12 +8039,10 @@ uint32_t EncodingIdx = Entry >> 24; uint32_t Encoding; - if (EncodingIdx < CommonEncodings.size()) + if (EncodingIdx < NumCommonEncodings) Encoding = CommonEncodings[EncodingIdx]; else - Encoding = read(PageEncodings, - sizeof(uint32_t) * - (EncodingIdx - CommonEncodings.size())); + Encoding = PageEncodings[EncodingIdx - NumCommonEncodings]; outs() << " [" << i << "]: " << "function offset=" << format("0x%08" PRIx32, FunctionOffset)