patch-1.3.94 linux/arch/m68k/kernel/entry.S

Next file: linux/arch/m68k/kernel/head.S
Previous file: linux/arch/m68k/kernel/console.c
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v1.3.93/linux/arch/m68k/kernel/entry.S linux/arch/m68k/kernel/entry.S
@@ -0,0 +1,641 @@
+/* -*- mode: asm -*-
+ *
+ *  linux/arch/m68k/kernel/entry.S
+ *
+ *  Copyright (C) 1991, 1992  Linus Torvalds
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file README.legal in the main directory of this archive
+ * for more details.
+ *
+ * 680x0 support by Hamish Macdonald
+ *
+ */
+
+/*
+ * entry.S  contains the system-call and fault low-level handling routines.
+ * This also contains the timer-interrupt handler, as well as all interrupts
+ * and faults that can result in a task-switch.
+ *
+ * NOTE: This code handles signal-recognition, which happens every time
+ * after a timer-interrupt and after each system call.
+ *
+ * Stack layout in 'ret_from_exception':
+ *
+ *	This allows access to the syscall arguments in registers d1-d5
+ *
+ *	 0(sp) - d1
+ *	 4(sp) - d2
+ *	 8(sp) - d3
+ *	 C(sp) - d4
+ *	10(sp) - d5
+ *	14(sp) - a0
+ *	18(sp) - a1
+ *	1C(sp) - d0
+ *	20(sp) - orig_d0
+ *	24(sp) - stack adjustment
+ *	28(sp) - sr
+ *	2A(sp) - pc
+ *	2E(sp) - format & vector
+ */
+
+/*
+ * 12/03/96 Jes: Currently we only support m68k single-cpu systems, so
+ *               all pointers that used to be 'current' are now entry
+ *               number 0 in the 'current_set' list.
+ */
+
+#include <linux/sys.h>
+
+#include <asm/segment.h>
+
+LCF_MASK	= 0x0001
+
+LENOSYS = 38
+
+/*
+ * these are offsets into the task-struct
+ */
+LTASK_STATE	=  0
+LTASK_COUNTER	=  4
+LTASK_PRIORITY	=  8
+LTASK_SIGNAL	= 12
+LTASK_BLOCKED	= 16
+LTASK_FLAGS	= 20
+LTASK_ERRNO	= 24
+
+#include <linux/config.h>
+#include <linux/linkage.h>
+
+/* the following macro is used when enabling interrupts */
+#if defined(CONFIG_ATARI) && !defined(CONFIG_AMIGA) && !defined(CONFIG_MAC)
+	/* block out HSYNC on the atari */
+#define ALLOWINT 0xfbff
+#else
+	/* portable version */
+#define ALLOWINT 0xf8ff
+#endif /* machine compilation types */ 
+
+LD0		= 0x1C
+LORIG_D0	= 0x20
+LSR		= 0x28
+LFORMATVEC	= 0x2E
+
+/*
+ * This defines the normal kernel pt-regs layout.
+ *
+ * regs are a2-a6 and d6-d7 preserved by C code
+ * the kernel doesn't mess with usp unless it needs to
+ */
+#define SAVE_ALL			\
+	clrl	%sp@-;    /* stk_adj */	\
+	movel	%d0,%sp@-; /* orig d0 */	\
+	movel	%d0,%sp@-; /* d0 */	\
+	moveml	%d1-%d5/%a0-%a1,%sp@-
+
+#define RESTORE_ALL			\
+	moveml	%sp@+,%a0-%a1/%d1-%d5;	\
+	movel	%sp@+,%d0;		\
+	addql	#4,%sp;	 /* orig d0 */	\
+	addl	%sp@+,%sp; /* stk adj */	\
+	rte
+
+#define SWITCH_STACK_SIZE (7*4+4)	/* includes return address */
+
+#define SAVE_SWITCH_STACK \
+	moveml	%a2-%a6/%d6-%d7,%sp@-
+
+#define RESTORE_SWITCH_STACK \
+	moveml	%sp@+,%a2-%a6/%d6-%d7
+
+.globl SYMBOL_NAME(system_call), SYMBOL_NAME(buserr), SYMBOL_NAME(trap)
+.globl SYMBOL_NAME(resume), SYMBOL_NAME(ret_from_exception)
+.globl SYMBOL_NAME(ret_from_signal)
+.globl SYMBOL_NAME(inthandler), SYMBOL_NAME(sys_call_table)
+.globl SYMBOL_NAME(sys_fork), SYMBOL_NAME(sys_clone)
+.globl SYMBOL_NAME(ret_from_interrupt), SYMBOL_NAME(bad_interrupt)
+
+.text
+ENTRY(buserr)
+	SAVE_ALL
+	moveq	#-1,%d0
+	movel	%d0,%sp@(LORIG_D0)	| a -1 in the ORIG_D0 field
+					| signifies that the stack frame
+					| is NOT for syscall
+
+	movel	%sp,%sp@- 		| stack frame pointer argument
+	bsrl	SYMBOL_NAME(buserr_c)
+	addql	#4,%sp
+	jra	SYMBOL_NAME(ret_from_exception)
+
+ENTRY(trap)
+	SAVE_ALL
+	moveq	#-1,%d0
+	movel	%d0,%sp@(LORIG_D0)	| a -1 in the ORIG_D0 field
+					| signifies that the stack frame
+					| is NOT for syscall
+	movel	%sp,%sp@- 		| stack frame pointer argument
+	bsrl	SYMBOL_NAME(trap_c)
+	addql	#4,%sp
+	jra	SYMBOL_NAME(ret_from_exception)
+
+ENTRY(reschedule)
+	| save top of frame
+	pea	%sp@
+	jbsr	SYMBOL_NAME(set_esp0)
+	addql	#4,%sp
+
+	pea	SYMBOL_NAME(ret_from_exception)
+	jmp	SYMBOL_NAME(schedule)
+
+ENTRY(system_call)
+	SAVE_ALL
+	movel	#-LENOSYS,LD0(%sp)	| default return value in d0
+					| original D0 is in orig_d0
+	movel	%d0,%d2
+
+	| save top of frame
+	pea	%sp@
+	jbsr	SYMBOL_NAME(set_esp0)
+	addql	#4,%sp
+
+	cmpl	#NR_syscalls,%d2
+	jcc	SYMBOL_NAME(ret_from_exception)
+	lea	SYMBOL_NAME(sys_call_table),%a0
+	movel	%a0@(%d2:l:4),%d3
+	jeq	SYMBOL_NAME(ret_from_exception)
+	andw	#~LCF_MASK,%sp@(LSR)	| assume syscall success
+	movel	SYMBOL_NAME(current_set),%a0
+	clrl	%a0@(LTASK_ERRNO)
+	btst	#5,%a0@(LTASK_FLAGS+3)	| PF_TRACESYS
+	bnes	1f
+	movel	%d3,%a0
+	jbsr	%a0@
+	movel	%d0,%sp@(LD0)		| save the return value
+	jpl	2f
+	orw	#LCF_MASK,%sp@(LSR)	| set carry to indicate error
+2:
+	movel	SYMBOL_NAME(current_set),%a0
+	movel	%a0@(LTASK_ERRNO),%d1
+	negl	%d1
+	jeq	SYMBOL_NAME(ret_from_exception)
+	movel	%d1,%sp@(LD0)
+	orw	#LCF_MASK,%sp@(LSR)	| set carry to indicate error
+	jra	SYMBOL_NAME(ret_from_exception)
+1:
+	subql	#4,%sp
+	SAVE_SWITCH_STACK
+	jbsr	SYMBOL_NAME(syscall_trace)
+	RESTORE_SWITCH_STACK
+	addql	#4,%sp
+	movel	%d3,%a0
+	jbsr	%a0@
+	movel	%d0,%sp@(LD0)		| save the return value
+	jpl	2f
+	orw	#LCF_MASK,%sp@(LSR)	| set carry to indicate error
+2:
+	movel	SYMBOL_NAME(current_set),%a0
+	movel	%a0@(LTASK_ERRNO),%d1
+	negl	%d1
+	jeq	2f
+	movel	%d1,%sp@(LD0)
+	orw	#LCF_MASK,%sp@(LSR)	| set carry to indicate error
+2:	subql	#4,%sp			| dummy return address
+	SAVE_SWITCH_STACK
+	jbsr	SYMBOL_NAME(syscall_trace)
+
+SYMBOL_NAME_LABEL(ret_from_signal)
+	RESTORE_SWITCH_STACK
+	addql	#4,%sp
+
+SYMBOL_NAME_LABEL(ret_from_exception)
+	btst	#5,%sp@(LSR)		| check if returning to kernel
+	bnes	2f			| if so, skip resched, signals
+	tstl	SYMBOL_NAME(need_resched)
+	jne	SYMBOL_NAME(reschedule)
+	movel	SYMBOL_NAME(current_set),%a0
+	cmpl	#SYMBOL_NAME(task),%a0	| task[0] cannot have signals
+	jeq	2f
+	bclr	#5,%a0@(LTASK_FLAGS+1)	| check for delayed trace
+	jeq	1f
+	bclr	#7,%sp@(LSR)		| clear trace bit in SR
+	pea	1			| send SIGTRAP
+	movel	%a0,%sp@-
+	pea	5
+	jbsr	SYMBOL_NAME(send_sig)
+	addql	#8,%sp
+	addql	#4,%sp
+
+1:
+	moveq	#0,%d0
+	movel	SYMBOL_NAME(current_set),%a0
+	cmpl	%a0@(LTASK_STATE),%d0     | state
+	jne	SYMBOL_NAME(reschedule)
+	cmpl	%a0@(LTASK_COUNTER),%d0   | counter
+	jeq	SYMBOL_NAME(reschedule)
+
+	.word	0xf4f8
+	movel	%a0@(LTASK_BLOCKED),%d0
+	movel	%d0,%d1			| save blocked in d1 for sig handling
+	notl	%d0
+	andl	%a0@(LTASK_SIGNAL),%d0
+	jne	Lsignal_return
+2:	RESTORE_ALL
+
+Lsignal_return:
+	subql	#4,%sp			| dummy return address
+	SAVE_SWITCH_STACK
+	pea	%sp@(SWITCH_STACK_SIZE)
+	movel	%d1,%sp@-
+	bsrl	SYMBOL_NAME(do_signal)
+	addql	#8,%sp
+	RESTORE_SWITCH_STACK
+	addql	#4,%sp
+	RESTORE_ALL
+
+/*
+** This is the main interrupt handler, responsible for calling process_int()
+*/
+SYMBOL_NAME_LABEL(inthandler)
+	SAVE_ALL
+	moveq	#-1,%d0
+	movel	%d0,%sp@(LORIG_D0)	| a -1 in the ORIG_D0 field
+					| signifies that the stack frame
+					| is NOT for syscall
+	
+	addql	#1,SYMBOL_NAME(intr_count)
+
+	movew	%sp@(LFORMATVEC),%d0      |  put exception # in d0
+	andil	#0xfff,%d0		|  mask out format nybble
+
+	movel	%sp,%sp@-		
+	movel	%d0,%sp@- 		|  put vector # on stack
+	jbsr	SYMBOL_NAME(process_int)|  process the IRQ
+	addql	#8,%sp			|  pop parameters off stack
+
+SYMBOL_NAME_LABEL(ret_from_interrupt)
+	/* check if we need to do software interrupts */
+1:
+	movel	SYMBOL_NAME(intr_count),%d2
+	subql	#1,%d2
+	jne	2f
+
+	movel	SYMBOL_NAME(bh_active),%d0
+	andl	SYMBOL_NAME(bh_mask),%d0
+	jne	3f
+
+	movel	%d2,SYMBOL_NAME(intr_count)
+
+	jra	SYMBOL_NAME(ret_from_exception)
+					| deliver signals, reschedule etc..
+
+2:	movel	%d2,SYMBOL_NAME(intr_count)
+	RESTORE_ALL
+3:
+	movew	%sr,%sp@-
+	andiw	#(ALLOWINT),%sr		| allow interrupts
+	jbsr	SYMBOL_NAME(do_bottom_half)
+	movew	%sp@+,%sr
+	jra	1b
+
+
+/* Handler for uninitialized and spurious interrupts */
+
+SYMBOL_NAME_LABEL(bad_interrupt)
+	addql	#1,SYMBOL_NAME(num_spurious)
+	rte
+
+ENTRY(sys_fork)
+	SAVE_SWITCH_STACK	
+	pea	%sp@(SWITCH_STACK_SIZE)
+	jbsr	SYMBOL_NAME(m68k_fork)
+	addql	#4,%sp
+	RESTORE_SWITCH_STACK
+	rts
+
+ENTRY(sys_clone)
+	SAVE_SWITCH_STACK
+	pea	%sp@(SWITCH_STACK_SIZE)
+	jbsr	SYMBOL_NAME(m68k_clone)
+	addql	#4,%sp
+	RESTORE_SWITCH_STACK
+	rts
+
+ENTRY(sys_sigsuspend)
+	SAVE_SWITCH_STACK
+	pea	%sp@(SWITCH_STACK_SIZE)
+	jbsr	SYMBOL_NAME(do_sigsuspend)
+	addql	#4,%sp
+	RESTORE_SWITCH_STACK
+	rts
+
+ENTRY(sys_sigreturn)
+	SAVE_SWITCH_STACK
+	jbsr	SYMBOL_NAME(do_sigreturn)
+	RESTORE_SWITCH_STACK
+	rts
+
+LFLUSH_I_AND_D = 0x00000808
+LBI_CPU = 4
+LTSS_KSP	= 0
+LTSS_USP	= 4
+LTSS_SR		= 8
+LTSS_FS		= 10
+LTSS_CRP	= 20
+LTSS_FPCTXT	= 32
+
+SYMBOL_NAME_LABEL(resume)
+	/*
+	 * Beware - when entering resume, offset of tss is in a1 and
+	 * next (the new task) is in d1, so don't chance these
+	 * registers before their contents have been used.
+	 */
+	
+	/* current tasks task_struct */
+ 	movel	SYMBOL_NAME(current_set),%a0
+
+	/* offset of tss struct (processor state) from beginning
+	   of task struct */
+/*
+	movel	%sp@(8),%a1
+*/
+	addl	%a1,%a0
+
+	/* save sr */
+	movew	%sr,%a0@(LTSS_SR)
+
+	/* disable interrupts */
+	oriw	#0x0700,%sr
+
+	/* save fs (sfc,%dfc) (may be pointing to kernel memory) */
+	movec	%sfc,%d0
+	movew	%d0,%a0@(LTSS_FS)
+
+	/* save usp */
+	/* it is better to use a movel here instead of a movew 8*) */
+	movec	%usp,%d0
+	movel	%d0,%a0@(LTSS_USP)
+
+	/* load new task (before adjusting stack) */
+	/* The task has already been put in d1 by switch_to (Jes) */
+/*
+	movel	%sp@(4),%d1
+*/
+	/* save non-scratch registers on stack */
+	SAVE_SWITCH_STACK
+
+	/* save current kernel stack pointer */
+	movel	%sp,%a0@(LTSS_KSP)
+
+	/* save floating point context */
+	fsave	%a0@(LTSS_FPCTXT+27*4)
+	tstb	%a0@(LTSS_FPCTXT+27*4)
+	jeq	1f
+	fmovemx	%fp0-%fp7,%a0@(LTSS_FPCTXT)
+	fmoveml	%fpcr/%fpsr/%fpiar,%a0@(LTSS_FPCTXT+24*4)
+1:
+
+	/* get pointer to tss struct (d1 contains new task) */
+	movel	%d1,SYMBOL_NAME(current_set)
+	movel	%d1,%a0
+	addl	%a1,%a0
+
+	/* 68040 or 68060 ? */
+	btst	#2,SYMBOL_NAME(boot_info)+LBI_CPU+3
+	bnes	1f
+	btst	#3,SYMBOL_NAME(boot_info)+LBI_CPU+3
+	bnes	1f
+
+	/*
+	 * switch address space
+	 */
+
+	/* flush MC68030/MC68020 caches (they are virtually addressed) */
+	movec	%cacr,%d0
+	oril	#LFLUSH_I_AND_D,%d0
+	movec	%d0,%cacr
+
+	/* switch the root pointer */
+	pmove	%a0@(LTSS_CRP),%crp
+
+	/* flush address translation cache (probably not needed */
+	pflusha
+
+	jra	2f	/* skip m68040 stuff */
+
+1:
+	/*
+	 * switch address space
+	 */
+
+	/* flush address translation cache (user entries) */
+	.word	0xf510			/* pflushan */
+
+	/* switch the root pointer */
+	movel	%a0@(LTSS_CRP+4),%d0
+	.long	0x4e7b0806		/* movec d0,urp */
+
+	/* is it a '060 ? */
+	btst	#3,SYMBOL_NAME(boot_info)+LBI_CPU+3
+	beqs	2f
+	/* clear user entries in the branch cache */
+	movec	%cacr,%d0
+	orl	#0x00200000,%d0
+	movec	%d0,%cacr
+
+2:
+	/* restore floating point context */
+	tstb	%a0@(LTSS_FPCTXT+27*4)
+	jeq	1f
+	fmovemx	%a0@(LTSS_FPCTXT),%fp0-%fp7
+	fmoveml	%a0@(LTSS_FPCTXT+24*4),%fpcr/%fpsr/%fpiar
+1:	frestore %a0@(LTSS_FPCTXT+27*4)
+
+	/* restore the kernel stack pointer */
+	movel	%a0@(LTSS_KSP),%sp
+
+	/* restore non-scratch registers */
+	RESTORE_SWITCH_STACK
+
+	/* restore user stack pointer */
+	movel	%a0@(LTSS_USP),%d0
+	movec	%d0,%usp
+
+	/* restore fs (sfc,%dfc) */
+	movew	%a0@(LTSS_FS),%a1
+	movec	%a1,%sfc
+	movec	%a1,%dfc
+
+	/* restore status register */
+	movew	%a0@(LTSS_SR),%sr
+
+	rts
+
+.data
+ALIGN
+SYMBOL_NAME_LABEL(sys_call_table)
+	.long SYMBOL_NAME(sys_setup)		/* 0 */
+	.long SYMBOL_NAME(sys_exit)
+	.long SYMBOL_NAME(sys_fork)
+	.long SYMBOL_NAME(sys_read)
+	.long SYMBOL_NAME(sys_write)
+	.long SYMBOL_NAME(sys_open)		/* 5 */
+	.long SYMBOL_NAME(sys_close)
+	.long SYMBOL_NAME(sys_waitpid)
+	.long SYMBOL_NAME(sys_creat)
+	.long SYMBOL_NAME(sys_link)
+	.long SYMBOL_NAME(sys_unlink)		/* 10 */
+	.long SYMBOL_NAME(sys_execve)
+	.long SYMBOL_NAME(sys_chdir)
+	.long SYMBOL_NAME(sys_time)
+	.long SYMBOL_NAME(sys_mknod)
+	.long SYMBOL_NAME(sys_chmod)		/* 15 */
+	.long SYMBOL_NAME(sys_chown)
+	.long SYMBOL_NAME(sys_break)
+	.long SYMBOL_NAME(sys_stat)
+	.long SYMBOL_NAME(sys_lseek)
+	.long SYMBOL_NAME(sys_getpid)		/* 20 */
+	.long SYMBOL_NAME(sys_mount)
+	.long SYMBOL_NAME(sys_umount)
+	.long SYMBOL_NAME(sys_setuid)
+	.long SYMBOL_NAME(sys_getuid)
+	.long SYMBOL_NAME(sys_stime)		/* 25 */
+	.long SYMBOL_NAME(sys_ptrace)
+	.long SYMBOL_NAME(sys_alarm)
+	.long SYMBOL_NAME(sys_fstat)
+	.long SYMBOL_NAME(sys_pause)
+	.long SYMBOL_NAME(sys_utime)		/* 30 */
+	.long SYMBOL_NAME(sys_stty)
+	.long SYMBOL_NAME(sys_gtty)
+	.long SYMBOL_NAME(sys_access)
+	.long SYMBOL_NAME(sys_nice)
+	.long SYMBOL_NAME(sys_ftime)		/* 35 */
+	.long SYMBOL_NAME(sys_sync)
+	.long SYMBOL_NAME(sys_kill)
+	.long SYMBOL_NAME(sys_rename)
+	.long SYMBOL_NAME(sys_mkdir)
+	.long SYMBOL_NAME(sys_rmdir)		/* 40 */
+	.long SYMBOL_NAME(sys_dup)
+	.long SYMBOL_NAME(sys_pipe)
+	.long SYMBOL_NAME(sys_times)
+	.long SYMBOL_NAME(sys_prof)
+	.long SYMBOL_NAME(sys_brk)		/* 45 */
+	.long SYMBOL_NAME(sys_setgid)
+	.long SYMBOL_NAME(sys_getgid)
+	.long SYMBOL_NAME(sys_signal)
+	.long SYMBOL_NAME(sys_geteuid)
+	.long SYMBOL_NAME(sys_getegid)		/* 50 */
+	.long SYMBOL_NAME(sys_acct)
+	.long SYMBOL_NAME(sys_phys)
+	.long SYMBOL_NAME(sys_lock)
+	.long SYMBOL_NAME(sys_ioctl)
+	.long SYMBOL_NAME(sys_fcntl)		/* 55 */
+	.long SYMBOL_NAME(sys_mpx)
+	.long SYMBOL_NAME(sys_setpgid)
+	.long SYMBOL_NAME(sys_ulimit)
+	.long SYMBOL_NAME(sys_olduname)
+	.long SYMBOL_NAME(sys_umask)		/* 60 */
+	.long SYMBOL_NAME(sys_chroot)
+	.long SYMBOL_NAME(sys_ustat)
+	.long SYMBOL_NAME(sys_dup2)
+	.long SYMBOL_NAME(sys_getppid)
+	.long SYMBOL_NAME(sys_getpgrp)		/* 65 */
+	.long SYMBOL_NAME(sys_setsid)
+	.long SYMBOL_NAME(sys_sigaction)
+	.long SYMBOL_NAME(sys_sgetmask)
+	.long SYMBOL_NAME(sys_ssetmask)
+	.long SYMBOL_NAME(sys_setreuid)		/* 70 */
+	.long SYMBOL_NAME(sys_setregid)
+	.long SYMBOL_NAME(sys_sigsuspend)
+	.long SYMBOL_NAME(sys_sigpending)
+	.long SYMBOL_NAME(sys_sethostname)
+	.long SYMBOL_NAME(sys_setrlimit)	/* 75 */
+	.long SYMBOL_NAME(sys_getrlimit)
+	.long SYMBOL_NAME(sys_getrusage)
+	.long SYMBOL_NAME(sys_gettimeofday)
+	.long SYMBOL_NAME(sys_settimeofday)
+	.long SYMBOL_NAME(sys_getgroups)	/* 80 */
+	.long SYMBOL_NAME(sys_setgroups)
+	.long SYMBOL_NAME(old_select)
+	.long SYMBOL_NAME(sys_symlink)
+	.long SYMBOL_NAME(sys_lstat)
+	.long SYMBOL_NAME(sys_readlink)		/* 85 */
+	.long SYMBOL_NAME(sys_uselib)
+	.long SYMBOL_NAME(sys_swapon)
+	.long SYMBOL_NAME(sys_reboot)
+	.long SYMBOL_NAME(old_readdir)
+	.long SYMBOL_NAME(old_mmap)		/* 90 */
+	.long SYMBOL_NAME(sys_munmap)
+	.long SYMBOL_NAME(sys_truncate)
+	.long SYMBOL_NAME(sys_ftruncate)
+	.long SYMBOL_NAME(sys_fchmod)
+	.long SYMBOL_NAME(sys_fchown)		/* 95 */
+	.long SYMBOL_NAME(sys_getpriority)
+	.long SYMBOL_NAME(sys_setpriority)
+	.long SYMBOL_NAME(sys_profil)
+	.long SYMBOL_NAME(sys_statfs)
+	.long SYMBOL_NAME(sys_fstatfs)		/* 100 */
+	.long SYMBOL_NAME(sys_ioperm)
+	.long SYMBOL_NAME(sys_socketcall)
+	.long SYMBOL_NAME(sys_syslog)
+	.long SYMBOL_NAME(sys_setitimer)
+	.long SYMBOL_NAME(sys_getitimer)	/* 105 */
+	.long SYMBOL_NAME(sys_newstat)
+	.long SYMBOL_NAME(sys_newlstat)
+	.long SYMBOL_NAME(sys_newfstat)
+	.long SYMBOL_NAME(sys_uname)
+	.long SYMBOL_NAME(sys_ni_syscall)	/* iopl for i386 */ /* 110 */
+	.long SYMBOL_NAME(sys_vhangup)
+	.long SYMBOL_NAME(sys_idle)
+	.long SYMBOL_NAME(sys_ni_syscall)	/* vm86 for i386 */
+	.long SYMBOL_NAME(sys_wait4)
+	.long SYMBOL_NAME(sys_swapoff)		/* 115 */
+	.long SYMBOL_NAME(sys_sysinfo)
+	.long SYMBOL_NAME(sys_ipc)
+	.long SYMBOL_NAME(sys_fsync)
+	.long SYMBOL_NAME(sys_sigreturn)
+	.long SYMBOL_NAME(sys_clone)		/* 120 */
+	.long SYMBOL_NAME(sys_setdomainname)
+	.long SYMBOL_NAME(sys_newuname)
+	.long SYMBOL_NAME(sys_ni_syscall)	/* modify_ldt for i386 */
+	.long SYMBOL_NAME(sys_adjtimex)
+	.long SYMBOL_NAME(sys_mprotect)		/* 125 */
+	.long SYMBOL_NAME(sys_sigprocmask)
+	.long SYMBOL_NAME(sys_create_module)
+	.long SYMBOL_NAME(sys_init_module)
+	.long SYMBOL_NAME(sys_delete_module)
+	.long SYMBOL_NAME(sys_get_kernel_syms)	/* 130 */
+	.long SYMBOL_NAME(sys_quotactl)
+	.long SYMBOL_NAME(sys_getpgid)
+	.long SYMBOL_NAME(sys_fchdir)
+	.long SYMBOL_NAME(sys_bdflush)
+	.long SYMBOL_NAME(sys_sysfs)		/* 135 */
+	.long SYMBOL_NAME(sys_personality)
+	.long SYMBOL_NAME(sys_ni_syscall)	/* for afs_syscall */
+	.long SYMBOL_NAME(sys_setfsuid)
+	.long SYMBOL_NAME(sys_setfsgid)
+	.long SYMBOL_NAME(sys_llseek)		/* 140 */
+	.long SYMBOL_NAME(sys_getdents)
+	.long SYMBOL_NAME(sys_select)
+	.long SYMBOL_NAME(sys_flock)
+	.long SYMBOL_NAME(sys_msync)
+	.long SYMBOL_NAME(sys_readv)		/* 145 */
+	.long SYMBOL_NAME(sys_writev)
+	.long SYMBOL_NAME(sys_getsid)
+	.long SYMBOL_NAME(sys_fdatasync)
+	.long SYMBOL_NAME(sys_sysctl)
+	.long SYMBOL_NAME(sys_mlock)		/* 150 */
+	.long SYMBOL_NAME(sys_munlock)
+	.long SYMBOL_NAME(sys_mlockall)
+	.long SYMBOL_NAME(sys_munlockall)
+	.long SYMBOL_NAME(sys_sched_setparam)
+	.long SYMBOL_NAME(sys_sched_getparam)   /* 155 */
+	.long SYMBOL_NAME(sys_sched_setscheduler)
+	.long SYMBOL_NAME(sys_sched_getscheduler)
+	.long SYMBOL_NAME(sys_sched_yield)
+	.long SYMBOL_NAME(sys_sched_get_priority_max)
+	.long SYMBOL_NAME(sys_sched_get_priority_min)  /* 160 */
+	.long SYMBOL_NAME(sys_sched_rr_get_interval)
+	.long SYMBOL_NAME(sys_nanosleep)
+	.long SYMBOL_NAME(sys_mremap)
+	.space (NR_syscalls-163)*4

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov with Sam's (original) version
of this