summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManuel Novoa III <mjn3@codepoet.org>2001-06-28 01:59:07 +0000
committerManuel Novoa III <mjn3@codepoet.org>2001-06-28 01:59:07 +0000
commite53f70e1e1fc250c060d3432844fb222e32754b1 (patch)
tree9e9dba365596e9ce3ebdea9245ccfa173236c76c
parent2d95d9f12e8d4a711671411e9d9db6e6866cd4ac (diff)
Added a script to create bits/syscall.h for each arch.
NOTE!!! This is run by "make -C libc/sysdeps/linux/$(TARGET_ARCH) headers" in the main Makefile, but I only changed libc/sysdeps/linux/i386/Makefile as I had no way of testing it for the other archs. Various arch maintainers, please check and update the corresponding Makefile... or report bugs ;-)... appropriately. You'll also want to "cvs del" syscall.h and add it to a .cvsignore in $(ARCH)/bits. Also added a define to uClibc_config.h, __UCLIBC_USE_UNIFIED_SYSCALL__, and moved i386 unified syscall stuff out of common and into i386/bits/syscalls.h.
-rw-r--r--Makefile6
-rw-r--r--TODO9
-rwxr-xr-xextra/scripts/gen_bits_syscall_h.sh25
-rw-r--r--libc/sysdeps/linux/common/.cvsignore4
-rw-r--r--libc/sysdeps/linux/common/Makefile21
-rw-r--r--libc/sysdeps/linux/common/create_module.c3
-rw-r--r--libc/sysdeps/linux/common/syscalls.c38
-rw-r--r--libc/sysdeps/linux/i386/Makefile2
-rw-r--r--libc/sysdeps/linux/i386/bits/.cvsignore1
-rw-r--r--libc/sysdeps/linux/i386/bits/syscall.h425
-rw-r--r--libc/sysdeps/linux/i386/bits/syscalls.h39
11 files changed, 117 insertions, 456 deletions
diff --git a/Makefile b/Makefile
index c081116f3..0e6f07731 100644
--- a/Makefile
+++ b/Makefile
@@ -149,6 +149,11 @@ uClibc_config.h: Makefile Config
else \
echo "#undef __UCLIBC_HAS_RPC__" >> uClibc_config.h ; \
fi
+ @if [ "$(UNIFIED_SYSCALL)" = "true" ] ; then \
+ echo "#define __UCLIBC_USE_UNIFIED_SYSCALL__ 1" >> uClibc_config.h ; \
+ else \
+ echo "#undef __UCLIBC_USE_UNIFIED_SYSCALL__" >> uClibc_config.h ; \
+ fi
subdirs: $(patsubst %, _dir_%, $(DIRS))
@@ -213,7 +218,6 @@ clean:
- find include -type l -exec rm -f {} \;
- find . \( -name \*.o -o -name \*.a -o -name \*.so -o -name core \) -exec rm -f {} \;
$(MAKE) -C ldso clean
- $(MAKE) -C libc/sysdeps/linux/common clean
$(MAKE) -C libc/unistd clean
.PHONY: dummy subdirs
diff --git a/TODO b/TODO
index f17ffee53..4d7fa66e7 100644
--- a/TODO
+++ b/TODO
@@ -25,10 +25,6 @@ Manuel's unsorted todo:
Move the target-specific sysconf.c generator to extra (as it needs to be
run on the target) and fix libc/unistd/Makefile.
-Move the unified syscall stuff to extra, or find a way to generate the
- the required header file without using an intermediate binary.
- Update: should be easy now that Erik has added bits/syscalls.h.
-
Add a usage message to the gcc wrapper.
Look at pre-cephes-addition floating point code and possibly rework.
@@ -53,3 +49,8 @@ Make errno and endptr handling the default in the strto* functions and
document how to turn those off to save space.
-----------------------------------------------------------------------------
+
+PORTING
+-------
+
+bits/dirent.h currently differs from the glibc version (d_type unsupported)
diff --git a/extra/scripts/gen_bits_syscall_h.sh b/extra/scripts/gen_bits_syscall_h.sh
new file mode 100755
index 000000000..51f68fcf7
--- /dev/null
+++ b/extra/scripts/gen_bits_syscall_h.sh
@@ -0,0 +1,25 @@
+#!/bin/sh
+#
+# June 27, 2001 Manuel Novoa III
+#
+# This script expects TOPDIR and CC (as used in the Makefiles) to be set in
+# the environment, and outputs the appropriate $TOPDIR/include/bits/syscall.h
+# corresponding to $TOPDIR/include/asm/unistd.h to stdout.
+#
+# Warning!!! This does _no_ error checking!!!
+
+UNISTD_H_PATH=$TOPDIR/include/asm/unistd.h
+
+( echo "#include \"$UNISTD_H_PATH\"" ;
+ $CC -E -dN $UNISTD_H_PATH | # needed to strip out any kernel-internal defines
+ sed -ne 's/^[ ]*#define[ ]*__NR_\([A-Za-z0-9_]*\).*/UCLIBC_\1 __NR_\1/gp'
+) |
+$CC -E - |
+( echo "/* WARNING!!! AUTO-GENERATED FILE!!! DO NOT EDIT!!! */" ; echo ;
+ echo "#ifndef _SYSCALL_H" ;
+ echo "# error \"Never use <bits/syscall.h> directly; include <sys/syscall.h> instead.\"" ;
+ echo "#endif" ; echo ;
+ sed -ne 's/^UCLIBC_\([A-Za-z0-9_]*\) *\([^ ]*\)/#define SYS_\1 \2\
+#define __NR_\1 \2\
+#define __STR_NR_\1 \"\2\"/gp'
+)
diff --git a/libc/sysdeps/linux/common/.cvsignore b/libc/sysdeps/linux/common/.cvsignore
deleted file mode 100644
index 73f129583..000000000
--- a/libc/sysdeps/linux/common/.cvsignore
+++ /dev/null
@@ -1,4 +0,0 @@
-unified_syscall.h
-str_syscalls
-str_syscalls.c
-str_syscalls.h
diff --git a/libc/sysdeps/linux/common/Makefile b/libc/sysdeps/linux/common/Makefile
index 1fea281c7..0b387587d 100644
--- a/libc/sysdeps/linux/common/Makefile
+++ b/libc/sysdeps/linux/common/Makefile
@@ -34,16 +34,7 @@ MOBJ=$(shell ./list_syscalls.sh)
OBJ=$(COBJS) $(MOBJ)
-UNIFIED_SYSCALL_HEADER = /dev/null
-STR_SYSCALLS =
-ifeq ($(UNIFIED_SYSCALL),true)
- ifeq ($(TARGET_ARCH), i386)
- UNIFIED_SYSCALL_HEADER = unified_syscall_i386.h
- STR_SYSCALLS = str_syscalls
- endif
-endif
-
-all: $(STR_SYSCALLS) unified_syscall.h $(OBJ) $(LIBC)
+all: $(STR_SYSCALLS) $(OBJ) $(LIBC)
$(LIBC): ar-target
@@ -58,14 +49,6 @@ $(COBJS): %.o : %.c
$(CC) $(CFLAGS) -c $< -o $@
$(STRIPTOOL) -x -R .note -R .comment $*.o
-str_syscalls:
- /bin/sh ./str_syscalls.sh > str_syscalls.c
- gcc str_syscalls.c -o str_syscalls
- ./str_syscalls > str_syscalls.h
-
-unified_syscall.h:
- cat $(UNIFIED_SYSCALL_HEADER) > unified_syscall.h
-
clean:
- rm -f *.[oa] *~ core unified_syscall.h str_syscalls.[ch] str_syscalls
+ rm -f *.[oa] *~ core
diff --git a/libc/sysdeps/linux/common/create_module.c b/libc/sysdeps/linux/common/create_module.c
index 223b909f5..93153c8b3 100644
--- a/libc/sysdeps/linux/common/create_module.c
+++ b/libc/sysdeps/linux/common/create_module.c
@@ -31,6 +31,9 @@
#if defined(__i386__) || defined(__m68k__) || defined(__arm__)
#define __NR___create_module __NR_create_module
+#ifdef __STR_NR_create_module
+#define __STR_NR___create_module __STR_NR_create_module
+#endif
_syscall2(long, __create_module, const char *, name, size_t, size);
/* By checking the value of errno, we know if we have been fooled
* by the syscall2 macro making a very high address look like a
diff --git a/libc/sysdeps/linux/common/syscalls.c b/libc/sysdeps/linux/common/syscalls.c
index 0b82f4973..e7da59b63 100644
--- a/libc/sysdeps/linux/common/syscalls.c
+++ b/libc/sysdeps/linux/common/syscalls.c
@@ -26,13 +26,14 @@
#include <sys/types.h>
#include <sys/syscall.h>
-#include "unified_syscall.h"
-
//#define __NR_exit 1
#ifdef L__exit
/* Do not include unistd.h, so gcc doesn't whine about
* _exit returning. It really doesn't return... */
#define __NR__exit __NR_exit
+#ifdef __STR_NR_exit
+#define __STR_NR__exit __STR_NR_exit
+#endif
_syscall1(void, _exit, int, status);
#endif
@@ -67,6 +68,9 @@ _syscall3(ssize_t, write, int, fd, const __ptr_t, buf, size_t, count);
#include <stdarg.h>
#include <fcntl.h>
#define __NR___open __NR_open
+#ifdef __STR_NR_open
+#define __STR_NR___open __STR_NR_open
+#endif
_syscall3(int, __open, const char *, fn, int, flags, mode_t, mode);
int open(const char *file, int oflag, ...)
@@ -223,6 +227,9 @@ _syscall1(int, stime, time_t *, t);
#ifdef L___ptrace
#include <sys/ptrace.h>
#define __NR___ptrace __NR_ptrace
+#ifdef __STR_NR_ptrace
+#define __STR_NR___ptrace __STR_NR_ptrace
+#endif
_syscall4(long, __ptrace, enum __ptrace_request, request, pid_t, pid,
void*, addr, void*, data);
#endif
@@ -381,6 +388,9 @@ _syscall0(gid_t, getgid);
#include <stdarg.h>
#include <sys/ioctl.h>
#define __NR__ioctl __NR_ioctl
+#ifdef __STR_NR_ioctl
+#define __STR_NR__ioctl __STR_NR_ioctl
+#endif
extern int _ioctl(int fd, int request, void *arg);
_syscall3(int, _ioctl, int, fd, int, request, void *, arg);
@@ -403,6 +413,9 @@ int ioctl(int fd, unsigned long int request, ...)
#include <stdarg.h>
#include <fcntl.h>
#define __NR__fcntl __NR_fcntl
+#ifdef __STR_NR_fcntl
+#define __STR_NR__fcntl __STR_NR_fcntl
+#endif
extern int _fcntl(int fd, int cmd, long arg);
_syscall3(int, _fcntl, int, fd, int, cmd, long, arg);
@@ -596,6 +609,9 @@ _syscall2(int, swapon, const char *, path, int, swapflags);
//#define __NR_reboot 88
#ifdef L__reboot
#define __NR__reboot __NR_reboot
+#ifdef __STR_NR_reboot
+#define __STR_NR__reboot __STR_NR_reboot
+#endif
extern int _reboot(int magic, int magic2, int flag);
_syscall3(int, _reboot, int, magic, int, magic2, int, flag);
@@ -611,6 +627,9 @@ int reboot(int flag)
//#define __NR_mmap 90
#ifdef L__mmap
#define __NR__mmap __NR_mmap
+#ifdef __STR_NR_mmap
+#define __STR_NR__mmap __STR_NR_mmap
+#endif
#include <unistd.h>
#include <sys/mman.h>
extern __ptr_t _mmap(unsigned long *buffer);
@@ -712,6 +731,9 @@ _syscall2(int, socketcall, int, call, unsigned long *, args);
#ifdef L__syslog
#include <unistd.h>
#define __NR__syslog __NR_syslog
+#ifdef __STR_NR_syslog
+#define __STR_NR__syslog __STR_NR_syslog
+#endif
extern int _syslog(int type, char *buf, int len);
_syscall3(int, _syslog, int, type, char *, buf, int, len);
@@ -741,6 +763,9 @@ _syscall2(int, getitimer, enum __itimer_which, which, struct itimerval *, value)
#include <unistd.h>
#include "statfix.h"
#define __NR___stat __NR_stat
+#ifdef __STR_NR_stat
+#define __STR_NR___stat __STR_NR_stat
+#endif
extern int __stat(const char *file_name, struct kernel_stat *buf);
_syscall2(int, __stat, const char *, file_name, struct kernel_stat *, buf);
@@ -766,6 +791,9 @@ int stat(const char *file_name, struct libc_stat *buf)
#include <unistd.h>
#include "statfix.h"
#define __NR___lstat __NR_lstat
+#ifdef __STR_NR_lstat
+#define __STR_NR___lstat __STR_NR_lstat
+#endif
extern int __lstat(const char *file_name, struct kernel_stat *buf);
_syscall2(int, __lstat, const char *, file_name, struct kernel_stat *, buf);
@@ -791,6 +819,9 @@ int lstat(const char *file_name, struct libc_stat *buf)
#include <unistd.h>
#include "statfix.h"
#define __NR___fstat __NR_fstat
+#ifdef __STR_NR_fstat
+#define __STR_NR___fstat __STR_NR_fstat
+#endif
extern int __fstat(int filedes, struct kernel_stat *buf);
_syscall2(int, __fstat, int, filedes, struct kernel_stat *, buf);
@@ -858,6 +889,9 @@ _syscall1(int, sysinfo, struct sysinfo *, info);
//#define __NR_ipc 117
#ifdef L___ipc
#define __NR___ipc __NR_ipc
+#ifdef __STR_NR_ipc
+#define __STR_NR___ipc __STR_NR_ipc
+#endif
_syscall5(int, __ipc, unsigned int, call, int, first, int, second, int, third, void *, ptr);
#endif
diff --git a/libc/sysdeps/linux/i386/Makefile b/libc/sysdeps/linux/i386/Makefile
index bb7cb6e85..a2c78aca7 100644
--- a/libc/sysdeps/linux/i386/Makefile
+++ b/libc/sysdeps/linux/i386/Makefile
@@ -72,7 +72,7 @@ $(COBJS): %.o : %.c
$(STRIPTOOL) -x -R .note -R .comment $*.o
headers:
- # No arch specific headers
+ @(TOPDIR=$(TOPDIR) CC=$(CC) /bin/sh $(TOPDIR)/extra/scripts/gen_bits_syscall_h.sh > bits/syscall.h )
clean:
rm -f *.[oa] *~ core
diff --git a/libc/sysdeps/linux/i386/bits/.cvsignore b/libc/sysdeps/linux/i386/bits/.cvsignore
new file mode 100644
index 000000000..414354767
--- /dev/null
+++ b/libc/sysdeps/linux/i386/bits/.cvsignore
@@ -0,0 +1 @@
+syscall.h
diff --git a/libc/sysdeps/linux/i386/bits/syscall.h b/libc/sysdeps/linux/i386/bits/syscall.h
deleted file mode 100644
index 740dc78a3..000000000
--- a/libc/sysdeps/linux/i386/bits/syscall.h
+++ /dev/null
@@ -1,425 +0,0 @@
-/* Generated at libc build time from kernel syscall list. */
-
-#ifndef _SYSCALL_H
-# error "Never use <bits/syscall.h> directly; include <sys/syscall.h> instead."
-#endif
-
-/* This syscall list was pulled from the Linux kernel source
- * code from the file linux-2.4.5/include/asm-i386/unistd.h */
-
-#define __NR_exit 1
-#define __NR_fork 2
-#define __NR_read 3
-#define __NR_write 4
-#define __NR_open 5
-#define __NR_close 6
-#define __NR_waitpid 7
-#define __NR_creat 8
-#define __NR_link 9
-#define __NR_unlink 10
-#define __NR_execve 11
-#define __NR_chdir 12
-#define __NR_time 13
-#define __NR_mknod 14
-#define __NR_chmod 15
-#define __NR_lchown 16
-#define __NR_break 17
-#define __NR_oldstat 18
-#define __NR_lseek 19
-#define __NR_getpid 20
-#define __NR_mount 21
-#define __NR_umount 22
-#define __NR_setuid 23
-#define __NR_getuid 24
-#define __NR_stime 25
-#define __NR_ptrace 26
-#define __NR_alarm 27
-#define __NR_oldfstat 28
-#define __NR_pause 29
-#define __NR_utime 30
-#define __NR_stty 31
-#define __NR_gtty 32
-#define __NR_access 33
-#define __NR_nice 34
-#define __NR_ftime 35
-#define __NR_sync 36
-#define __NR_kill 37
-#define __NR_rename 38
-#define __NR_mkdir 39
-#define __NR_rmdir 40
-#define __NR_dup 41
-#define __NR_pipe 42
-#define __NR_times 43
-#define __NR_prof 44
-#define __NR_brk 45
-#define __NR_setgid 46
-#define __NR_getgid 47
-#define __NR_signal 48
-#define __NR_geteuid 49
-#define __NR_getegid 50
-#define __NR_acct 51
-#define __NR_umount2 52
-#define __NR_lock 53
-#define __NR_ioctl 54
-#define __NR_fcntl 55
-#define __NR_mpx 56
-#define __NR_setpgid 57
-#define __NR_ulimit 58
-#define __NR_oldolduname 59
-#define __NR_umask 60
-#define __NR_chroot 61
-#define __NR_ustat 62
-#define __NR_dup2 63
-#define __NR_getppid 64
-#define __NR_getpgrp 65
-#define __NR_setsid 66
-#define __NR_sigaction 67
-#define __NR_sgetmask 68
-#define __NR_ssetmask 69
-#define __NR_setreuid 70
-#define __NR_setregid 71
-#define __NR_sigsuspend 72
-#define __NR_sigpending 73
-#define __NR_sethostname 74
-#define __NR_setrlimit 75
-#define __NR_getrlimit 76 /* Back compatible 2Gig limited rlimit */
-#define __NR_getrusage 77
-#define __NR_gettimeofday 78
-#define __NR_settimeofday 79
-#define __NR_getgroups 80
-#define __NR_setgroups 81
-#define __NR_select 82
-#define __NR_symlink 83
-#define __NR_oldlstat 84
-#define __NR_readlink 85
-#define __NR_uselib 86
-#define __NR_swapon 87
-#define __NR_reboot 88
-#define __NR_readdir 89
-#define __NR_mmap 90
-#define __NR_munmap 91
-#define __NR_truncate 92
-#define __NR_ftruncate 93
-#define __NR_fchmod 94
-#define __NR_fchown 95
-#define __NR_getpriority 96
-#define __NR_setpriority 97
-#define __NR_profil 98
-#define __NR_statfs 99
-#define __NR_fstatfs 100
-#define __NR_ioperm 101
-#define __NR_socketcall 102
-#define __NR_syslog 103
-#define __NR_setitimer 104
-#define __NR_getitimer 105
-#define __NR_stat 106
-#define __NR_lstat 107
-#define __NR_fstat 108
-#define __NR_olduname 109
-#define __NR_iopl 110
-#define __NR_vhangup 111
-#define __NR_idle 112
-#define __NR_vm86old 113
-#define __NR_wait4 114
-#define __NR_swapoff 115
-#define __NR_sysinfo 116
-#define __NR_ipc 117
-#define __NR_fsync 118
-#define __NR_sigreturn 119
-#define __NR_clone 120
-#define __NR_setdomainname 121
-#define __NR_uname 122
-#define __NR_modify_ldt 123
-#define __NR_adjtimex 124
-#define __NR_mprotect 125
-#define __NR_sigprocmask 126
-#define __NR_create_module 127
-#define __NR_init_module 128
-#define __NR_delete_module 129
-#define __NR_get_kernel_syms 130
-#define __NR_quotactl 131
-#define __NR_getpgid 132
-#define __NR_fchdir 133
-#define __NR_bdflush 134
-#define __NR_sysfs 135
-#define __NR_personality 136
-#define __NR_afs_syscall 137 /* Syscall for Andrew File System */
-#define __NR_setfsuid 138
-#define __NR_setfsgid 139
-#define __NR__llseek 140
-#define __NR_getdents 141
-#define __NR__newselect 142
-#define __NR_flock 143
-#define __NR_msync 144
-#define __NR_readv 145
-#define __NR_writev 146
-#define __NR_getsid 147
-#define __NR_fdatasync 148
-#define __NR__sysctl 149
-#define __NR_mlock 150
-#define __NR_munlock 151
-#define __NR_mlockall 152
-#define __NR_munlockall 153
-#define __NR_sched_setparam 154
-#define __NR_sched_getparam 155
-#define __NR_sched_setscheduler 156
-#define __NR_sched_getscheduler 157
-#define __NR_sched_yield 158
-#define __NR_sched_get_priority_max 159
-#define __NR_sched_get_priority_min 160
-#define __NR_sched_rr_get_interval 161
-#define __NR_nanosleep 162
-#define __NR_mremap 163
-#define __NR_setresuid 164
-#define __NR_getresuid 165
-#define __NR_vm86 166
-#define __NR_query_module 167
-#define __NR_poll 168
-#define __NR_nfsservctl 169
-#define __NR_setresgid 170
-#define __NR_getresgid 171
-#define __NR_prctl 172
-#define __NR_rt_sigreturn 173
-#define __NR_rt_sigaction 174
-#define __NR_rt_sigprocmask 175
-#define __NR_rt_sigpending 176
-#define __NR_rt_sigtimedwait 177
-#define __NR_rt_sigqueueinfo 178
-#define __NR_rt_sigsuspend 179
-#define __NR_pread 180
-#define __NR_pwrite 181
-#define __NR_chown 182
-#define __NR_getcwd 183
-#define __NR_capget 184
-#define __NR_capset 185
-#define __NR_sigaltstack 186
-#define __NR_sendfile 187
-#define __NR_getpmsg 188 /* some people actually want streams */
-#define __NR_putpmsg 189 /* some people actually want streams */
-#define __NR_vfork 190
-#define __NR_ugetrlimit 191 /* SuS compliant getrlimit */
-#define __NR_mmap2 192
-#define __NR_truncate64 193
-#define __NR_ftruncate64 194
-#define __NR_stat64 195
-#define __NR_lstat64 196
-#define __NR_fstat64 197
-#define __NR_lchown32 198
-#define __NR_getuid32 199
-#define __NR_getgid32 200
-#define __NR_geteuid32 201
-#define __NR_getegid32 202
-#define __NR_setreuid32 203
-#define __NR_setregid32 204
-#define __NR_getgroups32 205
-#define __NR_setgroups32 206
-#define __NR_fchown32 207
-#define __NR_setresuid32 208
-#define __NR_getresuid32 209
-#define __NR_setresgid32 210
-#define __NR_getresgid32 211
-#define __NR_chown32 212
-#define __NR_setuid32 213
-#define __NR_setgid32 214
-#define __NR_setfsuid32 215
-#define __NR_setfsgid32 216
-#define __NR_pivot_root 217
-#define __NR_mincore 218
-#define __NR_madvise 219
-#define __NR_madvise1 219 /* delete when C lib stub is removed */
-#define __NR_getdents64 220
-#define __NR_fcntl64 221
-
-
-/* Generated at libc build time from the above kernel syscall list. */
-
-#define SYS_write __NR_write
-#define SYS_setrlimit __NR_setrlimit
-#define SYS_getdents __NR_getdents
-#define SYS_umount __NR_umount
-#define SYS_munlock __NR_munlock
-#define SYS_delete_module __NR_delete_module
-#define SYS_fstat __NR_fstat
-#define SYS_getpgid __NR_getpgid
-#define SYS_rt_sigaction __NR_rt_sigaction
-#define SYS_setfsgid __NR_setfsgid
-#define SYS_chroot __NR_chroot
-#define SYS_modify_ldt __NR_modify_ldt
-#define SYS_times __NR_times
-#define SYS_rt_sigsuspend __NR_rt_sigsuspend
-#define SYS_setpgid __NR_setpgid
-#define SYS_getpgrp __NR_getpgrp
-#define SYS_break __NR_break
-#define SYS_putpmsg __NR_putpmsg
-#define SYS_query_module __NR_query_module
-#define SYS_pause __NR_pause
-#define SYS_writev __NR_writev
-#define SYS_rename __NR_rename
-#define SYS_truncate __NR_truncate
-#define SYS_profil __NR_profil
-#define SYS_waitpid __NR_waitpid
-#define SYS_sigreturn __NR_sigreturn
-#define SYS_setresgid __NR_setresgid
-#define SYS_readdir __NR_readdir
-#define SYS_fsync __NR_fsync
-#define SYS_sigaltstack __NR_sigaltstack
-#define SYS_lstat __NR_lstat
-#define SYS_dup2 __NR_dup2
-#define SYS_getpmsg __NR_getpmsg
-#define SYS_clone __NR_clone
-#define SYS_getppid __NR_getppid
-#define SYS_umount2 __NR_umount2
-#define SYS_close __NR_close
-#define SYS_setgid __NR_setgid
-#define SYS_bdflush __NR_bdflush
-#define SYS_vm86old __NR_vm86old
-#define SYS_statfs __NR_statfs
-#define SYS_mount __NR_mount
-#define SYS_sgetmask __NR_sgetmask
-#define SYS_idle __NR_idle
-#define SYS_sigaction __NR_sigaction
-#define SYS_wait4 __NR_wait4
-#define SYS_fork __NR_fork
-#define SYS_setfsuid __NR_setfsuid
-#define SYS_settimeofday __NR_settimeofday
-#define SYS_pwrite __NR_pwrite
-#define SYS_ssetmask __NR_ssetmask
-#define SYS_rt_sigpending __NR_rt_sigpending
-#define SYS_oldfstat __NR_oldfstat
-#define SYS_afs_syscall __NR_afs_syscall
-#define SYS_exit __NR_exit
-#define SYS_sysinfo __NR_sysinfo
-#define SYS_symlink __NR_symlink
-#define SYS_ioctl __NR_ioctl
-#define SYS_ftruncate __NR_ftruncate
-#define SYS_sched_getparam __NR_sched_getparam
-#define SYS_creat __NR_creat
-#define SYS_lchown __NR_lchown
-#define SYS_setresuid __NR_setresuid
-#define SYS_sched_rr_get_interval __NR_sched_rr_get_interval
-#define SYS_fcntl __NR_fcntl
-#define SYS_setsid __NR_setsid
-#define SYS_mprotect __NR_mprotect
-#define SYS_setuid __NR_setuid
-#define SYS_gtty __NR_gtty
-#define SYS_oldlstat __NR_oldlstat
-#define SYS_umask __NR_umask
-#define SYS_iopl __NR_iopl
-#define SYS_kill __NR_kill
-#define SYS_vfork __NR_vfork
-#define SYS_nanosleep __NR_nanosleep
-#define SYS_uname __NR_uname
-#define SYS_stime __NR_stime
-#define SYS_signal __NR_signal
-#define SYS_getitimer __NR_getitimer
-#define SYS_readv __NR_readv
-#define SYS_getcwd __NR_getcwd
-#define SYS_getpriority __NR_getpriority
-#define SYS_msync __NR_msync
-#define SYS_link __NR_link
-#define SYS_sched_setparam __NR_sched_setparam
-#define SYS_getgid __NR_getgid
-#define SYS__newselect __NR__newselect
-#define SYS_getrusage __NR_getrusage
-#define SYS_lock __NR_lock
-#define SYS__llseek __NR__llseek
-#define SYS_sched_yield __NR_sched_yield
-#define SYS_nice __NR_nice
-#define SYS_mmap __NR_mmap
-#define SYS_get_kernel_syms __NR_get_kernel_syms
-#define SYS_setgroups __NR_setgroups
-#define SYS_ulimit __NR_ulimit
-#define SYS_munmap __NR_munmap
-#define SYS_quotactl __NR_quotactl
-#define SYS_getrlimit __NR_getrlimit
-#define SYS_brk __NR_brk
-#define SYS_sched_getscheduler __NR_sched_getscheduler
-#define SYS_personality __NR_personality
-#define SYS_getpid __NR_getpid
-#define SYS_vhangup __NR_vhangup
-#define SYS_ioperm __NR_ioperm
-#define SYS_mremap __NR_mremap
-#define SYS_ptrace __NR_ptrace
-#define SYS_dup __NR_dup
-#define SYS_getsid __NR_getsid
-#define SYS_getegid __NR_getegid
-#define SYS_uselib __NR_uselib
-#define SYS_rt_sigprocmask __NR_rt_sigprocmask
-#define SYS_olduname __NR_olduname
-#define SYS_getuid __NR_getuid
-#define SYS_init_module __NR_init_module
-#define SYS_ipc __NR_ipc
-#define SYS_capget __NR_capget
-#define SYS_getresgid __NR_getresgid
-#define SYS_pipe __NR_pipe
-#define SYS_read __NR_read
-#define SYS_open __NR_open
-#define SYS_setdomainname __NR_setdomainname
-#define SYS_setregid __NR_setregid
-#define SYS_mpx __NR_mpx
-#define SYS_alarm __NR_alarm
-#define SYS_pread __NR_pread
-#define SYS_poll __NR_poll
-#define SYS_flock __NR_flock
-#define SYS_sigsuspend __NR_sigsuspend
-#define SYS_fdatasync __NR_fdatasync
-#define SYS_prctl __NR_prctl
-#define SYS_prof __NR_prof
-#define SYS_sysfs __NR_sysfs
-#define SYS_sethostname __NR_sethostname
-#define SYS_geteuid __NR_geteuid
-#define SYS_swapon __NR_swapon
-#define SYS_capset __NR_capset
-#define SYS_vm86 __NR_vm86
-#define SYS_create_module __NR_create_module
-#define SYS_execve __NR_execve
-#define SYS_utime __NR_utime
-#define SYS_reboot __NR_reboot
-#define SYS_socketcall __NR_socketcall
-#define SYS_fchdir __NR_fchdir
-#define SYS_getresuid __NR_getresuid
-#define SYS_sendfile __NR_sendfile
-#define SYS_time __NR_time
-#define SYS_setreuid __NR_setreuid
-#define SYS_select __NR_select
-#define SYS_ustat __NR_ustat
-#define SYS_mkdir __NR_mkdir
-#define SYS_rmdir __NR_rmdir
-#define SYS_adjtimex __NR_adjtimex
-#define SYS_acct __NR_acct
-#define SYS_sched_setscheduler __NR_sched_setscheduler
-#define SYS_mlockall __NR_mlockall
-#define SYS_fstatfs __NR_fstatfs
-#define SYS_stat __NR_stat
-#define SYS_sigpending __NR_sigpending
-#define SYS_chdir __NR_chdir
-#define SYS_swapoff __NR_swapoff
-#define SYS_rt_sigtimedwait __NR_rt_sigtimedwait
-#define SYS_rt_sigqueueinfo __NR_rt_sigqueueinfo
-#define SYS_syslog __NR_syslog
-#define SYS_fchmod __NR_fchmod
-#define SYS_nfsservctl __NR_nfsservctl
-#define SYS_oldstat __NR_oldstat
-#define SYS_readlink __NR_readlink
-#define SYS_munlockall __NR_munlockall
-#define SYS_stty __NR_stty
-#define SYS_sync __NR_sync
-#define SYS_setitimer __NR_setitimer
-#define SYS_fchown __NR_fchown
-#define SYS_access __NR_access
-#define SYS_sched_get_priority_max __NR_sched_get_priority_max
-#define SYS_gettimeofday __NR_gettimeofday
-#define SYS_mknod __NR_mknod
-#define SYS_sched_get_priority_min __NR_sched_get_priority_min
-#define SYS_oldolduname __NR_oldolduname
-#define SYS_getgroups __NR_getgroups
-#define SYS_chmod __NR_chmod
-#define SYS_mlock __NR_mlock
-#define SYS_unlink __NR_unlink
-#define SYS__sysctl __NR__sysctl
-#define SYS_sigprocmask __NR_sigprocmask
-#define SYS_rt_sigreturn __NR_rt_sigreturn
-#define SYS_lseek __NR_lseek
-#define SYS_setpriority __NR_setpriority
-#define SYS_ftime __NR_ftime
-#define SYS_chown __NR_chown
diff --git a/libc/sysdeps/linux/i386/bits/syscalls.h b/libc/sysdeps/linux/i386/bits/syscalls.h
index ed5fad805..940e9db50 100644
--- a/libc/sysdeps/linux/i386/bits/syscalls.h
+++ b/libc/sysdeps/linux/i386/bits/syscalls.h
@@ -4,6 +4,10 @@
* a difference. Regardless, including asm/unistd.h is hereby officially
* forbidden. Don't do it. It is bad for you. */
+#include <features.h>
+
+#ifndef __UCLIBC_USE_UNIFIED_SYSCALL__
+
#undef __syscall_return
#define __syscall_return(type, res) \
do { \
@@ -157,3 +161,38 @@ __syscall_return(type,__res); \
#endif /* __PIC__ */
+#else
+
+#define unified_syscall_body(name) \
+__asm__ ( \
+".text\n.align 4\n.global "###name"\n.type "###name",@function\n" \
+#name":\nmovb $"__STR_NR_##name \
+",%al;\n jmp __uClibc_syscall\n.Lfe1"###name":\n.size "###name \
+",.Lfe1"###name"-"###name \
+)
+
+#undef _syscall0
+#define _syscall0(type,name) \
+unified_syscall_body(name)
+
+#undef _syscall1
+#define _syscall1(type,name,type1,arg1) \
+unified_syscall_body(name)
+
+#undef _syscall2
+#define _syscall2(type,name,type1,arg1,type2,arg2) \
+unified_syscall_body(name)
+
+#undef _syscall3
+#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \
+unified_syscall_body(name)
+
+#undef _syscall4
+#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \
+unified_syscall_body(name)
+
+#undef _syscall5
+#define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5) \
+unified_syscall_body(name)
+
+#endif