This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[PATCH] tile: make the prolog of clone() more conformant
- From: Chris Metcalf <cmetcalf at tilera dot com>
- To: <libc-alpha at sourceware dot org>
- Date: Thu, 25 Sep 2014 16:53:03 -0400
- Subject: [PATCH] tile: make the prolog of clone() more conformant
- Authentication-results: sourceware.org; auth=none
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.
---
sysdeps/unix/sysv/linux/tile/clone.S | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
2014-10-02 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/unix/sysv/linux/tile/clone.S (__clone): Fix code
to set up frame more cleanly.
diff --git a/sysdeps/unix/sysv/linux/tile/clone.S b/sysdeps/unix/sysv/linux/tile/clone.S
index f48dba523c7c..0e109f849e95 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:
--
1.8.3.1