diff options
author | Jakub Jirutka <jakub@jirutka.cz> | 2017-04-10 00:04:58 +0200 |
---|---|---|
committer | Jakub Jirutka <jakub@jirutka.cz> | 2017-04-10 00:05:52 +0200 |
commit | f2db2fc02b687bb96e28a14c0a134a226f527703 (patch) | |
tree | efb086ee18615e447f51531b8293ab9e20faa8ed /testing/llvm-libunwind | |
parent | 51e248119621f200d5254562fb4cfa5e33eed846 (diff) | |
download | aports-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.patch | 51 |
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] |