kernel_thread bogosity

From: Pavel Machek (pavel@suse.cz)
Date: Thu Nov 23 2000 - 17:23:33 EST


Hi!

You see? Kernel_thread does not check is sys_clone() worked! Aha,
caller is responsible for that, but init/main.c does not seem too
carefull. Maybe kernel_thread should at least print a warning?

Plus, can someone explain me why it does not need to setup %%ecx with
either zero or address of stack?
                                                                Pavel

int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
{
        long retval, d0;

        __asm__ __volatile__(
                "movl %%esp,%%esi\n\t"
                "int $0x80\n\t" /* Linux/i386 system call */
                "cmpl %%esp,%%esi\n\t" /* child or parent? */
                "je 1f\n\t" /* parent - jump */
                /* Load the argument into eax, and push it. That way,
it does
                 * not matter whether the called function is compiled
with
                 * -mregparm or not. */
                "movl %4,%%eax\n\t"
                "pushl %%eax\n\t"
                "call *%5\n\t" /* call fn */
                "movl %3,%0\n\t" /* exit */
                "int $0x80\n"
                "1:\t"
                :"=&a" (retval), "=&S" (d0)
                :"0" (__NR_clone), "i" (__NR_exit),
                 "r" (arg), "r" (fn),
                 "b" (flags | CLONE_VM)
                : "memory");
        return retval;
}

-- 
I'm pavel@ucw.cz. "In my country we have almost anarchy and I don't care."
Panos Katsaloulis describing me w.r.t. patents at discuss@linmodems.org
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Thu Nov 23 2000 - 21:00:26 EST