diff mbox series

ARC: align child stack in clone

Message ID 20221221161946.12090-1-kozlov@synopsys.com
State New
Headers show
Series ARC: align child stack in clone | expand

Commit Message

Pavel Kozlov Dec. 21, 2022, 4:19 p.m. UTC
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(+)

Comments

Adhemerval Zanella Netto Jan. 16, 2023, 2:08 p.m. UTC | #1
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)
>
Pavel Kozlov Jan. 25, 2023, 3:53 p.m. UTC | #2
> 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 mbox series

Patch

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)