Move function to the only file that uses it.
authorRafael Espindola <rafael.espindola@gmail.com>
Tue, 30 Jun 2015 03:41:26 +0000 (03:41 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Tue, 30 Jun 2015 03:41:26 +0000 (03:41 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241040 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Object/MachO.h
include/llvm/Object/ObjectFile.h
lib/Object/MachOObjectFile.cpp
tools/llvm-objdump/llvm-objdump.cpp

index cb1626e0ea53c6c98a3e08fa964da0d2c9a69df5..50baeb79a0b2f6e30e29b48898a213e83a5f0686 100644 (file)
@@ -244,7 +244,6 @@ public:
   std::error_code
   getRelocationTypeName(DataRefImpl Rel,
                         SmallVectorImpl<char> &Result) const override;
-  bool getRelocationHidden(DataRefImpl Rel) const override;
   uint8_t getRelocationLength(DataRefImpl Rel) const;
 
   // MachO specific.
index 59400c996b3a9b1bc98023c5c8538d0bc1d9d011..7056471d2512ef86d64f6bca304adc6badce7d54 100644 (file)
@@ -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<char> &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<char> &Result) const {
   return OwningObject->getRelocationTypeName(RelocationPimpl, Result);
 }
 
-inline bool RelocationRef::getHidden() const {
-  return OwningObject->getRelocationHidden(RelocationPimpl);
-}
-
 inline DataRefImpl RelocationRef::getRawDataRefImpl() const {
   return RelocationPimpl;
 }
index 14f74c70a6650d91702a9fb02f6271e590472386..9763fabca82390f053b67cd4130ddaed4feea37d 100644 (file)
@@ -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);
index 08a361f7b54d906eee207ac07a52fa96deeea1a9..b17cb0b47ea2ca824a4384c81b29e6d7196edc6c 100644 (file)
@@ -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<MachOObjectFile>(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;