Jelajahi Sumber

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.

Manuel Novoa III 23 tahun lalu
induk
melakukan
e53f70e1e1

+ 5 - 1
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

+ 5 - 4
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)

+ 25 - 0
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'
+)

+ 0 - 4
libc/sysdeps/linux/common/.cvsignore

@@ -1,4 +0,0 @@
-unified_syscall.h
-str_syscalls
-str_syscalls.c
-str_syscalls.h

+ 2 - 19
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
 

+ 3 - 0
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 

+ 36 - 2
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
 

+ 1 - 1
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

+ 1 - 0
libc/sysdeps/linux/i386/bits/.cvsignore

@@ -0,0 +1 @@
+syscall.h

+ 0 - 425
libc/sysdeps/linux/i386/bits/syscall.h

@@ -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

+ 39 - 0
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