Lines Matching +full:loongson +full:- +full:1 +full:c

1 //===- ELFDumper.cpp - ELF-specific dumper --------------------------------===//
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
10 /// This file implements the ELF-specific dumper for llvm-readobj.
12 //===----------------------------------------------------------------------===//
18 #include "llvm-readobj.h"
136 Addr - (const uint8_t *)Obj->getMemoryBufferRef().getBufferStart(); in getAsArrayRef()
137 const uint64_t ObjSize = Obj->getMemoryBufferRef().getBufferSize(); in getAsArrayRef()
139 if (Size > ObjSize - Offset) { in getAsArrayRef()
140 Dumper->reportUniqueWarning( in getAsArrayRef()
162 Dumper->reportUniqueWarning(Msg); in getAsArrayRef()
241 // EM_S390 and ELF::EM_ALPHA platforms use 8-bytes entries in SHT_HASH in getHashTableEntSize()
270 return DynSymRegion->template getAsArrayRef<Elf_Sym>(); in dynamic_symbols()
451 if ((*SymtabOrErr)->sh_type != ExpectedType) in getLinkAsSymtab()
457 (*SymtabOrErr)->sh_type)); in getLinkAsSymtab()
499 if (SymTabOrErr->Symbols.size() != VersionsOrErr->size()) in getVersionTable()
501 Twine(VersionsOrErr->size()) + in getVersionTable()
503 Twine(SymTabOrErr->Symbols.size()) + in getVersionTable()
508 *SymTab = SymTabOrErr->Symbols; in getVersionTable()
509 *StrTab = SymTabOrErr->StringTable; in getVersionTable()
510 *SymTabSec = SymTabOrErr->SymTab; in getVersionTable()
551 Entries = DotSymtabSec->getEntityCount(); in printSymbolsHelper()
557 // visibility (STV_*) and the remainder hold other platform-specific values. in printSymbolsHelper()
563 (const Elf_Word *)this->DynSymTabShndxRegion.Addr, in printSymbolsHelper()
564 this->getElfObject().getELFFile().end()) in printSymbolsHelper()
565 : DataRegion<Elf_Word>(this->getShndxTable(SymtabSec)); in printSymbolsHelper()
569 printSymbol(Sym, &Sym - Syms.begin(), ShndxTable, StrTable, IsDynamic, in printSymbolsHelper()
582 assert(&this->W.getOStream() == &llvm::fouts()); in GNUELFDumper()
821 // Little-endian 32-bit in createELFDumper()
825 // Big-endian 32-bit in createELFDumper()
829 // Little-endian 64-bit in createELFDumper()
833 // Big-endian 64-bit in createELFDumper()
869 size_t EntryIndex = (reinterpret_cast<uintptr_t>(&Sym) - in getSymbolVersion()
870 reinterpret_cast<uintptr_t>(DynSymRegion->Addr)) / in getSymbolVersion()
879 unsigned Version = (*EntryOrErr)->vs_index; in getSymbolVersion()
918 getFullSymbolName(*Sym, Sym - FirstSym, getShndxTable(SymTab), in getRelocationTarget()
919 *StrTableOrErr, SymTab->sh_type == SHT_DYNSYM); in getRelocationTarget()
929 return It->second; in getShndxTable()
940 auto Warn = [&](Error E) -> std::string { in getStaticSymbolName()
955 Expected<StringRef> NameOrErr = (*SymOrErr)->getName(*StrTabOrErr); in getStaticSymbolName()
1001 if (!VersionOrErr->empty()) { in getFullSymbolName()
1032 return CreateErr("SHN_LOPROC", Ndx - ELF::SHN_LOPROC); in getSymbolSectionIndex()
1034 return CreateErr("SHN_LOOS", Ndx - ELF::SHN_LOOS); in getSymbolSectionIndex()
1041 return CreateErr("SHN_LORESERVE", Ndx - SHN_LORESERVE); in getSymbolSectionIndex()
1066 {"32-bit", "ELF32", ELF::ELFCLASS32},
1067 {"64-bit", "ELF64", ELF::ELFCLASS64},
1085 {"SystemV", "UNIX - System V", ELF::ELFOSABI_NONE},
1086 {"HPUX", "UNIX - HP-UX", ELF::ELFOSABI_HPUX},
1087 {"NetBSD", "UNIX - NetBSD", ELF::ELFOSABI_NETBSD},
1088 {"GNU/Linux", "UNIX - GNU", ELF::ELFOSABI_LINUX},
1090 {"Solaris", "UNIX - Solaris", ELF::ELFOSABI_SOLARIS},
1091 {"AIX", "UNIX - AIX", ELF::ELFOSABI_AIX},
1092 {"IRIX", "UNIX - IRIX", ELF::ELFOSABI_IRIX},
1093 {"FreeBSD", "UNIX - FreeBSD", ELF::ELFOSABI_FREEBSD},
1094 {"TRU64", "UNIX - TRU64", ELF::ELFOSABI_TRU64},
1095 {"Modesto", "Novell - Modesto", ELF::ELFOSABI_MODESTO},
1096 {"OpenBSD", "UNIX - OpenBSD", ELF::ELFOSABI_OPENBSD},
1097 {"OpenVMS", "VMS - OpenVMS", ELF::ELFOSABI_OPENVMS},
1098 {"NSK", "HP - Non-Stop Kernel", ELF::ELFOSABI_NSK},
1102 {"CUDA", "NVIDIA - CUDA", ELF::ELFOSABI_CUDA},
1107 {"AMDGPU_HSA", "AMDGPU - HSA", ELF::ELFOSABI_AMDGPU_HSA},
1108 {"AMDGPU_PAL", "AMDGPU - PAL", ELF::ELFOSABI_AMDGPU_PAL},
1109 {"AMDGPU_MESA3D", "AMDGPU - MESA3D", ELF::ELFOSABI_AMDGPU_MESA3D}
1118 {"C6000_ELFABI", "Bare-metal C6000", ELF::ELFOSABI_C6000_ELFABI},
1133 ENUM_ENT(EM_MIPS_RS3_LE, "MIPS R3000 little-endian"),
1144 ENUM_ENT(EM_RH32, "TRW RH-32"),
1156 ENUM_ENT(EM_IA_64, "Intel IA-64"),
1157 ENUM_ENT(EM_MIPS_X, "Stanford MIPS-X"),
1168 ENUM_ENT(EM_X86_64, "Advanced Micro Devices X86-64"),
1170 ENUM_ENT(EM_PDP10, "Digital Equipment Corp. PDP-10"),
1171 ENUM_ENT(EM_PDP11, "Digital Equipment Corp. PDP-11"),
1174 ENUM_ENT(EM_ST7, "STMicroelectronics ST7 8-bit microcontroller"),
1180 ENUM_ENT(EM_ST19, "STMicroelectronics ST19 8-bit microcontroller"),
1182 ENUM_ENT(EM_CRIS, "Axis Communications 32-bit embedded processor"),
1183 ENUM_ENT(EM_JAVELIN, "Infineon Technologies 32-bit embedded cpu"),
1184 ENUM_ENT(EM_FIREPATH, "Element 14 64-bit DSP processor"),
1185 ENUM_ENT(EM_ZSP, "LSI Logic's 16-bit DSP processor"),
1186 ENUM_ENT(EM_MMIX, "Donald Knuth's educational 64-bit processor"),
1187 ENUM_ENT(EM_HUANY, "Harvard Universitys's machine-independent object format"),
1189 ENUM_ENT(EM_AVR, "Atmel AVR 8-bit microcontroller"),
1198 ENUM_ENT(EM_OPENRISC, "OpenRISC 32-bit embedded processor"),
1207 ENUM_ENT(EM_IP2K, "Ubicom IP2xxx 8-bit microcontrollers"),
1217 ENUM_ENT(EM_EXCESS, "eXcess 16/32/64-bit configurable embedded CPU"),
1232 ENUM_ENT(EM_DSP24, "New Japan Radio (NJR) 24-bit DSP Processor"),
1252 ENUM_ENT(EM_XIMO16, "New Japan Radio (NJR) 16-bit DSP Processor"),
1259 ENUM_ENT(EM_CR16, "National Semiconductor CompactRISC 16-bit processor"),
1265 ENUM_ENT(EM_AVR32, "Atmel Corporation 32-bit microprocessor family"),
1266 ENUM_ENT(EM_STM8, "STMicroeletronics STM8 8-bit microcontroller"),
1269 ENUM_ENT(EM_MICROBLAZE, "Xilinx MicroBlaze 32-bit RISC soft processor core"),
1271 ENUM_ENT(EM_TILEGX, "Tilera TILE-Gx multicore architecture family"),
1282 ENUM_ENT(EM_RISCV, "RISC-V"),
1285 ENUM_ENT(EM_VE, "NEC SX-Aurora Vector Engine"),
1323 ENUM_ENT(SHF_COMPRESSED, "C"),
1419 uint64_t Flag = Flags & -Flags; in getGNUFlags()
1420 Flags -= Flag; in getGNUFlags()
1428 Str += I->AltName; in getGNUFlags()
1439 // Mask off all the processor-specific bits. This removes the SHF_EXCLUDE in getGNUFlags()
1458 // Check potentially overlapped processor-specific program header type. in segmentTypeToString()
1507 return std::string("<unknown>: ") + to_string(format_hex(Type, 1)); in getGNUPtType()
1509 // E.g. "PT_ARM_EXIDX" -> "EXIDX". in getGNUPtType()
1513 // E.g. "PT_MIPS_REGINFO" -> "REGINFO". in getGNUPtType()
1521 // E.g. "PT_LOAD" -> "LOAD". in getGNUPtType()
1559 ENUM_ENT(EF_MIPS_MACH_LS2E, "loongson-2e"),
1560 ENUM_ENT(EF_MIPS_MACH_LS2F, "loongson-2f"),
1561 ENUM_ENT(EF_MIPS_MACH_LS3A, "loongson-3a"),
1578 // clang-format off
1642 ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX9_GENERIC, "gfx9-generic"), \
1643 ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX10_1_GENERIC, "gfx10-1-generic"), \
1644 ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX10_3_GENERIC, "gfx10-3-generic"), \
1645 ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX11_GENERIC, "gfx11-generic"), \
1646 ENUM_ENT(EF_AMDGPU_MACH_AMDGCN_GFX12_GENERIC, "gfx12-generic")
1647 // clang-format on
1658 ENUM_ENT(EF_AMDGPU_FEATURE_XNACK_OFF_V4, "xnack-"),
1661 ENUM_ENT(EF_AMDGPU_FEATURE_SRAMECC_OFF_V4, "sramecc-"),
1680 ENUM_ENT(EF_RISCV_FLOAT_ABI_SINGLE, "single-float ABI"),
1681 ENUM_ENT(EF_RISCV_FLOAT_ABI_DOUBLE, "double-float ABI"),
1682 ENUM_ENT(EF_RISCV_FLOAT_ABI_QUAD, "quad-float ABI"),
1710 ENUM_ENT(EF_LOONGARCH_ABI_SOFT_FLOAT, "SOFT-FLOAT"),
1711 ENUM_ENT(EF_LOONGARCH_ABI_SINGLE_FLOAT, "SINGLE-FLOAT"),
1712 ENUM_ENT(EF_LOONGARCH_ABI_DOUBLE_FLOAT, "DOUBLE-FLOAT"),
1713 ENUM_ENT(EF_LOONGARCH_OBJABI_V0, "OBJ-v0"),
1714 ENUM_ENT(EF_LOONGARCH_OBJABI_V1, "OBJ-v1"),
1795 if (DynamicPhdr && ((DynamicPhdr->p_offset + DynamicPhdr->p_filesz > in findDynamic()
1797 (DynamicPhdr->p_offset + DynamicPhdr->p_filesz < in findDynamic()
1798 DynamicPhdr->p_offset))) { in findDynamic()
1801 Twine::utohexstr(DynamicPhdr->p_offset) + ") + file size (0x" + in findDynamic()
1802 Twine::utohexstr(DynamicPhdr->p_filesz) + in findDynamic()
1810 if (DynamicSec->sh_addr + DynamicSec->sh_size > in findDynamic()
1811 DynamicPhdr->p_vaddr + DynamicPhdr->p_memsz || in findDynamic()
1812 DynamicSec->sh_addr < DynamicPhdr->p_vaddr) in findDynamic()
1817 if (DynamicSec->sh_addr != DynamicPhdr->p_vaddr) in findDynamic()
1838 FromPhdr = cantFail(createDRI(DynamicPhdr->p_offset, DynamicPhdr->p_filesz, in loadDynamicTable()
1853 createDRI(DynamicSec->sh_offset, DynamicSec->sh_size, sizeof(Elf_Dyn)); in loadDynamicTable()
1935 DynSymRegion->Context = describe(Sec); in ELFDumper()
1995 auto toMappedAddr = [&](uint64_t Tag, uint64_t VAddr) -> const uint8_t * { in parseDynamicTable()
1997 this->reportUniqueWarning(Msg); in parseDynamicTable()
2001 this->reportUniqueWarning("unable to parse DT_" + in parseDynamicTable()
2046 DynSymFromTable->Addr = VA; in parseDynamicTable()
2047 DynSymFromTable->EntSize = sizeof(Elf_Sym); in parseDynamicTable()
2048 DynSymFromTable->EntSizePrintName = ""; in parseDynamicTable()
2055 this->reportUniqueWarning("DT_SYMENT value of 0x" + in parseDynamicTable()
2116 DynPLTRelRegion.EntSize = 1; in parseDynamicTable()
2138 const uint64_t Offset = (const uint8_t *)StringTableBegin - Obj.base(); in parseDynamicTable()
2139 if (StringTableSize > FileSize - Offset) in parseDynamicTable()
2155 if (DynSymFromTable && DynSymFromTable->Addr != DynSymRegion->Addr) in parseDynamicTable()
2165 if (DynSymRegion->EntSize == 0) in parseDynamicTable()
2167 else if (HashTable->nchain != DynSymRegion->Size / DynSymRegion->EntSize) in parseDynamicTable()
2169 "hash table nchain (" + Twine(HashTable->nchain) + in parseDynamicTable()
2172 Twine(DynSymRegion->Size / DynSymRegion->EntSize) + ")"); in parseDynamicTable()
2177 // checks can always be made against the section header-based properties, in parseDynamicTable()
2183 DynSymRegion->Addr = DynSymFromTable->Addr; in parseDynamicTable()
2184 DynSymRegion->EntSize = DynSymFromTable->EntSize; in parseDynamicTable()
2185 DynSymRegion->EntSizePrintName = DynSymFromTable->EntSizePrintName; in parseDynamicTable()
2194 (uint64_t)HashTable->nchain * DynSymRegion->EntSize; in parseDynamicTable()
2195 const uint64_t Offset = (const uint8_t *)DynSymRegion->Addr - Obj.base(); in parseDynamicTable()
2196 if (DerivedSize > FileSize - Offset) in parseDynamicTable()
2203 DynSymRegion->Size = HashTable->nchain * DynSymRegion->EntSize; in parseDynamicTable()
2339 case 1: in getDynamicEntry()
2340 return "Asynchronous (1)"; in getDynamicEntry()
2349 case 1: in getDynamicEntry()
2350 return "Enabled (1)"; in getDynamicEntry()
2522 (const uint8_t *)DynamicStringTable.data() - Obj.base(); in getDynamicString()
2523 if (DynamicStringTable.size() > FileSize - Offset) in getDynamicString()
2540 ": the string table is not null-terminated", in getDynamicString()
2583 const uint64_t SecOffset = (const uint8_t *)H - Obj.base(); in checkHashTable()
2591 " is not supported: it contains non-standard 8 " in checkHashTable()
2593 It->AltName + " platform"); in checkHashTable()
2603 // Each SHT_HASH section starts from two 32-bit fields: nbucket and nchain. in checkHashTable()
2607 *IsHeaderValid = Obj.getBufSize() - SecOffset >= HeaderSize; in checkHashTable()
2609 if (Obj.getBufSize() - SecOffset < HeaderSize) in checkHashTable()
2612 if (Obj.getBufSize() - SecOffset - HeaderSize < in checkHashTable()
2613 ((uint64_t)H->nbucket + H->nchain) * sizeof(typename ELFT::Word)) in checkHashTable()
2614 return MakeError(", nbucket = " + Twine(H->nbucket) + in checkHashTable()
2615 ", nchain = " + Twine(H->nchain)); in checkHashTable()
2627 uint64_t TableOffset = TableData - Obj.base(); in checkGNUHashTable()
2630 if (TableOffset + 16 + (uint64_t)GnuHashTable->nbuckets * 4 + in checkGNUHashTable()
2631 (uint64_t)GnuHashTable->maskwords * sizeof(typename ELFT::Off) >= in checkGNUHashTable()
2648 W.printNumber("Num Buckets", HashTable->nbucket); in printHashTable()
2649 W.printNumber("Num Chains", HashTable->nchain); in printHashTable()
2657 W.printList("Buckets", HashTable->buckets()); in printHashTable()
2658 W.printList("Chains", HashTable->chains()); in printHashTable()
2669 DynSymRegion->template getAsArrayRef<typename ELFT::Sym>(); in getGnuHashTableChains()
2674 if (GnuHashTable->symndx < NumSyms) in getGnuHashTableChains()
2675 return GnuHashTable->values(NumSyms); in getGnuHashTableChains()
2678 // symndx set to the number of dynamic symbols + 1 (for the zero symbol) in getGnuHashTableChains()
2684 ArrayRef<typename ELFT::Word> Buckets = GnuHashTable->buckets(); in getGnuHashTableChains()
2687 "the first hashed symbol index (" + Twine(GnuHashTable->symndx) + in getGnuHashTableChains()
2690 // There is no way to represent an array of (dynamic symbols count - symndx) in getGnuHashTableChains()
2704 W.printNumber("Num Buckets", GnuHashTable->nbuckets); in printGnuHashTable()
2705 W.printNumber("First Hashed Symbol Index", GnuHashTable->symndx); in printGnuHashTable()
2706 W.printNumber("Num Mask Words", GnuHashTable->maskwords); in printGnuHashTable()
2707 W.printNumber("Shift Count", GnuHashTable->shift2); in printGnuHashTable()
2715 ArrayRef<typename ELFT::Off> BloomFilter = GnuHashTable->filter(); in printGnuHashTable()
2718 ArrayRef<Elf_Word> Buckets = GnuHashTable->buckets(); in printGnuHashTable()
2735 if (this->HashTable) { in printHashHistograms()
2736 if (Error E = checkHashTable<ELFT>(*this, this->HashTable)) in printHashHistograms()
2737 this->reportUniqueWarning(std::move(E)); in printHashHistograms()
2739 printHashHistogram(*this->HashTable); in printHashHistograms()
2743 if (this->GnuHashTable) { in printHashHistograms()
2744 if (Error E = checkGNUHashTable<ELFT>(this->Obj, this->GnuHashTable)) in printHashHistograms()
2745 this->reportUniqueWarning(std::move(E)); in printHashHistograms()
2747 printGnuHashHistogram(*this->GnuHashTable); in printHashHistograms()
2759 size_t MaxChain = 1; in printHashHistogram()
2769 for (size_t C = Buckets[B]; C < NChain; C = Chains[C]) { in printHashHistogram() local
2770 if (C == ELF::STN_UNDEF) in printHashHistogram()
2772 if (Visited[C]) { in printHashHistogram()
2773 this->reportUniqueWarning( in printHashHistogram()
2774 ".hash section is invalid: bucket " + Twine(C) + in printHashHistogram()
2778 Visited[C] = true; in printHashHistogram()
2801 getGnuHashTableChains<ELFT>(this->DynSymRegion, &GnuHashTable); in printGnuHashHistogram()
2803 this->reportUniqueWarning("unable to print the GNU hash table histogram: " + in printGnuHashHistogram()
2811 size_t MaxChain = 1; in printGnuHashHistogram()
2822 size_t Len = 1; in printGnuHashHistogram()
2823 for (size_t C = Buckets[B] - Symndx; in printGnuHashHistogram() local
2824 C < Chains.size() && (Chains[C] & 1) == 0; ++C) in printGnuHashHistogram()
2868 reportUniqueWarning("attribute printing not implemented for big-endian " in printArchSpecificInfo()
2869 "RISC-V objects"); in printArchSpecificInfo()
2924 if (Error E = AttrParser->parse(Contents, Endianness)) in printAttributes()
3002 // ftp://www.linux-mips.org/pub/linux/mips/doc/ABI/mipsabi.pdf in findGOT()
3054 return createError("there is no non-empty GOT section at 0x" + in findGOT()
3058 GlobalNum = DynSymTotal - *DtGotSym; in findGOT()
3096 return createError("there is no non-empty PLTGOT section at 0x" + in findPLT()
3101 return createError("there is no non-empty RELPLT section at 0x" + in findPLT()
3107 Entries(reinterpret_cast<const Entry *>(PltContentOrErr->data()), in findPLT()
3108 PltContentOrErr->size() / sizeof(Entry)); in findPLT()
3114 Obj.getSection(PltRelSec->sh_link)) in findPLT()
3133 return GotSec->sh_addr + 0x7ff0; in getGp()
3147 const Entry &E = GotEntries[1]; in getGotModulePointer()
3148 if ((E >> (sizeof(Entry) * 8 - 1)) == 0) in getGotModulePointer()
3156 size_t Skip = getGotModulePointer() ? 2 : 1; in getLocalEntries()
3157 if (LocalNum - Skip <= 0) in getLocalEntries()
3159 return GotEntries.slice(Skip, LocalNum - Skip); in getLocalEntries()
3173 size_t OtherNum = GotEntries.size() - LocalNum - GlobalNum; in getOtherEntries()
3182 return GotSec->sh_addr + Offset; in getGotAddress()
3188 return Offset - 0x7ff0; in getGotOffset()
3195 return &GotDynSyms[Offset - LocalNum]; in getGotSym()
3207 return PltEntries.size() < 2 ? nullptr : &PltEntries[1]; in getPltModulePointer()
3215 return PltEntries.slice(2, PltEntries.size() - 2); in getPltEntries()
3221 return PltSec->sh_addr + Offset; in getPltAddress()
3228 if (PltRelSec->sh_type == ELF::SHT_REL) { in getPltSym()
3241 {"Broadcom SB-1", Mips::AFL_EXT_SB1},
3247 {"Loongson 2E", Mips::AFL_EXT_LOONGSON_2E},
3248 {"Loongson 2F", Mips::AFL_EXT_LOONGSON_2F},
3249 {"Loongson 3A", Mips::AFL_EXT_LOONGSON_3A},
3268 {"MIPS-3D", Mips::AFL_ASE_MIPS3D},
3285 {"Hard float (MIPS32r2 64-bit FPU 12 callee-saved)",
3287 {"Hard float (32-bit CPU, Any FPU)", Mips::Val_GNU_MIPS_ABI_FP_XX},
3288 {"Hard float (32-bit CPU, 64-bit FPU)", Mips::Val_GNU_MIPS_ABI_FP_64},
3289 {"Hard float compat (32-bit CPU, 64-bit FPU)",
3308 return -1; in getMipsRegisterSize()
3317 W.printHex("Co-Proc Mask0", Reginfo.ri_cprmask[0]); in printMipsReginfoData()
3318 W.printHex("Co-Proc Mask1", Reginfo.ri_cprmask[1]); in printMipsReginfoData()
3319 W.printHex("Co-Proc Mask2", Reginfo.ri_cprmask[2]); in printMipsReginfoData()
3320 W.printHex("Co-Proc Mask3", Reginfo.ri_cprmask[3]); in printMipsReginfoData()
3333 this->reportUniqueWarning( in printMipsReginfo()
3339 if (ContentsOrErr->size() < sizeof(Elf_Mips_RegInfo<ELFT>)) { in printMipsReginfo()
3340 this->reportUniqueWarning("the .reginfo section has an invalid size (0x" + in printMipsReginfo()
3341 Twine::utohexstr(ContentsOrErr->size()) + ")"); in printMipsReginfo()
3347 ContentsOrErr->data())); in printMipsReginfo()
3360 const uint8_t Size = O->size; in readMipsOptions()
3362 const uint64_t Offset = SecData.data() - SecBegin; in readMipsOptions()
3371 IsSupported = O->kind == ODK_REGINFO; in readMipsOptions()
3379 Twine(getElfMipsOptionsOdkType(O->kind)) + in readMipsOptions()
3408 unsigned Kind = (*OptsOrErr)->kind; in printMipsOptions()
3418 printMipsReginfoData(W, (*OptsOrErr)->getRegInfo()); in printMipsOptions()
3430 this->reportUniqueWarning("unable to read the stack map from " + in printStackMap()
3516 if (ArrOrErr->empty()) in getSectionHeadersNumString()
3536 if (ArrOrErr->empty()) in getSectionHeaderTableIndexString()
3555 if (InputFilenames.size() > 1 || A) { in printFileSummary()
3556 this->W.startLine() << "\n"; in printFileSummary()
3557 this->W.printString("File", FileStr); in printFileSummary()
3562 const Elf_Ehdr &e = this->Obj.getHeader(); in printFileHeaders()
3600 Str = E->AltName.str(); in printFileHeaders()
3687 Str = getSectionHeadersNumString(this->Obj, this->FileName); in printFileHeaders()
3689 Str = getSectionHeaderTableIndexString(this->Obj, this->FileName); in printFileHeaders()
3695 const Elf_Shdr &Symtab) -> StringRef { in getGroups()
3714 return StrTableOrErr->data() + Sym.st_name; in getGroups()
3742 if (ContentsOrErr->empty()) in getGroups()
3755 I - 1, in getGroups()
3765 for (uint32_t Ndx : Data.slice(1)) { in getGroups()
3789 std::vector<GroupSection> V = this->getGroups(); in printGroupSections()
3800 this->reportUniqueWarning( in printGroupSections()
3803 Twine(MainGroup->Index) + in printGroupSections()
3823 Fields[1].Str = to_string(format_hex_no_prefix(R.Info, Width)); in printRelRelaReloc()
3826 this->Obj.getRelocationTypeName(R.Type, RelocName); in printRelRelaReloc()
3831 to_string(format_hex_no_prefix(RelSym.Sym->getValue(), Width)); in printRelRelaReloc()
3845 Addend = " - "; in printRelRelaReloc()
3846 RelAddend = -static_cast<uint64_t>(RelAddend); in printRelRelaReloc()
3874 uint64_t Offset = Reg.Addr - this->Obj.base(); in printDynamicRelocHeader()
3880 printRelocHeaderFields<ELFT>(OS, Type, this->Obj.getHeader()); in printDynamicRelocHeader()
3899 (this->Obj.getHeader().e_machine == EM_AARCH64 && in printRelocations()
3902 auto GetEntriesNum = [&](const Elf_Shdr &Sec) -> Expected<size_t> { in printRelocations()
3908 this->Obj.android_relas(Sec); in printRelocations()
3911 return RelasOrErr->size(); in printRelocations()
3916 this->Obj.getSectionContents(Sec); in printRelocations()
3919 auto NumOrErr = this->Obj.getCrelHeader(*ContentsOrErr); in printRelocations()
3926 Expected<Elf_Relr_Range> RelrsOrErr = this->Obj.relrs(Sec); in printRelocations()
3929 return this->Obj.decode_relrs(*RelrsOrErr).size(); in printRelocations()
3936 for (const Elf_Shdr &Sec : cantFail(this->Obj.sections())) { in printRelocations()
3937 if (!isRelocationSec<ELFT>(Sec, this->Obj.getHeader())) in printRelocations()
3945 this->reportUniqueWarning("unable to get the number of relocations in " + in printRelocations()
3946 this->describe(Sec) + ": " + in printRelocations()
3950 StringRef Name = this->getPrintableSectionName(Sec); in printRelocations()
3962 CrelHdr = cantFail(this->Obj.getCrelHeader( in printRelocations()
3963 cantFail(this->Obj.getSectionContents(Sec)))); in printRelocations()
3965 printRelocHeaderFields<ELFT>(OS, Sec.sh_type, this->Obj.getHeader(), in printRelocations()
3968 this->printRelocationsHelper(Sec); in printRelocations()
3976 Expected<Elf_Relr_Range> RangeOrErr = this->Obj.relrs(Sec); in printRelr()
3978 this->reportUniqueWarning("unable to read relocations from " + in printRelr()
3979 this->describe(Sec) + ": " + in printRelr()
3991 if (this->DotSymtabSec) { in printRelr()
3994 std::tie(Symtab, Strtab) = this->getSymtabAndStrtab(); in printRelr()
4000 this->getFullSymbolName(Sym, I, ArrayRef<Elf_Word>(), in printRelr()
4016 OS << " " << Syms[I - 1].second; in printRelr()
4017 if (Syms[I - 1].first < Where) in printRelr()
4018 OS << " + 0x" << Twine::utohexstr(Where - Syms[I - 1].first); in printRelr()
4026 if ((Entry & 1) == 0) { in printRelr()
4031 for (auto Where = Base; Entry >>= 1; in printRelr()
4033 if (Entry & 1) { in printRelr()
4041 Base += (CHAR_BIT * sizeof(Entry) - 1) * sizeof(typename ELFT::uint); in printRelr()
4052 return "LOOS+0x" + utohexstr(Type - SHT_LOOS); in getSectionTypeOffsetString()
4054 return "LOPROC+0x" + utohexstr(Type - SHT_LOPROC); in getSectionTypeOffsetString()
4056 return "LOUSER+0x" + utohexstr(Type - SHT_LOUSER); in getSectionTypeOffsetString()
4067 // E.g. SHT_GNU_verneed -> VERNEED. in getSectionTypeString()
4086 OS << " C (compressed), x (unknown), o (OS specific), E (exclude),\n"; in printSectionDescription()
4098 ArrayRef<Elf_Shdr> Sections = cantFail(this->Obj.sections()); in printSectionHeaders()
4102 this->Obj.getSectionStringTable(Sections, this->WarningHandler); in printSectionHeaders()
4104 this->reportUniqueWarning(SecStrTableOrErr.takeError()); in printSectionHeaders()
4110 << "0x" << utohexstr(this->Obj.getHeader().e_shoff, /*LowerCase=*/true) << ":\n\n"; in printSectionHeaders()
4114 {"Address", 41}, {"Off", 58 - Bias}, {"Size", 65 - Bias}, in printSectionHeaders()
4115 {"ES", 72 - Bias}, {"Flg", 75 - Bias}, {"Lk", 79 - Bias}, in printSectionHeaders()
4116 {"Inf", 82 - Bias}, {"Al", 86 - Bias}}; in printSectionHeaders()
4123 this->Obj.getSectionStringTable(Sections, this->WarningHandler)) in printSectionHeaders()
4126 this->reportUniqueWarning(SecStrTableOrErr.takeError()); in printSectionHeaders()
4132 Fields[1].Str = "<no-strings>"; in printSectionHeaders()
4134 Fields[1].Str = std::string(unwrapOrError<StringRef>( in printSectionHeaders()
4135 this->FileName, this->Obj.getSectionName(Sec, SecStrTable))); in printSectionHeaders()
4137 getSectionTypeString(this->Obj.getHeader().e_machine, Sec.sh_type); in printSectionHeaders()
4143 Fields[7].Str = getGNUFlags(this->Obj.getHeader().e_ident[ELF::EI_OSABI], in printSectionHeaders()
4144 this->Obj.getHeader().e_machine, Sec.sh_flags); in printSectionHeaders()
4151 for (int i = 1; i < 7; i++) in printSectionHeaders()
4164 printSectionDescription(OS, this->Obj.getHeader().e_machine); in printSectionHeaders()
4174 Name = this->getPrintableSectionName(*Symtab); in printSymtabMessage()
4217 this->reportUniqueWarning(IndexOrErr.takeError()); in getSymbolSectionNdx()
4243 auto Sec = this->Obj.getSection(SectionIndex); in getSymbolSectionNdx()
4245 this->reportUniqueWarning(Sec.takeError()); in getSymbolSectionNdx()
4247 auto SecName = this->Obj.getSectionName(**Sec); in getSymbolSectionNdx()
4249 this->reportUniqueWarning(SecName.takeError()); in getSymbolSectionNdx()
4267 Fields[1].Str = in printSymbol()
4272 if (this->Obj.getHeader().e_machine == ELF::EM_AMDGPU && in printSymbol()
4284 if (this->Obj.getHeader().e_machine == ELF::EM_AARCH64) { in printSymbol()
4293 } else if (this->Obj.getHeader().e_machine == ELF::EM_RISCV) { in printSymbol()
4313 Fields[7].Str = this->getFullSymbolName(Symbol, SymIndex, ShndxTable, in printSymbol()
4330 Fields[1].Str = to_string(format_decimal(Bucket, 3)) + ":"; in printHashedSymbol()
4333 format_hex_no_prefix(Symbol->st_value, ELFT::Is64Bits ? 16 : 8)); in printHashedSymbol()
4334 Fields[3].Str = to_string(format_decimal(Symbol->st_size, 5)); in printHashedSymbol()
4336 unsigned char SymbolType = Symbol->getType(); in printHashedSymbol()
4337 if (this->Obj.getHeader().e_machine == ELF::EM_AMDGPU && in printHashedSymbol()
4344 enumToString(Symbol->getBinding(), ArrayRef(ElfSymbolBindings)); in printHashedSymbol()
4346 enumToString(Symbol->getVisibility(), ArrayRef(ElfSymbolVisibilities)); in printHashedSymbol()
4349 this->getFullSymbolName(*Symbol, SymIndex, ShndxTable, StrTable, true); in printHashedSymbol()
4362 // GNU readelf prints both the .dynsym and .symtab with --symbols. in printSymbols()
4363 this->printSymbolsHelper(true, ExtraSymInfo); in printSymbols()
4365 this->printSymbolsHelper(false, ExtraSymInfo); in printSymbols()
4370 if (this->DynamicStringTable.empty()) in printHashTableSymbols()
4379 Elf_Sym_Range DynSyms = this->dynamic_symbols(); in printHashTableSymbols()
4382 this->reportUniqueWarning( in printHashTableSymbols()
4385 (this->DynSymRegion ? "is empty" : "was not found")); in printHashTableSymbols()
4390 (const Elf_Word *)this->DynSymTabShndxRegion.Addr, this->Obj.end()); in printHashTableSymbols()
4402 this->reportUniqueWarning(".hash section is invalid: bucket " + in printHashTableSymbols()
4408 printHashedSymbol(FirstSym + Ch, Ch, ShndxTable, this->DynamicStringTable, in printHashTableSymbols()
4417 if (this->DynamicStringTable.empty()) in printGnuHashTableSymbols()
4420 Elf_Sym_Range DynSyms = this->dynamic_symbols(); in printGnuHashTableSymbols()
4423 this->reportUniqueWarning( in printGnuHashTableSymbols()
4426 (this->DynSymRegion ? "is empty" : "was not found")); in printGnuHashTableSymbols()
4431 uint64_t SymsTotal) -> const Elf_Sym * { in printGnuHashTableSymbols()
4433 this->reportUniqueWarning( in printGnuHashTableSymbols()
4444 getGnuHashTableChains<ELFT>(this->DynSymRegion, &GnuHash); in printGnuHashTableSymbols()
4447 this->reportUniqueWarning("unable to get hash values for the SHT_GNU_HASH " in printGnuHashTableSymbols()
4454 (const Elf_Word *)this->DynSymTabShndxRegion.Addr, this->Obj.end()); in printGnuHashTableSymbols()
4464 printHashedSymbol(Sym, SymIndex, ShndxTable, this->DynamicStringTable, in printGnuHashTableSymbols()
4470 this->reportUniqueWarning( in printGnuHashTableSymbols()
4479 if ((Values[SymIndex - GnuHash.symndx] & 1) == 1) in printGnuHashTableSymbols()
4486 if (this->HashTable) { in printHashSymbols()
4488 if (Error E = checkHashTable<ELFT>(*this, this->HashTable)) in printHashSymbols()
4489 this->reportUniqueWarning(std::move(E)); in printHashSymbols()
4491 printHashTableSymbols(*this->HashTable); in printHashSymbols()
4495 if (this->GnuHashTable) { in printHashSymbols()
4503 if (Error E = checkGNUHashTable<ELFT>(this->Obj, this->GnuHashTable)) in printHashSymbols()
4504 this->reportUniqueWarning(std::move(E)); in printHashSymbols()
4506 printGnuHashTableSymbols(*this->GnuHashTable); in printHashSymbols()
4511 ArrayRef<Elf_Shdr> Sections = cantFail(this->Obj.sections()); in printSectionDetails()
4515 this->Obj.getSectionStringTable(Sections, this->WarningHandler); in printSectionDetails()
4517 this->reportUniqueWarning(SecStrTableOrErr.takeError()); in printSectionDetails()
4522 << "0x" << utohexstr(this->Obj.getHeader().e_shoff, /*LowerCase=*/true) << ":\n\n"; in printSectionDetails()
4547 this->Obj.getSectionStringTable(Sections, this->WarningHandler)) in printSectionDetails()
4550 this->reportUniqueWarning(SecStrTableOrErr.takeError()); in printSectionDetails()
4557 this->Obj.getSectionName(S, SecStrTable)) in printSectionDetails()
4560 this->reportUniqueWarning(NameOrErr.takeError()); in printSectionDetails()
4566 {{getSectionTypeString(this->Obj.getHeader().e_machine, S.sh_type), 7}, in printSectionDetails()
4591 uint64_t Flag = Flags & -Flags; in printSectionDetails()
4592 Flags -= Flag; in printSectionDetails()
4596 OS << LS << It->second; in printSectionDetails()
4613 PrintUnknownFlags(uint64_t(-1), "UNKNOWN"); in printSectionDetails()
4620 Expected<ArrayRef<uint8_t>> Data = this->Obj.getSectionContents(S); in printSectionDetails()
4621 if (!Data || Data->size() < sizeof(Elf_Chdr)) { in printSectionDetails()
4625 this->FileName); in printSectionDetails()
4630 auto *Chdr = reinterpret_cast<const Elf_Chdr *>(Data->data()); in printSectionDetails()
4631 if (Chdr->ch_type == ELFCOMPRESS_ZLIB) in printSectionDetails()
4633 else if (Chdr->ch_type == ELFCOMPRESS_ZSTD) in printSectionDetails()
4636 OS << format("[<unknown>: 0x%x]", unsigned(Chdr->ch_type)); in printSectionDetails()
4637 OS << ", " << format_hex_no_prefix(Chdr->ch_size, ELFT::Is64Bits ? 16 : 8) in printSectionDetails()
4638 << ", " << Chdr->ch_addralign; in printSectionDetails()
4676 // We get here when we have an empty section. Only non-empty sections can be in checkPTDynamic()
4696 const Elf_Ehdr &Header = this->Obj.getHeader(); in printProgramHeaders()
4710 const Elf_Ehdr &Header = this->Obj.getHeader(); in printProgramHeaders()
4729 Expected<ArrayRef<Elf_Phdr>> PhdrsOrErr = this->Obj.program_headers(); in printProgramHeaders()
4731 this->reportUniqueWarning("unable to dump program headers: " + in printProgramHeaders()
4738 Fields[1].Str = to_string(format_hex(Phdr.p_offset, 8)); in printProgramHeaders()
4744 Fields[7].Str = to_string(format_hex(Phdr.p_align, 1)); in printProgramHeaders()
4750 this->reportUniqueWarning( in printProgramHeaders()
4755 if (Phdr.p_offset >= this->Obj.getBufSize()) { in printProgramHeaders()
4757 Twine::utohexstr(this->Obj.getBufSize()) + ")"); in printProgramHeaders()
4762 reinterpret_cast<const char *>(this->Obj.base()) + Phdr.p_offset; in printProgramHeaders()
4763 size_t MaxSize = this->Obj.getBufSize() - Phdr.p_offset; in printProgramHeaders()
4766 ReportBadInterp("it is not null-terminated"); in printProgramHeaders()
4782 Expected<ArrayRef<Elf_Phdr>> PhdrsOrErr = this->Obj.program_headers(); in printSectionMapping()
4784 this->reportUniqueWarning( in printSectionMapping()
4794 for (const Elf_Shdr &Sec : cantFail(this->Obj.sections())) { in printSectionMapping()
4805 unwrapOrError(this->FileName, this->Obj.getSectionName(Sec)).str() + in printSectionMapping()
4816 for (const Elf_Shdr &Sec : cantFail(this->Obj.sections())) { in printSectionMapping()
4819 unwrapOrError(this->FileName, this->Obj.getSectionName(Sec)).str() + in printSectionMapping()
4835 const Twine &Reason) -> RelSymbol<ELFT> { in getSymbolForReloc()
4858 const uint64_t SymOffset = ((const uint8_t *)FirstSym - Obj.base()) + in getSymbolForReloc()
4866 Expected<StringRef> ErrOrName = Sym->getName(Dumper.getDynamicStringTable()); in getSymbolForReloc()
4884 Elf_Dyn_Range Table = this->dynamic_table(); in printDynamicTable()
4889 << format_hex(reinterpret_cast<const uint8_t *>(this->DynamicTable.Addr) - in printDynamicTable()
4890 this->Obj.base(), in printDynamicTable()
4891 1) in printDynamicTable()
4895 size_t MaxTagSize = getMaxDynamicTagSize(this->Obj, Table) + 2; in printDynamicTable()
4897 // spaces, where N = MaxTagSize - length of "Type" (4) + trailing in printDynamicTable()
4898 // space (1) = 3. in printDynamicTable()
4900 << std::string(MaxTagSize - 3, ' ') << "Name/Value\n"; in printDynamicTable()
4902 std::string ValueFmt = " %-" + std::to_string(MaxTagSize) + "s "; in printDynamicTable()
4906 std::string("(") + this->Obj.getDynamicTagAsString(Tag) + ")"; in printDynamicTable()
4907 std::string Value = this->getDynamicEntry(Tag, Entry.getVal()); in printDynamicTable()
4914 this->printDynamicRelocationsHelper(); in printDynamicRelocations()
4924 this->forEachRelocationDo( in printRelocationsHelper()
4930 const bool IsMips64EL = this->Obj.isMips64EL(); in printDynamicRelocationsHelper()
4935 Region.Size = Region.EntSize = 1; in printDynamicRelocationsHelper()
4938 Region.Addr - reinterpret_cast<const uint8_t *>( in printDynamicRelocationsHelper()
4942 Obj.decodeCrel(ArrayRef<uint8_t>(Region.Addr, ObjSize - Offset)); in printDynamicRelocationsHelper()
4946 for (const Elf_Rel &R : RelsOrRelas->first) in printDynamicRelocationsHelper()
4948 for (const Elf_Rela &R : RelsOrRelas->second) in printDynamicRelocationsHelper()
4954 if (this->DynCrelRegion.Addr) { in printDynamicRelocationsHelper()
4955 printDynamicRelocHeader(ELF::SHT_CREL, "CREL", this->DynCrelRegion); in printDynamicRelocationsHelper()
4956 DumpCrelRegion(this->DynCrelRegion); in printDynamicRelocationsHelper()
4959 if (this->DynRelaRegion.Size > 0) { in printDynamicRelocationsHelper()
4960 printDynamicRelocHeader(ELF::SHT_RELA, "RELA", this->DynRelaRegion); in printDynamicRelocationsHelper()
4962 this->DynRelaRegion.template getAsArrayRef<Elf_Rela>()) in printDynamicRelocationsHelper()
4966 if (this->DynRelRegion.Size > 0) { in printDynamicRelocationsHelper()
4967 printDynamicRelocHeader(ELF::SHT_REL, "REL", this->DynRelRegion); in printDynamicRelocationsHelper()
4969 this->DynRelRegion.template getAsArrayRef<Elf_Rel>()) in printDynamicRelocationsHelper()
4973 if (this->DynRelrRegion.Size > 0) { in printDynamicRelocationsHelper()
4974 printDynamicRelocHeader(ELF::SHT_REL, "RELR", this->DynRelrRegion); in printDynamicRelocationsHelper()
4976 this->DynRelrRegion.template getAsArrayRef<Elf_Relr>(); in printDynamicRelocationsHelper()
4981 if (this->DynPLTRelRegion.Size) { in printDynamicRelocationsHelper()
4982 if (this->DynPLTRelRegion.EntSize == sizeof(Elf_Rela)) { in printDynamicRelocationsHelper()
4983 printDynamicRelocHeader(ELF::SHT_RELA, "PLT", this->DynPLTRelRegion); in printDynamicRelocationsHelper()
4985 this->DynPLTRelRegion.template getAsArrayRef<Elf_Rela>()) in printDynamicRelocationsHelper()
4987 } else if (this->DynPLTRelRegion.EntSize == 1) { in printDynamicRelocationsHelper()
4988 DumpCrelRegion(this->DynPLTRelRegion); in printDynamicRelocationsHelper()
4990 printDynamicRelocHeader(ELF::SHT_REL, "PLT", this->DynPLTRelRegion); in printDynamicRelocationsHelper()
4992 this->DynPLTRelRegion.template getAsArrayRef<Elf_Rel>()) in printDynamicRelocationsHelper()
5003 StringRef SecName = this->getPrintableSectionName(Sec); in printGNUVersionSectionProlog()
5009 this->Obj.getSection(Sec.sh_link)) in printGNUVersionSectionProlog()
5010 LinkedSecName = this->getPrintableSectionName(**LinkedSecOrErr); in printGNUVersionSectionProlog()
5012 this->reportUniqueWarning("invalid section linked to " + in printGNUVersionSectionProlog()
5013 this->describe(Sec) + ": " + in printGNUVersionSectionProlog()
5027 Sec->sh_size / sizeof(Elf_Versym)); in printVersionSymbolSection()
5029 this->getVersionTable(*Sec, /*SymTab=*/nullptr, in printVersionSymbolSection()
5032 this->reportUniqueWarning(VerTableOrErr.takeError()); in printVersionSymbolSection()
5038 this->getVersionMap()) in printVersionSymbolSection()
5041 this->reportUniqueWarning(MapOrErr.takeError()); in printVersionSymbolSection()
5058 Expected<StringRef> NameOrErr = this->Obj.getSymbolVersionByIndex( in printVersionSymbolSection()
5061 this->reportUniqueWarning("unable to get a version for entry " + in printVersionSymbolSection()
5062 Twine(I) + " of " + this->describe(*Sec) + in printVersionSymbolSection()
5076 OS << format("%4x%c", Ndx & VERSYM_VERSION, in printVersionSymbolSection()
5111 printGNUVersionSectionProlog(*Sec, "Version definition", Sec->sh_info); in printVersionDefinitionSection()
5113 Expected<std::vector<VerDef>> V = this->Obj.getVersionDefinitions(*Sec); in printVersionDefinitionSection()
5115 this->reportUniqueWarning(V.takeError()); in printVersionDefinitionSection()
5138 unsigned VerneedNum = Sec->sh_info; in printVersionDependencySection()
5142 this->Obj.getVersionDependencies(*Sec, this->WarningHandler); in printVersionDependencySection()
5144 this->reportUniqueWarning(V.takeError()); in printVersionDependencySection()
5171 OS << format("%7lu %-10lu (%5.1f%%) %5.1f%%\n", I, Count[I], in printHashHistogramStats()
5217 if (!this->DotAddrsigSec) in printAddrsig()
5221 decodeAddrsigSection(this->Obj, *this->DotAddrsigSec); in printAddrsig()
5223 this->reportUniqueWarning(SymsOrErr.takeError()); in printAddrsig()
5227 StringRef Name = this->getPrintableSectionName(*this->DotAddrsigSec); in printAddrsig()
5228 OS << "\nAddress-significant symbols section '" << Name << "'" in printAddrsig()
5229 << " contains " << SymsOrErr->size() << " entries:\n"; in printAddrsig()
5236 Fields[1].Str = this->getStaticSymbolName(Sym); in printAddrsig()
5247 // DataSize - size without padding, Desc.size() - size with padding in printAArch64PAuthABICoreInfo()
5270 std::string VersionDesc = [Platform, Version]() -> std::string { in printAArch64PAuthABICoreInfo()
5273 if (Version >= (1 << (AARCH64_PAUTH_PLATFORM_LLVM_LINUX_VERSION_LAST + 1))) in printAArch64PAuthABICoreInfo()
5276 std::array<StringRef, AARCH64_PAUTH_PLATFORM_LLVM_LINUX_VERSION_LAST + 1> in printAArch64PAuthABICoreInfo()
5294 if (!(Version & (1ULL << I))) in printAArch64PAuthABICoreInfo()
5297 Twine("PointerAuth" + Flags[I] + (I == End - 1 ? "" : ", ")).str(); in printAArch64PAuthABICoreInfo()
5327 OS << format("<application-specific type 0x%x>", Type); in getGNUProperty()
5409 DumpBit(GNU_PROPERTY_X86_ISA_1_BASELINE, "x86-64-baseline"); in getGNUProperty()
5410 DumpBit(GNU_PROPERTY_X86_ISA_1_V2, "x86-64-v2"); in getGNUProperty()
5411 DumpBit(GNU_PROPERTY_X86_ISA_1_V3, "x86-64-v3"); in getGNUProperty()
5412 DumpBit(GNU_PROPERTY_X86_ISA_1_V4, "x86-64-v4"); in getGNUProperty()
5470 uint32_t Major = Words[1], Minor = Words[2], Patch = Words[3]; in getGNUAbiTag()
5492 // Return true if we were able to pretty-print the note, false otherwise. in printGNUNote()
5562 // Return true if we were able to pretty-print the note, false otherwise. in printAndroidNote()
5636 return std::nullopt; // No pretty-printing yet. in getFreeBSDNote()
5684 StrOS << "[Major: " << Version->MajorVersion in getAMDNote()
5685 << ", Minor: " << Version->MinorVersion << "]"; in getAMDNote()
5701 StrOS << "[HSAIL Major: " << Properties->HSAILMajorVersion in getAMDNote()
5702 << ", HSAIL Minor: " << Properties->HSAILMinorVersion in getAMDNote()
5703 << ", Profile: " << uint32_t(Properties->Profile) in getAMDNote()
5704 << ", Machine Model: " << uint32_t(Properties->MachineModel) in getAMDNote()
5706 << uint32_t(Properties->DefaultFloatRound) << "]"; in getAMDNote()
5721 Isa->VendorNameSize + Isa->ArchitectureNameSize || in getAMDNote()
5722 Isa->VendorNameSize == 0 || Isa->ArchitectureNameSize == 0) in getAMDNote()
5727 << StringRef((const char*)Desc.data() + sizeof(IsaVersion), Isa->VendorNameSize - 1) in getAMDNote()
5729 << StringRef((const char*)Desc.data() + sizeof(IsaVersion) + Isa->VendorNameSize, in getAMDNote()
5730 Isa->ArchitectureNameSize - 1) in getAMDNote()
5731 << ", Major: " << Isa->Major << ", Minor: " << Isa->Minor in getAMDNote()
5732 << ", Stepping: " << Isa->Stepping << "]"; in getAMDNote()
5740 std::string(reinterpret_cast<const char *>(Desc.data()), Desc.size() - 1)}; in getAMDNote()
5821 // 1. # of file mappings (call it N) in readCoreNote()
5855 if (!Filenames.isValidOffsetForDataOfSize(FilenamesOffset, 1)) in readCoreNote()
5895 {ELF::NT_GNU_HWCAP, "NT_GNU_HWCAP (DSO-supplied software HWCAP info)"},
6015 "NT_S390_VXRS_LOW (s390 vector registers 0-15 upper half)"},
6016 {ELF::NT_S390_VXRS_HIGH, "NT_S390_VXRS_HIGH (s390 vector registers 16-31)"},
6017 {ELF::NT_S390_GS_CB, "NT_S390_GS_CB (s390 guarded-storage registers)"},
6019 "NT_S390_GS_BC (s390 guarded-storage broadcast control)"},
6044 auto FindNote = [&](ArrayRef<NoteType> V) -> StringRef { in getNoteTypeName()
6065 if (ELFType == ELF::ET_CORE && Name.starts_with("NetBSD-CORE")) { in getNoteTypeName()
6184 auto ProcessNote = [&](const Elf_Note &Note, bool IsCore) -> Error { in printNotes()
6194 getNoteTypeName<ELFT>(Note, this->Obj.getHeader().e_type); in printNotes()
6201 // owners/if we fail to pretty-print the contents. in printNotes()
6208 OS << " " << N->Type << ": " << N->Value << '\n'; in printNotes()
6315 auto FindAndroidNote = [&](const Elf_Note &Note, bool IsCore) -> Error { in printMemtag()
6342 …// https://github.com/ARM-software/abi-aa/blob/main/memtagabielf64/memtagabielf64.rst#83encoding-o… in printMemtag()
6357 uint64_t GranulesToTag = Value & ((1 << MemtagStepVarintReservedBits) - 1); in printMemtag()
6361 1; in printMemtag()
6365 "error decoding size-only uleb, " + Twine(DecodedBytes) + in printMemtag()
6388 this->reportUniqueWarning("SHT_LLVM_DEPENDENT_LIBRARIES section at index " + in printDependentLibsHelper()
6392 unsigned I = -1; in printDependentLibsHelper()
6408 Warn(I, "the content is not null-terminated"); in printDependentLibsHelper()
6414 OnLibEntry(Lib, I - Contents.begin()); in printDependentLibsHelper()
6415 I += Lib.size() + 1; in printDependentLibsHelper()
6428 this->reportUniqueWarning(Prefix + " " + describe(Sec) + ": " + in forEachRelocationDo()
6448 const bool IsMips64EL = this->Obj.isMips64EL(); in forEachRelocationDo()
6485 for (const Elf_Rel &R : RelsOrRelas->first) in forEachRelocationDo()
6487 for (const Elf_Rela &R : RelsOrRelas->second) in forEachRelocationDo()
6510 Obj.getSectionName(Sec, this->WarningHandler)) in getPrintableSectionName()
6513 this->reportUniqueWarning("unable to get the name of " + describe(Sec) + in getPrintableSectionName()
6528 << format_hex(Current.Offset, 1) << " contains " << SecEntries.size() in printDependentLibs()
6542 Current.Name = this->getPrintableSectionName(Shdr); in printDependentLibs()
6548 this->printDependentLibsHelper(OnSectionStart, OnLibEntry); in printDependentLibs()
6557 if (!this->AddressToIndexMap) { in getSymbolIndexesForFunctionAddress()
6560 this->AddressToIndexMap.emplace(); in getSymbolIndexesForFunctionAddress()
6561 if (this->DotSymtabSec) { in getSymbolIndexesForFunctionAddress()
6563 Obj.symbols(this->DotSymtabSec)) { in getSymbolIndexesForFunctionAddress()
6564 uint32_t Index = (uint32_t)-1; in getSymbolIndexesForFunctionAddress()
6572 ObjF.toSymbolRef(this->DotSymtabSec, Index).getAddress(); in getSymbolIndexesForFunctionAddress()
6574 std::string Name = this->getStaticSymbolName(Index); in getSymbolIndexesForFunctionAddress()
6580 (*this->AddressToIndexMap)[*SymAddrOrErr].push_back(Index); in getSymbolIndexesForFunctionAddress()
6589 auto Symbols = this->AddressToIndexMap->find(SymValue); in getSymbolIndexesForFunctionAddress()
6590 if (Symbols == this->AddressToIndexMap->end()) in getSymbolIndexesForFunctionAddress()
6593 for (uint32_t Index : Symbols->second) { in getSymbolIndexesForFunctionAddress()
6597 const Elf_Sym &Sym = *cantFail(Obj.getSymbol(this->DotSymtabSec, Index)); in getSymbolIndexesForFunctionAddress()
6599 Obj.getSection(Sym, this->DotSymtabSec, in getSymbolIndexesForFunctionAddress()
6600 this->getShndxTable(this->DotSymtabSec))) { in getSymbolIndexesForFunctionAddress()
6604 std::string Name = this->getStaticSymbolName(Index); in getSymbolIndexesForFunctionAddress()
6624 this->getSymbolIndexesForFunctionAddress(SymValue, FunctionSec); in printFunctionStackSize()
6646 FuncSymNames.push_back(this->getStaticSymbolName(Index)); in printFunctionStackSize()
6674 Expected<RelSymbol<ELFT>> TargetOrErr = this->getRelocationTarget(R, SymTab); in printStackSize()
6680 Sym = TargetOrErr->Sym; in printStackSize()
6685 this->Obj.getSection(*Sym, SymTab, this->getShndxTable(SymTab)); in printStackSize()
6698 RelocSymValue = Sym->st_value; in printStackSize()
6702 if (!Data.isValidOffsetForDataOfSize(Offset, sizeof(Elf_Addr) + 1)) { in printStackSize()
6712 this->printFunctionStackSize(SymValue, FunctionSec, StackSizeSec, Data, in printStackSize()
6722 if (this->getPrintableSectionName(Sec) != ".stack_sizes") in printNonRelocatableStackSizes()
6726 unwrapOrError(this->FileName, Obj.getSectionContents(Sec)); in printNonRelocatableStackSizes()
6732 if (!Data.isValidOffsetForDataOfSize(Offset, sizeof(Elf_Addr) + 1)) { in printNonRelocatableStackSizes()
6751 auto IsMatch = [&](const Elf_Shdr &Sec) -> bool { in printRelocatableStackSizes()
6787 this->FileName, Obj.getSection(StackSizesELFSec->sh_link)); in printRelocatableStackSizes()
6791 std::tie(IsSupportedFn, Resolver) = getRelocationResolver(this->ObjF); in printRelocatableStackSizes()
6793 unwrapOrError(this->FileName, Obj.getSectionContents(*StackSizesELFSec)); in printRelocatableStackSizes()
6807 this->printStackSize(R, *RelocSec, Ndx, SymTab, FunctionSec, in printRelocatableStackSizes()
6827 // For non-relocatable objects, look directly for sections whose name starts in printStackSizes()
6829 if (this->Obj.getHeader().e_type == ELF::ET_REL) in printStackSizes()
6830 this->printRelocatableStackSizes(PrintHeader); in printStackSizes()
6832 this->printNonRelocatableStackSizes(PrintHeader); in printStackSizes()
6886 (const Elf_Word *)this->DynSymTabShndxRegion.Addr, this->Obj.end()); in printMipsGOT()
6889 const Elf_Sym &FirstSym = this->dynamic_symbols()[0]; in printMipsGOT()
6890 std::string SymName = this->getFullSymbolName( in printMipsGOT()
6891 Sym, &Sym - &FirstSym, ShndxTable, this->DynamicStringTable, false); in printMipsGOT()
6904 OS << getSymbolSectionNdx(Sym, &Sym - this->dynamic_symbols().begin(), in printMipsGOT()
6912 OS << "\n Number of TLS and multi-GOT entries " in printMipsGOT()
6941 (const Elf_Word *)this->DynSymTabShndxRegion.Addr, this->Obj.end()); in printMipsPLT()
6945 this->Obj.template getEntry<Elf_Sym>(*Parser.getPltSymTable(), 0)); in printMipsPLT()
6946 std::string SymName = this->getFullSymbolName( in printMipsPLT()
6947 Sym, &Sym - &FirstSym, ShndxTable, this->DynamicStringTable, false); in printMipsPLT()
6958 OS << getSymbolSectionNdx(Sym, &Sym - this->dynamic_symbols().begin(), in printMipsPLT()
6979 if (DataOrErr->size() != sizeof(Elf_Mips_ABIFlags<ELFT>)) in getMipsAbiFlagsSection()
6981 Twine(DataOrErr->size()) + ")"); in getMipsAbiFlagsSection()
6982 return reinterpret_cast<const Elf_Mips_ABIFlags<ELFT> *>(DataOrErr->data()); in getMipsAbiFlagsSection()
6991 this->reportUniqueWarning(SecOrErr.takeError()); in printMipsABIFlags()
6995 OS << "MIPS ABI Flags Version: " << Flags->version << "\n\n"; in printMipsABIFlags()
6996 OS << "ISA: MIPS" << int(Flags->isa_level); in printMipsABIFlags()
6997 if (Flags->isa_rev > 1) in printMipsABIFlags()
6998 OS << "r" << int(Flags->isa_rev); in printMipsABIFlags()
7000 OS << "GPR size: " << getMipsRegisterSize(Flags->gpr_size) << "\n"; in printMipsABIFlags()
7001 OS << "CPR1 size: " << getMipsRegisterSize(Flags->cpr1_size) << "\n"; in printMipsABIFlags()
7002 OS << "CPR2 size: " << getMipsRegisterSize(Flags->cpr2_size) << "\n"; in printMipsABIFlags()
7003 OS << "FP ABI: " << enumToString(Flags->fp_abi, ArrayRef(ElfMipsFpABIType)) in printMipsABIFlags()
7006 << enumToString(Flags->isa_ext, ArrayRef(ElfMipsISAExtType)) << "\n"; in printMipsABIFlags()
7007 if (Flags->ases == 0) in printMipsABIFlags()
7011 OS << "ASEs: " << printFlags(Flags->ases, ArrayRef(ElfMipsASEFlags)) in printMipsABIFlags()
7013 OS << "FLAGS 1: " << format_hex_no_prefix(Flags->flags1, 8, false) << "\n"; in printMipsABIFlags()
7014 OS << "FLAGS 2: " << format_hex_no_prefix(Flags->flags2, 8, false) << "\n"; in printMipsABIFlags()
7019 const Elf_Ehdr &E = this->Obj.getHeader(); in printFileHeaders()
7054 TypeStr = Ent->Name.str(); in printFileHeaders()
7137 getSectionHeadersNumString(this->Obj, this->FileName)); in printFileHeaders()
7139 getSectionHeaderTableIndexString(this->Obj, this->FileName)); in printFileHeaders()
7145 std::vector<GroupSection> V = this->getGroups(); in printGroupSections()
7160 this->reportUniqueWarning( in printGroupSections()
7163 Twine(MainGroup->Index) + in printGroupSections()
7188 for (const Elf_Shdr &Sec : cantFail(this->Obj.sections())) { in printRelocations()
7189 if (!isRelocationSec<ELFT>(Sec, this->Obj.getHeader())) in printRelocations()
7192 StringRef Name = this->getPrintableSectionName(Sec); in printRelocations()
7193 unsigned SecNdx = &Sec - &cantFail(this->Obj.sections()).front(); in printRelocations()
7205 W.printNumber("Symbol", !SymbolName.empty() ? SymbolName : "-", R.Symbol); in printExpandedRelRelaReloc()
7216 << (!SymbolName.empty() ? SymbolName : "-"); in printDefaultRelRelaReloc()
7227 this->printRelocationsHelper(Sec); in printRelocationSectionInfo()
7241 this->Obj.getRelocationTypeName(R.Type, RelocName); in printRelRelaReloc()
7253 int SectionIndex = -1; in printSectionHeaders()
7255 getSectionFlagsForTarget(this->Obj.getHeader().e_ident[ELF::EI_OSABI], in printSectionHeaders()
7256 this->Obj.getHeader().e_machine); in printSectionHeaders()
7257 for (const Elf_Shdr &Sec : cantFail(this->Obj.sections())) { in printSectionHeaders()
7260 W.printNumber("Name", this->getPrintableSectionName(Sec), Sec.sh_name); in printSectionHeaders()
7262 object::getELFSectionTypeName(this->Obj.getHeader().e_machine, in printSectionHeaders()
7276 this->printRelocationsHelper(Sec); in printSectionHeaders()
7281 if (this->DotSymtabSec) { in printSectionHeaders()
7283 this->FileName, in printSectionHeaders()
7284 this->Obj.getStringTableForSymtab(*this->DotSymtabSec)); in printSectionHeaders()
7285 ArrayRef<Elf_Word> ShndxTable = this->getShndxTable(this->DotSymtabSec); in printSectionHeaders()
7288 this->FileName, this->Obj.symbols(this->DotSymtabSec)); in printSectionHeaders()
7291 this->FileName, in printSectionHeaders()
7292 this->Obj.getSection(Sym, this->DotSymtabSec, ShndxTable)); in printSectionHeaders()
7294 printSymbol(Sym, &Sym - &Symbols[0], ShndxTable, StrTable, false, in printSectionHeaders()
7303 unwrapOrError(this->FileName, this->Obj.getSectionContents(Sec)); in printSectionHeaders()
7315 auto GetSectionSpecialType = [&]() -> std::optional<StringRef> { in printSymbolSection()
7337 this->getSymbolSectionIndex(Symbol, SymIndex, ShndxTable); in printSymbolSection()
7342 this->reportUniqueWarning(SectionIndex.takeError()); in printSymbolSection()
7348 this->getSymbolSectionName(Symbol, *SectionIndex); in printSymbolSection()
7352 if (!this->ObjF.sections().empty()) in printSymbolSection()
7353 this->reportUniqueWarning(SectionName.takeError()); in printSymbolSection()
7365 this->getOtherFlagsFromSymbol(this->Obj.getHeader(), Symbol); in printSymbolOtherField()
7372 assert(Symbol.st_other == 0 && "non-zero Other Field"); in printZeroSymbolOtherField()
7385 std::string FullSymbolName = this->getFullSymbolName( in printSymbol()
7394 if (this->Obj.getHeader().e_machine == ELF::EM_AMDGPU && in printSymbol()
7412 this->printSymbolsHelper(false, ExtraSymInfo); in printSymbols()
7416 this->printSymbolsHelper(true, ExtraSymInfo); in printSymbols()
7421 Elf_Dyn_Range Table = this->dynamic_table(); in printDynamicTable()
7427 size_t MaxTagSize = getMaxDynamicTagSize(this->Obj, Table); in printDynamicTable()
7429 // spaces, where N = MaxTagSize - length of "Type" (4) + trailing in printDynamicTable()
7430 // space (1) = -3. in printDynamicTable()
7432 << "Type" << std::string(MaxTagSize - 3, ' ') << "Name/Value\n"; in printDynamicTable()
7434 std::string ValueFmt = "%-" + std::to_string(MaxTagSize) + "s "; in printDynamicTable()
7437 std::string Value = this->getDynamicEntry(Tag, Entry.getVal()); in printDynamicTable()
7441 this->Obj.getDynamicTagAsString(Tag).c_str()) in printDynamicTable()
7451 ListScope L(this->W, "Flags"); in printAuxillaryDynamicTableEntryInfo()
7454 this->W.printString(Flag.Name); in printAuxillaryDynamicTableEntryInfo()
7459 this->W.printString("Name", this->getDynamicString(Entry.getVal())); in printAuxillaryDynamicTableEntryInfo()
7464 this->W.printString("Library", this->getDynamicString(Entry.getVal())); in printAuxillaryDynamicTableEntryInfo()
7467 this->W.printString("Object", this->getDynamicString(Entry.getVal())); in printAuxillaryDynamicTableEntryInfo()
7471 StringRef Value = this->getDynamicString(Entry.getVal()); in printAuxillaryDynamicTableEntryInfo()
7472 ListScope L(this->W, "Path"); in printAuxillaryDynamicTableEntryInfo()
7475 this->W.printString(Front); in printAuxillaryDynamicTableEntryInfo()
7492 Elf_Dyn_Range Table = this->dynamic_table(); in printDynamicTable()
7493 ListScope L(this->W, "DynamicSection"); in printDynamicTable()
7495 DictScope D(this->W); in printDynamicTable()
7497 this->W.printHex("Tag", Tag); in printDynamicTable()
7498 this->W.printString("Type", this->Obj.getDynamicTagAsString(Tag)); in printDynamicTable()
7499 this->W.printHex("Value", Entry.getVal()); in printDynamicTable()
7500 this->printAuxillaryDynamicTableEntryInfo(Entry); in printDynamicTable()
7507 this->printDynamicRelocationsHelper(); in printDynamicRelocations()
7524 Expected<ArrayRef<Elf_Phdr>> PhdrsOrErr = this->Obj.program_headers(); in printProgramHeaders()
7526 this->reportUniqueWarning("unable to dump program headers: " + in printProgramHeaders()
7534 segmentTypeToString(this->Obj.getHeader().e_machine, Phdr.p_type); in printProgramHeaders()
7557 this->getVersionTable(*Sec, &Syms, &StrTable, &SymTabSec); in printVersionSymbolSection()
7559 this->reportUniqueWarning(VerTableOrErr.takeError()); in printVersionSymbolSection()
7563 if (StrTable.empty() || Syms.empty() || Syms.size() != VerTableOrErr->size()) in printVersionSymbolSection()
7566 ArrayRef<Elf_Word> ShNdxTable = this->getShndxTable(SymTabSec); in printVersionSymbolSection()
7571 this->getFullSymbolName(Syms[I], I, ShNdxTable, StrTable, in printVersionSymbolSection()
7587 Expected<std::vector<VerDef>> V = this->Obj.getVersionDefinitions(*Sec); in printVersionDefinitionSection()
7589 this->reportUniqueWarning(V.takeError()); in printVersionDefinitionSection()
7613 this->Obj.getVersionDependencies(*Sec, this->WarningHandler); in printVersionDependencySection()
7615 this->reportUniqueWarning(V.takeError()); in printVersionDependencySection()
7667 Dumper->reportUniqueWarning( in getSymbolIndices()
7672 if (CGRelSection->sh_type == SHT_REL) { in getSymbolIndices()
7677 Dumper->reportUniqueWarning("unable to load relocations for " in getSymbolIndices()
7694 Dumper->reportUniqueWarning("unable to load relocations for " in getSymbolIndices()
7709 auto IsMatch = [](const Elf_Shdr &Sec) -> bool { in printCGProfile()
7714 this->Obj.getSectionAndRelocations(IsMatch); in printCGProfile()
7716 this->reportUniqueWarning("unable to get CG Profile section(s): " + in printCGProfile()
7726 this->Obj.template getSectionContentsAsArray<Elf_CGProfile>(*CGSection); in printCGProfile()
7728 this->reportUniqueWarning( in printCGProfile()
7736 getSymbolIndices<ELFT>(CGRelSection, this->Obj, this, SymbolIndices); in printCGProfile()
7737 if (UseReloc && SymbolIndices.size() != CGProfileOrErr->size() * 2) { in printCGProfile()
7738 this->reportUniqueWarning( in printCGProfile()
7744 for (uint32_t I = 0, Size = CGProfileOrErr->size(); I != Size; ++I) { in printCGProfile()
7749 uint32_t To = SymbolIndices[I * 2 + 1]; in printCGProfile()
7750 W.printNumber("From", this->getStaticSymbolName(From), From); in printCGProfile()
7751 W.printNumber("To", this->getStaticSymbolName(To), To); in printCGProfile()
7760 bool IsRelocatable = this->Obj.getHeader().e_type == ELF::ET_REL; in printBBAddrMaps()
7762 auto IsMatch = [](const Elf_Shdr &Sec) -> bool { in printBBAddrMaps()
7766 this->Obj.getSectionAndRelocations(IsMatch); in printBBAddrMaps()
7768 this->reportUniqueWarning( in printBBAddrMaps()
7777 unwrapOrError(this->FileName, this->Obj.getSection(Sec->sh_link)); in printBBAddrMaps()
7780 this->reportUniqueWarning("unable to get relocation section for " + in printBBAddrMaps()
7781 this->describe(*Sec)); in printBBAddrMaps()
7786 this->Obj.decodeBBAddrMap(*Sec, RelocSec, &PGOAnalyses); in printBBAddrMaps()
7788 this->reportUniqueWarning("unable to dump " + this->describe(*Sec) + in printBBAddrMaps()
7796 this->getSymbolIndexesForFunctionAddress(AM.getFunctionAddress(), in printBBAddrMaps()
7800 this->reportUniqueWarning( in printBBAddrMaps()
7803 this->describe(*Sec)); in printBBAddrMaps()
7805 FuncName = this->getStaticSymbolName(FuncSymIndex.front()); in printBBAddrMaps()
7871 if (!this->DotAddrsigSec) in printAddrsig()
7875 decodeAddrsigSection(this->Obj, *this->DotAddrsigSec); in printAddrsig()
7877 this->reportUniqueWarning(SymsOrErr.takeError()); in printAddrsig()
7882 W.printNumber("Sym", this->getStaticSymbolName(Sym), Sym); in printAddrsig()
7888 // Return true if we were able to pretty-print the note, false otherwise. in printGNUNoteLLVMStyle()
7921 // Return true if we were able to pretty-print the note, false otherwise. in printAndroidNoteLLVMStyle()
8013 auto ProcessNote = [&](const Elf_Note &Note, bool IsCore) -> Error { in printNotes()
8024 getNoteTypeName<ELFT>(Note, this->Obj.getHeader().e_type); in printNotes()
8032 // owners/if we fail to pretty-print the contents. in printNotes()
8039 W.printString(N->Type, N->Value); in printNotes()
8086 unsigned I = -1; in printELFLinkerOptions()
8087 for (const Elf_Shdr &Shdr : cantFail(this->Obj.sections())) { in printELFLinkerOptions()
8093 this->Obj.getSectionContents(Shdr); in printELFLinkerOptions()
8095 this->reportUniqueWarning("unable to read the content of the " in printELFLinkerOptions()
8100 if (ContentsOrErr->empty()) in printELFLinkerOptions()
8103 if (ContentsOrErr->back() != 0) { in printELFLinkerOptions()
8104 this->reportUniqueWarning("SHT_LLVM_LINKER_OPTIONS section at index " + in printELFLinkerOptions()
8107 "content is not null-terminated"); in printELFLinkerOptions()
8112 toStringRef(ContentsOrErr->drop_back()).split(Strings, '\0'); in printELFLinkerOptions()
8114 this->reportUniqueWarning( in printELFLinkerOptions()
8117 "key-value pair was found. The last possible key was: \"" + in printELFLinkerOptions()
8123 W.printString(Strings[I], Strings[I + 1]); in printELFLinkerOptions()
8129 this->printDependentLibsHelper( in printDependentLibs()
8136 if (this->Obj.getHeader().e_type == ELF::ET_REL) in printStackSizes()
8137 this->printRelocatableStackSizes([]() {}); in printStackSizes()
8139 this->printNonRelocatableStackSizes([]() {}); in printStackSizes()
8197 const unsigned SymIndex = &Sym - this->dynamic_symbols().begin(); in printMipsGOT()
8199 (const Elf_Word *)this->DynSymTabShndxRegion.Addr, this->Obj.end()); in printMipsGOT()
8202 std::string SymName = this->getFullSymbolName( in printMipsGOT()
8203 Sym, SymIndex, ShndxTable, this->DynamicStringTable, true); in printMipsGOT()
8208 W.printNumber("Number of TLS and multi-GOT entries", in printMipsGOT()
8238 (const Elf_Word *)this->DynSymTabShndxRegion.Addr, this->Obj.end()); in printMipsPLT()
8246 printSymbolSection(Sym, &Sym - this->dynamic_symbols().begin(), in printMipsPLT()
8250 this->Obj.template getEntry<Elf_Sym>(*Parser.getPltSymTable(), 0)); in printMipsPLT()
8251 std::string SymName = this->getFullSymbolName( in printMipsPLT()
8252 Sym, &Sym - FirstSym, ShndxTable, Parser.getPltStrTable(), true); in printMipsPLT()
8268 this->reportUniqueWarning(SecOrErr.takeError()); in printMipsABIFlags()
8275 W.printNumber("Version", Flags->version); in printMipsABIFlags()
8277 if (Flags->isa_rev <= 1) in printMipsABIFlags()
8278 OS << format("MIPS%u", Flags->isa_level); in printMipsABIFlags()
8280 OS << format("MIPS%ur%u", Flags->isa_level, Flags->isa_rev); in printMipsABIFlags()
8282 W.printEnum("ISA Extension", Flags->isa_ext, ArrayRef(ElfMipsISAExtType)); in printMipsABIFlags()
8283 W.printFlags("ASEs", Flags->ases, ArrayRef(ElfMipsASEFlags)); in printMipsABIFlags()
8284 W.printEnum("FP ABI", Flags->fp_abi, ArrayRef(ElfMipsFpABIType)); in printMipsABIFlags()
8285 W.printNumber("GPR size", getMipsRegisterSize(Flags->gpr_size)); in printMipsABIFlags()
8286 W.printNumber("CPR1 size", getMipsRegisterSize(Flags->cpr1_size)); in printMipsABIFlags()
8287 W.printNumber("CPR2 size", getMipsRegisterSize(Flags->cpr2_size)); in printMipsABIFlags()
8288 W.printFlags("Flags 1", Flags->flags1, ArrayRef(ElfMipsFlags1)); in printMipsABIFlags()
8289 W.printHex("Flags 2", Flags->flags2); in printMipsABIFlags()
8296 FileScope = std::make_unique<DictScope>(this->W); in printFileSummary()
8297 DictScope D(this->W, "FileSummary"); in printFileSummary()
8298 this->W.printString("File", FileStr); in printFileSummary()
8299 this->W.printString("Format", Obj.getFileFormatName()); in printFileSummary()
8300 this->W.printString("Arch", Triple::getArchTypeName(Obj.getArch())); in printFileSummary()
8301 this->W.printString( in printFileSummary()
8304 this->printLoadName(); in printFileSummary()
8312 this->printSymbolOtherField(Symbol); in printZeroSymbolOtherField()
8319 this->printExpandedRelRelaReloc(R, SymbolName, RelocName); in printDefaultRelRelaReloc()
8326 DictScope Group(this->W); in printRelocationSectionInfo()
8327 this->W.printNumber("SectionIndex", SecNdx); in printRelocationSectionInfo()
8328 ListScope D(this->W, "Relocs"); in printRelocationSectionInfo()
8329 this->printRelocationsHelper(Sec); in printRelocationSectionInfo()
8340 DictScope Grp(this->W); in printSectionGroupMembers()
8341 this->W.printString("Name", Name); in printSectionGroupMembers()
8342 this->W.printNumber("Index", Idx); in printSectionGroupMembers()