mirror of
https://github.com/RPCS3/llvm.git
synced 2025-02-22 03:31:06 +00:00
[llvm-objdump] Should print unknown d_tag in hex format
Summary: Currently, `llvm-objdump` prints "unknown" instead of d_tag value in hex format. Because getDynamicTagAsString returns "unknown" rather than empty string. Reviewers: grimar, jhenderson Reviewed By: jhenderson Subscribers: rupprecht, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D58763 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@355262 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
341140cf85
commit
badb15e1da
@ -114,8 +114,8 @@ public:
|
||||
SmallVectorImpl<char> &Result) const;
|
||||
uint32_t getRelativeRelocationType() const;
|
||||
|
||||
const char *getDynamicTagAsString(unsigned Arch, uint64_t Type) const;
|
||||
const char *getDynamicTagAsString(uint64_t Type) const;
|
||||
std::string getDynamicTagAsString(unsigned Arch, uint64_t Type) const;
|
||||
std::string getDynamicTagAsString(uint64_t Type) const;
|
||||
|
||||
/// Get the symbol for a given relocation.
|
||||
Expected<const Elf_Sym *> getRelocationSymbol(const Elf_Rel *Rel,
|
||||
|
@ -424,7 +424,7 @@ ELFFile<ELFT>::android_relas(const Elf_Shdr *Sec) const {
|
||||
}
|
||||
|
||||
template <class ELFT>
|
||||
const char *ELFFile<ELFT>::getDynamicTagAsString(unsigned Arch,
|
||||
std::string ELFFile<ELFT>::getDynamicTagAsString(unsigned Arch,
|
||||
uint64_t Type) const {
|
||||
#define DYNAMIC_STRINGIFY_ENUM(tag, value) \
|
||||
case value: \
|
||||
@ -470,12 +470,12 @@ const char *ELFFile<ELFT>::getDynamicTagAsString(unsigned Arch,
|
||||
#undef DYNAMIC_TAG_MARKER
|
||||
#undef DYNAMIC_STRINGIFY_ENUM
|
||||
default:
|
||||
return "unknown";
|
||||
return "<unknown:>0x" + utohexstr(Type, true);
|
||||
}
|
||||
}
|
||||
|
||||
template <class ELFT>
|
||||
const char *ELFFile<ELFT>::getDynamicTagAsString(uint64_t Type) const {
|
||||
std::string ELFFile<ELFT>::getDynamicTagAsString(uint64_t Type) const {
|
||||
return getDynamicTagAsString(getHeader()->e_machine, Type);
|
||||
}
|
||||
|
||||
|
@ -58,6 +58,7 @@
|
||||
# CHECK-NEXT: VERNEEDNUM 0x0000000000000000
|
||||
# CHECK-NEXT: AUXILIARY D
|
||||
# CHECK-NEXT: FILTER U
|
||||
# CHECK-NEXT: <unknown:>0x1234abcd 0x0000000000000001
|
||||
|
||||
--- !ELF
|
||||
FileHeader:
|
||||
@ -188,6 +189,8 @@ Sections:
|
||||
Value: 0x1
|
||||
- Tag: DT_FILTER
|
||||
Value: 0x3
|
||||
- Tag: 0x1234abcd
|
||||
Value: 0x1
|
||||
- Tag: DT_NULL
|
||||
Value: 0x0
|
||||
ProgramHeaders:
|
||||
|
@ -176,15 +176,8 @@ void printDynamicSection(const ELFFile<ELFT> *Elf, StringRef Filename) {
|
||||
if (Dyn.d_tag == ELF::DT_NULL)
|
||||
continue;
|
||||
|
||||
StringRef Str = StringRef(Elf->getDynamicTagAsString(Dyn.d_tag));
|
||||
|
||||
if (Str.empty()) {
|
||||
std::string HexStr = utohexstr(static_cast<uint64_t>(Dyn.d_tag), true);
|
||||
outs() << format(" 0x%-19s", HexStr.c_str());
|
||||
} else {
|
||||
// We use "-21" in order to match GNU objdump's output.
|
||||
outs() << format(" %-21s", Str.data());
|
||||
}
|
||||
std::string Str = Elf->getDynamicTagAsString(Dyn.d_tag);
|
||||
outs() << format(" %-21s", Str.c_str());
|
||||
|
||||
const char *Fmt =
|
||||
ELFT::Is64Bits ? "0x%016" PRIx64 "\n" : "0x%08" PRIx64 "\n";
|
||||
|
Loading…
x
Reference in New Issue
Block a user