``` // llvm-objdump -d output (before) 400000: e8 0b 00 00 00 callq 11 400005: e8 0b 00 00 00 callq 11 // llvm-objdump -d output (after) 400000: e8 0b 00 00 00 callq 0x400010 400005: e8 0b 00 00 00 callq 0x400015 // GNU objdump -d. The lack of 0x is not ideal because the result cannot be re-assembled 400000: e8 0b 00 00 00 callq 400010 400005: e8 0b 00 00 00 callq 400015 ``` In llvm-objdump, we pass the address of the next MCInst. Ideally we should just thread the address of the current address, unfortunately we cannot call X86MCCodeEmitter::encodeInstruction (X86MCCodeEmitter requires MCInstrInfo and MCContext) to get the length of the MCInst. MCInstPrinter::printInst has other callers (e.g llvm-mc -filetype=asm, llvm-mca) which set Address to 0. They leave MCInstPrinter::PrintBranchImmAsAddress as false and this change is a no-op for them. Reviewed By: jhenderson Differential Revision: https://reviews.llvm.org/D76580
21 lines
547 B
ArmAsm
21 lines
547 B
ArmAsm
# REQUIRES: x86
|
|
# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
|
|
# RUN: not ld.lld %t -o /dev/null
|
|
# RUN: ld.lld %t --noinhibit-exec -o %t2
|
|
# RUN: llvm-objdump -d %t2 | FileCheck %s
|
|
# RUN: llvm-readobj -r %t2 | FileCheck %s --check-prefix=RELOC
|
|
|
|
# CHECK: Disassembly of section .text:
|
|
# CHECK-EMPTY:
|
|
# CHECK-NEXT: _start
|
|
# CHECK-NEXT: 201120: {{.*}} callq 0x0
|
|
|
|
# RELOC: Relocations [
|
|
# RELOC-NEXT: ]
|
|
|
|
# next code will not link without noinhibit-exec flag
|
|
# because of undefined symbol _bar
|
|
.globl _start
|
|
_start:
|
|
call _bar
|