s390x: Align child stack while clone. [BZ #27968]
authorStefan Liebler <stli@linux.ibm.com>
Tue, 8 Jun 2021 13:37:32 +0000 (15:37 +0200)
committerStefan Liebler <stli@linux.ibm.com>
Tue, 15 Jun 2021 14:56:39 +0000 (16:56 +0200)
Starting with recent commit 92a7d1343991897f77afe01041f3b77712445e47
"x86-64: Align child stack to 16 bytes [BZ #27902]"
the new test misc/tst-misalign-clone has failed on s390x/s390.

This patch is now aligning the stack to a double
word boundary as also done in start.S files.

sysdeps/unix/sysv/linux/s390/s390-32/clone.S
sysdeps/unix/sysv/linux/s390/s390-64/clone.S

index bb968db40b8fd259d275432c0d405dea7dd064f8..08145e4156e47a82fb0b3d6a1b5ad8e093c4dafc 100644 (file)
 ENTRY(__clone)
        st      %r6,24(%r15)            /* store %r6 to save area */
        cfi_offset (%r6, -72)
-       lr      %r0,%r5                 /* move *arg out of the way */
        ltr     %r1,%r2                 /* check fn and move to %r1 */
        jz      error                   /* no NULL function pointers */
-       ltr     %r2,%r3                 /* check child_stack and move to %r2 */
-       jz      error                   /* no NULL stack pointers */
+       lhi     %r0,-8                  /* Align the child_stack to a ...  */
+       nr      %r3,%r0                 /* double word boundary and ...  */
+       jz      error                   /* avoid NULL stack pointers.  */
+       lr      %r0,%r5                 /* move *arg out of the way */
+       lr      %r2,%r3                 /* move child_stack to %r2 */
        lr      %r3,%r4                 /* move flags to %r3 */
        lr      %r4,%r6                 /* move parent_tid to %r4 */
        l       %r5,100(%r15)           /* load child_tid from stack */
index 9eafff756135672613ffdf9d7e52199432ce4883..21d485e9e973724eb0d8ce58b254d0ccde85e2a5 100644 (file)
 ENTRY(__clone)
        stg     %r6,48(%r15)            /* store %r6 to save area */
        cfi_offset (%r6,-112)
-       lgr     %r0,%r5                 /* move *arg out of the way */
        ltgr    %r1,%r2                 /* check fn and move to %r1 */
        jz      error                   /* no NULL function pointers */
-       ltgr    %r2,%r3                 /* check child_stack and move to %r2 */
-       jz      error                   /* no NULL stack pointers */
+       lghi    %r0,-16                 /* Align the child_stack to a ...  */
+       ngr     %r3,%r0                 /* double word boundary and ...  */
+       jz      error                   /* avoid NULL stack pointers.  */
+       lgr     %r0,%r5                 /* move *arg out of the way */
+       lgr     %r2,%r3                 /* move child_stack to %r2  */
        lgr     %r3,%r4                 /* move flags to %r3 */
        lgr     %r4,%r6                 /* move parent_tid to %r4 */
        lg      %r5,168(%r15)           /* load child_tid from stack */