aboutsummaryrefslogtreecommitdiffstats
path: root/testing/llvm-libunwind
diff options
context:
space:
mode:
authorJakub Jirutka <jakub@jirutka.cz>2017-04-10 00:04:58 +0200
committerJakub Jirutka <jakub@jirutka.cz>2017-04-10 00:05:52 +0200
commitf2db2fc02b687bb96e28a14c0a134a226f527703 (patch)
treeefb086ee18615e447f51531b8293ab9e20faa8ed /testing/llvm-libunwind
parent51e248119621f200d5254562fb4cfa5e33eed846 (diff)
downloadaports-f2db2fc02b687bb96e28a14c0a134a226f527703.tar.bz2
aports-f2db2fc02b687bb96e28a14c0a134a226f527703.tar.xz
testing/lvm-libunwind: really add the patch
Diffstat (limited to 'testing/llvm-libunwind')
-rw-r--r--testing/llvm-libunwind/fix-aarch64.patch51
1 files changed, 51 insertions, 0 deletions
diff --git a/testing/llvm-libunwind/fix-aarch64.patch b/testing/llvm-libunwind/fix-aarch64.patch
new file mode 100644
index 0000000000..e61b350246
--- /dev/null
+++ b/testing/llvm-libunwind/fix-aarch64.patch
@@ -0,0 +1,51 @@
+Use x29 and x30 for fp and lr respectively
+
+This does not change the code generation with integrated asm
+but using x30 and x29 helps compile the code with gnu as. Currently gas
+fails to assemble this code with errors as below
+
+Error: operand X should be an integer register
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+Upstream-Issue: https://reviews.llvm.org/D12777
+
+--- a/src/UnwindRegistersRestore.S
++++ b/src/UnwindRegistersRestore.S
+@@ -282,8 +282,8 @@
+ ldp x22,x23, [x0, #0x0B0]
+ ldp x24,x25, [x0, #0x0C0]
+ ldp x26,x27, [x0, #0x0D0]
+- ldp x28,fp, [x0, #0x0E0]
+- ldr lr, [x0, #0x100] // restore pc into lr
++ ldp x28,x29, [x0, #0x0E0]
++ ldr x30, [x0, #0x100] // restore pc into lr
+ ldr x1, [x0, #0x0F8]
+ mov sp,x1 // restore sp
+
+@@ -306,7 +306,7 @@
+ ldr d31, [x0, #0x208]
+
+ ldp x0, x1, [x0, #0x000] // restore x0,x1
+- ret lr // jump to pc
++ ret x30 // jump to pc
+
+ #elif defined(__arm__) && !defined(__APPLE__)
+
+--- a/src/UnwindRegistersSave.S
++++ b/src/UnwindRegistersSave.S
+@@ -254,11 +254,11 @@
+ stp x22,x23, [x0, #0x0B0]
+ stp x24,x25, [x0, #0x0C0]
+ stp x26,x27, [x0, #0x0D0]
+- stp x28,fp, [x0, #0x0E0]
+- str lr, [x0, #0x0F0]
++ stp x28,x29, [x0, #0x0E0]
++ str x30, [x0, #0x0F0]
+ mov x1,sp
+ str x1, [x0, #0x0F8]
+- str lr, [x0, #0x100] // store return address as pc
++ str x30, [x0, #0x100] // store return address as pc
+ // skip cpsr
+ stp d0, d1, [x0, #0x110]
+ stp d2, d3, [x0, #0x120]