From 167217bec15c9c7aa70ba2a3dc9c689b3cd91872 Mon Sep 17 00:00:00 2001 From: Guillaume Cottenceau Date: Mon, 14 May 2001 14:19:32 +0000 Subject: import new version of dietlibc --- mdk-stage1/dietlibc/i386/clone.S | 51 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 mdk-stage1/dietlibc/i386/clone.S (limited to 'mdk-stage1/dietlibc/i386/clone.S') diff --git a/mdk-stage1/dietlibc/i386/clone.S b/mdk-stage1/dietlibc/i386/clone.S new file mode 100644 index 000000000..ac02eb468 --- /dev/null +++ b/mdk-stage1/dietlibc/i386/clone.S @@ -0,0 +1,51 @@ +#include + +.text +.weak clone +clone: +.global __clone +__clone: + movl 4(%esp), %ecx /* have non null thread_funcion */ + testl %ecx, %ecx + je .Lclone_error + + movl 8(%esp), %ecx /* have non null child_stack pointer */ + testl %ecx, %ecx + je .Lclone_error + + /* put the parameter on thread stack */ + subl $8, %ecx + + movl 16(%esp), %eax /* arg */ + movl %eax, 4(%ecx) + + movl 4(%esp), %eax /* thread_func */ + movl %eax, 0(%ecx) + + /* the syscall */ + pushl %ebx + movl 16(%esp), %ebx /* flags */ + movl $__NR_clone, %eax + int $0x80 + popl %ebx + + testl %eax, %eax + jl .Lclone_error + je .Lstart_thread + ret + +.Lstart_thread: + xorl %ebp,%ebp + call *%ebx + pushl %eax + call _exit + +.Lclone_error: + negl %eax + pushl %eax + call __errno_location + popl %ecx + movl %ecx, (%eax) + xorl %eax, %eax + decl %eax + ret -- cgit v1.2.1