Skip to content

Commit

Permalink
[llvm-readobj] Fix arm64 unwind opcode disassembly printing
Browse files Browse the repository at this point in the history
Add a missing minus, fix vertical alignment of instructions for one opcode.

Differential Revision: https://reviews.llvm.org/D86523
  • Loading branch information
mstorsjo committed Aug 26, 2020
1 parent 6a3c69e commit db259fe
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 3 deletions.
2 changes: 1 addition & 1 deletion llvm/test/CodeGen/AArch64/wineh5.mir
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
# CHECK-NEXT: 0xe3 ; nop
# CHECK-NEXT: 0xe3 ; nop
# CHECK-NEXT: 0x42 ; stp x29, x30, [sp, #16]
# CHECK-NEXT: 0xd53f ; str x28, [sp, #256]!
# CHECK-NEXT: 0xd53f ; str x28, [sp, #-256]!
# CHECK-NEXT: 0xe4 ; end
# CHECK-NEXT: ]
# CHECK-NEXT: EpilogueScopes [
Expand Down
24 changes: 24 additions & 0 deletions llvm/test/tools/llvm-readobj/COFF/arm64-unwind-opcodes.s
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// REQUIRES: aarch64-registered-target
// RUN: llvm-mc -filetype=obj -triple aarch64-windows %s -o - \
// RUN: | llvm-readobj --unwind - | FileCheck %s

// CHECK: Prologue [
// CHECK-NEXT: 0xdc01 ; str d8, [sp, #8]
// CHECK-NEXT: 0xd400 ; str x19, [sp, #-8]!
// CHECK-NEXT: 0xe4 ; end
// CHECK-NEXT: ]

.section .pdata,"dr"
.long func@IMGREL
.long "$unwind$func"@IMGREL

.text
.globl func
func:
str x19, [sp, #-8]!
str d8, [sp, #8]
ret

.section .xdata,"dr"
"$unwind$func":
.long 0x10000002, 0x00d401dc, 0xe3e3e3e4
4 changes: 2 additions & 2 deletions llvm/tools/llvm-readobj/ARMWinEHPrinter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -637,7 +637,7 @@ bool Decoder::opcode_save_reg_x(const uint8_t *OC, unsigned &Offset,
Reg += 19;
uint32_t Off = ((OC[Offset + 1] & 0x1F) + 1) << 3;
if (Prologue)
SW.startLine() << format("0x%02x%02x ; str x%u, [sp, #%u]!\n",
SW.startLine() << format("0x%02x%02x ; str x%u, [sp, #-%u]!\n",
OC[Offset], OC[Offset + 1], Reg, Off);
else
SW.startLine() << format("0x%02x%02x ; ldr x%u, [sp], #%u\n",
Expand Down Expand Up @@ -703,7 +703,7 @@ bool Decoder::opcode_save_freg(const uint8_t *OC, unsigned &Offset,
Reg >>= 6;
Reg += 8;
uint32_t Off = (OC[Offset + 1] & 0x3F) << 3;
SW.startLine() << format("0x%02x%02x ; %s d%u, [sp, #%u]\n",
SW.startLine() << format("0x%02x%02x ; %s d%u, [sp, #%u]\n",
OC[Offset], OC[Offset + 1],
static_cast<const char *>(Prologue ? "str" : "ldr"),
Reg, Off);
Expand Down

0 comments on commit db259fe

Please sign in to comment.