llvm-project/llvm/test/MC/X86/x86-branch-relaxation.s
Fangrui Song 87de9a0786 [X86InstPrinter] Change printPCRelImm to print the target address in hexadecimal form
```
// 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
2020-03-26 08:28:59 -07:00

32 lines
683 B
ArmAsm

# RUN: llvm-mc -filetype=obj -triple=i386-unknown-unknown %s -o %t
# RUN: llvm-objdump -r -D --section .text.bar --triple=i386-unknown-unknown-code16 %t | FileCheck --check-prefix=CHECK16 %s
# RUN: llvm-objdump -r -D --section .text.baz --triple=i386-unknown-unknown %t | FileCheck --check-prefix=CHECK32 %s
.text
.section .text.foo,"",@progbits
.code16
.globl foo
foo:
nop
.section .text.bar,"",@progbits
.globl bar16
bar16:
jmp foo
.section .text.baz,"",@progbits
.code32
.globl baz32
baz32:
jmp foo
// CHECK16-LABEL: bar16
// CHECK16-NEXT: e9 fe ff jmp 0x1 <bar16+0x1>
// CHECK32-LABEL: baz32
// CHECK32-NEXT: e9 fc ff ff ff jmp 0x1 <baz32+0x1>