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.
36 lines
1.4 KiB
36 lines
1.4 KiB
3 years ago
|
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
|