From 296178913c5dfbc2b35842fc16ed680ef51fd402 Mon Sep 17 00:00:00 2001 From: midipix Date: Sun, 5 Apr 2015 17:05:57 -0400 Subject: nt32: initial commit of core port files. signed-off by Z. Gilboa; see copying.midipix (9cd0746c) for additional information. --- src/thread/nt32/clone.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 src/thread/nt32/clone.c (limited to 'src/thread/nt32/clone.c') diff --git a/src/thread/nt32/clone.c b/src/thread/nt32/clone.c new file mode 100644 index 0000000..fb53501 --- /dev/null +++ b/src/thread/nt32/clone.c @@ -0,0 +1,54 @@ +#include + +struct pt_regs { + unsigned long ebp; + unsigned long ebx; + unsigned long eax; + unsigned long ecx; + unsigned long edx; + unsigned long esi; + unsigned long edi; + unsigned long orig_eax; + unsigned long eip; + unsigned long cs; + unsigned long eflags; + unsigned long esp; + unsigned long ss; +}; + +typedef long __sys_clone( + unsigned long flags, + void * child_stack, + void * ptid, + void * ctid, + struct pt_regs *regs); + +typedef int __entry_point(void *); + +extern unsigned long ** __syscall_vtbl; + +int __clone( + __entry_point * fn, + void * child_stack, + int flags, + void * arg, + int * ptid, + void * pthread_self_addr, + int * ctid) +{ + struct pt_regs regs; + __sys_clone * pfn_clone; + + regs.eip = (unsigned long)fn; + regs.ecx = (unsigned long)arg; + regs.edx = (unsigned long)pthread_self_addr; + + pfn_clone = (__sys_clone *)(__syscall_vtbl[SYS_clone]); + + return (int)pfn_clone( + flags, + child_stack, + ptid, + ctid, + ®s); +} -- cgit v1.2.3