[Mips] Support DT_MIPS_RLD_MAP_REL dynamic section tag in the llvm-readobj
authorSimon Atanasyan <simon@atanasyan.com>
Sat, 1 Aug 2015 12:02:02 +0000 (12:02 +0000)
committerSimon Atanasyan <simon@atanasyan.com>
Sat, 1 Aug 2015 12:02:02 +0000 (12:02 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243833 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Support/ELF.h
test/tools/llvm-readobj/Inputs/mips-rld-map-rel.elf-mipsel [new file with mode: 0755]
test/tools/llvm-readobj/mips-rld-map-rel.test [new file with mode: 0644]
tools/llvm-readobj/ELFDumper.cpp

index 94a4bfb220259041d7aa9d20cc9c7eacd31c0543..acd041803adeb39a3d8f9756b5b5950a72b1fd7c 100644 (file)
@@ -1139,8 +1139,10 @@ enum {
   DT_MIPS_GP_VALUE          = 0x70000030, // GP value for auxiliary GOTs.
   DT_MIPS_AUX_DYNAMIC       = 0x70000031, // Address of auxiliary .dynamic.
   DT_MIPS_PLTGOT            = 0x70000032, // Address of the base of the PLTGOT.
-  DT_MIPS_RWPLT             = 0x70000034  // Points to the base
+  DT_MIPS_RWPLT             = 0x70000034, // Points to the base
                                           // of a writable PLT.
+  DT_MIPS_RLD_MAP_REL       = 0x70000035  // Relative offset of run time loader
+                                          // map, used for debugging.
 };
 
 // DT_FLAGS values.
diff --git a/test/tools/llvm-readobj/Inputs/mips-rld-map-rel.elf-mipsel b/test/tools/llvm-readobj/Inputs/mips-rld-map-rel.elf-mipsel
new file mode 100755 (executable)
index 0000000..a8e396c
Binary files /dev/null and b/test/tools/llvm-readobj/Inputs/mips-rld-map-rel.elf-mipsel differ
diff --git a/test/tools/llvm-readobj/mips-rld-map-rel.test b/test/tools/llvm-readobj/mips-rld-map-rel.test
new file mode 100644 (file)
index 0000000..adde787
--- /dev/null
@@ -0,0 +1,24 @@
+# Check DT_MIPS_RLD_MAP_REL .dynamic section tag reading
+
+RUN: llvm-readobj -dynamic-table %p/Inputs/mips-rld-map-rel.elf-mipsel | \
+RUN:   FileCheck %s
+
+CHECK:      DynamicSection [ (16 entries)
+CHECK-NEXT:   Tag                Type                 Name/Value
+CHECK-NEXT:   0x00000004 HASH                 0x220
+CHECK-NEXT:   0x00000005 STRTAB               0x2FC
+CHECK-NEXT:   0x00000006 SYMTAB               0x25C
+CHECK-NEXT:   0x0000000A STRSZ                72 (bytes)
+CHECK-NEXT:   0x0000000B SYMENT               16 (bytes)
+CHECK-NEXT:   0x70000035 MIPS_RLD_MAP_REL     0x101E0
+CHECK-NEXT:   0x00000015 DEBUG                0x0
+CHECK-NEXT:   0x00000003 PLTGOT               0x10390
+CHECK-NEXT:   0x70000001 MIPS_RLD_VERSION     1
+CHECK-NEXT:   0x70000005 MIPS_FLAGS           NOTPOT 
+CHECK-NEXT:   0x70000006 MIPS_BASE_ADDRESS    0x0
+CHECK-NEXT:   0x7000000A MIPS_LOCAL_GOTNO     2
+CHECK-NEXT:   0x70000011 MIPS_SYMTABNO        10
+CHECK-NEXT:   0x70000012 MIPS_UNREFEXTNO      15
+CHECK-NEXT:   0x70000013 MIPS_GOTSYM          0xA
+CHECK-NEXT:   0x00000000 NULL                 0x0
+CHECK-NEXT: ]
index b4118f06665837062852f6f52cf4e8c636ac34fe..ddab9fb5b574287c9abf6ffade6084c4eda238fc 100644 (file)
@@ -1005,6 +1005,7 @@ static const char *getTypeString(uint64_t Type) {
   LLVM_READOBJ_TYPE_CASE(RELCOUNT);
   LLVM_READOBJ_TYPE_CASE(GNU_HASH);
   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);
@@ -1139,6 +1140,7 @@ void ELFDumper<ELFT>::printValue(uint64_t Type, uint64_t Value) {
   case DT_MIPS_BASE_ADDRESS:
   case DT_MIPS_GOTSYM:
   case DT_MIPS_RLD_MAP:
+  case DT_MIPS_RLD_MAP_REL:
   case DT_MIPS_PLTGOT:
   case DT_MIPS_OPTIONS:
     OS << format("0x%" PRIX64, Value);