From 09912eb9ecb1fe093436435bb7e0c1a841291866 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Tue, 30 Jun 2015 03:41:26 +0000 Subject: [PATCH] Move function to the only file that uses it. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241040 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Object/MachO.h | 1 - include/llvm/Object/ObjectFile.h | 10 -------- lib/Object/MachOObjectFile.cpp | 24 ------------------- tools/llvm-objdump/llvm-objdump.cpp | 37 +++++++++++++++++++++++++++-- 4 files changed, 35 insertions(+), 37 deletions(-) diff --git a/include/llvm/Object/MachO.h b/include/llvm/Object/MachO.h index cb1626e0ea5..50baeb79a0b 100644 --- a/include/llvm/Object/MachO.h +++ b/include/llvm/Object/MachO.h @@ -244,7 +244,6 @@ public: std::error_code getRelocationTypeName(DataRefImpl Rel, SmallVectorImpl &Result) const override; - bool getRelocationHidden(DataRefImpl Rel) const override; uint8_t getRelocationLength(DataRefImpl Rel) const; // MachO specific. diff --git a/include/llvm/Object/ObjectFile.h b/include/llvm/Object/ObjectFile.h index 59400c996b3..7056471d251 100644 --- a/include/llvm/Object/ObjectFile.h +++ b/include/llvm/Object/ObjectFile.h @@ -55,11 +55,6 @@ public: symbol_iterator getSymbol() const; uint64_t getType() const; - /// @brief Indicates whether this relocation should hidden when listing - /// relocations, usually because it is the trailing part of a multipart - /// relocation that will be printed as part of the leading relocation. - bool getHidden() const; - /// @brief Get a string that represents the type of this relocation. /// /// This is for display purposes only. @@ -246,7 +241,6 @@ protected: virtual std::error_code getRelocationTypeName(DataRefImpl Rel, SmallVectorImpl &Result) const = 0; - virtual bool getRelocationHidden(DataRefImpl Rel) const { return false; } public: uint64_t getCommonSymbolSize(DataRefImpl Symb) const { @@ -468,10 +462,6 @@ RelocationRef::getTypeName(SmallVectorImpl &Result) const { return OwningObject->getRelocationTypeName(RelocationPimpl, Result); } -inline bool RelocationRef::getHidden() const { - return OwningObject->getRelocationHidden(RelocationPimpl); -} - inline DataRefImpl RelocationRef::getRawDataRefImpl() const { return RelocationPimpl; } diff --git a/lib/Object/MachOObjectFile.cpp b/lib/Object/MachOObjectFile.cpp index 14f74c70a66..9763fabca82 100644 --- a/lib/Object/MachOObjectFile.cpp +++ b/lib/Object/MachOObjectFile.cpp @@ -770,30 +770,6 @@ MachOObjectFile::getRelocationTypeName(DataRefImpl Rel, return std::error_code(); } -bool MachOObjectFile::getRelocationHidden(DataRefImpl Rel) const { - unsigned Arch = getArch(); - uint64_t Type = getRelocationType(Rel); - - // On arches that use the generic relocations, GENERIC_RELOC_PAIR - // is always hidden. - if (Arch == Triple::x86 || Arch == Triple::arm || Arch == Triple::ppc) { - if (Type == MachO::GENERIC_RELOC_PAIR) - return true; - } else if (Arch == Triple::x86_64) { - // On x86_64, X86_64_RELOC_UNSIGNED is hidden only when it follows - // an X86_64_RELOC_SUBTRACTOR. - if (Type == MachO::X86_64_RELOC_UNSIGNED && Rel.d.a > 0) { - DataRefImpl RelPrev = Rel; - RelPrev.d.a--; - uint64_t PrevType = getRelocationType(RelPrev); - if (PrevType == MachO::X86_64_RELOC_SUBTRACTOR) - return true; - } - } - - return false; -} - uint8_t MachOObjectFile::getRelocationLength(DataRefImpl Rel) const { MachO::any_relocation_info RE = getRelocation(Rel); return getAnyRelocationLength(RE); diff --git a/tools/llvm-objdump/llvm-objdump.cpp b/tools/llvm-objdump/llvm-objdump.cpp index 08a361f7b54..b17cb0b47ea 100644 --- a/tools/llvm-objdump/llvm-objdump.cpp +++ b/tools/llvm-objdump/llvm-objdump.cpp @@ -692,6 +692,39 @@ static std::error_code getRelocationValueString(const RelocationRef &Rel, return getRelocationValueString(MachO, Rel, Result); } +/// @brief Indicates whether this relocation should hidden when listing +/// relocations, usually because it is the trailing part of a multipart +/// relocation that will be printed as part of the leading relocation. +static bool getHidden(RelocationRef RelRef) { + const ObjectFile *Obj = RelRef.getObject(); + auto *MachO = dyn_cast(Obj); + if (!MachO) + return false; + + unsigned Arch = MachO->getArch(); + DataRefImpl Rel = RelRef.getRawDataRefImpl(); + uint64_t Type = MachO->getRelocationType(Rel); + + // On arches that use the generic relocations, GENERIC_RELOC_PAIR + // is always hidden. + if (Arch == Triple::x86 || Arch == Triple::arm || Arch == Triple::ppc) { + if (Type == MachO::GENERIC_RELOC_PAIR) + return true; + } else if (Arch == Triple::x86_64) { + // On x86_64, X86_64_RELOC_UNSIGNED is hidden only when it follows + // an X86_64_RELOC_SUBTRACTOR. + if (Type == MachO::X86_64_RELOC_UNSIGNED && Rel.d.a > 0) { + DataRefImpl RelPrev = Rel; + RelPrev.d.a--; + uint64_t PrevType = MachO->getRelocationType(RelPrev); + if (PrevType == MachO::X86_64_RELOC_SUBTRACTOR) + return true; + } + } + + return false; +} + static void DisassembleObject(const ObjectFile *Obj, bool InlineRelocs) { const Target *TheTarget = getTarget(Obj); // getTarget() will have already issued a diagnostic if necessary, so @@ -888,7 +921,7 @@ static void DisassembleObject(const ObjectFile *Obj, bool InlineRelocs) { // Print relocation for instruction. while (rel_cur != rel_end) { - bool hidden = rel_cur->getHidden(); + bool hidden = getHidden(*rel_cur); uint64_t addr = rel_cur->getOffset(); SmallString<16> name; SmallString<32> val; @@ -928,7 +961,7 @@ void llvm::PrintRelocations(const ObjectFile *Obj) { continue; outs() << "RELOCATION RECORDS FOR [" << secname << "]:\n"; for (const RelocationRef &Reloc : Section.relocations()) { - bool hidden = Reloc.getHidden(); + bool hidden = getHidden(Reloc); uint64_t address = Reloc.getOffset(); SmallString<32> relocname; SmallString<32> valuestr; -- 2.34.1