[PATCH] D47800: llvm-readobj: fix printing number of relocations in Android packed format.

Rahul Chaudhry via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 5 14:45:38 PDT 2018


rahulchaudhry updated this revision to Diff 150047.
rahulchaudhry added a comment.

Renamed android_relas -> AndroidRelas


Repository:
  rL LLVM

https://reviews.llvm.org/D47800

Files:
  test/tools/llvm-readobj/elf-packed-relocs.test
  tools/llvm-readobj/ELFDumper.cpp


Index: tools/llvm-readobj/ELFDumper.cpp
===================================================================
--- tools/llvm-readobj/ELFDumper.cpp
+++ tools/llvm-readobj/ELFDumper.cpp
@@ -2641,6 +2641,14 @@
     HasRelocSections = true;
     StringRef Name = unwrapOrError(Obj->getSectionName(&Sec));
     unsigned Entries = Sec.getEntityCount();
+    std::vector<Elf_Rela> AndroidRelas;
+    if (Sec.sh_type == ELF::SHT_ANDROID_REL ||
+        Sec.sh_type == ELF::SHT_ANDROID_RELA) {
+      // Android's packed relocation section needs to be unpacked first
+      // to get the actual number of entries.
+      AndroidRelas = unwrapOrError(Obj->android_relas(&Sec));
+      Entries = AndroidRelas.size();
+    }
     uintX_t Offset = Sec.sh_offset;
     OS << "\nRelocation section '" << Name << "' at offset 0x"
        << to_hexString(Offset, false) << " contains " << Entries
@@ -2665,7 +2673,7 @@
       break;
     case ELF::SHT_ANDROID_REL:
     case ELF::SHT_ANDROID_RELA:
-      for (const auto &R : unwrapOrError(Obj->android_relas(&Sec)))
+      for (const auto &R : AndroidRelas)
         printRelocation(Obj, SymTab, R, Sec.sh_type == ELF::SHT_ANDROID_RELA);
       break;
     }
Index: test/tools/llvm-readobj/elf-packed-relocs.test
===================================================================
--- test/tools/llvm-readobj/elf-packed-relocs.test
+++ test/tools/llvm-readobj/elf-packed-relocs.test
@@ -14,6 +14,7 @@
 # LLVM1-NEXT: }
 
 # RUN: yaml2obj -docnum 1 %s | llvm-readobj -elf-output-style=GNU -relocations - | FileCheck --check-prefix=GNU1 %s
+# GNU1:      Relocation section '.rela.dyn' at offset 0x180 contains 8 entries:
 # GNU1:      0000000000001100  0000000000000008 R_X86_64_RELATIVE                 0
 # GNU1-NEXT: 0000000000001180  0000000000000008 R_X86_64_RELATIVE                 0
 # GNU1-NEXT: 0000000000001188  0000000100000001 R_X86_64_64            0000000000000000 sym1 + 0
@@ -60,6 +61,7 @@
 # LLVM2-NEXT: }
 
 # RUN: yaml2obj -docnum 2 %s | llvm-readobj -elf-output-style=GNU -relocations - | FileCheck --check-prefix=GNU2 %s
+# GNU2:      Relocation section '.rel.dyn' at offset 0xfc contains 10 entries:
 # GNU2:      00001008  00000101 R_386_32               00000000   sym1
 # GNU2-NEXT: 00001010  00000203 R_386_GOT32            00000000   sym2
 # GNU2-NEXT: 0000100c  00000008 R_386_RELATIVE


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D47800.150047.patch
Type: text/x-patch
Size: 2344 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180605/15ef9147/attachment-0001.bin>


More information about the llvm-commits mailing list