[PATCH] D75631: [llvm-objdump] Fix reliability of call target disassembling
James Henderson via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Mar 26 02:07:53 PDT 2020
jhenderson added inline comments.
================
Comment at: lld/test/ELF/pre_init_fini_array.s:140-145
+// DISASM-NEXT: callq {{.*}} <_start+{{.*}}>
+// DISASM-NEXT: callq {{.*}} <_start+{{.*}}>
+// DISASM-NEXT: callq {{.*}} <_start+{{.*}}>
+// DISASM-NEXT: callq {{.*}} <_start+{{.*}}>
+// DISASM-NEXT: callq {{.*}} <_start+{{.*}}>
+// DISASM-NEXT: callq {{.*}} <_start+{{.*}}>
----------------
davidb wrote:
> thopre wrote:
> > Suggestion welcome on how to get better output here. I tried replacing the call by leaq with some .align here and there to avoid overlap of __start and __end symbols but that only works for GNU objdump, llvm-objdump doesn't print the target of lea.
> Should be an lea right? from my host libc. Changing it to lea will make this test unrelated to your fix, as that only does symbol lookups for calls/branches.
>
> ```
> 2: 4c 8d 3d 00 00 00 00 lea 0x0(%rip),%r15 # 9 <__libc_csu_init+0x9>
> 5: R_X86_64_PC32 __preinit_array_start-0x4
> 9: 41 56 push %r14
> b: 4c 8d 35 00 00 00 00 lea 0x0(%rip),%r14 # 12 <__libc_csu_init+0x12>
> e: R_X86_64_PC32 __preinit_array_end-0x4
> ```
I think here the instruction chosen isn't important to the test. What is important is to show that the references to the start/end symbols have been patched up correctly, which can be done by using the disassembly as it used to. In your latest version, this isn't the case any more. Using another instruction would be the way to fix it, assuming that there's another instruction where the disassembler does look ups of symbols.
> llvm-objdump doesn't print the target of lea.
This sounds like something that should be fixed in llvm-objdump to me.
================
Comment at: llvm/tools/llvm-objdump/llvm-objdump.cpp:1500
+ if (It != CodeSectionAddresses.begin()) {
+ uint64_t SelectedSectionAddr = It->first;
+ --It;
----------------
davidb wrote:
> This will cause an unused variable warning in release? (it is only used in assert).
>
> I'm not sure this assert is really valuable. In. fact, this might trigger for binaries linked with OVERLAY segments (See D44780).
FWIW, @MaskRay was saying in another review that llvm builds with the unused variable warning off.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D75631/new/
https://reviews.llvm.org/D75631
More information about the llvm-commits
mailing list