[PATCH] D87365: [llvm-readobj] [ARMWinEH] Fix printing of exception handlers with packed epiloguus
Martin Storsjö via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 9 04:39:38 PDT 2020
mstorsjo created this revision.
mstorsjo added reviewers: efriedma, ssijaric, TomTan, rnk.
Herald added subscribers: danielkiss, rupprecht, kristof.beyls.
Herald added a reviewer: jhenderson.
Herald added a project: LLVM.
mstorsjo requested review of this revision.
Herald added a subscriber: MaskRay.
If there's a packed epilogue (indicated by the flag E), the EpilogueCount() field actually should be interpreted as EpilogueOffset.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D87365
Files:
llvm/include/llvm/Support/ARMWinEH.h
llvm/test/tools/llvm-readobj/COFF/arm64-packed-epilog.s
Index: llvm/test/tools/llvm-readobj/COFF/arm64-packed-epilog.s
===================================================================
--- /dev/null
+++ llvm/test/tools/llvm-readobj/COFF/arm64-packed-epilog.s
@@ -0,0 +1,34 @@
+// REQUIRES: aarch64-registered-target
+// RUN: llvm-mc -filetype=obj -triple aarch64-windows %s -o - \
+// RUN: | llvm-readobj --unwind - | FileCheck %s
+
+// CHECK: ExceptionData {
+// CHECK-NEXT: FunctionLength: 4
+// CHECK-NEXT: Version: 0
+// CHECK-NEXT: ExceptionData: Yes
+// CHECK-NEXT: EpiloguePacked: Yes
+// CHECK-NEXT: EpilogueOffset: 0
+// CHECK-NEXT: ByteCodeLength: 4
+// CHECK-NEXT: Prologue [
+// CHECK-NEXT: 0xe4 ; end
+// CHECK-NEXT: ]
+// CHECK-NEXT: ExceptionHandler [
+// CHECK-NEXT: Routine: 0x11223344
+// CHECK-NEXT: Parameter: 0x55667788
+// CHECK-NEXT: ]
+
+.section .pdata,"dr"
+ .long func at IMGREL
+ .long "$unwind$func"@IMGREL
+
+ .text
+ .globl func
+func:
+ ret
+
+.section .xdata,"dr"
+"$unwind$func":
+.byte 0x01, 0x00, 0x30, 0x08
+.byte 0xe4, 0xe3, 0xe3, 0xe3
+.byte 0x44, 0x33, 0x22, 0x11
+.byte 0x88, 0x77, 0x66, 0x55
Index: llvm/include/llvm/Support/ARMWinEH.h
===================================================================
--- llvm/include/llvm/Support/ARMWinEH.h
+++ llvm/include/llvm/Support/ARMWinEH.h
@@ -416,12 +416,13 @@
uint32_t ExceptionHandlerRVA() const {
assert(X() && "Exception Handler RVA is only valid if the X bit is set");
- return Data[HeaderWords(*this) + EpilogueCount() + CodeWords()];
+ return Data[HeaderWords(*this) + (E() ? 0 : EpilogueCount()) + CodeWords()];
}
uint32_t ExceptionHandlerParameter() const {
assert(X() && "Exception Handler RVA is only valid if the X bit is set");
- return Data[HeaderWords(*this) + EpilogueCount() + CodeWords() + 1];
+ return Data[HeaderWords(*this) + (E() ? 0 : EpilogueCount()) + CodeWords() +
+ 1];
}
};
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D87365.290703.patch
Type: text/x-patch
Size: 2036 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200909/99544b6e/attachment.bin>
More information about the llvm-commits
mailing list