You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
35 lines
1.4 KiB
35 lines
1.4 KiB
commit 5daf13b1e637eec0f7a2de05b177cb0d76479aa2 |
|
Author: Matheus Castanho <msc@linux.ibm.com> |
|
Date: Wed Dec 1 11:14:40 2021 -0300 |
|
|
|
powerpc64[le]: Allocate extra stack frame on syscall.S |
|
|
|
The syscall function does not allocate the extra stack frame for scv like other |
|
assembly syscalls using DO_CALL_SCV. So after commit d120fb9941 changed the |
|
offset that is used to save LR, syscall ended up using an invalid offset, |
|
causing regressions on powerpc64. So make sure the extra stack frame is |
|
allocated in syscall.S as well to make it consistent with other uses of |
|
DO_CALL_SCV and avoid similar issues in the future. |
|
|
|
Tested on powerpc, powerpc64, and powerpc64le (with and without scv) |
|
|
|
Reviewed-by: Raphael M Zinsly <rzinsly@linux.ibm.com> |
|
|
|
(cherry picked from commit ae91d3df24a4a1b1f264d101a71a298bff310d14) |
|
|
|
diff --git a/sysdeps/unix/sysv/linux/powerpc/syscall.S b/sysdeps/unix/sysv/linux/powerpc/syscall.S |
|
index a29652feaf6764cf..a5497c8370982fe3 100644 |
|
--- a/sysdeps/unix/sysv/linux/powerpc/syscall.S |
|
+++ b/sysdeps/unix/sysv/linux/powerpc/syscall.S |
|
@@ -27,7 +27,11 @@ ENTRY (syscall) |
|
mr r8,r9 |
|
#if defined(USE_PPC_SCV) && !IS_IN(rtld) && (defined(__PPC64__) || defined(__powerpc64__)) |
|
CHECK_SCV_SUPPORT r9 0f |
|
+ stdu r1,-SCV_FRAME_SIZE(r1) |
|
+ cfi_adjust_cfa_offset(SCV_FRAME_SIZE) |
|
DO_CALL_SCV |
|
+ addi r1,r1,SCV_FRAME_SIZE |
|
+ cfi_adjust_cfa_offset(-SCV_FRAME_SIZE) |
|
RET_SCV |
|
b 1f |
|
#endif
|
|
|