Message ID | 20221221161946.12090-1-kozlov@synopsys.com |
---|---|
State | New |
Headers | show |
Series | ARC: align child stack in clone | expand |
On 21/12/22 13:19, Pavel.Kozlov--- via Libc-alpha wrote: > From: Pavel Kozlov <pavel.kozlov@synopsys.com> > > The ARCv2 ABI requires 4 byte stack pointer alignment. Don't allow to > use unaligned child stack in clone. As the stack grows down, > align it down. > > This was pointed by misc/tst-misalign-clone-internal and > misc/tst-misalign-clone tests. Stack alignmet fixes these tests > fails. LGTM, although I can't really test it since the Synopsys qemu tree does not have qemu-user support [1]. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org> [1] https://github.com/foss-for-synopsys-dwc-arc-processors/qemu > --- > sysdeps/unix/sysv/linux/arc/clone.S | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/sysdeps/unix/sysv/linux/arc/clone.S b/sysdeps/unix/sysv/linux/arc/clone.S > index bd924890844a..f32c83f17a65 100644 > --- a/sysdeps/unix/sysv/linux/arc/clone.S > +++ b/sysdeps/unix/sysv/linux/arc/clone.S > @@ -41,6 +41,7 @@ > > ENTRY (__clone) > cmp r0, 0 /* @fn can't be NULL. */ > + and r1,r1,-4 /* @child_stack be 4 bytes aligned per ABI. */ > cmp.ne r1, 0 /* @child_stack can't be NULL. */ > bz L (__sys_err) >
> LGTM, although I can't really test it since the Synopsys qemu tree does not > have qemu-user support [1]. Thank you for the review. I've checked this patch on QEMU with Linux system and on the ARC HSDK board. Also, I can say that it is possible to run ARC binaries on QEMU [1] in user mode. Currently not all instructions are supported in ARC QEMU and it is recommended to build binaries with extra -mcpu=archs compiler option, to reduce instruction set. Maybe this [2] will be also useful. It will be great to have this patch in coming 2.37. [1] https://github.com/foss-for-synopsys-dwc-arc-processors/qemu [2] https://github.com/foss-for-synopsys-dwc-arc-processors/glibc/wiki/Glibc-test-suite-for-a-target-without-native-GNU-toolchain#glibc-test-suite-execution-with-qemu-user-mode-emulation -- Pavel
diff --git a/sysdeps/unix/sysv/linux/arc/clone.S b/sysdeps/unix/sysv/linux/arc/clone.S index bd924890844a..f32c83f17a65 100644 --- a/sysdeps/unix/sysv/linux/arc/clone.S +++ b/sysdeps/unix/sysv/linux/arc/clone.S @@ -41,6 +41,7 @@ ENTRY (__clone) cmp r0, 0 /* @fn can't be NULL. */ + and r1,r1,-4 /* @child_stack be 4 bytes aligned per ABI. */ cmp.ne r1, 0 /* @child_stack can't be NULL. */ bz L (__sys_err)
From: Pavel Kozlov <pavel.kozlov@synopsys.com> The ARCv2 ABI requires 4 byte stack pointer alignment. Don't allow to use unaligned child stack in clone. As the stack grows down, align it down. This was pointed by misc/tst-misalign-clone-internal and misc/tst-misalign-clone tests. Stack alignmet fixes these tests fails. --- sysdeps/unix/sysv/linux/arc/clone.S | 1 + 1 file changed, 1 insertion(+)