mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-07-02 22:30:36 +00:00
llvm-objdump: don't print relocations in non-relocatable files.
This matches the behavior of GNU objdump. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215844 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
fad339d9ec
commit
78e8d52a58
|
@ -462,6 +462,8 @@ public:
|
||||||
std::error_code getHintName(uint32_t Rva, uint16_t &Hint,
|
std::error_code getHintName(uint32_t Rva, uint16_t &Hint,
|
||||||
StringRef &Name) const;
|
StringRef &Name) const;
|
||||||
|
|
||||||
|
bool isRelocatableObject() const override;
|
||||||
|
|
||||||
static inline bool classof(const Binary *v) { return v->isCOFF(); }
|
static inline bool classof(const Binary *v) { return v->isCOFF(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -224,6 +224,8 @@ public:
|
||||||
|
|
||||||
std::pair<symbol_iterator, symbol_iterator>
|
std::pair<symbol_iterator, symbol_iterator>
|
||||||
getELFDynamicSymbolIterators() const override;
|
getELFDynamicSymbolIterators() const override;
|
||||||
|
|
||||||
|
bool isRelocatableObject() const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Use an alignment of 2 for the typedefs since that is the worst case for
|
// Use an alignment of 2 for the typedefs since that is the worst case for
|
||||||
|
@ -945,6 +947,10 @@ ELFObjectFile<ELFT>::getELFDynamicSymbolIterators() const {
|
||||||
return std::make_pair(dynamic_symbol_begin(), dynamic_symbol_end());
|
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,
|
inline std::error_code getELFRelocationAddend(const RelocationRef R,
|
||||||
int64_t &Addend) {
|
int64_t &Addend) {
|
||||||
const ObjectFile *Obj = R.getObjectFile();
|
const ObjectFile *Obj = R.getObjectFile();
|
||||||
|
|
|
@ -219,6 +219,8 @@ public:
|
||||||
static bool isValidArch(StringRef ArchFlag);
|
static bool isValidArch(StringRef ArchFlag);
|
||||||
static Triple getHostArch();
|
static Triple getHostArch();
|
||||||
|
|
||||||
|
bool isRelocatableObject() const override;
|
||||||
|
|
||||||
static bool classof(const Binary *v) {
|
static bool classof(const Binary *v) {
|
||||||
return v->isMachO();
|
return v->isMachO();
|
||||||
}
|
}
|
||||||
|
|
|
@ -302,6 +302,9 @@ public:
|
||||||
return object_error::invalid_file_type;
|
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.
|
/// @returns Pointer to ObjectFile subclass to handle this type of object.
|
||||||
/// @param ObjectPath The path to the object file. ObjectPath.isObject must
|
/// @param ObjectPath The path to the object file. ObjectPath.isObject must
|
||||||
/// return true.
|
/// return true.
|
||||||
|
|
|
@ -979,6 +979,10 @@ COFFObjectFile::getRelocationValueString(DataRefImpl Rel,
|
||||||
return object_error::success;
|
return object_error::success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool COFFObjectFile::isRelocatableObject() const {
|
||||||
|
return !DataDirectory;
|
||||||
|
}
|
||||||
|
|
||||||
bool ImportDirectoryEntryRef::
|
bool ImportDirectoryEntryRef::
|
||||||
operator==(const ImportDirectoryEntryRef &Other) const {
|
operator==(const ImportDirectoryEntryRef &Other) const {
|
||||||
return ImportTable == Other.ImportTable && Index == Other.Index;
|
return ImportTable == Other.ImportTable && Index == Other.Index;
|
||||||
|
|
|
@ -1688,6 +1688,10 @@ void MachOObjectFile::ReadULEB128s(uint64_t Index,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool MachOObjectFile::isRelocatableObject() const {
|
||||||
|
return getHeader().filetype == MachO::MH_OBJECT;
|
||||||
|
}
|
||||||
|
|
||||||
ErrorOr<std::unique_ptr<MachOObjectFile>>
|
ErrorOr<std::unique_ptr<MachOObjectFile>>
|
||||||
ObjectFile::createMachOObjectFile(std::unique_ptr<MemoryBuffer> &Buffer) {
|
ObjectFile::createMachOObjectFile(std::unique_ptr<MemoryBuffer> &Buffer) {
|
||||||
StringRef Magic = Buffer->getBuffer().slice(0, 4);
|
StringRef Magic = Buffer->getBuffer().slice(0, 4);
|
||||||
|
|
5
test/Object/objdump-reloc-shared.test
Normal file
5
test/Object/objdump-reloc-shared.test
Normal file
|
@ -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: {{.}}
|
|
@ -562,6 +562,11 @@ static void DisassembleObject(const ObjectFile *Obj, bool InlineRelocs) {
|
||||||
static void PrintRelocations(const ObjectFile *Obj) {
|
static void PrintRelocations(const ObjectFile *Obj) {
|
||||||
StringRef Fmt = Obj->getBytesInAddress() > 4 ? "%016" PRIx64 :
|
StringRef Fmt = Obj->getBytesInAddress() > 4 ? "%016" PRIx64 :
|
||||||
"%08" PRIx64;
|
"%08" PRIx64;
|
||||||
|
// Regular objdump doesn't print relocations in non-relocatable object
|
||||||
|
// files.
|
||||||
|
if (!Obj->isRelocatableObject())
|
||||||
|
return;
|
||||||
|
|
||||||
for (const SectionRef &Section : Obj->sections()) {
|
for (const SectionRef &Section : Obj->sections()) {
|
||||||
if (Section.relocation_begin() == Section.relocation_end())
|
if (Section.relocation_begin() == Section.relocation_end())
|
||||||
continue;
|
continue;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user