summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Ferris <cferris@google.com>2023-10-09 19:28:49 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2023-10-09 19:28:49 +0000
commit4717923be630696b36d7f6c0915ca1716b35c2c4 (patch)
treee46f5eee592fd14a1fcf5749129760ea1e9a3e14
parent402ef1499991ea48a042685624d46426d07c9209 (diff)
parent6b4c427a1753e2894a3ebf39027ac060e7caa019 (diff)
downloadunwinding-4717923be630696b36d7f6c0915ca1716b35c2c4.tar.gz
Merge "libunwindstack: Fix AsmGetRegs to not assume Thumb state" into main am: c0f5fb7b2f am: f4e406433f am: 6b4c427a17
Original change: https://android-review.googlesource.com/c/platform/system/unwinding/+/2760271 Change-Id: If90855fc8688b8f150bca2deb6f8fc9d590b912e Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--libunwindstack/include/unwindstack/RegsGetLocal.h6
1 files changed, 5 insertions, 1 deletions
diff --git a/libunwindstack/include/unwindstack/RegsGetLocal.h b/libunwindstack/include/unwindstack/RegsGetLocal.h
index 0e1d1af..4cdab9a 100644
--- a/libunwindstack/include/unwindstack/RegsGetLocal.h
+++ b/libunwindstack/include/unwindstack/RegsGetLocal.h
@@ -34,9 +34,11 @@ namespace unwindstack {
inline __attribute__((__always_inline__)) void AsmGetRegs(void* reg_data) {
asm volatile(
+#if defined(__thumb__)
".align 2\n"
"bx pc\n"
"nop\n"
+#endif
".code 32\n"
"stmia %[base], {r0-r12}\n"
"add r2, %[base], #52\n"
@@ -44,9 +46,11 @@ inline __attribute__((__always_inline__)) void AsmGetRegs(void* reg_data) {
"mov r4, r14\n"
"mov r5, r15\n"
"stmia r2, {r3-r5}\n"
+#if defined(__thumb__)
"orr %[base], pc, #1\n"
"bx %[base]\n"
- : [ base ] "+r"(reg_data)
+#endif
+ : [base] "+r"(reg_data)
:
: "r2", "r3", "r4", "r5", "memory");
}