summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHemant Kulkarni <khemant@codeaurora.org>2016-12-27 19:59:29 +0000
committerHemant Kulkarni <khemant@codeaurora.org>2016-12-27 19:59:29 +0000
commite60b294be89f193d008d6c772f13809e8aa0c518 (patch)
tree231b2dfc15ce48851767947a1121201820222903
parent823c18147d3fd1aea12e130d0ca688d21e0b2cee (diff)
downloadbcm5719-llvm-e60b294be89f193d008d6c772f13809e8aa0c518.tar.gz
bcm5719-llvm-e60b294be89f193d008d6c772f13809e8aa0c518.zip
llvm-readobj: ELF: Make DT tags machine aware
llvm-svn: 290623
-rw-r--r--llvm/include/llvm/Support/ELF.h5
-rw-r--r--llvm/tools/llvm-readobj/ELFDumper.cpp37
2 files changed, 29 insertions, 13 deletions
diff --git a/llvm/include/llvm/Support/ELF.h b/llvm/include/llvm/Support/ELF.h
index d951e552f7d..3ea4da81ad9 100644
--- a/llvm/include/llvm/Support/ELF.h
+++ b/llvm/include/llvm/Support/ELF.h
@@ -1143,6 +1143,11 @@ enum {
DT_VERNEED = 0X6FFFFFFE, // The address of the version Dependency table.
DT_VERNEEDNUM = 0X6FFFFFFF, // The number of entries in DT_VERNEED.
+ // Hexagon specific dynamic table entries
+ DT_HEXAGON_SYMSZ = 0x70000000,
+ DT_HEXAGON_VER = 0x70000001,
+ DT_HEXAGON_PLT = 0x70000002,
+
// Mips specific dynamic table entry tags.
DT_MIPS_RLD_VERSION = 0x70000001, // 32 bit version number for runtime
// linker interface.
diff --git a/llvm/tools/llvm-readobj/ELFDumper.cpp b/llvm/tools/llvm-readobj/ELFDumper.cpp
index e939135b612..997af568d39 100644
--- a/llvm/tools/llvm-readobj/ELFDumper.cpp
+++ b/llvm/tools/llvm-readobj/ELFDumper.cpp
@@ -1504,7 +1504,29 @@ template <class ELFT> void ELFDumper<ELFT>::printNotes() {
#define LLVM_READOBJ_TYPE_CASE(name) \
case DT_##name: return #name
-static const char *getTypeString(uint64_t Type) {
+static const char *getTypeString(unsigned Arch, uint64_t Type) {
+ switch (Arch) {
+ case EM_HEXAGON:
+ switch (Type) {
+ LLVM_READOBJ_TYPE_CASE(HEXAGON_SYMSZ);
+ LLVM_READOBJ_TYPE_CASE(HEXAGON_VER);
+ LLVM_READOBJ_TYPE_CASE(HEXAGON_PLT);
+ }
+ case EM_MIPS:
+ switch (Type) {
+ LLVM_READOBJ_TYPE_CASE(MIPS_RLD_MAP_REL);
+ LLVM_READOBJ_TYPE_CASE(MIPS_RLD_VERSION);
+ LLVM_READOBJ_TYPE_CASE(MIPS_FLAGS);
+ LLVM_READOBJ_TYPE_CASE(MIPS_BASE_ADDRESS);
+ LLVM_READOBJ_TYPE_CASE(MIPS_LOCAL_GOTNO);
+ LLVM_READOBJ_TYPE_CASE(MIPS_SYMTABNO);
+ LLVM_READOBJ_TYPE_CASE(MIPS_UNREFEXTNO);
+ LLVM_READOBJ_TYPE_CASE(MIPS_GOTSYM);
+ LLVM_READOBJ_TYPE_CASE(MIPS_RLD_MAP);
+ LLVM_READOBJ_TYPE_CASE(MIPS_PLTGOT);
+ LLVM_READOBJ_TYPE_CASE(MIPS_OPTIONS);
+ }
+ }
switch (Type) {
LLVM_READOBJ_TYPE_CASE(BIND_NOW);
LLVM_READOBJ_TYPE_CASE(DEBUG);
@@ -1550,17 +1572,6 @@ static const char *getTypeString(uint64_t Type) {
LLVM_READOBJ_TYPE_CASE(GNU_HASH);
LLVM_READOBJ_TYPE_CASE(TLSDESC_PLT);
LLVM_READOBJ_TYPE_CASE(TLSDESC_GOT);
- LLVM_READOBJ_TYPE_CASE(MIPS_RLD_VERSION);
- LLVM_READOBJ_TYPE_CASE(MIPS_RLD_MAP_REL);
- LLVM_READOBJ_TYPE_CASE(MIPS_FLAGS);
- LLVM_READOBJ_TYPE_CASE(MIPS_BASE_ADDRESS);
- LLVM_READOBJ_TYPE_CASE(MIPS_LOCAL_GOTNO);
- LLVM_READOBJ_TYPE_CASE(MIPS_SYMTABNO);
- LLVM_READOBJ_TYPE_CASE(MIPS_UNREFEXTNO);
- LLVM_READOBJ_TYPE_CASE(MIPS_GOTSYM);
- LLVM_READOBJ_TYPE_CASE(MIPS_RLD_MAP);
- LLVM_READOBJ_TYPE_CASE(MIPS_PLTGOT);
- LLVM_READOBJ_TYPE_CASE(MIPS_OPTIONS);
LLVM_READOBJ_TYPE_CASE(AUXILIARY);
default: return "unknown";
}
@@ -1793,7 +1804,7 @@ void ELFDumper<ELFT>::printDynamicTable() {
uintX_t Tag = Entry.getTag();
++I;
W.startLine() << " " << format_hex(Tag, Is64 ? 18 : 10, opts::Output != opts::GNU) << " "
- << format("%-21s", getTypeString(Tag));
+ << format("%-21s", getTypeString(Obj->getHeader()->e_machine, Tag));
printValue(Tag, Entry.getVal());
OS << "\n";
}
OpenPOWER on IntegriCloud