diff options
Diffstat (limited to 'libc/sysdeps/linux/m68k/bits')
-rw-r--r-- | libc/sysdeps/linux/m68k/bits/setjmp.h | 11 | ||||
-rw-r--r-- | libc/sysdeps/linux/m68k/bits/types.h | 10 | ||||
-rw-r--r-- | libc/sysdeps/linux/m68k/bits/vfork.h | 14 |
3 files changed, 26 insertions, 9 deletions
diff --git a/libc/sysdeps/linux/m68k/bits/setjmp.h b/libc/sysdeps/linux/m68k/bits/setjmp.h index aa376a092..31a241380 100644 --- a/libc/sysdeps/linux/m68k/bits/setjmp.h +++ b/libc/sysdeps/linux/m68k/bits/setjmp.h @@ -44,3 +44,14 @@ typedef struct containing a local variable at ADDRESS. */ #define _JMPBUF_UNWINDS(jmpbuf, address) \ ((void *) (address) < (void *) (jmpbuf)->__sp) + +/* Simple version of sigsetjmp and siglongjmp */ + +#define __sigsetjmp(env, savesigs) ((env)->__mask_was_saved = (savesigs), \ + sigprocmask(SIG_SETMASK, 0, &(env)->__saved_mask), \ + setjmp(&(env)->__jmpbuf)) + +#define siglongjmp(env, val) (((env)->__mask_was_saved ? \ + sigprocmask(SIG_SETMASK, &(env)->__saved_mask, 0) : 0), \ + longjmp(&(env)->__jmpbuf, val)) + diff --git a/libc/sysdeps/linux/m68k/bits/types.h b/libc/sysdeps/linux/m68k/bits/types.h index fc7917b59..682f912bd 100644 --- a/libc/sysdeps/linux/m68k/bits/types.h +++ b/libc/sysdeps/linux/m68k/bits/types.h @@ -58,12 +58,12 @@ typedef unsigned long long int __uint64_t; #endif typedef __quad_t *__qaddr_t; -typedef __u_quad_t __dev_t; /* Type of device numbers. */ -typedef __u_int __uid_t; /* Type of user identifications. */ -typedef __u_int __gid_t; /* Type of group identifications. */ +typedef __u_short __dev_t; /* Type of device numbers. */ +typedef __u_short __uid_t; /* Type of user identifications. */ +typedef __u_short __gid_t; /* Type of group identifications. */ typedef __u_long __ino_t; /* Type of file serial numbers. */ -typedef __u_int __mode_t; /* Type of file attribute bitmasks. */ -typedef __u_int __nlink_t; /* Type of file link counts. */ +typedef __u_short __mode_t; /* Type of file attribute bitmasks. */ +typedef __u_short __nlink_t; /* Type of file link counts. */ typedef long int __off_t; /* Type of file sizes and offsets. */ typedef __quad_t __loff_t; /* Type of file sizes and offsets. */ typedef int __pid_t; /* Type of process identifications. */ diff --git a/libc/sysdeps/linux/m68k/bits/vfork.h b/libc/sysdeps/linux/m68k/bits/vfork.h index 0b6ffa2c0..ceb9af8a6 100644 --- a/libc/sysdeps/linux/m68k/bits/vfork.h +++ b/libc/sysdeps/linux/m68k/bits/vfork.h @@ -5,11 +5,17 @@ extern int _clone __P ((int (*fn)(void *arg), void *child_stack, int flags, void *arg)); +#ifndef __NR_vfork +#define __NR_vfork __NR_fork /* uClinux-2.0 only has fork which is vfork */ +#endif + #define vfork() ({ \ -register unsigned long __res __asm__ ("%d0") = __NR_fork; \ -__asm__ __volatile__ ("trap #0" \ - : "=g" (__res) \ - : "0" (__res) \ +unsigned long __res; \ +__asm__ __volatile__ ("movel %1,%%d0;" \ + "trap #0;" \ + "movel %%d0,%0" \ + : "=d" (__res) \ + : "0" (__NR_vfork) \ : "%d0"); \ if (__res >= (unsigned long)-4096) { \ errno = -__res; \ |