Skip to content

Commit

Permalink
[llvm-readobj] [ARMWinEH] Print set_fp/add_fp differently in epilogues
Browse files Browse the repository at this point in the history
This matches how e.g. stp/ldp and other opcodes are printed differently
for epilogues.

Also add a missing --strict-whitespace in an existing test that
was added explicitly for testing vertical alignment, and change to
using temp files for the generated object files.

Differential Revision: https://reviews.llvm.org/D87363
  • Loading branch information
mstorsjo committed Sep 10, 2020
1 parent 3c42c0d commit 8060283
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 9 deletions.
2 changes: 1 addition & 1 deletion llvm/test/CodeGen/AArch64/wineh6.mir
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
# CHECK-NEXT: StartOffset: 20
# CHECK-NEXT: EpilogueStartIndex: 4
# CHECK-NEXT: Opcodes [
# CHECK-NEXT: 0xe1 ; mov fp, sp
# CHECK-NEXT: 0xe1 ; mov sp, fp
# CHECK-NEXT: 0x81 ; ldp x29, x30, [sp], #16
# CHECK-NEXT: 0xe4 ; end
# CHECK-NEXT: ]
Expand Down
2 changes: 1 addition & 1 deletion llvm/test/CodeGen/AArch64/wineh7.mir
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
# CHECK-NEXT: StartOffset: 13
# CHECK-NEXT: EpilogueStartIndex: 8
# CHECK-NEXT: Opcodes [
# CHECK-NEXT: 0xe204 ; add fp, sp, #32
# CHECK-NEXT: 0xe204 ; sub sp, fp, #32
# CHECK-NEXT: 0x44 ; ldp x29, x30, [sp, #32]
# CHECK-NEXT: 0xc802 ; ldp x19, x20, [sp, #16]
# CHECK-NEXT: 0xcc85 ; ldp x21, x22, [sp], #48
Expand Down
30 changes: 26 additions & 4 deletions llvm/test/tools/llvm-readobj/COFF/arm64-unwind-opcodes.s
Original file line number Diff line number Diff line change
@@ -1,12 +1,25 @@
// REQUIRES: aarch64-registered-target
// RUN: llvm-mc -filetype=obj -triple aarch64-windows %s -o - \
// RUN: | llvm-readobj --unwind - | FileCheck %s
// RUN: llvm-mc -filetype=obj -triple aarch64-windows %s -o %t.o
// RUN: llvm-readobj --unwind %t.o | FileCheck --strict-whitespace %s

// CHECK: Prologue [
// CHECK-NEXT: 0xe202 ; add fp, sp, #16
// CHECK-NEXT: 0xe1 ; mov fp, sp
// CHECK-NEXT: 0xdc01 ; str d8, [sp, #8]
// CHECK-NEXT: 0xd400 ; str x19, [sp, #-8]!
// CHECK-NEXT: 0xe4 ; end
// CHECK-NEXT: ]
// CHECK-NEXT: EpilogueScopes [
// CHECK-NEXT: EpilogueScope {
// CHECK-NEXT: StartOffset:
// CHECK-NEXT: EpilogueStartIndex:
// CHECK-NEXT: Opcodes [
// CHECK-NEXT: 0xe202 ; sub sp, fp, #16
// CHECK-NEXT: 0xe1 ; mov sp, fp
// CHECK-NEXT: 0xe4 ; end
// CHECK-NEXT: ]
// CHECK-NEXT: }
// CHECK-NEXT: ]

.section .pdata,"dr"
.long func@IMGREL
Expand All @@ -16,9 +29,18 @@
.globl func
func:
str x19, [sp, #-8]!
str d8, [sp, #8]
str d8, [sp, #8]
mov x29, sp
add x29, sp, #16
nop
sub sp, x29, #16
mov sp, x29
ret

.section .xdata,"dr"
"$unwind$func":
.long 0x10000002, 0x00d401dc, 0xe3e3e3e4
.byte 0x08, 0x00, 0x40, 0x18
.byte 0x05, 0x00, 0x00, 0x02
.byte 0xe2, 0x02, 0xe1, 0xdc
.byte 0x01, 0xd4, 0x00, 0xe4
.byte 0xe2, 0x02, 0xe1, 0xe4
11 changes: 8 additions & 3 deletions llvm/tools/llvm-readobj/ARMWinEHPrinter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -746,16 +746,21 @@ bool Decoder::opcode_alloc_l(const uint8_t *OC, unsigned &Offset,

bool Decoder::opcode_setfp(const uint8_t *OC, unsigned &Offset, unsigned Length,
bool Prologue) {
SW.startLine() << format("0x%02x ; mov fp, sp\n", OC[Offset]);
SW.startLine() << format("0x%02x ; mov %s, %s\n", OC[Offset],
static_cast<const char *>(Prologue ? "fp" : "sp"),
static_cast<const char *>(Prologue ? "sp" : "fp"));
++Offset;
return false;
}

bool Decoder::opcode_addfp(const uint8_t *OC, unsigned &Offset, unsigned Length,
bool Prologue) {
unsigned NumBytes = OC[Offset + 1] << 3;
SW.startLine() << format("0x%02x%02x ; add fp, sp, #%u\n",
OC[Offset], OC[Offset + 1], NumBytes);
SW.startLine() << format(
"0x%02x%02x ; %s %s, %s, #%u\n", OC[Offset], OC[Offset + 1],
static_cast<const char *>(Prologue ? "add" : "sub"),
static_cast<const char *>(Prologue ? "fp" : "sp"),
static_cast<const char *>(Prologue ? "sp" : "fp"), NumBytes);
Offset += 2;
return false;
}
Expand Down

0 comments on commit 8060283

Please sign in to comment.