/* * arch/ppc64/kernel/misc.S * * * * This file contains miscellaneous low-level functions. * Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org) * * Largely rewritten by Cort Dougan (cort@cs.nmt.edu) * and Paul Mackerras. * Adapted for iSeries by Mike Corrigan (mikejc@us.ibm.com) * PPC64 updates by Dave Engebretsen (engebret@us.ibm.com) * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version * 2 of the License, or (at your option) any later version. * */ #include #include #include #include #include #include #include #include #include "ppc_asm.h" .text /* * Returns (address we're running at) - (address we were linked at) * for use before the text and data are mapped to KERNELBASE. */ _GLOBAL(reloc_offset) mflr r0 bl 1f 1: mflr r3 LOADADDR(r4,1b) sub r3,r4,r3 mtlr r0 blr _GLOBAL(get_msr) mfmsr r3 blr _GLOBAL(get_dar) mfdar r3 blr _GLOBAL(get_srr0) mfsrr0 r3 blr _GLOBAL(get_srr1) mfsrr1 r3 blr _GLOBAL(get_sp) mr r3,r1 blr #ifdef CONFIG_PPC_ISERIES /* unsigned long __no_use_save_flags(void) */ _GLOBAL(__no_use_save_flags) mfspr r4,SPRG3 lbz r3,PACAPROCENABLED(r4) /* shift into position of MSR.EE */ sldi r3,r3,15 blr /* void __no_use_restore_flags(unsigned long flags) */ _GLOBAL(__no_use_restore_flags) /* shift from position of MSR.EE */ srdi r3,r3,15 mfspr r6,SPRG3 lbz r5,PACAPROCENABLED(r6) /* Check if things are setup the way we want _already_. */ cmpw 0,r3,r5 beqlr /* are we enabling interrupts? */ cmpi 0,r3,0 stb r3,PACAPROCENABLED(r6) beqlr /* Check pending interrupts */ CHECKANYINT(r4,r5) beqlr /* * Handle pending interrupts in interrupt context */ li r0,0x5555 sc blr _GLOBAL(__no_use_cli) mfspr r5,SPRG3 lbz r3,PACAPROCENABLED(r5) li r4,0 stb r4,PACAPROCENABLED(r5) /* shift into position of MSR.EE */ sldi r3,r3,15 blr /* Done */ _GLOBAL(__no_use_sti) mfspr r6,SPRG3 li r3,1 stb r3,PACAPROCENABLED(r6) /* Check for pending interrupts * A decrementer, IPI or PMC interrupt may have occurred * while we were in the hypervisor (which enables) */ CHECKANYINT(r4,r5) beqlr /* * Handle pending interrupts in interrupt context */ li r0,0x5555 sc blr #endif /* * Flush instruction cache. */ _GLOBAL(flush_instruction_cache) /* * This is called by kgdb code * and should probably go away * to be replaced by invalidating * the cache lines that are actually * modified */ /* use invalidate-all bit in HID0 * - is this consistent across all 64-bit cpus? -- paulus */ mfspr r3,HID0 ori r3,r3,HID0_ICFI mtspr HID0,r3 sync isync blr /* * Write any modified data cache blocks out to memory * and invalidate the corresponding instruction cache blocks. * * flush_icache_range(unsigned long start, unsigned long stop) * * flush all bytes from start through stop-1 inclusive */ _GLOBAL(flush_icache_range) /* * Flush the data cache to memory * * Different systems have different cache line sizes * and in some cases i-cache and d-cache line sizes differ from * each other. */ LOADADDR(r10,naca) /* Get Naca address */ ld r10,0(r10) LOADADDR(r11,systemcfg) /* Get systemcfg address */ ld r11,0(r11) lwz r7,DCACHEL1LINESIZE(r11) /* Get cache line size */ addi r5,r7,-1 andc r6,r3,r5 /* round low to line bdy */ subf r8,r6,r4 /* compute length */ add r8,r8,r5 /* ensure we get enough */ lwz r9,DCACHEL1LOGLINESIZE(r10) /* Get log-2 of cache line size */ srw. r8,r8,r9 /* compute line count */ beqlr /* nothing to do? */ mtctr r8 1: dcbst 0,r6 add r6,r6,r7 bdnz 1b sync /* Now invalidate the instruction cache */ lwz r7,ICACHEL1LINESIZE(r11) /* Get Icache line size */ addi r5,r7,-1 andc r6,r3,r5 /* round low to line bdy */ subf r8,r6,r4 /* compute length */ add r8,r8,r5 lwz r9,ICACHEL1LOGLINESIZE(r10) /* Get log-2 of Icache line size */ srw. r8,r8,r9 /* compute line count */ beqlr /* nothing to do? */ mtctr r8 2: icbi 0,r6 add r6,r6,r7 bdnz 2b isync blr /* * Like above, but only do the D-cache. * * flush_dcache_range(unsigned long start, unsigned long stop) * * flush all bytes from start to stop-1 inclusive */ _GLOBAL(flush_dcache_range) /* * Flush the data cache to memory * * Different systems have different cache line sizes */ LOADADDR(r10,naca) /* Get Naca address */ ld r10,0(r10) LOADADDR(r11,systemcfg) /* Get systemcfg address */ ld r11,0(r11) lwz r7,DCACHEL1LINESIZE(r11) /* Get dcache line size */ addi r5,r7,-1 andc r6,r3,r5 /* round low to line bdy */ subf r8,r6,r4 /* compute length */ add r8,r8,r5 /* ensure we get enough */ lwz r9,DCACHEL1LOGLINESIZE(r10) /* Get log-2 of dcache line size */ srw. r8,r8,r9 /* compute line count */ beqlr /* nothing to do? */ mtctr r8 0: dcbst 0,r6 add r6,r6,r7 bdnz 0b sync blr /* * Flush a particular page from the data cache to RAM. * Note: this is necessary because the instruction cache does *not* * snoop from the data cache. * * void __flush_dcache_icache(void *page) */ _GLOBAL(__flush_dcache_icache) /* * Flush the data cache to memory * * Different systems have different cache line sizes */ /* Flush the dcache */ LOADADDR(r7,naca) ld r7,0(r7) LOADADDR(r8,systemcfg) /* Get systemcfg address */ ld r8,0(r8) clrrdi r3,r3,12 /* Page align */ lwz r4,DCACHEL1LINESPERPAGE(r7) /* Get # dcache lines per page */ lwz r5,DCACHEL1LINESIZE(r8) /* Get dcache line size */ mr r6,r3 mtctr r4 0: dcbst 0,r6 add r6,r6,r5 bdnz 0b sync /* Now invalidate the icache */ lwz r4,ICACHEL1LINESPERPAGE(r7) /* Get # icache lines per page */ lwz r5,ICACHEL1LINESIZE(r8) /* Get icache line size */ mtctr r4 1: icbi 0,r3 add r3,r3,r5 bdnz 1b isync blr /* * I/O string operations * * insb(port, buf, len) * outsb(port, buf, len) * insw(port, buf, len) * outsw(port, buf, len) * insl(port, buf, len) * outsl(port, buf, len) * insw_ns(port, buf, len) * outsw_ns(port, buf, len) * insl_ns(port, buf, len) * outsl_ns(port, buf, len) * * The *_ns versions don't do byte-swapping. */ _GLOBAL(_insb) cmpwi 0,r5,0 mtctr r5 subi r4,r4,1 blelr- 00: lbz r5,0(r3) eieio stbu r5,1(r4) bdnz 00b blr _GLOBAL(_outsb) cmpwi 0,r5,0 mtctr r5 subi r4,r4,1 blelr- 00: lbzu r5,1(r4) stb r5,0(r3) eieio bdnz 00b blr _GLOBAL(_insw) cmpwi 0,r5,0 mtctr r5 subi r4,r4,2 blelr- 00: lhbrx r5,0,r3 eieio sthu r5,2(r4) bdnz 00b blr _GLOBAL(_outsw) cmpwi 0,r5,0 mtctr r5 subi r4,r4,2 blelr- 00: lhzu r5,2(r4) eieio sthbrx r5,0,r3 bdnz 00b blr _GLOBAL(_insl) cmpwi 0,r5,0 mtctr r5 subi r4,r4,4 blelr- 00: lwbrx r5,0,r3 eieio stwu r5,4(r4) bdnz 00b blr _GLOBAL(_outsl) cmpwi 0,r5,0 mtctr r5 subi r4,r4,4 blelr- 00: lwzu r5,4(r4) stwbrx r5,0,r3 eieio bdnz 00b blr _GLOBAL(_insw_ns) cmpwi 0,r5,0 mtctr r5 subi r4,r4,2 blelr- 00: lhz r5,0(r3) eieio sthu r5,2(r4) bdnz 00b blr _GLOBAL(_outsw_ns) cmpwi 0,r5,0 mtctr r5 subi r4,r4,2 blelr- 00: lhzu r5,2(r4) sth r5,0(r3) eieio bdnz 00b blr _GLOBAL(_insl_ns) cmpwi 0,r5,0 mtctr r5 subi r4,r4,4 blelr- 00: lwz r5,0(r3) eieio stwu r5,4(r4) bdnz 00b blr _GLOBAL(_outsl_ns) cmpwi 0,r5,0 mtctr r5 subi r4,r4,4 blelr- 00: lwzu r5,4(r4) stw r5,0(r3) eieio bdnz 00b blr /* * Extended precision shifts * * R3/R4 has 64 bit value * R5 has shift count * result in R3/R4 * * ashrdi3: XXXYYY/ZZZAAA -> SSSXXX/YYYZZZ * ashldi3: XXXYYY/ZZZAAA -> YYYZZZ/AAA000 * lshrdi3: XXXYYY/ZZZAAA -> 000XXX/YYYZZZ */ /* MIKEC: These may no longer be needed...what does gcc expect ? */ _GLOBAL(__ashrdi3) li r6,32 sub r6,r6,r5 slw r7,r3,r6 /* isolate YYY */ srw r4,r4,r5 /* isolate ZZZ */ or r4,r4,r7 /* YYYZZZ */ sraw r3,r3,r5 /* SSSXXX */ blr _GLOBAL(__ashldi3) li r6,32 sub r6,r6,r5 srw r7,r4,r6 /* isolate ZZZ */ slw r4,r4,r5 /* AAA000 */ slw r3,r3,r5 /* YYY--- */ or r3,r3,r7 /* YYYZZZ */ blr _GLOBAL(__lshrdi3) li r6,32 sub r6,r6,r5 slw r7,r3,r6 /* isolate YYY */ srw r4,r4,r5 /* isolate ZZZ */ or r4,r4,r7 /* YYYZZZ */ srw r3,r3,r5 /* 000XXX */ blr _GLOBAL(abs) cmpi 0,r3,0 bge 10f neg r3,r3 10: blr _GLOBAL(_get_SP) mr r3,r1 /* Close enough */ blr _GLOBAL(_get_PVR) mfspr r3,PVR blr _GLOBAL(_get_PIR) mfspr r3,PIR blr _GLOBAL(_get_HID0) mfspr r3,HID0 blr _GLOBAL(cvt_fd) lfd 0,0(r5) /* load up fpscr value */ mtfsf 0xff,0 lfs 0,0(r3) stfd 0,0(r4) mffs 0 /* save new fpscr value */ stfd 0,0(r5) blr _GLOBAL(cvt_df) lfd 0,0(r5) /* load up fpscr value */ mtfsf 0xff,0 lfd 0,0(r3) stfs 0,0(r4) mffs 0 /* save new fpscr value */ stfd 0,0(r5) blr /* * identify_cpu, * In: r3 = base of the cpu_specs array * r4 = address of cur_cpu_spec * r5 = relocation offset */ _GLOBAL(identify_cpu) mfpvr r7 1: lwz r8,CPU_SPEC_PVR_MASK(r3) and r8,r8,r7 lwz r9,CPU_SPEC_PVR_VALUE(r3) cmplw 0,r9,r8 beq 1f addi r3,r3,CPU_SPEC_ENTRY_SIZE b 1b 1: add r3,r3,r5 std r3,0(r4) blr /* * do_cpu_ftr_fixups - goes through the list of CPU feature fixups * and writes nop's over sections of code that don't apply for this cpu. * r3 = data offset (not changed) */ _GLOBAL(do_cpu_ftr_fixups) /* Dummy feature section to make sure section exists */ BEGIN_FTR_SECTION END_FTR_SECTION(0,0) /* Get CPU 0 features */ LOADADDR(r6,cur_cpu_spec) sub r6,r6,r3 ld r4,0(r6) sub r4,r4,r3 ld r4,CPU_SPEC_FEATURES(r4) /* Get the fixup table */ LOADADDR(r6,__start___ftr_fixup) sub r6,r6,r3 LOADADDR(r7,__stop___ftr_fixup) sub r7,r7,r3 /* Do the fixup */ 1: cmpld r6,r7 bgelr addi r6,r6,32 ld r8,-32(r6) /* mask */ and r8,r8,r4 ld r9,-24(r6) /* value */ cmpld r8,r9 beq 1b ld r8,-16(r6) /* section begin */ ld r9,-8(r6) /* section end */ subf. r9,r8,r9 beq 1b /* write nops over the section of code */ /* todo: if large section, add a branch at the start of it */ srwi r9,r9,2 mtctr r9 sub r8,r8,r3 lis r0,0x60000000@h /* nop */ 3: stw r0,0(r8) andi. r10,r4,CPU_FTR_SPLIT_ID_CACHE@l beq 2f dcbst 0,r8 /* suboptimal, but simpler */ sync icbi 0,r8 2: addi r8,r8,4 bdnz 3b sync /* additional sync needed on g4 */ isync b 1b /* * call_setup_cpu - call the setup_cpu function for this cpu * r3 = data offset * * Setup function is called with: * r3 = data offset * r4 = ptr to CPU spec (relocated) */ _GLOBAL(call_setup_cpu) LOADADDR(r4, cur_cpu_spec) sub r4,r4,r3 lwz r4,0(r4) # load pointer to cpu_spec sub r4,r4,r3 # relocate lwz r6,CPU_SPEC_SETUP(r4) # load function pointer sub r6,r6,r3 mtctr r6 bctr /* * Create a kernel thread * arch_kernel_thread(fn, arg, flags) */ _GLOBAL(arch_kernel_thread) mr r6,r3 /* function */ ori r3,r5,CLONE_VM /* flags */ li r0,__NR_clone sc cmpi 0,r3,0 /* parent or child? */ bnelr /* return if parent */ li r0,0 /* clear out p->thread.regs */ ld r7,PACACURRENT(r13) std r0,THREAD+PT_REGS(r7) /* since we don't have user ctx */ li r0,RUN_FLAG /* Run light on */ std r0,THREAD+THREAD_FLAGS(r7) ld r2,8(r6) ld r6,0(r6) mtlr r6 /* fn addr in lr */ mr r3,r4 /* load arg and call fn */ blrl li r0,__NR_exit /* exit after child exits */ li r3,0 sc #ifdef CONFIG_BINFMT_ELF32 /* Why isn't this a) automatic, b) written in 'C'? */ .balign 8 _GLOBAL(sys_call_table32) .llong .sys_ni_syscall /* 0 - old "setup()" system call */ .llong .sys32_exit .llong .sys32_fork .llong .sys_read .llong .sys_write .llong .sys32_open /* 5 */ .llong .sys_close .llong .sys32_waitpid .llong .sys32_creat .llong .sys_link .llong .sys_unlink /* 10 */ .llong .sys32_execve .llong .sys_chdir .llong .sys32_time .llong .sys_mknod .llong .sys_chmod /* 15 */ .llong .sys_lchown .llong .sys_ni_syscall /* old break syscall holder */ .llong .sys32_stat .llong .sys32_lseek .llong .sys_getpid /* 20 */ .llong .sys32_mount .llong .sys_oldumount .llong .sys_setuid .llong .sys_getuid .llong .ppc64_sys32_stime /* 25 */ .llong .sys32_ptrace .llong .sys_alarm .llong .sys32_fstat .llong .sys32_pause .llong .sys32_utime /* 30 */ .llong .sys_ni_syscall /* old stty syscall holder */ .llong .sys_ni_syscall /* old gtty syscall holder */ .llong .sys32_access .llong .sys32_nice .llong .sys_ni_syscall /* 35 */ /* old ftime syscall holder */ .llong .sys_sync .llong .sys32_kill .llong .sys_rename .llong .sys32_mkdir .llong .sys_rmdir /* 40 */ .llong .sys_dup .llong .sys_pipe .llong .sys32_times .llong .sys_ni_syscall /* old prof syscall holder */ .llong .sys_brk /* 45 */ .llong .sys_setgid .llong .sys_getgid .llong .sys_signal .llong .sys_geteuid .llong .sys_getegid /* 50 */ .llong .sys_acct .llong .sys32_umount /* recycled never used phys() */ .llong .sys_ni_syscall /* old lock syscall holder */ .llong .sys32_ioctl .llong .sys32_fcntl /* 55 */ .llong .sys_ni_syscall /* old mpx syscall holder */ .llong .sys32_setpgid .llong .sys_ni_syscall /* old ulimit syscall holder */ .llong .sys_olduname .llong .sys32_umask /* 60 */ .llong .sys_chroot .llong .sys_ustat .llong .sys_dup2 .llong .sys_getppid .llong .sys_getpgrp /* 65 */ .llong .sys_setsid .llong .sys32_sigaction .llong .sys_sgetmask .llong .sys32_ssetmask .llong .sys_setreuid /* 70 */ .llong .sys_setregid .llong .sys_sigsuspend .llong .sys32_sigpending .llong .sys32_sethostname .llong .sys32_setrlimit /* 75 */ .llong .sys32_old_getrlimit .llong .sys32_getrusage .llong .sys32_gettimeofday .llong .sys32_settimeofday .llong .sys32_getgroups /* 80 */ .llong .sys32_setgroups .llong .sys_ni_syscall /* old select syscall */ .llong .sys_symlink .llong .sys32_lstat .llong .sys32_readlink /* 85 */ .llong .sys_uselib .llong .sys32_swapon .llong .sys32_reboot .llong .old32_readdir .llong .sys32_mmap /* 90 */ .llong .sys_munmap .llong .sys_truncate .llong .sys_ftruncate .llong .sys_fchmod .llong .sys_fchown /* 95 */ .llong .sys32_getpriority .llong .sys32_setpriority .llong .sys_ni_syscall /* old profil syscall holder */ .llong .sys32_statfs .llong .sys32_fstatfs /* 100 */ .llong .sys_ioperm .llong .sys32_socketcall .llong .sys32_syslog .llong .sys32_setitimer .llong .sys32_getitimer /* 105 */ .llong .sys32_newstat .llong .sys32_newlstat .llong .sys32_newfstat .llong .sys_uname .llong .sys_ni_syscall /* 110 old iopl syscall */ .llong .sys_vhangup .llong .sys_ni_syscall /* old 'idle' syscall */ .llong .sys_ni_syscall /* old vm86 syscall */ .llong .sys32_wait4 .llong .sys_swapoff /* 115 */ .llong .sys32_sysinfo .llong .sys32_ipc .llong .sys_fsync .llong .ppc32_sigreturn .llong .sys32_clone /* 120 */ .llong .sys32_setdomainname .llong .ppc64_newuname .llong .sys_ni_syscall /* old modify_ldt syscall */ .llong .sys32_adjtimex .llong .sys_mprotect /* 125 */ .llong .sys32_sigprocmask .llong .sys32_create_module .llong .sys32_init_module .llong .sys32_delete_module .llong .sys32_get_kernel_syms /* 130 */ .llong .sys32_quotactl .llong .sys32_getpgid .llong .sys_fchdir .llong .sys32_bdflush .llong .sys32_sysfs /* 135 */ .llong .sys32_personality .llong .sys_ni_syscall /* for afs_syscall */ .llong .sys_setfsuid .llong .sys_setfsgid .llong .sys_llseek /* 140 */ .llong .sys32_getdents .llong .ppc32_select .llong .sys_flock .llong .sys32_msync .llong .sys32_readv /* 145 */ .llong .sys32_writev .llong .sys32_getsid .llong .sys_fdatasync .llong .sys32_sysctl .llong .sys_mlock /* 150 */ .llong .sys_munlock .llong .sys32_mlockall .llong .sys_munlockall .llong .sys32_sched_setparam .llong .sys32_sched_getparam /* 155 */ .llong .sys32_sched_setscheduler .llong .sys32_sched_getscheduler .llong .sys_sched_yield .llong .sys32_sched_get_priority_max .llong .sys32_sched_get_priority_min /* 160 */ .llong .sys32_sched_rr_get_interval .llong .sys32_nanosleep .llong .sys32_mremap .llong .sys_setresuid .llong .sys_getresuid /* 165 */ .llong .sys32_query_module .llong .sys_poll .llong .sys32_nfsservctl .llong .sys_setresgid .llong .sys_getresgid /* 170 */ .llong .sys32_prctl .llong .ppc32_rt_sigreturn .llong .sys32_rt_sigaction .llong .sys32_rt_sigprocmask .llong .sys32_rt_sigpending /* 175 */ .llong .sys32_rt_sigtimedwait .llong .sys32_rt_sigqueueinfo .llong .sys32_rt_sigsuspend .llong .sys32_pread .llong .sys32_pwrite /* 180 */ .llong .sys_chown .llong .sys_getcwd .llong .sys_capget .llong .sys_capset .llong .sys32_sigaltstack /* 185 */ .llong .sys32_sendfile .llong .sys_ni_syscall /* streams1 */ .llong .sys_ni_syscall /* streams2 */ .llong .sys32_vfork .llong .sys32_getrlimit /* 190 */ .llong .sys32_readahead .llong .ppc32_mmap2 .llong .sys32_truncate64 /* 193 - truncate64 */ .llong .sys32_ftruncate64 /* 194 - ftruncate64 */ .llong .sys_stat64 /* 195 - stat64 */ .llong .sys_lstat64 /* 196 - lstat64 */ .llong .sys_fstat64 /* 197 - fstat64 */ .llong .sys32_pciconfig_read /* 198 */ .llong .sys32_pciconfig_write /* 199 */ .llong .sys_pciconfig_iobase /* 200 */ .llong .sys_ni_syscall /* 201 - reserved - MacOnLinux - new */ .llong .sys_getdents64 /* 202 */ .llong .sys_pivot_root /* 203 */ .llong .sys32_fcntl64 /* 204 */ .llong .sys_madvise /* 205 */ .llong .sys_mincore /* 206 */ .llong .sys_gettid /* 207 */ #if 0 /* Reserved syscalls */ .llong .sys_tkill /* 208 */ .llong .sys_setxattr .llong .sys_lsetxattr /* 210 */ .llong .sys_fsetxattr .llong .sys_getxattr .llong .sys_lgetxattr .llong .sys_fgetxattr .llong .sys_listxattr /* 215 */ .llong .sys_llistxattr .llong .sys_flistxattr .llong .sys_removexattr .llong .sys_lremovexattr .llong .sys_fremovexattr /* 220 */ .llong .sys_futex #endif .llong .sys_perfmonctl /* Put this here for now ... */ .rept NR_syscalls-222 .llong .sys_ni_syscall .endr #endif .balign 8 _GLOBAL(sys_call_table) .llong .sys_ni_syscall /* 0 - old "setup()" system call */ .llong .sys_exit .llong .sys_fork .llong .sys_read .llong .sys_write .llong .sys_open /* 5 */ .llong .sys_close .llong .sys_waitpid .llong .sys_creat .llong .sys_link .llong .sys_unlink /* 10 */ .llong .sys_execve .llong .sys_chdir .llong .sys64_time .llong .sys_mknod .llong .sys_chmod /* 15 */ .llong .sys_lchown .llong .sys_ni_syscall /* old break syscall holder */ .llong .sys_stat .llong .sys_lseek .llong .sys_getpid /* 20 */ .llong .sys_mount .llong .sys_ni_syscall /* old umount syscall */ .llong .sys_setuid .llong .sys_getuid .llong .ppc64_sys_stime /* 25 */ .llong .sys_ptrace .llong .sys_alarm .llong .sys_fstat .llong .sys_pause .llong .sys_utime /* 30 */ .llong .sys_ni_syscall /* old stty syscall holder */ .llong .sys_ni_syscall /* old gtty syscall holder */ .llong .sys_access .llong .sys_nice .llong .sys_ni_syscall /* 35 */ /* old ftime syscall holder */ .llong .sys_sync .llong .sys_kill .llong .sys_rename .llong .sys_mkdir .llong .sys_rmdir /* 40 */ .llong .sys_dup .llong .sys_pipe .llong .sys_times .llong .sys_ni_syscall /* old prof syscall holder */ .llong .sys_brk /* 45 */ .llong .sys_setgid .llong .sys_getgid .llong .sys_signal .llong .sys_geteuid .llong .sys_getegid /* 50 */ .llong .sys_acct .llong .sys_umount /* recycled never used phys() */ .llong .sys_ni_syscall /* old lock syscall holder */ .llong .sys_ioctl .llong .sys_fcntl /* 55 */ .llong .sys_ni_syscall /* old mpx syscall holder */ .llong .sys_setpgid .llong .sys_ni_syscall /* old ulimit syscall holder */ .llong .sys_ni_syscall /* old uname syscall */ .llong .sys_umask /* 60 */ .llong .sys_chroot .llong .sys_ustat .llong .sys_dup2 .llong .sys_getppid .llong .sys_getpgrp /* 65 */ .llong .sys_setsid .llong .sys_sigaction .llong .sys_sgetmask .llong .sys_ssetmask .llong .sys_setreuid /* 70 */ .llong .sys_setregid .llong .sys_sigsuspend .llong .sys_sigpending .llong .sys_sethostname .llong .sys_setrlimit /* 75 */ .llong .sys_ni_syscall /* old getrlimit syscall */ .llong .sys_getrusage .llong .sys_gettimeofday .llong .sys_settimeofday .llong .sys_getgroups /* 80 */ .llong .sys_setgroups .llong .sys_ni_syscall /* old select syscall */ .llong .sys_symlink .llong .sys_lstat .llong .sys_readlink /* 85 */ .llong .sys_uselib .llong .sys_swapon .llong .sys_reboot .llong .sys_ni_syscall /* old readdir syscall */ .llong .sys_mmap /* 90 */ .llong .sys_munmap .llong .sys_truncate .llong .sys_ftruncate .llong .sys_fchmod .llong .sys_fchown /* 95 */ .llong .sys_getpriority .llong .sys_setpriority .llong .sys_ni_syscall /* old profil syscall holder */ .llong .sys_statfs .llong .sys_fstatfs /* 100 */ .llong .sys_ioperm .llong .sys_socketcall .llong .sys_syslog .llong .sys_setitimer .llong .sys_getitimer /* 105 */ .llong .sys_newstat .llong .sys_newlstat .llong .sys_newfstat .llong .sys_uname .llong .sys_ni_syscall /* 110 old iopl syscall */ .llong .sys_vhangup .llong .sys_ni_syscall /* old 'idle' syscall */ .llong .sys_ni_syscall /* old vm86 syscall */ .llong .sys_wait4 .llong .sys_swapoff /* 115 */ .llong .sys_sysinfo .llong .sys_ipc .llong .sys_fsync .llong .ppc64_sigreturn .llong .sys_clone /* 120 */ .llong .sys_setdomainname .llong .ppc64_newuname .llong .sys_ni_syscall /* old modify_ldt syscall */ .llong .sys_adjtimex .llong .sys_mprotect /* 125 */ .llong .sys_sigprocmask .llong .sys_create_module .llong .sys_init_module .llong .sys_delete_module .llong .sys_get_kernel_syms /* 130 */ .llong .sys_quotactl .llong .sys_getpgid .llong .sys_fchdir .llong .sys_bdflush .llong .sys_sysfs /* 135 */ .llong .sys_personality .llong .sys_ni_syscall /* for afs_syscall */ .llong .sys_setfsuid .llong .sys_setfsgid .llong .sys_llseek /* 140 */ .llong .sys_getdents .llong .sys_select .llong .sys_flock .llong .sys_msync .llong .sys_readv /* 145 */ .llong .sys_writev .llong .sys_getsid .llong .sys_fdatasync .llong .sys_sysctl .llong .sys_mlock /* 150 */ .llong .sys_munlock .llong .sys_mlockall .llong .sys_munlockall .llong .sys_sched_setparam .llong .sys_sched_getparam /* 155 */ .llong .sys_sched_setscheduler .llong .sys_sched_getscheduler .llong .sys_sched_yield .llong .sys_sched_get_priority_max .llong .sys_sched_get_priority_min /* 160 */ .llong .sys_sched_rr_get_interval .llong .sys_nanosleep .llong .sys_mremap .llong .sys_setresuid .llong .sys_getresuid /* 165 */ .llong .sys_query_module .llong .sys_poll .llong .sys_nfsservctl .llong .sys_setresgid .llong .sys_getresgid /* 170 */ .llong .sys_prctl .llong .ppc64_rt_sigreturn .llong .sys_rt_sigaction .llong .sys_rt_sigprocmask .llong .sys_rt_sigpending /* 175 */ .llong .sys_rt_sigtimedwait .llong .sys_rt_sigqueueinfo .llong .sys_rt_sigsuspend .llong .sys_pread .llong .sys_pwrite /* 180 */ .llong .sys_chown .llong .sys_getcwd .llong .sys_capget .llong .sys_capset .llong .sys_sigaltstack /* 185 */ .llong .sys_sendfile .llong .sys_ni_syscall /* streams1 */ .llong .sys_ni_syscall /* streams2 */ .llong .sys_vfork .llong .sys_getrlimit /* 190 */ .llong .sys_readahead .llong .sys_ni_syscall /* 192 - reserved - mmap2 */ .llong .sys_ni_syscall /* 193 - reserved - truncate64 */ .llong .sys_ni_syscall /* 194 - reserved - ftruncate64 */ .llong .sys_ni_syscall /* 195 - reserved - stat64 */ .llong .sys_ni_syscall /* 196 - reserved - lstat64 */ .llong .sys_ni_syscall /* 197 - reserved - fstat64 */ .llong .sys_pciconfig_read /* 198 */ .llong .sys_pciconfig_write /* 199 */ .llong .sys_pciconfig_iobase /* 200 */ .llong .sys_ni_syscall /* 201 - reserved - MacOnLinux - new */ .llong .sys_getdents64 /* 202 */ .llong .sys_pivot_root /* 203 */ .llong .sys_ni_syscall /* 204 */ .llong .sys_madvise /* 205 */ .llong .sys_mincore /* 206 */ .llong .sys_gettid /* 207 */ #if 0 /* Reserved syscalls */ .llong .sys_tkill /* 208 */ .llong .sys_setxattr .llong .sys_lsetxattr /* 210 */ .llong .sys_fsetxattr .llong .sys_getxattr .llong .sys_lgetxattr .llong .sys_fgetxattr .llong .sys_listxattr /* 215 */ .llong .sys_llistxattr .llong .sys_flistxattr .llong .sys_removexattr .llong .sys_lremovexattr .llong .sys_fremovexattr /* 220 */ .llong .sys_futex #endif .llong .sys_perfmonctl /* Put this here for now ... */ .rept NR_syscalls-222 .llong .sys_ni_syscall .endr