1/* -*- mode: asm -*- 2 * 3 * linux/arch/m68k/kernel/entry.S 4 * 5 * Copyright (C) 1991, 1992 Linus Torvalds 6 * 7 * This file is subject to the terms and conditions of the GNU General Public 8 * License. See the file README.legal in the main directory of this archive 9 * for more details. 10 * 11 * Linux/m68k support by Hamish Macdonald 12 * 13 * 68060 fixes by Jesper Skov 14 * 15 */ 16 17/* 18 * entry.S contains the system-call and fault low-level handling routines. 19 * This also contains the timer-interrupt handler, as well as all interrupts 20 * and faults that can result in a task-switch. 21 * 22 * NOTE: This code handles signal-recognition, which happens every time 23 * after a timer-interrupt and after each system call. 24 * 25 */ 26 27/* 28 * 12/03/96 Jes: Currently we only support m68k single-cpu systems, so 29 * all pointers that used to be 'current' are now entry 30 * number 0 in the 'current_set' list. 31 * 32 * 6/05/00 RZ: addedd writeback completion after return from sighandler 33 * for 68040 34 */ 35 36#include <linux/config.h> 37#include <linux/linkage.h> 38#include <asm/entry.h> 39#include <asm/errno.h> 40#include <asm/setup.h> 41#include <asm/segment.h> 42#include <asm/traps.h> 43#include <asm/unistd.h> 44 45#include <asm/asm-offsets.h> 46 47.globl system_call, buserr, trap, resume 48.globl sys_call_table 49.globl sys_fork, sys_clone, sys_vfork 50.globl ret_from_interrupt, bad_interrupt 51.globl auto_irqhandler_fixup 52.globl user_irqvec_fixup, user_irqhandler_fixup 53 54.text 55ENTRY(buserr) 56 SAVE_ALL_INT 57 GET_CURRENT(%d0) 58 movel %sp,%sp@- | stack frame pointer argument 59 bsrl buserr_c 60 addql #4,%sp 61 jra .Lret_from_exception 62 63ENTRY(trap) 64 SAVE_ALL_INT 65 GET_CURRENT(%d0) 66 movel %sp,%sp@- | stack frame pointer argument 67 bsrl trap_c 68 addql #4,%sp 69 jra .Lret_from_exception 70 71 | After a fork we jump here directly from resume, 72 | so that %d1 contains the previous task 73 | schedule_tail now used regardless of CONFIG_SMP 74ENTRY(ret_from_fork) 75 movel %d1,%sp@- 76 jsr schedule_tail 77 addql #4,%sp 78 jra .Lret_from_exception 79 80do_trace_entry: 81 movel #-ENOSYS,%sp@(PT_D0) | needed for strace 82 subql #4,%sp 83 SAVE_SWITCH_STACK 84 jbsr syscall_trace 85 RESTORE_SWITCH_STACK 86 addql #4,%sp 87 movel %sp@(PT_ORIG_D0),%d0 88 cmpl #NR_syscalls,%d0 89 jcs syscall 90badsys: 91 movel #-ENOSYS,%sp@(PT_D0) 92 jra ret_from_syscall 93 94do_trace_exit: 95 subql #4,%sp 96 SAVE_SWITCH_STACK 97 jbsr syscall_trace 98 RESTORE_SWITCH_STACK 99 addql #4,%sp 100 jra .Lret_from_exception 101 102ENTRY(ret_from_signal) 103 RESTORE_SWITCH_STACK 104 addql #4,%sp 105/* on 68040 complete pending writebacks if any */ 106#ifdef CONFIG_M68040 107 bfextu %sp@(PT_VECTOR){#0,#4},%d0 108 subql #7,%d0 | bus error frame ? 109 jbne 1f 110 movel %sp,%sp@- 111 jbsr berr_040cleanup 112 addql #4,%sp 1131: 114#endif 115 jra .Lret_from_exception 116 117ENTRY(system_call) 118 SAVE_ALL_SYS 119 120 GET_CURRENT(%d1) 121 | save top of frame 122 movel %sp,%curptr@(TASK_THREAD+THREAD_ESP0) 123 124 | syscall trace? 125 tstb %curptr@(TASK_INFO+TINFO_FLAGS+2) 126 jmi do_trace_entry 127 cmpl #NR_syscalls,%d0 128 jcc badsys 129syscall: 130 jbsr @(sys_call_table,%d0:l:4)@(0) 131 movel %d0,%sp@(PT_D0) | save the return value 132ret_from_syscall: 133 |oriw #0x0700,%sr 134 movew %curptr@(TASK_INFO+TINFO_FLAGS+2),%d0 135 jne syscall_exit_work 1361: RESTORE_ALL 137 138syscall_exit_work: 139 btst #5,%sp@(PT_SR) | check if returning to kernel 140 bnes 1b | if so, skip resched, signals 141 lslw #1,%d0 142 jcs do_trace_exit 143 jmi do_delayed_trace 144 lslw #8,%d0 145 jmi do_signal_return 146 pea resume_userspace 147 jra schedule 148 149 150ENTRY(ret_from_exception) 151.Lret_from_exception: 152 btst #5,%sp@(PT_SR) | check if returning to kernel 153 bnes 1f | if so, skip resched, signals 154 | only allow interrupts when we are really the last one on the 155 | kernel stack, otherwise stack overflow can occur during 156 | heavy interrupt load 157 andw #ALLOWINT,%sr 158 159resume_userspace: 160 moveb %curptr@(TASK_INFO+TINFO_FLAGS+3),%d0 161 jne exit_work 1621: RESTORE_ALL 163 164exit_work: 165 | save top of frame 166 movel %sp,%curptr@(TASK_THREAD+THREAD_ESP0) 167 lslb #1,%d0 168 jmi do_signal_return 169 pea resume_userspace 170 jra schedule 171 172 173do_signal_return: 174 |andw #ALLOWINT,%sr 175 subql #4,%sp | dummy return address 176 SAVE_SWITCH_STACK 177 pea %sp@(SWITCH_STACK_SIZE) 178 clrl %sp@- 179 bsrl do_signal 180 addql #8,%sp 181 RESTORE_SWITCH_STACK 182 addql #4,%sp 183 jbra resume_userspace 184 185do_delayed_trace: 186 bclr #7,%sp@(PT_SR) | clear trace bit in SR 187 pea 1 | send SIGTRAP 188 movel %curptr,%sp@- 189 pea LSIGTRAP 190 jbsr send_sig 191 addql #8,%sp 192 addql #4,%sp 193 jbra resume_userspace 194 195 196/* This is the main interrupt handler for autovector interrupts */ 197 198ENTRY(auto_inthandler) 199 SAVE_ALL_INT 200 GET_CURRENT(%d0) 201 addqb #1,%curptr@(TASK_INFO+TINFO_PREEMPT+1) 202 | put exception # in d0 203 bfextu %sp@(PT_VECTOR){#4,#10},%d0 204 subw #VEC_SPUR,%d0 205 206 movel %sp,%sp@- 207 movel %d0,%sp@- | put vector # on stack 208auto_irqhandler_fixup = . + 2 209 jsr m68k_handle_int | process the IRQ 210 addql #8,%sp | pop parameters off stack 211 212ret_from_interrupt: 213 subqb #1,%curptr@(TASK_INFO+TINFO_PREEMPT+1) 214 jeq ret_from_last_interrupt 2152: RESTORE_ALL 216 217 ALIGN 218ret_from_last_interrupt: 219 moveq #(~ALLOWINT>>8)&0xff,%d0 220 andb %sp@(PT_SR),%d0 221 jne 2b 222 223 /* check if we need to do software interrupts */ 224 tstl irq_stat+CPUSTAT_SOFTIRQ_PENDING 225 jeq .Lret_from_exception 226 pea ret_from_exception 227 jra do_softirq 228 229/* Handler for user defined interrupt vectors */ 230 231ENTRY(user_inthandler) 232 SAVE_ALL_INT 233 GET_CURRENT(%d0) 234 addqb #1,%curptr@(TASK_INFO+TINFO_PREEMPT+1) 235 | put exception # in d0 236 bfextu %sp@(PT_VECTOR){#4,#10},%d0 237user_irqvec_fixup = . + 2 238 subw #VEC_USER,%d0 239 240 movel %sp,%sp@- 241 movel %d0,%sp@- | put vector # on stack 242user_irqhandler_fixup = . + 2 243 jsr m68k_handle_int | process the IRQ 244 addql #8,%sp | pop parameters off stack 245 246 subqb #1,%curptr@(TASK_INFO+TINFO_PREEMPT+1) 247 jeq ret_from_last_interrupt 248 RESTORE_ALL 249 250/* Handler for uninitialized and spurious interrupts */ 251 252ENTRY(bad_inthandler) 253 SAVE_ALL_INT 254 GET_CURRENT(%d0) 255 addqb #1,%curptr@(TASK_INFO+TINFO_PREEMPT+1) 256 257 movel %sp,%sp@- 258 jsr handle_badint 259 addql #4,%sp 260 261 subqb #1,%curptr@(TASK_INFO+TINFO_PREEMPT+1) 262 jeq ret_from_last_interrupt 263 RESTORE_ALL 264 265 266ENTRY(sys_fork) 267 SAVE_SWITCH_STACK 268 pea %sp@(SWITCH_STACK_SIZE) 269 jbsr m68k_fork 270 addql #4,%sp 271 RESTORE_SWITCH_STACK 272 rts 273 274ENTRY(sys_clone) 275 SAVE_SWITCH_STACK 276 pea %sp@(SWITCH_STACK_SIZE) 277 jbsr m68k_clone 278 addql #4,%sp 279 RESTORE_SWITCH_STACK 280 rts 281 282ENTRY(sys_vfork) 283 SAVE_SWITCH_STACK 284 pea %sp@(SWITCH_STACK_SIZE) 285 jbsr m68k_vfork 286 addql #4,%sp 287 RESTORE_SWITCH_STACK 288 rts 289 290ENTRY(sys_sigsuspend) 291 SAVE_SWITCH_STACK 292 pea %sp@(SWITCH_STACK_SIZE) 293 jbsr do_sigsuspend 294 addql #4,%sp 295 RESTORE_SWITCH_STACK 296 rts 297 298ENTRY(sys_rt_sigsuspend) 299 SAVE_SWITCH_STACK 300 pea %sp@(SWITCH_STACK_SIZE) 301 jbsr do_rt_sigsuspend 302 addql #4,%sp 303 RESTORE_SWITCH_STACK 304 rts 305 306ENTRY(sys_sigreturn) 307 SAVE_SWITCH_STACK 308 jbsr do_sigreturn 309 RESTORE_SWITCH_STACK 310 rts 311 312ENTRY(sys_rt_sigreturn) 313 SAVE_SWITCH_STACK 314 jbsr do_rt_sigreturn 315 RESTORE_SWITCH_STACK 316 rts 317 318resume: 319 /* 320 * Beware - when entering resume, prev (the current task) is 321 * in a0, next (the new task) is in a1,so don't change these 322 * registers until their contents are no longer needed. 323 */ 324 325 /* save sr */ 326 movew %sr,%a0@(TASK_THREAD+THREAD_SR) 327 328 /* save fs (sfc,%dfc) (may be pointing to kernel memory) */ 329 movec %sfc,%d0 330 movew %d0,%a0@(TASK_THREAD+THREAD_FS) 331 332 /* save usp */ 333 /* it is better to use a movel here instead of a movew 8*) */ 334 movec %usp,%d0 335 movel %d0,%a0@(TASK_THREAD+THREAD_USP) 336 337 /* save non-scratch registers on stack */ 338 SAVE_SWITCH_STACK 339 340 /* save current kernel stack pointer */ 341 movel %sp,%a0@(TASK_THREAD+THREAD_KSP) 342 343 /* save floating point context */ 344#ifndef CONFIG_M68KFPU_EMU_ONLY 345#ifdef CONFIG_M68KFPU_EMU 346 tstl m68k_fputype 347 jeq 3f 348#endif 349 fsave %a0@(TASK_THREAD+THREAD_FPSTATE) 350 351#if defined(CONFIG_M68060) 352#if !defined(CPU_M68060_ONLY) 353 btst #3,m68k_cputype+3 354 beqs 1f 355#endif 356 /* The 060 FPU keeps status in bits 15-8 of the first longword */ 357 tstb %a0@(TASK_THREAD+THREAD_FPSTATE+2) 358 jeq 3f 359#if !defined(CPU_M68060_ONLY) 360 jra 2f 361#endif 362#endif /* CONFIG_M68060 */ 363#if !defined(CPU_M68060_ONLY) 3641: tstb %a0@(TASK_THREAD+THREAD_FPSTATE) 365 jeq 3f 366#endif 3672: fmovemx %fp0-%fp7,%a0@(TASK_THREAD+THREAD_FPREG) 368 fmoveml %fpcr/%fpsr/%fpiar,%a0@(TASK_THREAD+THREAD_FPCNTL) 3693: 370#endif /* CONFIG_M68KFPU_EMU_ONLY */ 371 /* Return previous task in %d1 */ 372 movel %curptr,%d1 373 374 /* switch to new task (a1 contains new task) */ 375 movel %a1,%curptr 376 377 /* restore floating point context */ 378#ifndef CONFIG_M68KFPU_EMU_ONLY 379#ifdef CONFIG_M68KFPU_EMU 380 tstl m68k_fputype 381 jeq 4f 382#endif 383#if defined(CONFIG_M68060) 384#if !defined(CPU_M68060_ONLY) 385 btst #3,m68k_cputype+3 386 beqs 1f 387#endif 388 /* The 060 FPU keeps status in bits 15-8 of the first longword */ 389 tstb %a1@(TASK_THREAD+THREAD_FPSTATE+2) 390 jeq 3f 391#if !defined(CPU_M68060_ONLY) 392 jra 2f 393#endif 394#endif /* CONFIG_M68060 */ 395#if !defined(CPU_M68060_ONLY) 3961: tstb %a1@(TASK_THREAD+THREAD_FPSTATE) 397 jeq 3f 398#endif 3992: fmovemx %a1@(TASK_THREAD+THREAD_FPREG),%fp0-%fp7 400 fmoveml %a1@(TASK_THREAD+THREAD_FPCNTL),%fpcr/%fpsr/%fpiar 4013: frestore %a1@(TASK_THREAD+THREAD_FPSTATE) 4024: 403#endif /* CONFIG_M68KFPU_EMU_ONLY */ 404 405 /* restore the kernel stack pointer */ 406 movel %a1@(TASK_THREAD+THREAD_KSP),%sp 407 408 /* restore non-scratch registers */ 409 RESTORE_SWITCH_STACK 410 411 /* restore user stack pointer */ 412 movel %a1@(TASK_THREAD+THREAD_USP),%a0 413 movel %a0,%usp 414 415 /* restore fs (sfc,%dfc) */ 416 movew %a1@(TASK_THREAD+THREAD_FS),%a0 417 movec %a0,%sfc 418 movec %a0,%dfc 419 420 /* restore status register */ 421 movew %a1@(TASK_THREAD+THREAD_SR),%sr 422 423 rts 424 425.data 426ALIGN 427sys_call_table: 428 .long sys_ni_syscall /* 0 - old "setup()" system call*/ 429 .long sys_exit 430 .long sys_fork 431 .long sys_read 432 .long sys_write 433 .long sys_open /* 5 */ 434 .long sys_close 435 .long sys_waitpid 436 .long sys_creat 437 .long sys_link 438 .long sys_unlink /* 10 */ 439 .long sys_execve 440 .long sys_chdir 441 .long sys_time 442 .long sys_mknod 443 .long sys_chmod /* 15 */ 444 .long sys_chown16 445 .long sys_ni_syscall /* old break syscall holder */ 446 .long sys_stat 447 .long sys_lseek 448 .long sys_getpid /* 20 */ 449 .long sys_mount 450 .long sys_oldumount 451 .long sys_setuid16 452 .long sys_getuid16 453 .long sys_stime /* 25 */ 454 .long sys_ptrace 455 .long sys_alarm 456 .long sys_fstat 457 .long sys_pause 458 .long sys_utime /* 30 */ 459 .long sys_ni_syscall /* old stty syscall holder */ 460 .long sys_ni_syscall /* old gtty syscall holder */ 461 .long sys_access 462 .long sys_nice 463 .long sys_ni_syscall /* 35 */ /* old ftime syscall holder */ 464 .long sys_sync 465 .long sys_kill 466 .long sys_rename 467 .long sys_mkdir 468 .long sys_rmdir /* 40 */ 469 .long sys_dup 470 .long sys_pipe 471 .long sys_times 472 .long sys_ni_syscall /* old prof syscall holder */ 473 .long sys_brk /* 45 */ 474 .long sys_setgid16 475 .long sys_getgid16 476 .long sys_signal 477 .long sys_geteuid16 478 .long sys_getegid16 /* 50 */ 479 .long sys_acct 480 .long sys_umount /* recycled never used phys() */ 481 .long sys_ni_syscall /* old lock syscall holder */ 482 .long sys_ioctl 483 .long sys_fcntl /* 55 */ 484 .long sys_ni_syscall /* old mpx syscall holder */ 485 .long sys_setpgid 486 .long sys_ni_syscall /* old ulimit syscall holder */ 487 .long sys_ni_syscall 488 .long sys_umask /* 60 */ 489 .long sys_chroot 490 .long sys_ustat 491 .long sys_dup2 492 .long sys_getppid 493 .long sys_getpgrp /* 65 */ 494 .long sys_setsid 495 .long sys_sigaction 496 .long sys_sgetmask 497 .long sys_ssetmask 498 .long sys_setreuid16 /* 70 */ 499 .long sys_setregid16 500 .long sys_sigsuspend 501 .long sys_sigpending 502 .long sys_sethostname 503 .long sys_setrlimit /* 75 */ 504 .long sys_old_getrlimit 505 .long sys_getrusage 506 .long sys_gettimeofday 507 .long sys_settimeofday 508 .long sys_getgroups16 /* 80 */ 509 .long sys_setgroups16 510 .long old_select 511 .long sys_symlink 512 .long sys_lstat 513 .long sys_readlink /* 85 */ 514 .long sys_uselib 515 .long sys_swapon 516 .long sys_reboot 517 .long old_readdir 518 .long old_mmap /* 90 */ 519 .long sys_munmap 520 .long sys_truncate 521 .long sys_ftruncate 522 .long sys_fchmod 523 .long sys_fchown16 /* 95 */ 524 .long sys_getpriority 525 .long sys_setpriority 526 .long sys_ni_syscall /* old profil syscall holder */ 527 .long sys_statfs 528 .long sys_fstatfs /* 100 */ 529 .long sys_ni_syscall /* ioperm for i386 */ 530 .long sys_socketcall 531 .long sys_syslog 532 .long sys_setitimer 533 .long sys_getitimer /* 105 */ 534 .long sys_newstat 535 .long sys_newlstat 536 .long sys_newfstat 537 .long sys_ni_syscall 538 .long sys_ni_syscall /* 110 */ /* iopl for i386 */ 539 .long sys_vhangup 540 .long sys_ni_syscall /* obsolete idle() syscall */ 541 .long sys_ni_syscall /* vm86old for i386 */ 542 .long sys_wait4 543 .long sys_swapoff /* 115 */ 544 .long sys_sysinfo 545 .long sys_ipc 546 .long sys_fsync 547 .long sys_sigreturn 548 .long sys_clone /* 120 */ 549 .long sys_setdomainname 550 .long sys_newuname 551 .long sys_cacheflush /* modify_ldt for i386 */ 552 .long sys_adjtimex 553 .long sys_mprotect /* 125 */ 554 .long sys_sigprocmask 555 .long sys_ni_syscall /* old "create_module" */ 556 .long sys_init_module 557 .long sys_delete_module 558 .long sys_ni_syscall /* 130 - old "get_kernel_syms" */ 559 .long sys_quotactl 560 .long sys_getpgid 561 .long sys_fchdir 562 .long sys_bdflush 563 .long sys_sysfs /* 135 */ 564 .long sys_personality 565 .long sys_ni_syscall /* for afs_syscall */ 566 .long sys_setfsuid16 567 .long sys_setfsgid16 568 .long sys_llseek /* 140 */ 569 .long sys_getdents 570 .long sys_select 571 .long sys_flock 572 .long sys_msync 573 .long sys_readv /* 145 */ 574 .long sys_writev 575 .long sys_getsid 576 .long sys_fdatasync 577 .long sys_sysctl 578 .long sys_mlock /* 150 */ 579 .long sys_munlock 580 .long sys_mlockall 581 .long sys_munlockall 582 .long sys_sched_setparam 583 .long sys_sched_getparam /* 155 */ 584 .long sys_sched_setscheduler 585 .long sys_sched_getscheduler 586 .long sys_sched_yield 587 .long sys_sched_get_priority_max 588 .long sys_sched_get_priority_min /* 160 */ 589 .long sys_sched_rr_get_interval 590 .long sys_nanosleep 591 .long sys_mremap 592 .long sys_setresuid16 593 .long sys_getresuid16 /* 165 */ 594 .long sys_getpagesize 595 .long sys_ni_syscall /* old sys_query_module */ 596 .long sys_poll 597 .long sys_nfsservctl 598 .long sys_setresgid16 /* 170 */ 599 .long sys_getresgid16 600 .long sys_prctl 601 .long sys_rt_sigreturn 602 .long sys_rt_sigaction 603 .long sys_rt_sigprocmask /* 175 */ 604 .long sys_rt_sigpending 605 .long sys_rt_sigtimedwait 606 .long sys_rt_sigqueueinfo 607 .long sys_rt_sigsuspend 608 .long sys_pread64 /* 180 */ 609 .long sys_pwrite64 610 .long sys_lchown16; 611 .long sys_getcwd 612 .long sys_capget 613 .long sys_capset /* 185 */ 614 .long sys_sigaltstack 615 .long sys_sendfile 616 .long sys_ni_syscall /* streams1 */ 617 .long sys_ni_syscall /* streams2 */ 618 .long sys_vfork /* 190 */ 619 .long sys_getrlimit 620 .long sys_mmap2 621 .long sys_truncate64 622 .long sys_ftruncate64 623 .long sys_stat64 /* 195 */ 624 .long sys_lstat64 625 .long sys_fstat64 626 .long sys_chown 627 .long sys_getuid 628 .long sys_getgid /* 200 */ 629 .long sys_geteuid 630 .long sys_getegid 631 .long sys_setreuid 632 .long sys_setregid 633 .long sys_getgroups /* 205 */ 634 .long sys_setgroups 635 .long sys_fchown 636 .long sys_setresuid 637 .long sys_getresuid 638 .long sys_setresgid /* 210 */ 639 .long sys_getresgid 640 .long sys_lchown 641 .long sys_setuid 642 .long sys_setgid 643 .long sys_setfsuid /* 215 */ 644 .long sys_setfsgid 645 .long sys_pivot_root 646 .long sys_ni_syscall 647 .long sys_ni_syscall 648 .long sys_getdents64 /* 220 */ 649 .long sys_gettid 650 .long sys_tkill 651 .long sys_setxattr 652 .long sys_lsetxattr 653 .long sys_fsetxattr /* 225 */ 654 .long sys_getxattr 655 .long sys_lgetxattr 656 .long sys_fgetxattr 657 .long sys_listxattr 658 .long sys_llistxattr /* 230 */ 659 .long sys_flistxattr 660 .long sys_removexattr 661 .long sys_lremovexattr 662 .long sys_fremovexattr 663 .long sys_futex /* 235 */ 664 .long sys_sendfile64 665 .long sys_mincore 666 .long sys_madvise 667 .long sys_fcntl64 668 .long sys_readahead /* 240 */ 669 .long sys_io_setup 670 .long sys_io_destroy 671 .long sys_io_getevents 672 .long sys_io_submit 673 .long sys_io_cancel /* 245 */ 674 .long sys_fadvise64 675 .long sys_exit_group 676 .long sys_lookup_dcookie 677 .long sys_epoll_create 678 .long sys_epoll_ctl /* 250 */ 679 .long sys_epoll_wait 680 .long sys_remap_file_pages 681 .long sys_set_tid_address 682 .long sys_timer_create 683 .long sys_timer_settime /* 255 */ 684 .long sys_timer_gettime 685 .long sys_timer_getoverrun 686 .long sys_timer_delete 687 .long sys_clock_settime 688 .long sys_clock_gettime /* 260 */ 689 .long sys_clock_getres 690 .long sys_clock_nanosleep 691 .long sys_statfs64 692 .long sys_fstatfs64 693 .long sys_tgkill /* 265 */ 694 .long sys_utimes 695 .long sys_fadvise64_64 696 .long sys_mbind 697 .long sys_get_mempolicy 698 .long sys_set_mempolicy /* 270 */ 699 .long sys_mq_open 700 .long sys_mq_unlink 701 .long sys_mq_timedsend 702 .long sys_mq_timedreceive 703 .long sys_mq_notify /* 275 */ 704 .long sys_mq_getsetattr 705 .long sys_waitid 706 .long sys_ni_syscall /* for sys_vserver */ 707 .long sys_add_key 708 .long sys_request_key /* 280 */ 709 .long sys_keyctl 710 711