[PATCH] D62253: [llvm-objdump] Dump inline relocations if the relocated section is specified with --section
Fangrui Song via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed May 22 07:58:20 PDT 2019
MaskRay updated this revision to Diff 200744.
MaskRay retitled this revision from "[objdump] Dump inline relocations if the relocated section is specified with --section" to "[llvm-objdump] Dump inline relocations if the relocated section is specified with --section".
MaskRay added a comment.
Address review comments
Repository:
rL LLVM
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D62253/new/
https://reviews.llvm.org/D62253
Files:
test/tools/llvm-objdump/X86/section-filter-relocs.test
tools/llvm-objdump/llvm-objdump.cpp
Index: tools/llvm-objdump/llvm-objdump.cpp
===================================================================
--- tools/llvm-objdump/llvm-objdump.cpp
+++ tools/llvm-objdump/llvm-objdump.cpp
@@ -334,18 +334,18 @@
typedef std::vector<std::tuple<uint64_t, StringRef, uint8_t>> SectionSymbolsTy;
+static bool shouldKeep(object::SectionRef S) {
+ if (FilterSections.empty())
+ return true;
+ StringRef String;
+ std::error_code error = S.getName(String);
+ if (error)
+ return false;
+ return is_contained(FilterSections, String);
+}
+
SectionFilter ToolSectionFilter(object::ObjectFile const &O) {
- return SectionFilter(
- [](object::SectionRef const &S) {
- if (FilterSections.empty())
- return true;
- StringRef String;
- std::error_code error = S.getName(String);
- if (error)
- return false;
- return is_contained(FilterSections, String);
- },
- O);
+ return SectionFilter([](object::SectionRef S) { return shouldKeep(S); }, O);
}
void error(std::error_code EC) {
@@ -922,14 +922,13 @@
static std::map<SectionRef, std::vector<RelocationRef>>
getRelocsMap(object::ObjectFile const &Obj) {
std::map<SectionRef, std::vector<RelocationRef>> Ret;
- for (const SectionRef &Section : ToolSectionFilter(Obj)) {
- section_iterator RelSec = Section.getRelocatedSection();
- if (RelSec == Obj.section_end())
+ for (SectionRef Sec : Obj.sections()) {
+ section_iterator Relocated = Sec.getRelocatedSection();
+ if (Relocated == Obj.section_end() || !shouldKeep(*Relocated))
continue;
- std::vector<RelocationRef> &V = Ret[*RelSec];
- for (const RelocationRef &R : Section.relocations())
+ std::vector<RelocationRef> &V = Ret[*Relocated];
+ for (const RelocationRef &R : Sec.relocations())
V.push_back(R);
- // Sort relocations by address.
llvm::sort(V, isRelocAddressLess);
}
return Ret;
Index: test/tools/llvm-objdump/X86/section-filter-relocs.test
===================================================================
--- test/tools/llvm-objdump/X86/section-filter-relocs.test
+++ test/tools/llvm-objdump/X86/section-filter-relocs.test
@@ -1,7 +1,4 @@
## Test that --section works correctly for -d with -r.
-## FIXME: Inline relocations are only printed if the relocation section itself is
-## specified with --section. This test just characterizes the existing behavior.
-## See https://bugs.llvm.org/show_bug.cgi?id=41886
# RUN: yaml2obj %s -o %t.o
## Show non-executable sections are not disassembled even if specified,
@@ -12,21 +9,15 @@
## executable sections if requested explicitly.
## See https://bugs.llvm.org/show_bug.cgi?id=41897.
# RUN: llvm-objdump -d -r %t.o --section=.text --section=.rodata \
-# RUN: | FileCheck %s --check-prefix=DISASM --implicit-check-not=.text2 \
-# RUN: --implicit-check-not=.rodata --implicit-check-not=R_X86_64
-
-## Show that only the specified relocation sections that patch the
-## disassembled sections are dumped.
-# RUN: llvm-objdump -d -r %t.o --section=.text \
-# RUN: --section=.rela.text --section=.rela.text2 \
# RUN: | FileCheck %s --check-prefixes=DISASM,RELOC --implicit-check-not=.text2 \
-# RUN: --implicit-check-not=R_X86_64
+# RUN: --implicit-check-not=.rodata
# DISASM: Disassembly of section .text:
# DISASM-EMPTY:
# DISASM-NEXT: 0000000000000400 .text:
# DISASM-NEXT: 400: e8 00 00 00 00 callq 0 <.text+0x5>
# RELOC-NEXT: 00000401: R_X86_64_PC32 foo+1
+# RELOC-NEXT: 00000401: R_X86_64_GOT32 foo
--- !ELF
FileHeader:
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D62253.200744.patch
Type: text/x-patch
Size: 3706 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190522/05b922c9/attachment-0001.bin>
More information about the llvm-commits
mailing list