[PATCH] D58763: [llvm-objdump] Should print unknown d_tag in hex format
Xing via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Mar 1 20:18:05 PST 2019
Higuoxing updated this revision to Diff 189027.
Higuoxing added a comment.
Addressed @jhenderson 's comment
- Change `auto` to `std::string`
- Update test case to make sure that hex values are printed in lower case. (Match `GNU objdump`'s output)
Repository:
rL LLVM
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D58763/new/
https://reviews.llvm.org/D58763
Files:
include/llvm/Object/ELF.h
lib/Object/ELF.cpp
test/tools/llvm-objdump/elf-dynamic-section.test
tools/llvm-objdump/ELFDump.cpp
Index: tools/llvm-objdump/ELFDump.cpp
===================================================================
--- tools/llvm-objdump/ELFDump.cpp
+++ tools/llvm-objdump/ELFDump.cpp
@@ -176,15 +176,8 @@
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";
Index: test/tools/llvm-objdump/elf-dynamic-section.test
===================================================================
--- test/tools/llvm-objdump/elf-dynamic-section.test
+++ test/tools/llvm-objdump/elf-dynamic-section.test
@@ -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 @@
Value: 0x1
- Tag: DT_FILTER
Value: 0x3
+ - Tag: 0x1234abcd
+ Value: 0x1
- Tag: DT_NULL
Value: 0x0
ProgramHeaders:
Index: lib/Object/ELF.cpp
===================================================================
--- lib/Object/ELF.cpp
+++ lib/Object/ELF.cpp
@@ -424,7 +424,7 @@
}
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 @@
#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);
}
Index: include/llvm/Object/ELF.h
===================================================================
--- include/llvm/Object/ELF.h
+++ include/llvm/Object/ELF.h
@@ -114,8 +114,8 @@
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,
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D58763.189027.patch
Type: text/x-patch
Size: 3122 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190302/9bf80fd0/attachment.bin>
More information about the llvm-commits
mailing list