[libunwind] [Unwind][AArch64] Match sigreturn instructions in big endian (PR #167139)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Nov 10 07:44:35 PST 2025
https://github.com/hstk30 updated https://github.com/llvm/llvm-project/pull/167139
>From e139054b741d2b6b2e46fe33a9351a971707fe05 Mon Sep 17 00:00:00 2001
From: hstk30 <hanwei62 at huawei.com>
Date: Sat, 8 Nov 2025 21:21:09 +0800
Subject: [PATCH 1/2] [Unwind][AArch64] Match sigreturn instructions in big
endian
---
libunwind/src/UnwindCursor.hpp | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/libunwind/src/UnwindCursor.hpp b/libunwind/src/UnwindCursor.hpp
index 7ec5f9e91578a..9414fd8a81525 100644
--- a/libunwind/src/UnwindCursor.hpp
+++ b/libunwind/src/UnwindCursor.hpp
@@ -58,6 +58,14 @@
#include "RWMutex.hpp"
#include "Unwind-EHABI.h"
+#if defined(__AARCH64EB__)
+#define MOVZ_X8_8B 0x681180d2
+#define SVC_0 0x010000d4
+#else
+#define MOVZ_X8_8B 0xd2801168
+#define SVC_0 0xd4000001
+#endif
+
#if defined(_LIBUNWIND_SUPPORT_SEH_UNWIND)
// Provide a definition for the DISPATCHER_CONTEXT struct for old (Win7 and
// earlier) SDKs.
@@ -2827,7 +2835,7 @@ bool UnwindCursor<A, R>::setInfoForSigReturn(Registers_arm64 &) {
return false;
auto *instructions = reinterpret_cast<const uint32_t *>(pc);
// Look for instructions: mov x8, #0x8b; svc #0x0
- if (instructions[0] != 0xd2801168 || instructions[1] != 0xd4000001)
+ if (instructions[0] != MOVZ_X8_8B || instructions[1] != SVC_0)
return false;
_info = {};
>From 3768e4338f958b5fd6d221261f546c47ad361ab3 Mon Sep 17 00:00:00 2001
From: hstk30 <hanwei62 at huawei.com>
Date: Mon, 10 Nov 2025 23:43:40 +0800
Subject: [PATCH 2/2] Add comment about instruction sequence
---
libunwind/src/UnwindCursor.hpp | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/libunwind/src/UnwindCursor.hpp b/libunwind/src/UnwindCursor.hpp
index 9414fd8a81525..ff4d3a17bb16a 100644
--- a/libunwind/src/UnwindCursor.hpp
+++ b/libunwind/src/UnwindCursor.hpp
@@ -58,6 +58,13 @@
#include "RWMutex.hpp"
#include "Unwind-EHABI.h"
+
+/*
+ * The linux sigreturn restorer stub will always have the form:
+ *
+ * d2801168 movz x8, #0x8b
+ * d4000001 svc #0x0
+ */
#if defined(__AARCH64EB__)
#define MOVZ_X8_8B 0x681180d2
#define SVC_0 0x010000d4
More information about the cfe-commits
mailing list