[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