OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [uClibc/] [libc/] [sysdeps/] [linux/] [powerpc/] [vfork.c] - Blame information for rev 1325

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1325 phoenix
#include <unistd.h>
2
#include <sys/types.h>
3
#include <errno.h>
4
#include <sys/syscall.h>
5
 
6
#define __syscall_clobbers \
7
        "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
8
#define __syscall_return(type) \
9
        return (__sc_err & 0x10000000 ? errno = __sc_ret, __sc_ret = -1 : 0), \
10
               (type) __sc_ret
11
 
12
pid_t vfork(void)
13
{
14
        unsigned long __sc_ret, __sc_err;
15
        register unsigned long __sc_0 __asm__ ("r0");
16
        register unsigned long __sc_3 __asm__ ("r3");
17
 
18
#if 0
19
        /* Sigh.  The vfork system call on powerpc
20
         * seems to be completely broken.  So just
21
         * use fork instead */
22
 
23
        __sc_0 = __NR_vfork;
24
        __asm__ __volatile__
25
                ("sc            \n\t"
26
                 "mfcr %1       "
27
                : "=&r" (__sc_3), "=&r" (__sc_0)
28
                : "0"   (__sc_3), "1"   (__sc_0)
29
                : __syscall_clobbers);
30
        __sc_ret = __sc_3;
31
        __sc_err = __sc_0;
32
 
33
        if((__sc_err & 0x10000000) && (__sc_ret == ENOSYS))
34
#endif
35
        {
36
                __sc_0 = __NR_fork;
37
                __asm__ __volatile__
38
                        ("sc            \n\t"
39
                         "mfcr %1       "
40
                        : "=&r" (__sc_3), "=&r" (__sc_0)
41
                        : "0"   (__sc_3), "1"   (__sc_0)
42
                        : __syscall_clobbers);
43
                __sc_ret = __sc_3;
44
                __sc_err = __sc_0;
45
        }
46
 
47
        __syscall_return (pid_t);
48
}
49
 

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.