From fa90c8a191d7bc03752389cbd44d7888be088c5a Mon Sep 17 00:00:00 2001 From: Vladislav Dzhidzhoev Date: Tue, 18 Mar 2025 10:59:21 +0100 Subject: [PATCH] [llvm-objdump] Pass MCSubtargetInfo to findPltEntries (NFC) It allows to check for subtarget features, collected in llvm-objdump.cpp, in findPltEntries, which will be used in https://github.com/llvm/llvm-project/pull/130764. --- llvm/include/llvm/MC/MCInstrAnalysis.h | 2 +- llvm/include/llvm/Object/ELFObjectFile.h | 3 ++- llvm/lib/Object/ELFObjectFile.cpp | 5 +++-- .../lib/Target/AArch64/MCTargetDesc/AArch64MCTargetDesc.cpp | 2 +- .../lib/Target/Hexagon/MCTargetDesc/HexagonMCTargetDesc.cpp | 2 +- llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp | 5 +++-- llvm/tools/llvm-cfi-verify/lib/FileAnalysis.cpp | 2 +- llvm/tools/llvm-objdump/llvm-objdump.cpp | 6 +++--- 8 files changed, 15 insertions(+), 12 deletions(-) diff --git a/llvm/include/llvm/MC/MCInstrAnalysis.h b/llvm/include/llvm/MC/MCInstrAnalysis.h index b571791c518da..7ad4c5f49623f 100644 --- a/llvm/include/llvm/MC/MCInstrAnalysis.h +++ b/llvm/include/llvm/MC/MCInstrAnalysis.h @@ -195,7 +195,7 @@ class MCInstrAnalysis { /// Returns (PLT virtual address, GOT virtual address) pairs for PLT entries. virtual std::vector> findPltEntries(uint64_t PltSectionVA, ArrayRef PltContents, - const Triple &TargetTriple) const { + const MCSubtargetInfo &STI) const { return {}; } }; diff --git a/llvm/include/llvm/Object/ELFObjectFile.h b/llvm/include/llvm/Object/ELFObjectFile.h index bafc92cafe539..35f1fc3d5814b 100644 --- a/llvm/include/llvm/Object/ELFObjectFile.h +++ b/llvm/include/llvm/Object/ELFObjectFile.h @@ -18,6 +18,7 @@ #include "llvm/ADT/StringRef.h" #include "llvm/ADT/iterator_range.h" #include "llvm/BinaryFormat/ELF.h" +#include "llvm/MC/MCSubtargetInfo.h" #include "llvm/Object/Binary.h" #include "llvm/Object/ELF.h" #include "llvm/Object/ELFTypes.h" @@ -107,7 +108,7 @@ class ELFObjectFileBase : public ObjectFile { virtual uint8_t getEIdentABIVersion() const = 0; - std::vector getPltEntries() const; + std::vector getPltEntries(const MCSubtargetInfo &STI) const; /// Returns a vector containing a symbol version for each dynamic symbol. /// Returns an empty vector if version sections do not exist. diff --git a/llvm/lib/Object/ELFObjectFile.cpp b/llvm/lib/Object/ELFObjectFile.cpp index d0897c62b3e8e..21cb77e399a97 100644 --- a/llvm/lib/Object/ELFObjectFile.cpp +++ b/llvm/lib/Object/ELFObjectFile.cpp @@ -778,7 +778,8 @@ void ELFObjectFileBase::setARMSubArch(Triple &TheTriple) const { TheTriple.setArchName(Triple); } -std::vector ELFObjectFileBase::getPltEntries() const { +std::vector +ELFObjectFileBase::getPltEntries(const MCSubtargetInfo &STI) const { std::string Err; const auto Triple = makeTriple(); const auto *T = TargetRegistry::lookupTarget(Triple, Err); @@ -836,7 +837,7 @@ std::vector ELFObjectFileBase::getPltEntries() const { llvm::append_range( PltEntries, MIA->findPltEntries(Section.getAddress(), - arrayRefFromStringRef(*PltContents), Triple)); + arrayRefFromStringRef(*PltContents), STI)); } } diff --git a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCTargetDesc.cpp b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCTargetDesc.cpp index 7f781811a5058..dd3ecb41494e0 100644 --- a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCTargetDesc.cpp +++ b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCTargetDesc.cpp @@ -465,7 +465,7 @@ class AArch64MCInstrAnalysis : public MCInstrAnalysis { std::vector> findPltEntries(uint64_t PltSectionVA, ArrayRef PltContents, - const Triple &TargetTriple) const override { + const MCSubtargetInfo &STI) const override { // Do a lightweight parsing of PLT entries. std::vector> Result; for (uint64_t Byte = 0, End = PltContents.size(); Byte + 7 < End; diff --git a/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCTargetDesc.cpp b/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCTargetDesc.cpp index 80e5c10691393..4edbe4875c98b 100644 --- a/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCTargetDesc.cpp +++ b/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCTargetDesc.cpp @@ -749,7 +749,7 @@ class HexagonMCInstrAnalysis : public MCInstrAnalysis { std::vector> findPltEntries(uint64_t PltSectionVA, ArrayRef PltContents, - const Triple &TargetTriple) const override { + const MCSubtargetInfo &STI) const override { // Do a lightweight parsing of PLT entries. std::vector> Result; for (uint64_t Byte = 0x0, End = PltContents.size(); Byte < End; Byte += 4) { diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp b/llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp index 1c4d68d5448d6..ad94e306f339e 100644 --- a/llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp +++ b/llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp @@ -514,7 +514,7 @@ class X86MCInstrAnalysis : public MCInstrAnalysis { APInt &Mask) const override; std::vector> findPltEntries(uint64_t PltSectionVA, ArrayRef PltContents, - const Triple &TargetTriple) const override; + const MCSubtargetInfo &STI) const override; bool evaluateBranch(const MCInst &Inst, uint64_t Addr, uint64_t Size, uint64_t &Target) const override; @@ -630,7 +630,8 @@ findX86_64PltEntries(uint64_t PltSectionVA, ArrayRef PltContents) { std::vector> X86MCInstrAnalysis::findPltEntries(uint64_t PltSectionVA, ArrayRef PltContents, - const Triple &TargetTriple) const { + const MCSubtargetInfo &STI) const { + const auto TargetTriple = STI.getTargetTriple(); switch (TargetTriple.getArch()) { case Triple::x86: return findX86PltEntries(PltSectionVA, PltContents); diff --git a/llvm/tools/llvm-cfi-verify/lib/FileAnalysis.cpp b/llvm/tools/llvm-cfi-verify/lib/FileAnalysis.cpp index 64ebe48fe8f42..e6f36735e84b9 100644 --- a/llvm/tools/llvm-cfi-verify/lib/FileAnalysis.cpp +++ b/llvm/tools/llvm-cfi-verify/lib/FileAnalysis.cpp @@ -574,7 +574,7 @@ Error FileAnalysis::parseSymbolTable() { } } if (auto *ElfObject = dyn_cast(Object)) { - for (const auto &Plt : ElfObject->getPltEntries()) { + for (const auto &Plt : ElfObject->getPltEntries(*SubtargetInfo)) { if (!Plt.Symbol) continue; object::SymbolRef Sym(*Plt.Symbol, Object); diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp index 115f04a4df778..beed2ddcd981d 100644 --- a/llvm/tools/llvm-objdump/llvm-objdump.cpp +++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp @@ -1233,7 +1233,7 @@ addMissingWasmCodeSymbols(const WasmObjectFile &Obj, } } -static void addPltEntries(const ObjectFile &Obj, +static void addPltEntries(const MCSubtargetInfo &STI, const ObjectFile &Obj, std::map &AllSymbols, StringSaver &Saver) { auto *ElfObj = dyn_cast(&Obj); @@ -1248,7 +1248,7 @@ static void addPltEntries(const ObjectFile &Obj, } Sections[*SecNameOrErr] = Section; } - for (auto Plt : ElfObj->getPltEntries()) { + for (auto Plt : ElfObj->getPltEntries(STI)) { if (Plt.Symbol) { SymbolRef Symbol(*Plt.Symbol, ElfObj); uint8_t SymbolType = getElfSymbolType(Obj, Symbol); @@ -1772,7 +1772,7 @@ disassembleObject(ObjectFile &Obj, const ObjectFile &DbgObj, BumpPtrAllocator A; StringSaver Saver(A); - addPltEntries(Obj, AllSymbols, Saver); + addPltEntries(*DT->SubtargetInfo, Obj, AllSymbols, Saver); // Create a mapping from virtual address to section. An empty section can // cause more than one section at the same address. Sort such sections to be