The attached patch defines a new file
(.../include/asm-i386/sys_calls.h) which defines all the system call
names and numbers. The number is defined via "enum". The normal call
has a well defined entry point to name relationship, but not all do,
so a way to do the "non-confroming" calls is included. To add a new
call all one needs to do is to add a line at the end of the list in
this header file, for example:
SYS_CALL(clock_nanosleep) \
This will put "sys_clock_nanosleep" in the call table in entry.S and
define the "__NR_clock_nanosleep" for unistd. The last entry of the
enum is NR_syscalls, thus defineing and keeping this symbol current.
Of course we will be adding no more system calls, but it does make
things a _lot_ easier.
The binary from entry.S was compared to the prior binary and found to
be the same. A small set of the library stubs was produced and also
compared. And a system was built and tested. All worked fine.
--
George Anzinger geo...@mvista.com
High-res-timers: http://sourceforge.net/projects/high-res-timers/
Preemption patch: http://www.kernel.org/pub/linux/kernel/people/rml
[
syscall-2.5.64-1.0.patch 23K ]
diff -urP -I '\$Id:.*Exp \$' -X /usr/src/patch.exclude linux-2.5.64-kb/arch/i386/kernel/entry.S linux/arch/i386/kernel/entry.S
--- linux-2.5.64-kb/arch/i386/kernel/entry.S 2003-03-05 15:11:21.000000000 -0800
+++ linux/arch/i386/kernel/entry.S 2003-03-05 15:15:43.000000000 -0800
@@ -562,274 +562,9 @@
.data
ENTRY(sys_call_table)
- .long sys_restart_syscall /* 0 - old "setup()" system call, used for restarting */
- .long sys_exit
- .long sys_fork
- .long sys_read
- .long sys_write
- .long sys_open /* 5 */
- .long sys_close
- .long sys_waitpid
- .long sys_creat
- .long sys_link
- .long sys_unlink /* 10 */
- .long sys_execve
- .long sys_chdir
- .long sys_time
- .long sys_mknod
- .long sys_chmod /* 15 */
- .long sys_lchown16
- .long sys_ni_syscall /* old break syscall holder */
- .long sys_stat
- .long sys_lseek
- .long sys_getpid /* 20 */
- .long sys_mount
- .long sys_oldumount
- .long sys_setuid16
- .long sys_getuid16
- .long sys_stime /* 25 */
- .long sys_ptrace
- .long sys_alarm
- .long sys_fstat
- .long sys_pause
- .long sys_utime /* 30 */
- .long sys_ni_syscall /* old stty syscall holder */
- .long sys_ni_syscall /* old gtty syscall holder */
- .long sys_access
- .long sys_nice
- .long sys_ni_syscall /* 35 - old ftime syscall holder */
- .long sys_sync
- .long sys_kill
- .long sys_rename
- .long sys_mkdir
- .long sys_rmdir /* 40 */
- .long sys_dup
- .long sys_pipe
- .long sys_times
- .long sys_ni_syscall /* old prof syscall holder */
- .long sys_brk /* 45 */
- .long sys_setgid16
- .long sys_getgid16
- .long sys_signal
- .long sys_geteuid16
- .long sys_getegid16 /* 50 */
- .long sys_acct
- .long sys_umount /* recycled never used phys() */
- .long sys_ni_syscall /* old lock syscall holder */
- .long sys_ioctl
- .long sys_fcntl /* 55 */
- .long sys_ni_syscall /* old mpx syscall holder */
- .long sys_setpgid
- .long sys_ni_syscall /* old ulimit syscall holder */
- .long sys_olduname
- .long sys_umask /* 60 */
- .long sys_chroot
- .long sys_ustat
- .long sys_dup2
- .long sys_getppid
- .long sys_getpgrp /* 65 */
- .long sys_setsid
- .long sys_sigaction
- .long sys_sgetmask
- .long sys_ssetmask
- .long sys_setreuid16 /* 70 */
- .long sys_setregid16
- .long sys_sigsuspend
- .long sys_sigpending
- .long sys_sethostname
- .long sys_setrlimit /* 75 */
- .long sys_old_getrlimit
- .long sys_getrusage
- .long sys_gettimeofday
- .long sys_settimeofday
- .long sys_getgroups16 /* 80 */
- .long sys_setgroups16
- .long old_select
- .long sys_symlink
- .long sys_lstat
- .long sys_readlink /* 85 */
- .long sys_uselib
- .long sys_swapon
- .long sys_reboot
- .long old_readdir
- .long old_mmap /* 90 */
- .long sys_munmap
- .long sys_truncate
- .long sys_ftruncate
- .long sys_fchmod
- .long sys_fchown16 /* 95 */
- .long sys_getpriority
- .long sys_setpriority
- .long sys_ni_syscall /* old profil syscall holder */
- .long sys_statfs
- .long sys_fstatfs /* 100 */
- .long sys_ioperm
- .long sys_socketcall
- .long sys_syslog
- .long sys_setitimer
- .long sys_getitimer /* 105 */
- .long sys_newstat
- .long sys_newlstat
- .long sys_newfstat
- .long sys_uname
- .long sys_iopl /* 110 */
- .long sys_vhangup
- .long sys_ni_syscall /* old "idle" system call */
- .long sys_vm86old
- .long sys_wait4
- .long sys_swapoff /* 115 */
- .long sys_sysinfo
- .long sys_ipc
- .long sys_fsync
- .long sys_sigreturn
- .long sys_clone /* 120 */
- .long sys_setdomainname
- .long sys_newuname
- .long sys_modify_ldt
- .long sys_adjtimex
- .long sys_mprotect /* 125 */
- .long sys_sigprocmask
- .long sys_ni_syscall /* old "create_module" */
- .long sys_init_module
- .long sys_delete_module
- .long sys_ni_syscall /* 130: old "get_kernel_syms" */
- .long sys_quotactl
- .long sys_getpgid
- .long sys_fchdir
- .long sys_bdflush
- .long sys_sysfs /* 135 */
- .long sys_personality
- .long sys_ni_syscall /* reserved for afs_syscall */
- .long sys_setfsuid16
- .long sys_setfsgid16
- .long sys_llseek /* 140 */
- .long sys_getdents
- .long sys_select
- .long sys_flock
- .long sys_msync
- .long sys_readv /* 145 */
- .long sys_writev
- .long sys_getsid
- .long sys_fdatasync
- .long sys_sysctl
- .long sys_mlock /* 150 */
- .long sys_munlock
- .long sys_mlockall
- .long sys_munlockall
- .long sys_sched_setparam
- .long sys_sched_getparam /* 155 */
- .long sys_sched_setscheduler
- .long sys_sched_getscheduler
- .long sys_sched_yield
- .long sys_sched_get_priority_max
- .long sys_sched_get_priority_min /* 160 */
- .long sys_sched_rr_get_interval
- .long sys_nanosleep
- .long sys_mremap
- .long sys_setresuid16
- .long sys_getresuid16 /* 165 */
- .long sys_vm86
- .long sys_ni_syscall /* Old sys_query_module */
- .long sys_poll
- .long sys_nfsservctl
- .long sys_setresgid16 /* 170 */
- .long sys_getresgid16
- .long sys_prctl
- .long sys_rt_sigreturn
- .long sys_rt_sigaction
- .long sys_rt_sigprocmask /* 175 */
- .long sys_rt_sigpending
- .long sys_rt_sigtimedwait
- .long sys_rt_sigqueueinfo
- .long sys_rt_sigsuspend
- .long sys_pread64 /* 180 */
- .long sys_pwrite64
- .long sys_chown16
- .long sys_getcwd
- .long sys_capget
- .long sys_capset /* 185 */
- .long sys_sigaltstack
- .long sys_sendfile
- .long sys_ni_syscall /* reserved for streams1 */
- .long sys_ni_syscall /* reserved for streams2 */
- .long sys_vfork /* 190 */
- .long sys_getrlimit
- .long sys_mmap2
- .long sys_truncate64
- .long sys_ftruncate64
- .long sys_stat64 /* 195 */
- .long sys_lstat64
- .long sys_fstat64
- .long sys_lchown
- .long sys_getuid
- .long sys_getgid /* 200 */
- .long sys_geteuid
- .long sys_getegid
- .long sys_setreuid
- .long sys_setregid
- .long sys_getgroups /* 205 */
- .long sys_setgroups
- .long sys_fchown
- .long sys_setresuid
- .long sys_getresuid
- .long sys_setresgid /* 210 */
- .long sys_getresgid
- .long sys_chown
- .long sys_setuid
- .long sys_setgid
- .long sys_setfsuid /* 215 */
- .long sys_setfsgid
- .long sys_pivot_root
- .long sys_mincore
- .long sys_madvise
- .long sys_getdents64 /* 220 */
- .long sys_fcntl64
- .long sys_ni_syscall /* reserved for TUX */
- .long sys_ni_syscall
- .long sys_gettid
- .long sys_readahead /* 225 */
- .long sys_setxattr
- .long sys_lsetxattr
- .long sys_fsetxattr
- .long sys_getxattr
- .long sys_lgetxattr /* 230 */
- .long sys_fgetxattr
- .long sys_listxattr
- .long sys_llistxattr
- .long sys_flistxattr
- .long sys_removexattr /* 235 */
- .long sys_lremovexattr
- .long sys_fremovexattr
- .long sys_tkill
- .long sys_sendfile64
- .long sys_futex /* 240 */
- .long sys_sched_setaffinity
- .long sys_sched_getaffinity
- .long sys_set_thread_area
- .long sys_get_thread_area
- .long sys_io_setup /* 245 */
- .long sys_io_destroy
- .long sys_io_getevents
- .long sys_io_submit
- .long sys_io_cancel
- .long sys_fadvise64 /* 250 */
- .long sys_ni_syscall
- .long sys_exit_group
- .long sys_lookup_dcookie
- .long sys_epoll_create
- .long sys_epoll_ctl /* 255 */
- .long sys_epoll_wait
- .long sys_remap_file_pages
- .long sys_set_tid_address
- .long sys_timer_create
- .long sys_timer_settime /* 260 */
- .long sys_timer_gettime
- .long sys_timer_getoverrun
- .long sys_timer_delete
- .long sys_clock_settime
- .long sys_clock_gettime /* 265 */
- .long sys_clock_getres
- .long sys_clock_nanosleep
-
+
+#define SYS_CALL_PTRS
+#include <asm/sys_calls.h>
+
nr_syscalls=(.-sys_call_table)/4
diff -urP -I '\$Id:.*Exp \$' -X /usr/src/patch.exclude linux-2.5.64-kb/include/asm-i386/sys_calls.h linux/include/asm-i386/sys_calls.h
--- linux-2.5.64-kb/include/asm-i386/sys_calls.h 1969-12-31 16:00:00.000000000 -0800
+++ linux/include/asm-i386/sys_calls.h 2003-03-05 15:25:50.000000000 -0800
@@ -0,0 +1,311 @@
+#ifndef SYS_CALLS_F
+#define SYS_CALLS_F
+
+#ifdef SYS_CALL_PTRS
+/*
+ * For some unknown reason asm code is run through cpp with the
+ * -traditional flag on. We set this up so we don't care...
+ */
+#ifndef __STDC__
+#define SYS_CALL_F(fun) sys_/**/fun
+#define SYS_CALL(fun) , sys_/**/fun
+#else
+#define SYS_CALL_F(fun) sys_ ## fun
+#define SYS_CALL(fun) , sys_ ## fun
+#endif
+#define SYS_CALL_R(fun) , sys_ni_syscall
+#define SYS_CALL_D(x, fun) , fun
+#define SYS_CALL_END
+#endif
+
+#ifdef SYS_CALL_NUMS
+#define SYS_CALL(fun) __NR_ ##fun,
+#define SYS_CALL_F(fun) SYS_CALL(fun)
+#define SYS_CALL_R(fun) __NR_ ##fun,
+#define SYS_CALL_D(x, fun) __NR_ ## x,
+#define SYS_CALL_END NR_syscalls
+#endif
+#define do_calls \
+SYS_CALL_F(restart_syscall) \
+SYS_CALL(exit) \
+SYS_CALL(fork) \
+SYS_CALL(read) \
+SYS_CALL(write) \
+SYS_CALL(open) \
+SYS_CALL(close) \
+SYS_CALL(waitpid) \
+SYS_CALL(creat) \
+SYS_CALL(link) \
+SYS_CALL(unlink) \
+SYS_CALL(execve) \
+SYS_CALL(chdir) \
+SYS_CALL(time) \
+SYS_CALL(mknod) \
+SYS_CALL(chmod) \
+SYS_CALL_D(lchown, sys_lchown16) \
+SYS_CALL_R(break) \
+SYS_CALL_D(oldstat, sys_stat ) \
+SYS_CALL(lseek) \
+SYS_CALL(getpid) \
+SYS_CALL(mount) \
+SYS_CALL_D(umount, sys_oldumount) \
+SYS_CALL_D(setuid, sys_setuid16) \
+SYS_CALL_D(getuid, sys_getuid16) \
+SYS_CALL(stime) \
+SYS_CALL(ptrace) \
+SYS_CALL(alarm) \
+SYS_CALL_D(oldfstat, sys_fstat) \
+SYS_CALL(pause) \
+SYS_CALL(utime) \
+SYS_CALL_R(stty) \
+SYS_CALL_R(gtty) \
+SYS_CALL(access) \
+SYS_CALL(nice) \
+SYS_CALL_R(ftime) \
+SYS_CALL(sync) \
+SYS_CALL(kill) \
+SYS_CALL(rename) \
+SYS_CALL(mkdir) \
+SYS_CALL(rmdir) \
+SYS_CALL(dup) \
+SYS_CALL(pipe) \
+SYS_CALL(times) \
+SYS_CALL_R(prof) \
+SYS_CALL(brk) \
+SYS_CALL_D(setgid, sys_setgid16) \
+SYS_CALL_D(getgid, sys_getgid16) \
+SYS_CALL(signal) \
+SYS_CALL_D(geteuid, sys_geteuid16) \
+SYS_CALL_D(getegid, sys_getegid16) \
+SYS_CALL(acct) \
+SYS_CALL_D(umount2, sys_umount) \
+SYS_CALL_R(lock) \
+SYS_CALL(ioctl) \
+SYS_CALL(fcntl) \
+SYS_CALL_R(mpx) \
+SYS_CALL(setpgid) \
+SYS_CALL_R(ulimit) \
+SYS_CALL_D(oldolduname, sys_olduname) \
+SYS_CALL(umask) \
+SYS_CALL(chroot) \
+SYS_CALL(ustat) \
+SYS_CALL(dup2) \
+SYS_CALL(getppid) \
+SYS_CALL(getpgrp) \
+SYS_CALL(setsid) \
+SYS_CALL(sigaction) \
+SYS_CALL(sgetmask) \
+SYS_CALL(ssetmask) \
+SYS_CALL_D(setreuid, sys_setreuid16) \
+SYS_CALL_D(setregid,
...
read more »