[llvm] r215844 - llvm-objdump: don't print relocations in non-relocatable files.
Rafael Espindola
rafael.espindola at gmail.com
Sun Aug 17 12:09:37 PDT 2014
Author: rafael
Date: Sun Aug 17 14:09:37 2014
New Revision: 215844
URL: http://llvm.org/viewvc/llvm-project?rev=215844&view=rev
Log:
llvm-objdump: don't print relocations in non-relocatable files.
This matches the behavior of GNU objdump.
Added:
llvm/trunk/test/Object/objdump-reloc-shared.test
Modified:
llvm/trunk/include/llvm/Object/COFF.h
llvm/trunk/include/llvm/Object/ELFObjectFile.h
llvm/trunk/include/llvm/Object/MachO.h
llvm/trunk/include/llvm/Object/ObjectFile.h
llvm/trunk/lib/Object/COFFObjectFile.cpp
llvm/trunk/lib/Object/MachOObjectFile.cpp
llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp
Modified: llvm/trunk/include/llvm/Object/COFF.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/COFF.h?rev=215844&r1=215843&r2=215844&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Object/COFF.h (original)
+++ llvm/trunk/include/llvm/Object/COFF.h Sun Aug 17 14:09:37 2014
@@ -462,6 +462,8 @@ public:
std::error_code getHintName(uint32_t Rva, uint16_t &Hint,
StringRef &Name) const;
+ bool isRelocatableObject() const override;
+
static inline bool classof(const Binary *v) { return v->isCOFF(); }
};
Modified: llvm/trunk/include/llvm/Object/ELFObjectFile.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/ELFObjectFile.h?rev=215844&r1=215843&r2=215844&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Object/ELFObjectFile.h (original)
+++ llvm/trunk/include/llvm/Object/ELFObjectFile.h Sun Aug 17 14:09:37 2014
@@ -224,6 +224,8 @@ public:
std::pair<symbol_iterator, symbol_iterator>
getELFDynamicSymbolIterators() const override;
+
+ bool isRelocatableObject() const override;
};
// Use an alignment of 2 for the typedefs since that is the worst case for
@@ -945,6 +947,10 @@ ELFObjectFile<ELFT>::getELFDynamicSymbol
return std::make_pair(dynamic_symbol_begin(), dynamic_symbol_end());
}
+template <class ELFT> bool ELFObjectFile<ELFT>::isRelocatableObject() const {
+ return EF.getHeader()->e_type == ELF::ET_REL;
+}
+
inline std::error_code getELFRelocationAddend(const RelocationRef R,
int64_t &Addend) {
const ObjectFile *Obj = R.getObjectFile();
Modified: llvm/trunk/include/llvm/Object/MachO.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/MachO.h?rev=215844&r1=215843&r2=215844&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Object/MachO.h (original)
+++ llvm/trunk/include/llvm/Object/MachO.h Sun Aug 17 14:09:37 2014
@@ -219,6 +219,8 @@ public:
static bool isValidArch(StringRef ArchFlag);
static Triple getHostArch();
+ bool isRelocatableObject() const override;
+
static bool classof(const Binary *v) {
return v->isMachO();
}
Modified: llvm/trunk/include/llvm/Object/ObjectFile.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/ObjectFile.h?rev=215844&r1=215843&r2=215844&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Object/ObjectFile.h (original)
+++ llvm/trunk/include/llvm/Object/ObjectFile.h Sun Aug 17 14:09:37 2014
@@ -302,6 +302,9 @@ public:
return object_error::invalid_file_type;
}
+ /// True if this is a relocatable object (.o/.obj).
+ virtual bool isRelocatableObject() const = 0;
+
/// @returns Pointer to ObjectFile subclass to handle this type of object.
/// @param ObjectPath The path to the object file. ObjectPath.isObject must
/// return true.
Modified: llvm/trunk/lib/Object/COFFObjectFile.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/COFFObjectFile.cpp?rev=215844&r1=215843&r2=215844&view=diff
==============================================================================
--- llvm/trunk/lib/Object/COFFObjectFile.cpp (original)
+++ llvm/trunk/lib/Object/COFFObjectFile.cpp Sun Aug 17 14:09:37 2014
@@ -979,6 +979,10 @@ COFFObjectFile::getRelocationValueString
return object_error::success;
}
+bool COFFObjectFile::isRelocatableObject() const {
+ return !DataDirectory;
+}
+
bool ImportDirectoryEntryRef::
operator==(const ImportDirectoryEntryRef &Other) const {
return ImportTable == Other.ImportTable && Index == Other.Index;
Modified: llvm/trunk/lib/Object/MachOObjectFile.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/MachOObjectFile.cpp?rev=215844&r1=215843&r2=215844&view=diff
==============================================================================
--- llvm/trunk/lib/Object/MachOObjectFile.cpp (original)
+++ llvm/trunk/lib/Object/MachOObjectFile.cpp Sun Aug 17 14:09:37 2014
@@ -1688,6 +1688,10 @@ void MachOObjectFile::ReadULEB128s(uint6
}
}
+bool MachOObjectFile::isRelocatableObject() const {
+ return getHeader().filetype == MachO::MH_OBJECT;
+}
+
ErrorOr<std::unique_ptr<MachOObjectFile>>
ObjectFile::createMachOObjectFile(std::unique_ptr<MemoryBuffer> &Buffer) {
StringRef Magic = Buffer->getBuffer().slice(0, 4);
Added: llvm/trunk/test/Object/objdump-reloc-shared.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/objdump-reloc-shared.test?rev=215844&view=auto
==============================================================================
--- llvm/trunk/test/Object/objdump-reloc-shared.test (added)
+++ llvm/trunk/test/Object/objdump-reloc-shared.test Sun Aug 17 14:09:37 2014
@@ -0,0 +1,5 @@
+RUN: llvm-objdump -r %p/Inputs/elf-reloc-no-sym.x86_64 \
+RUN: | FileCheck %s
+
+; CHECK: elf-reloc-no-sym.x86_64: file format ELF64-x86-64
+; CHECK-NOT: {{.}}
Modified: llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp?rev=215844&r1=215843&r2=215844&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp (original)
+++ llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp Sun Aug 17 14:09:37 2014
@@ -562,6 +562,11 @@ static void DisassembleObject(const Obje
static void PrintRelocations(const ObjectFile *Obj) {
StringRef Fmt = Obj->getBytesInAddress() > 4 ? "%016" PRIx64 :
"%08" PRIx64;
+ // Regular objdump doesn't print relocations in non-relocatable object
+ // files.
+ if (!Obj->isRelocatableObject())
+ return;
+
for (const SectionRef &Section : Obj->sections()) {
if (Section.relocation_begin() == Section.relocation_end())
continue;
More information about the llvm-commits
mailing list