Hi kledzik, rengolin,
unw_getcontext() should return UNW_ESUCCESS on success. However, the assembly
for AArch64 is incorrect since "ldr x0, #0" is a PC-relative load instead of an
immediate value load.
This patch should fix the problem by changing ldr to mov.
http://reviews.llvm.org/D10720
Files:
src/UnwindRegistersSave.S
test/unw_getcontext.pass.cpp
Index: src/UnwindRegistersSave.S
===================================================================
--- src/UnwindRegistersSave.S
+++ src/UnwindRegistersSave.S
@@ -277,7 +277,7 @@
stp d28,d29, [x0, #0x1F0]
str d30, [x0, #0x200]
str d31, [x0, #0x208]
- ldr x0, #0 // return UNW_ESUCCESS
+ mov x0, #0 // return UNW_ESUCCESS
ret
#elif defined(__arm__) && !defined(__APPLE__)
Index: test/unw_getcontext.pass.cpp
===================================================================
--- /dev/null
+++ test/unw_getcontext.pass.cpp
@@ -0,0 +1,8 @@
+#include <assert.h>
+#include <libunwind.h>
+
+int main() {
+ unw_context_t context;
+ int ret = unw_getcontext(&context);
+ assert(ret == UNW_ESUCCESS);
+}
EMAIL PREFERENCES
http://reviews.llvm.org/settings/panel/emailpreferences/
Index: src/UnwindRegistersSave.S
===================================================================
--- src/UnwindRegistersSave.S
+++ src/UnwindRegistersSave.S
@@ -277,7 +277,7 @@
stp d28,d29, [x0, #0x1F0]
str d30, [x0, #0x200]
str d31, [x0, #0x208]
- ldr x0, #0 // return UNW_ESUCCESS
+ mov x0, #0 // return UNW_ESUCCESS
ret
#elif defined(__arm__) && !defined(__APPLE__)
Index: test/unw_getcontext.pass.cpp
===================================================================
--- /dev/null
+++ test/unw_getcontext.pass.cpp
@@ -0,0 +1,8 @@
+#include <assert.h>
+#include <libunwind.h>
+
+int main() {
+ unw_context_t context;
+ int ret = unw_getcontext(&context);
+ assert(ret == UNW_ESUCCESS);
+}
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits