From 83d641efd1f6eb699dd846b9e99af7bcff7e063e Mon Sep 17 00:00:00 2001 From: Chris Metcalf Date: Thu, 25 Sep 2014 16:53:03 -0400 Subject: [PATCH] tile: make the prolog of clone() more conformant With this change we properly set up the frame first, and tear it down last, doing argument checking only when the frame is set up. --- ChangeLog | 3 +++ sysdeps/unix/sysv/linux/tile/clone.S | 11 ++++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7dd6029..0ab15a2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2014-10-02 Chris Metcalf + * sysdeps/unix/sysv/linux/tile/clone.S (__clone): Fix code + to set up frame more cleanly. + * sysdeps/tile/memcmp.c: New file. * sysdeps/unix/sysv/linux/tile/sysconf.c: New file. diff --git a/sysdeps/unix/sysv/linux/tile/clone.S b/sysdeps/unix/sysv/linux/tile/clone.S index f48dba5..0e109f8 100644 --- a/sysdeps/unix/sysv/linux/tile/clone.S +++ b/sysdeps/unix/sysv/linux/tile/clone.S @@ -41,10 +41,6 @@ .text ENTRY (__clone) - /* sanity check arguments */ - BEQZ r0, .Linvalid - BEQZ r1, .Linvalid - /* Create a stack frame so we can pass callee-saves to new task. */ { move r10, sp @@ -71,6 +67,10 @@ ENTRY (__clone) ST r11, r32 cfi_offset (r32, FRAME_R32 - FRAME_SIZE) + /* sanity check arguments */ + BEQZ r0, .Linvalid + BEQZ r1, .Linvalid + /* Make sure child stack is properly aligned, and set up the top frame so that we can call out of it immediately in the child. Setting it up here means we fault in the parent if @@ -120,6 +120,7 @@ ENTRY (__clone) swint1 BEQZ r0, .Lthread_start /* If in child task. */ +.Ldone: /* Restore the callee-saved registers and return. */ ADDLI_PTR lr, sp, FRAME_SIZE { @@ -149,7 +150,7 @@ ENTRY (__clone) .Linvalid: { movei r1, EINVAL - j SYSCALL_ERROR_NAME + j .Ldone } /* This function expects to receive: -- 2.7.4