1 /* SPDX-License-Identifier: GPL-2.0-only */ << 2 /* 1 /* 3 * Common Low Level Interrupts/Traps/Exception !! 2 * alpha/entry.S 4 * (included from entry-<isa>.S << 5 * 3 * 6 * Copyright (C) 2014-15 Synopsys, Inc. (www.s !! 4 * kernel entry-points 7 * Copyright (C) 2004, 2007-2010, 2011-2012 Sy << 8 */ 5 */ 9 6 10 /*-------------------------------------------- !! 7 #include <linux/config.h> 11 * Function ABI !! 8 #include <asm/system.h> 12 *-------------------------------------------- !! 9 #include <asm/cache.h> 13 * << 14 * Arguments r0 - r << 15 * Caller Saved Registers r0 - r << 16 * Callee Saved Registers r13- r << 17 * Global Pointer (gp) r26 << 18 * Frame Pointer (fp) r27 << 19 * Stack Pointer (sp) r28 << 20 * Branch link register (blink) r31 << 21 *-------------------------------------------- << 22 */ << 23 << 24 ;################### Special Sys Call Wrappers << 25 << 26 ENTRY(sys_clone_wrapper) << 27 SAVE_CALLEE_SAVED_USER << 28 bl @sys_clone << 29 DISCARD_CALLEE_SAVED_USER << 30 << 31 GET_CURR_THR_INFO_FLAGS r10 << 32 and.f 0, r10, _TIF_SYSCALL_WORK << 33 bnz tracesys_exit << 34 << 35 b .Lret_from_system_call << 36 END(sys_clone_wrapper) << 37 << 38 ENTRY(sys_clone3_wrapper) << 39 SAVE_CALLEE_SAVED_USER << 40 bl @sys_clone3 << 41 DISCARD_CALLEE_SAVED_USER << 42 << 43 GET_CURR_THR_INFO_FLAGS r10 << 44 and.f 0, r10, _TIF_SYSCALL_WORK << 45 bnz tracesys_exit << 46 << 47 b .Lret_from_system_call << 48 END(sys_clone3_wrapper) << 49 << 50 ENTRY(ret_from_fork) << 51 ; when the forked child comes here fro << 52 ; r0 has the last task pointer. << 53 ; put last task in scheduler queue << 54 jl @schedule_tail << 55 << 56 ld r9, [sp, PT_status32] << 57 brne r9, 0, 1f << 58 << 59 jl.d [r14] ; kernel threa << 60 mov r0, r13 ; (see PF_KTHR << 61 << 62 1: << 63 ; Return to user space << 64 ; 1. Any forked task (Reach here via B << 65 ; 2. First ever init task (Reach here << 66 ; This is the historic "kernel_exec << 67 ; user mode, in a round about way s << 68 ; a kernel thread which is executed << 69 ; out whenever kernel_execve (now i << 70 b ret_from_exception << 71 END(ret_from_fork) << 72 << 73 ;################### Non TLB Exception Handlin << 74 << 75 ; -------------------------------------------- << 76 ; Instruction Error Exception Handler << 77 ; -------------------------------------------- << 78 << 79 ENTRY(instr_service) << 80 << 81 EXCEPTION_PROLOGUE << 82 << 83 bl do_insterror_or_kprobe << 84 b ret_from_exception << 85 END(instr_service) << 86 << 87 ; -------------------------------------------- << 88 ; Machine Check Exception Handler << 89 ; -------------------------------------------- << 90 << 91 ENTRY(EV_MachineCheck) << 92 << 93 EXCEPTION_PROLOGUE_KEEP_AE ; ECR << 94 << 95 lr r0, [efa] << 96 mov r1, sp << 97 << 98 ; MC exceptions disable MMU << 99 ARC_MMU_REENABLE r3 << 100 << 101 lsr r3, r10, 8 << 102 bmsk r3, r3, 7 << 103 brne r3, ECR_C_MCHK_DUP_TLB, 1f << 104 << 105 bl do_tlb_overlap_fault << 106 b ret_from_exception << 107 << 108 1: << 109 ; DEAD END: can't do much, display Reg << 110 SAVE_CALLEE_SAVED_USER << 111 << 112 GET_CURR_TASK_FIELD_PTR TASK_THREAD, << 113 st sp, [r10, THREAD_CALLEE_REG] << 114 << 115 j do_machine_check_fault << 116 << 117 END(EV_MachineCheck) << 118 << 119 ; -------------------------------------------- << 120 ; Privilege Violation Exception Handler << 121 ; -------------------------------------------- << 122 ENTRY(EV_PrivilegeV) << 123 << 124 EXCEPTION_PROLOGUE << 125 << 126 bl do_privilege_fault << 127 b ret_from_exception << 128 END(EV_PrivilegeV) << 129 << 130 ; -------------------------------------------- << 131 ; Extension Instruction Exception Handler << 132 ; -------------------------------------------- << 133 ENTRY(EV_Extension) << 134 << 135 EXCEPTION_PROLOGUE << 136 << 137 bl do_extension_fault << 138 b ret_from_exception << 139 END(EV_Extension) << 140 << 141 ;################ Trap Handling (Syscall, Brea << 142 << 143 ; -------------------------------------------- << 144 ; syscall Tracing << 145 ; -------------------------------------------- << 146 tracesys: << 147 ; safekeep EFA (r12) if syscall tracer << 148 ; for traps, ERET is pre-commit so poi << 149 GET_CURR_TASK_FIELD_PTR TASK_THREAD, << 150 st r12, [r11, THREAD_FAULT_ADDR] << 151 << 152 ; PRE syscall trace hook << 153 mov r0, sp << 154 bl @syscall_trace_enter << 155 << 156 ; Tracing code now returns the syscall << 157 mov r8, r0 << 158 << 159 ; Do the Sys Call as we normally would << 160 cmp r8, NR_syscalls - 1 << 161 mov.hi r0, -ENOSYS << 162 bhi tracesys_exit << 163 << 164 ; Restore the sys-call args. Mere invo << 165 ; clobbered them (since they are in sc << 166 ; have deliberately changed the syscal << 167 ld r0, [sp, PT_r0] << 168 ld r1, [sp, PT_r1] << 169 ld r2, [sp, PT_r2] << 170 ld r3, [sp, PT_r3] << 171 ld r4, [sp, PT_r4] << 172 ld r5, [sp, PT_r5] << 173 ld r6, [sp, PT_r6] << 174 ld r7, [sp, PT_r7] << 175 ld.as r9, [sys_call_table, r8] << 176 jl [r9] << 177 << 178 tracesys_exit: << 179 st r0, [sp, PT_r0] << 180 << 181 ; POST syscall trace hook << 182 mov r0, sp ; pt_regs need << 183 bl @syscall_trace_exit << 184 << 185 ; don't call ret_from_system_call as i << 186 b ret_from_exception << 187 << 188 ; -------------------------------------------- << 189 ; Breakpoint TRAP << 190 ; -------------------------------------------- << 191 trap_with_param: << 192 mov r0, r12 ; EFA in case ptracer/ << 193 mov r1, sp ; pt_regs << 194 << 195 ; save callee regs in case tracer/gdb << 196 SAVE_CALLEE_SAVED_USER << 197 << 198 ; safekeep ref to callee regs << 199 GET_CURR_TASK_FIELD_PTR TASK_THREAD, << 200 st sp, [r10, THREAD_CALLEE_REG] << 201 << 202 ; call the non syscall trap handler << 203 bl do_non_swi_trap << 204 << 205 ; unwind stack to discard callee regs << 206 DISCARD_CALLEE_SAVED_USER << 207 10 208 b ret_from_exception !! 11 #define SIGCHLD 20 209 12 210 ; -------------------------------------------- !! 13 #define NR_SYSCALLS 382 211 ; syscall TRAP << 212 ; ABI: (r0-r7) up to 8 args, (r8) syscall numb << 213 ; -------------------------------------------- << 214 14 215 ENTRY(EV_Trap) !! 15 /* 216 !! 16 * These offsets must match with alpha_mv in <asm/machvec.h>. 217 EXCEPTION_PROLOGUE_KEEP_AE !! 17 */ 218 !! 18 #define HAE_CACHE 0 219 lr r12, [efa] !! 19 #define HAE_REG 8 220 << 221 FAKE_RET_FROM_EXCPN << 222 << 223 ;============ TRAP N : breakpoints, kp << 224 bmsk.f 0, r10, 7 << 225 bnz trap_with_param << 226 << 227 ;============ TRAP 0 (no param): sysca << 228 << 229 ; syscall tracing ongoing, invoke pre- << 230 GET_CURR_THR_INFO_FLAGS r10 << 231 and.f 0, r10, _TIF_SYSCALL_WORK << 232 bnz tracesys ; this never comes bac << 233 << 234 ;============ Normal syscall case << 235 << 236 cmp r8, NR_syscalls - 1 << 237 mov.hi r0, -ENOSYS << 238 bhi .Lret_from_system_call << 239 << 240 ld.as r9,[sys_call_table, r8] << 241 jl [r9] << 242 << 243 .Lret_from_system_call: << 244 st r0, [sp, PT_r0] ; sys call ret << 245 << 246 ; fall through to ret_from_exception << 247 END(EV_Trap) << 248 << 249 ;############# Return from Intr/Excp/Trap (Lin << 250 ; << 251 ; If ret to user mode do we need to handle sig << 252 << 253 ENTRY(ret_from_exception) << 254 << 255 ; Pre-{IRQ,Trap,Exception} K/U mode fr << 256 ld r8, [sp, PT_status32] ; returnin << 257 << 258 bbit0 r8, STATUS_U_BIT, resume_kernel << 259 << 260 ; Before returning to User mode check- << 261 ; such as rescheduling/signal-delivery << 262 resume_user_mode_begin: << 263 << 264 ; Disable IRQs to ensures that chk for << 265 ; (and we don't end up missing a NEED_ << 266 ; interim IRQ). << 267 IRQ_DISABLE r10 << 268 << 269 ; Fast Path return to user mode if no << 270 GET_CURR_THR_INFO_FLAGS r9 << 271 and.f 0, r9, _TIF_WORK_MASK << 272 bz .Lrestore_regs << 273 << 274 ; --- (Slow Path #1) task preemption - << 275 bbit0 r9, TIF_NEED_RESCHED, .Lchk_pen << 276 mov blink, resume_user_mode_begin << 277 j @schedule ; BTST+Bnz cau << 278 << 279 .Lchk_pend_signals: << 280 IRQ_ENABLE r10 << 281 << 282 ; --- (Slow Path #2) pending signal - << 283 mov r0, sp ; pt_regs for arg to d << 284 20 285 GET_CURR_THR_INFO_FLAGS r9 !! 21 /* 286 and.f 0, r9, _TIF_SIGPENDING|_TIF_NO !! 22 * stack offsets 287 bz .Lchk_notify_resume !! 23 */ >> 24 #define SP_OFF 184 288 25 289 ; Normal Trap/IRQ entry only saves Scr !! 26 #define SWITCH_STACK_SIZE 320 290 ; in pt_reg since the "C" ABI (kernel << 291 ; save/restore callee-saved regs. << 292 ; << 293 ; However, here we need to explicitly << 294 ; (i) If this signal causes coredump << 295 ; (ii) If signal is SIGTRAP/SIGSTOP, t << 296 ; tracer might call PEEKUSR(CALLE << 297 ; << 298 ; NOTE: SP will grow up by size of CAL << 299 SAVE_CALLEE_SAVED_USER << 300 27 301 ; save location of saved Callee Regs @ !! 28 /* 302 GET_CURR_TASK_FIELD_PTR TASK_THREAD, !! 29 * task structure offsets 303 st sp, [r10, THREAD_CALLEE_REG] !! 30 */ >> 31 #define TASK_STATE 0 >> 32 #define TASK_FLAGS 8 >> 33 #define TASK_SIGPENDING 16 >> 34 #define TASK_ADDR_LIMIT 24 >> 35 #define TASK_EXEC_DOMAIN 32 >> 36 #define TASK_NEED_RESCHED 40 >> 37 #define TASK_PTRACE 48 >> 38 #define TASK_PROCESSOR 100 304 39 305 bl @do_signal !! 40 /* >> 41 * task flags (must match include/linux/sched.h): >> 42 */ >> 43 #define PT_PTRACED 0x00000001 306 44 307 ; Ideally we want to discard the Calle !! 45 #define CLONE_VM 0x00000100 308 ; a tracing signal, tracer could have << 309 RESTORE_CALLEE_SAVED_USER << 310 46 311 b resume_user_mode_begin ; loop !! 47 /* >> 48 * This defines the normal kernel pt-regs layout. >> 49 * >> 50 * regs 9-15 preserved by C code >> 51 * regs 16-18 saved by PAL-code >> 52 * regs 29-30 saved and set up by PAL-code >> 53 * JRP - Save regs 16-18 in a special area of the stack, so that >> 54 * the palcode-provided values are available to the signal handler. >> 55 */ 312 56 313 ; --- (Slow Path #3) notify_resume --- !! 57 #define SAVE_ALL \ 314 .Lchk_notify_resume: !! 58 subq $30,184,$30; \ 315 btst r9, TIF_NOTIFY_RESUME !! 59 stq $0,0($30); \ 316 blnz @do_notify_resume !! 60 stq $1,8($30); \ 317 b resume_user_mode_begin ; unco !! 61 stq $2,16($30); \ 318 ; for !! 62 stq $3,24($30); \ >> 63 stq $4,32($30); \ >> 64 stq $28,144($30); \ >> 65 lda $2,alpha_mv; \ >> 66 stq $5,40($30); \ >> 67 stq $6,48($30); \ >> 68 stq $7,56($30); \ >> 69 stq $8,64($30); \ >> 70 stq $19,72($30); \ >> 71 stq $20,80($30); \ >> 72 stq $21,88($30); \ >> 73 ldq $2,HAE_CACHE($2); \ >> 74 stq $22,96($30); \ >> 75 stq $23,104($30); \ >> 76 stq $24,112($30); \ >> 77 stq $25,120($30); \ >> 78 stq $26,128($30); \ >> 79 stq $27,136($30); \ >> 80 stq $2,152($30); \ >> 81 stq $16,160($30); \ >> 82 stq $17,168($30); \ >> 83 stq $18,176($30) >> 84 >> 85 #define RESTORE_ALL \ >> 86 lda $19,alpha_mv; \ >> 87 ldq $0,0($30); \ >> 88 ldq $1,8($30); \ >> 89 ldq $2,16($30); \ >> 90 ldq $3,24($30); \ >> 91 ldq $21,152($30); \ >> 92 ldq $20,HAE_CACHE($19); \ >> 93 ldq $4,32($30); \ >> 94 ldq $5,40($30); \ >> 95 ldq $6,48($30); \ >> 96 ldq $7,56($30); \ >> 97 subq $20,$21,$20; \ >> 98 ldq $8,64($30); \ >> 99 beq $20,99f; \ >> 100 ldq $20,HAE_REG($19); \ >> 101 addq $31,7,$16; \ >> 102 call_pal PAL_swpipl; \ >> 103 stq $21,HAE_CACHE($19); \ >> 104 stq $21,0($20); \ >> 105 mov $0,$16; \ >> 106 call_pal PAL_swpipl; \ >> 107 ldq $0,0($30); \ >> 108 ldq $1,8($30); \ >> 109 99:; \ >> 110 ldq $19,72($30); \ >> 111 ldq $20,80($30); \ >> 112 ldq $21,88($30); \ >> 113 ldq $22,96($30); \ >> 114 ldq $23,104($30); \ >> 115 ldq $24,112($30); \ >> 116 ldq $25,120($30); \ >> 117 ldq $26,128($30); \ >> 118 ldq $27,136($30); \ >> 119 ldq $28,144($30); \ >> 120 addq $30,184,$30 >> 121 >> 122 .text >> 123 .set noat >> 124 #if defined(__linux__) && !defined(__ELF__) >> 125 .set singlegp >> 126 #endif 319 127 320 resume_kernel_mode: !! 128 .align 3 >> 129 .globl entInt >> 130 .ent entInt >> 131 entInt: >> 132 SAVE_ALL >> 133 lda $8,0x3fff >> 134 lda $26,ret_from_sys_call >> 135 bic $30,$8,$8 >> 136 jsr $31,do_entInt >> 137 .end entInt >> 138 >> 139 .align 3 >> 140 .globl entMM >> 141 .ent entMM >> 142 entMM: >> 143 SAVE_ALL >> 144 /* save $9 - $15 so the inline exception code can manipulate them. */ >> 145 subq $30,56,$30 >> 146 stq $9,0($30) >> 147 stq $10,8($30) >> 148 stq $11,16($30) >> 149 stq $12,24($30) >> 150 stq $13,32($30) >> 151 stq $14,40($30) >> 152 stq $15,48($30) >> 153 addq $30,56,$19 >> 154 /* handle the fault */ >> 155 lda $8,0x3fff >> 156 bic $30,$8,$8 >> 157 jsr $26,do_page_fault >> 158 /* reload the registers after the exception code played. */ >> 159 ldq $9,0($30) >> 160 ldq $10,8($30) >> 161 ldq $11,16($30) >> 162 ldq $12,24($30) >> 163 ldq $13,32($30) >> 164 ldq $14,40($30) >> 165 ldq $15,48($30) >> 166 addq $30,56,$30 >> 167 /* finish up the syscall as normal. */ >> 168 br ret_from_sys_call >> 169 .end entMM >> 170 >> 171 .align 3 >> 172 .globl entArith >> 173 .ent entArith >> 174 entArith: >> 175 SAVE_ALL >> 176 lda $8,0x3fff >> 177 lda $26,ret_from_sys_call >> 178 bic $30,$8,$8 >> 179 jsr $31,do_entArith >> 180 .end entArith >> 181 >> 182 .align 3 >> 183 .globl entIF >> 184 .ent entIF >> 185 entIF: >> 186 SAVE_ALL >> 187 lda $8,0x3fff >> 188 lda $26,ret_from_sys_call >> 189 bic $30,$8,$8 >> 190 jsr $31,do_entIF >> 191 .end entIF >> 192 >> 193 .align 3 >> 194 .globl entDbg >> 195 .ent entDbg >> 196 entDbg: >> 197 SAVE_ALL >> 198 lda $8,0x3fff >> 199 lda $26,ret_from_sys_call >> 200 bic $30,$8,$8 >> 201 jsr $31,do_entDbg >> 202 .end entDbg 321 203 322 ; Disable Interrupts from this point o << 323 ; CONFIG_PREEMPTION: This is a must fo << 324 ; !CONFIG_PREEMPTION: To ensure restor << 325 IRQ_DISABLE r9 << 326 204 327 #ifdef CONFIG_PREEMPTION !! 205 /* >> 206 * Fork() is one of the special system calls: it needs to >> 207 * save the callee-saved regs so that the regs can be found >> 208 * for the new process.. We save them in the "context switch" >> 209 * stack format (see arch/alpha/kernel/process.c). >> 210 * >> 211 * Also, for the kernel fork, we need to fake the system call >> 212 * stack buildup, as we can't do system calls from kernel space. >> 213 */ >> 214 .align 3 >> 215 .ent kernel_clone >> 216 kernel_clone: >> 217 .frame $30, 0, $26 >> 218 .prologue 0 >> 219 subq $30,6*8,$30 >> 220 stq $31,0($30) >> 221 stq $26,8($30) >> 222 stq $29,16($30) >> 223 stq $16,24($30) >> 224 stq $17,32($30) >> 225 stq $18,40($30) >> 226 bis $31,2,$0 /* Register v0: syscall nr for fork() */ >> 227 SAVE_ALL >> 228 bsr $26,sys_clone >> 229 stq $0,0($30) >> 230 br ret_from_sys_call >> 231 .end kernel_clone 328 232 329 ; Can't preempt if preemption disabled !! 233 /* 330 GET_CURR_THR_INFO_FROM_SP r10 !! 234 * arch_kernel_thread(fn, arg, clone_flags) 331 ld r8, [r10, THREAD_INFO_PREEMPT_COUN !! 235 */ 332 brne r8, 0, .Lrestore_regs !! 236 .align 3 >> 237 .globl arch_kernel_thread >> 238 .ent arch_kernel_thread >> 239 arch_kernel_thread: >> 240 ldgp $29,0($27) /* we can be called from a module */ >> 241 .frame $30, 4*8, $26 >> 242 subq $30,4*8,$30 >> 243 stq $10,16($30) >> 244 stq $9,8($30) >> 245 lda $0,CLONE_VM >> 246 stq $26,0($30) >> 247 .prologue 1 >> 248 mov $16,$9 /* save fn */ >> 249 mov $17,$10 /* save arg */ >> 250 or $18,$0,$16 /* shuffle flags to front; add CLONE_VM. */ >> 251 bsr $26,kernel_clone >> 252 bne $20,1f /* $20 is non-zero in child */ >> 253 ldq $26,0($30) >> 254 ldq $9,8($30) >> 255 ldq $10,16($30) >> 256 addq $30,4*8,$30 >> 257 ret $31,($26),1 >> 258 /* this is in child: look out as we don't have any stack here.. */ >> 259 1: mov $9,$27 /* get fn */ >> 260 lda $8,0x3fff >> 261 mov $10,$16 /* get arg */ >> 262 bic $30,$8,$8 /* get current */ >> 263 jsr $26,($27) >> 264 ldgp $29,0($26) >> 265 mov $0,$16 >> 266 mov $31,$26 >> 267 jsr $31,sys_exit >> 268 .end arch_kernel_thread 333 269 334 ; check if this task's NEED_RESCHED fl !! 270 /* 335 ld r9, [r10, THREAD_INFO_FLAGS] !! 271 * __kernel_execve(path, argv, envp, regs) 336 bbit0 r9, TIF_NEED_RESCHED, .Lrestore !! 272 */ >> 273 .align 3 >> 274 .globl __kernel_execve >> 275 .ent __kernel_execve >> 276 __kernel_execve: >> 277 ldgp $29,0($27) /* we can be called from modules. */ >> 278 subq $30,16,$30 >> 279 .frame $30,16,$26,0 >> 280 stq $26,0($30) >> 281 stq $19,8($30) >> 282 .prologue 1 >> 283 jsr $26,do_execve >> 284 bne $0,1f /* error! */ >> 285 ldq $30,8($30) >> 286 br $31,ret_from_sys_call >> 287 1: ldq $26,0($30) >> 288 addq $30,16,$30 >> 289 ret >> 290 .end __kernel_execve >> 291 >> 292 .align 3 >> 293 .ent do_switch_stack >> 294 do_switch_stack: >> 295 lda $30,-SWITCH_STACK_SIZE($30) >> 296 stq $9,0($30) >> 297 stq $10,8($30) >> 298 stq $11,16($30) >> 299 stq $12,24($30) >> 300 stq $13,32($30) >> 301 stq $14,40($30) >> 302 stq $15,48($30) >> 303 stq $26,56($30) >> 304 stt $f0,64($30) >> 305 stt $f1,72($30) >> 306 stt $f2,80($30) >> 307 stt $f3,88($30) >> 308 stt $f4,96($30) >> 309 stt $f5,104($30) >> 310 stt $f6,112($30) >> 311 stt $f7,120($30) >> 312 stt $f8,128($30) >> 313 stt $f9,136($30) >> 314 stt $f10,144($30) >> 315 stt $f11,152($30) >> 316 stt $f12,160($30) >> 317 stt $f13,168($30) >> 318 stt $f14,176($30) >> 319 stt $f15,184($30) >> 320 stt $f16,192($30) >> 321 stt $f17,200($30) >> 322 stt $f18,208($30) >> 323 stt $f19,216($30) >> 324 stt $f20,224($30) >> 325 stt $f21,232($30) >> 326 stt $f22,240($30) >> 327 stt $f23,248($30) >> 328 stt $f24,256($30) >> 329 stt $f25,264($30) >> 330 stt $f26,272($30) >> 331 stt $f27,280($30) >> 332 mf_fpcr $f0 # get fpcr >> 333 stt $f28,288($30) >> 334 stt $f29,296($30) >> 335 stt $f30,304($30) >> 336 stt $f0,312($30) # save fpcr in slot of $f31 >> 337 ldt $f0,64($30) # dont let "do_switch_stack" change fp state. >> 338 ret $31,($1),1 >> 339 .end do_switch_stack >> 340 >> 341 .align 3 >> 342 .ent undo_switch_stack >> 343 undo_switch_stack: >> 344 ldq $9,0($30) >> 345 ldq $10,8($30) >> 346 ldq $11,16($30) >> 347 ldq $12,24($30) >> 348 ldq $13,32($30) >> 349 ldq $14,40($30) >> 350 ldq $15,48($30) >> 351 ldq $26,56($30) >> 352 ldt $f30,312($30) # get saved fpcr >> 353 ldt $f0,64($30) >> 354 ldt $f1,72($30) >> 355 ldt $f2,80($30) >> 356 ldt $f3,88($30) >> 357 mt_fpcr $f30 # install saved fpcr >> 358 ldt $f4,96($30) >> 359 ldt $f5,104($30) >> 360 ldt $f6,112($30) >> 361 ldt $f7,120($30) >> 362 ldt $f8,128($30) >> 363 ldt $f9,136($30) >> 364 ldt $f10,144($30) >> 365 ldt $f11,152($30) >> 366 ldt $f12,160($30) >> 367 ldt $f13,168($30) >> 368 ldt $f14,176($30) >> 369 ldt $f15,184($30) >> 370 ldt $f16,192($30) >> 371 ldt $f17,200($30) >> 372 ldt $f18,208($30) >> 373 ldt $f19,216($30) >> 374 ldt $f20,224($30) >> 375 ldt $f21,232($30) >> 376 ldt $f22,240($30) >> 377 ldt $f23,248($30) >> 378 ldt $f24,256($30) >> 379 ldt $f25,264($30) >> 380 ldt $f26,272($30) >> 381 ldt $f27,280($30) >> 382 ldt $f28,288($30) >> 383 ldt $f29,296($30) >> 384 ldt $f30,304($30) >> 385 lda $30,SWITCH_STACK_SIZE($30) >> 386 ret $31,($1),1 >> 387 .end undo_switch_stack >> 388 >> 389 .align 3 >> 390 .globl entUna >> 391 .ent entUna >> 392 entUna: >> 393 lda $30,-256($30) >> 394 stq $0,0($30) >> 395 ldq $0,256($30) /* get PS */ >> 396 stq $1,8($30) >> 397 stq $2,16($30) >> 398 stq $3,24($30) >> 399 and $0,8,$0 /* user mode? */ >> 400 stq $4,32($30) >> 401 bne $0,entUnaUser /* yup -> do user-level unaligned fault */ >> 402 stq $5,40($30) >> 403 stq $6,48($30) >> 404 stq $7,56($30) >> 405 stq $8,64($30) >> 406 stq $9,72($30) >> 407 stq $10,80($30) >> 408 stq $11,88($30) >> 409 stq $12,96($30) >> 410 stq $13,104($30) >> 411 stq $14,112($30) >> 412 stq $15,120($30) >> 413 /* 16-18 PAL-saved */ >> 414 stq $19,152($30) >> 415 stq $20,160($30) >> 416 stq $21,168($30) >> 417 stq $22,176($30) >> 418 stq $23,184($30) >> 419 stq $24,192($30) >> 420 stq $25,200($30) >> 421 stq $26,208($30) >> 422 stq $27,216($30) >> 423 stq $28,224($30) >> 424 stq $29,232($30) >> 425 lda $8,0x3fff >> 426 stq $31,248($30) >> 427 bic $30,$8,$8 >> 428 jsr $26,do_entUna >> 429 ldq $0,0($30) >> 430 ldq $1,8($30) >> 431 ldq $2,16($30) >> 432 ldq $3,24($30) >> 433 ldq $4,32($30) >> 434 ldq $5,40($30) >> 435 ldq $6,48($30) >> 436 ldq $7,56($30) >> 437 ldq $8,64($30) >> 438 ldq $9,72($30) >> 439 ldq $10,80($30) >> 440 ldq $11,88($30) >> 441 ldq $12,96($30) >> 442 ldq $13,104($30) >> 443 ldq $14,112($30) >> 444 ldq $15,120($30) >> 445 /* 16-18 PAL-saved */ >> 446 ldq $19,152($30) >> 447 ldq $20,160($30) >> 448 ldq $21,168($30) >> 449 ldq $22,176($30) >> 450 ldq $23,184($30) >> 451 ldq $24,192($30) >> 452 ldq $25,200($30) >> 453 ldq $26,208($30) >> 454 ldq $27,216($30) >> 455 ldq $28,224($30) >> 456 ldq $29,232($30) >> 457 lda $30,256($30) >> 458 call_pal PAL_rti >> 459 .end entUna >> 460 >> 461 .align 3 >> 462 .ent entUnaUser >> 463 entUnaUser: >> 464 ldq $0,0($30) /* restore original $0 */ >> 465 lda $30,256($30) /* pop entUna's stack frame */ >> 466 SAVE_ALL /* setup normal kernel stack */ >> 467 lda $30,-56($30) >> 468 stq $9,0($30) >> 469 stq $10,8($30) >> 470 stq $11,16($30) >> 471 stq $12,24($30) >> 472 stq $13,32($30) >> 473 stq $14,40($30) >> 474 stq $15,48($30) >> 475 lda $8,0x3fff >> 476 addq $30,56,$19 >> 477 bic $30,$8,$8 >> 478 jsr $26,do_entUnaUser >> 479 ldq $9,0($30) >> 480 ldq $10,8($30) >> 481 ldq $11,16($30) >> 482 ldq $12,24($30) >> 483 ldq $13,32($30) >> 484 ldq $14,40($30) >> 485 ldq $15,48($30) >> 486 lda $30,56($30) >> 487 br ret_from_sys_call >> 488 .end entUnaUser 337 489 338 ; Invoke PREEMPTION !! 490 /* 339 jl preempt_schedule_irq !! 491 * A fork is the same as clone(SIGCHLD, 0); >> 492 */ >> 493 .align 3 >> 494 .globl sys_fork >> 495 .ent sys_fork >> 496 sys_fork: >> 497 bsr $1,do_switch_stack >> 498 bis $31,SIGCHLD,$16 >> 499 mov $31,$17 >> 500 mov $30,$18 >> 501 jsr $26,alpha_clone >> 502 bsr $1,undo_switch_stack >> 503 ret $31,($26),1 >> 504 .end sys_fork >> 505 >> 506 .align 3 >> 507 .globl sys_clone >> 508 .ent sys_clone >> 509 sys_clone: >> 510 bsr $1,do_switch_stack >> 511 /* arg1 and arg2 come from the user */ >> 512 mov $30,$18 >> 513 jsr $26,alpha_clone >> 514 bsr $1,undo_switch_stack >> 515 ret $31,($26),1 >> 516 .end sys_clone >> 517 >> 518 .align 3 >> 519 .globl sys_vfork >> 520 .ent sys_vfork >> 521 sys_vfork: >> 522 bsr $1,do_switch_stack >> 523 mov $30,$16 >> 524 jsr $26,alpha_vfork >> 525 bsr $1,undo_switch_stack >> 526 ret $31,($26),1 >> 527 .end sys_vfork >> 528 >> 529 .align 3 >> 530 .globl alpha_switch_to >> 531 .ent alpha_switch_to >> 532 alpha_switch_to: >> 533 .prologue 0 >> 534 bsr $1,do_switch_stack >> 535 call_pal PAL_swpctx >> 536 unop >> 537 bsr $1,undo_switch_stack >> 538 mov $17,$0 >> 539 ret $31,($26),1 >> 540 .end alpha_switch_to 340 541 341 ; preempt_schedule_irq() always return !! 542 /* >> 543 * Oh, well.. Disassembling OSF/1 binaries to find out how the >> 544 * system calls work isn't much fun. >> 545 * >> 546 * entSys is special in that the PAL-code doesn't save a0-a2, so >> 547 * we start off by doing that by hand. >> 548 */ >> 549 .align 3 >> 550 .globl entSys >> 551 .globl ret_from_sys_call >> 552 .ent entSys >> 553 entSys: >> 554 SAVE_ALL >> 555 lda $8,0x3fff >> 556 bic $30,$8,$8 >> 557 lda $4,NR_SYSCALLS($31) >> 558 stq $16,SP_OFF+24($30) >> 559 lda $5,sys_call_table >> 560 lda $27,sys_ni_syscall >> 561 cmpult $0,$4,$4 >> 562 ldq $3,TASK_PTRACE($8) >> 563 stq $17,SP_OFF+32($30) >> 564 s8addq $0,$5,$5 >> 565 and $3,PT_PTRACED,$3 >> 566 stq $18,SP_OFF+40($30) >> 567 bne $3,strace >> 568 beq $4,1f >> 569 ldq $27,0($5) >> 570 1: jsr $26,($27),alpha_ni_syscall >> 571 ldgp $29,0($26) >> 572 blt $0,syscall_error /* the call failed */ >> 573 stq $0,0($30) >> 574 stq $31,72($30) /* a3=0 => no error */ >> 575 >> 576 .align 3 >> 577 ret_from_sys_call: >> 578 cmovne $26,0,$19 /* $19 = 0 => non-restartable */ >> 579 ldq $0,SP_OFF($30) >> 580 and $0,8,$0 >> 581 beq $0,restore_all >> 582 ret_from_reschedule: >> 583 ldq $2,TASK_NEED_RESCHED($8) >> 584 lda $4,init_task_union >> 585 bne $2,reschedule >> 586 xor $4,$8,$4 >> 587 ldl $5,TASK_SIGPENDING($8) >> 588 beq $4,restore_all >> 589 bne $5,signal_return >> 590 restore_all: >> 591 RESTORE_ALL >> 592 call_pal PAL_rti >> 593 >> 594 >> 595 /* PTRACE syscall handler */ >> 596 .align 3 >> 597 strace: >> 598 /* set up signal stack, call syscall_trace */ >> 599 bsr $1,do_switch_stack >> 600 jsr $26,syscall_trace >> 601 bsr $1,undo_switch_stack >> 602 >> 603 /* get the system call number and the arguments back.. */ >> 604 ldq $0,0($30) >> 605 ldq $16,SP_OFF+24($30) >> 606 ldq $17,SP_OFF+32($30) >> 607 ldq $18,SP_OFF+40($30) >> 608 ldq $19,72($30) >> 609 ldq $20,80($30) >> 610 ldq $21,88($30) >> 611 >> 612 /* get the system call pointer.. */ >> 613 lda $1,NR_SYSCALLS($31) >> 614 lda $2,sys_call_table >> 615 lda $27,alpha_ni_syscall >> 616 cmpult $0,$1,$1 >> 617 s8addq $0,$2,$2 >> 618 beq $1,1f >> 619 ldq $27,0($2) >> 620 1: jsr $26,($27),sys_gettimeofday >> 621 ldgp $29,0($26) >> 622 >> 623 /* check return.. */ >> 624 blt $0,strace_error /* the call failed */ >> 625 stq $31,72($30) /* a3=0 => no error */ >> 626 strace_success: >> 627 stq $0,0($30) /* save return value */ >> 628 >> 629 bsr $1,do_switch_stack >> 630 jsr $26,syscall_trace >> 631 bsr $1,undo_switch_stack >> 632 br $31,ret_from_sys_call >> 633 >> 634 .align 3 >> 635 strace_error: >> 636 ldq $19,0($30) /* old syscall nr (zero if success) */ >> 637 beq $19,strace_success >> 638 ldq $20,72($30) /* .. and this a3 */ >> 639 >> 640 subq $31,$0,$0 /* with error in v0 */ >> 641 addq $31,1,$1 /* set a3 for errno return */ >> 642 stq $0,0($30) >> 643 stq $1,72($30) /* a3 for return */ >> 644 >> 645 bsr $1,do_switch_stack >> 646 mov $19,$9 /* save old syscall number */ >> 647 mov $20,$10 /* save old a3 */ >> 648 jsr $26,syscall_trace >> 649 mov $9,$19 >> 650 mov $10,$20 >> 651 bsr $1,undo_switch_stack >> 652 >> 653 mov $31,$26 /* tell "ret_from_sys_call" we can restart */ >> 654 br ret_from_sys_call >> 655 >> 656 .align 3 >> 657 syscall_error: >> 658 /* >> 659 * Some system calls (e.g., ptrace) can return arbitrary >> 660 * values which might normally be mistaken as error numbers. >> 661 * Those functions must zero $0 (v0) directly in the stack >> 662 * frame to indicate that a negative return value wasn't an >> 663 * error number.. >> 664 */ >> 665 ldq $19,0($30) /* old syscall nr (zero if success) */ >> 666 beq $19,ret_success >> 667 >> 668 ldq $20,72($30) /* .. and this a3 */ >> 669 subq $31,$0,$0 /* with error in v0 */ >> 670 addq $31,1,$1 /* set a3 for errno return */ >> 671 stq $0,0($30) >> 672 mov $31,$26 /* tell "ret_from_sys_call" we can restart */ >> 673 stq $1,72($30) /* a3 for return */ >> 674 br ret_from_sys_call >> 675 >> 676 ret_success: >> 677 stq $0,0($30) >> 678 stq $31,72($30) /* a3=0 => no error */ >> 679 br ret_from_sys_call >> 680 >> 681 .align 3 >> 682 signal_return: >> 683 mov $30,$17 >> 684 br $1,do_switch_stack >> 685 mov $30,$18 >> 686 mov $31,$16 >> 687 jsr $26,do_signal >> 688 bsr $1,undo_switch_stack >> 689 br restore_all >> 690 .end entSys >> 691 >> 692 .globl ret_from_fork >> 693 .align 3 >> 694 .ent ret_from_fork >> 695 ret_from_fork: >> 696 lda $26,ret_from_sys_call >> 697 mov $17,$16 >> 698 jsr $31,schedule_tail >> 699 .end ret_from_fork >> 700 >> 701 .align 3 >> 702 .ent reschedule >> 703 reschedule: >> 704 subq $30,16,$30 >> 705 stq $19,0($30) /* save syscall nr */ >> 706 stq $20,8($30) /* and error indication (a3) */ >> 707 jsr $26,schedule >> 708 ldq $19,0($30) >> 709 ldq $20,8($30) >> 710 addq $30,16,$30 >> 711 br ret_from_reschedule >> 712 .end reschedule >> 713 >> 714 .align 3 >> 715 .ent sys_sigreturn >> 716 sys_sigreturn: >> 717 mov $30,$17 >> 718 lda $18,-SWITCH_STACK_SIZE($30) >> 719 lda $30,-SWITCH_STACK_SIZE($30) >> 720 jsr $26,do_sigreturn >> 721 br $1,undo_switch_stack >> 722 br ret_from_sys_call >> 723 .end sys_sigreturn >> 724 >> 725 .align 3 >> 726 .ent sys_rt_sigreturn >> 727 sys_rt_sigreturn: >> 728 mov $30,$17 >> 729 lda $18,-SWITCH_STACK_SIZE($30) >> 730 lda $30,-SWITCH_STACK_SIZE($30) >> 731 jsr $26,do_rt_sigreturn >> 732 br $1,undo_switch_stack >> 733 br ret_from_sys_call >> 734 .end sys_rt_sigreturn >> 735 >> 736 .align 3 >> 737 .ent sys_sigsuspend >> 738 sys_sigsuspend: >> 739 mov $30,$17 >> 740 br $1,do_switch_stack >> 741 mov $30,$18 >> 742 subq $30,16,$30 >> 743 stq $26,0($30) >> 744 jsr $26,do_sigsuspend >> 745 ldq $26,0($30) >> 746 lda $30,SWITCH_STACK_SIZE+16($30) >> 747 ret $31,($26),1 >> 748 .end sys_sigsuspend >> 749 >> 750 .align 3 >> 751 .ent sys_rt_sigsuspend >> 752 sys_rt_sigsuspend: >> 753 mov $30,$18 >> 754 br $1,do_switch_stack >> 755 mov $30,$19 >> 756 subq $30,16,$30 >> 757 stq $26,0($30) >> 758 jsr $26,do_rt_sigsuspend >> 759 ldq $26,0($30) >> 760 lda $30,SWITCH_STACK_SIZE+16($30) >> 761 ret $31,($26),1 >> 762 .end sys_rt_sigsuspend >> 763 >> 764 .data >> 765 .align 3 >> 766 .globl sys_call_table >> 767 sys_call_table: >> 768 .quad alpha_ni_syscall /* 0 */ >> 769 .quad sys_exit >> 770 .quad sys_fork >> 771 .quad sys_read >> 772 .quad sys_write >> 773 .quad alpha_ni_syscall /* 5 */ >> 774 .quad sys_close >> 775 .quad osf_wait4 >> 776 .quad alpha_ni_syscall >> 777 .quad sys_link >> 778 .quad sys_unlink /* 10 */ >> 779 .quad alpha_ni_syscall >> 780 .quad sys_chdir >> 781 .quad sys_fchdir >> 782 .quad sys_mknod >> 783 .quad sys_chmod /* 15 */ >> 784 .quad sys_chown >> 785 .quad osf_brk >> 786 .quad alpha_ni_syscall >> 787 .quad sys_lseek >> 788 .quad sys_getxpid /* 20 */ >> 789 .quad osf_mount >> 790 .quad sys_umount >> 791 .quad sys_setuid >> 792 .quad sys_getxuid >> 793 .quad alpha_ni_syscall /* 25 */ >> 794 .quad sys_ptrace >> 795 .quad alpha_ni_syscall >> 796 .quad alpha_ni_syscall >> 797 .quad alpha_ni_syscall >> 798 .quad alpha_ni_syscall /* 30 */ >> 799 .quad alpha_ni_syscall >> 800 .quad alpha_ni_syscall >> 801 .quad sys_access >> 802 .quad alpha_ni_syscall >> 803 .quad alpha_ni_syscall /* 35 */ >> 804 .quad sys_sync >> 805 .quad sys_kill >> 806 .quad alpha_ni_syscall >> 807 .quad sys_setpgid >> 808 .quad alpha_ni_syscall /* 40 */ >> 809 .quad sys_dup >> 810 .quad sys_pipe >> 811 .quad osf_set_program_attributes >> 812 .quad alpha_ni_syscall >> 813 .quad sys_open /* 45 */ >> 814 .quad alpha_ni_syscall >> 815 .quad sys_getxgid >> 816 .quad osf_sigprocmask >> 817 .quad alpha_ni_syscall >> 818 .quad alpha_ni_syscall /* 50 */ >> 819 .quad sys_acct >> 820 .quad sys_sigpending >> 821 .quad alpha_ni_syscall >> 822 .quad sys_ioctl >> 823 .quad alpha_ni_syscall /* 55 */ >> 824 .quad alpha_ni_syscall >> 825 .quad sys_symlink >> 826 .quad sys_readlink >> 827 .quad sys_execve >> 828 .quad sys_umask /* 60 */ >> 829 .quad sys_chroot >> 830 .quad alpha_ni_syscall >> 831 .quad sys_getpgrp >> 832 .quad sys_getpagesize >> 833 .quad alpha_ni_syscall /* 65 */ >> 834 .quad sys_vfork >> 835 .quad sys_newstat >> 836 .quad sys_newlstat >> 837 .quad alpha_ni_syscall >> 838 .quad alpha_ni_syscall /* 70 */ >> 839 .quad osf_mmap >> 840 .quad alpha_ni_syscall >> 841 .quad sys_munmap >> 842 .quad sys_mprotect >> 843 .quad sys_madvise /* 75 */ >> 844 .quad sys_vhangup >> 845 .quad alpha_ni_syscall >> 846 .quad alpha_ni_syscall >> 847 .quad sys_getgroups >> 848 /* map BSD's setpgrp to sys_setpgid for binary compatibility: */ >> 849 .quad sys_setgroups /* 80 */ >> 850 .quad alpha_ni_syscall >> 851 .quad sys_setpgid >> 852 .quad osf_setitimer >> 853 .quad alpha_ni_syscall >> 854 .quad alpha_ni_syscall /* 85 */ >> 855 .quad osf_getitimer >> 856 .quad sys_gethostname >> 857 .quad sys_sethostname >> 858 .quad sys_getdtablesize >> 859 .quad sys_dup2 /* 90 */ >> 860 .quad sys_newfstat >> 861 .quad sys_fcntl >> 862 .quad osf_select >> 863 .quad sys_poll >> 864 .quad sys_fsync /* 95 */ >> 865 .quad sys_setpriority >> 866 .quad sys_socket >> 867 .quad sys_connect >> 868 .quad sys_accept >> 869 .quad osf_getpriority /* 100 */ >> 870 .quad sys_send >> 871 .quad sys_recv >> 872 .quad sys_sigreturn >> 873 .quad sys_bind >> 874 .quad sys_setsockopt /* 105 */ >> 875 .quad sys_listen >> 876 .quad alpha_ni_syscall >> 877 .quad alpha_ni_syscall >> 878 .quad alpha_ni_syscall >> 879 .quad alpha_ni_syscall /* 110 */ >> 880 .quad sys_sigsuspend >> 881 .quad osf_sigstack >> 882 .quad sys_recvmsg >> 883 .quad sys_sendmsg >> 884 .quad alpha_ni_syscall /* 115 */ >> 885 .quad osf_gettimeofday >> 886 .quad osf_getrusage >> 887 .quad sys_getsockopt >> 888 .quad alpha_ni_syscall >> 889 #ifdef CONFIG_OSF4_COMPAT >> 890 .quad osf_readv /* 120 */ >> 891 .quad osf_writev >> 892 #else >> 893 .quad sys_readv /* 120 */ >> 894 .quad sys_writev 342 #endif 895 #endif 343 !! 896 .quad osf_settimeofday 344 b .Lrestore_regs !! 897 .quad sys_fchown 345 !! 898 .quad sys_fchmod 346 ##### DONT ADD CODE HERE - .Lrestore_regs actu !! 899 .quad sys_recvfrom /* 125 */ 347 !! 900 .quad sys_setreuid >> 901 .quad sys_setregid >> 902 .quad sys_rename >> 903 .quad sys_truncate >> 904 .quad sys_ftruncate /* 130 */ >> 905 .quad sys_flock >> 906 .quad sys_setgid >> 907 .quad sys_sendto >> 908 .quad sys_shutdown >> 909 .quad sys_socketpair /* 135 */ >> 910 .quad sys_mkdir >> 911 .quad sys_rmdir >> 912 .quad osf_utimes >> 913 .quad alpha_ni_syscall >> 914 .quad alpha_ni_syscall /* 140 */ >> 915 .quad sys_getpeername >> 916 .quad alpha_ni_syscall >> 917 .quad alpha_ni_syscall >> 918 .quad sys_getrlimit >> 919 .quad sys_setrlimit /* 145 */ >> 920 .quad alpha_ni_syscall >> 921 .quad sys_setsid >> 922 .quad sys_quotactl >> 923 .quad alpha_ni_syscall >> 924 .quad sys_getsockname /* 150 */ >> 925 .quad alpha_ni_syscall >> 926 .quad alpha_ni_syscall >> 927 .quad alpha_ni_syscall >> 928 .quad alpha_ni_syscall >> 929 .quad alpha_ni_syscall /* 155 */ >> 930 .quad osf_sigaction >> 931 .quad alpha_ni_syscall >> 932 .quad alpha_ni_syscall >> 933 .quad osf_getdirentries >> 934 .quad osf_statfs /* 160 */ >> 935 .quad osf_fstatfs >> 936 .quad alpha_ni_syscall >> 937 .quad alpha_ni_syscall >> 938 .quad alpha_ni_syscall >> 939 .quad osf_getdomainname /* 165 */ >> 940 .quad sys_setdomainname >> 941 .quad alpha_ni_syscall >> 942 .quad alpha_ni_syscall >> 943 .quad alpha_ni_syscall >> 944 .quad alpha_ni_syscall /* 170 */ >> 945 .quad alpha_ni_syscall >> 946 .quad alpha_ni_syscall >> 947 .quad alpha_ni_syscall >> 948 .quad alpha_ni_syscall >> 949 .quad alpha_ni_syscall /* 175 */ >> 950 .quad alpha_ni_syscall >> 951 .quad alpha_ni_syscall >> 952 .quad alpha_ni_syscall >> 953 .quad alpha_ni_syscall >> 954 .quad alpha_ni_syscall /* 180 */ >> 955 .quad alpha_ni_syscall >> 956 .quad alpha_ni_syscall >> 957 .quad alpha_ni_syscall >> 958 .quad alpha_ni_syscall >> 959 .quad alpha_ni_syscall /* 185 */ >> 960 .quad alpha_ni_syscall >> 961 .quad alpha_ni_syscall >> 962 .quad alpha_ni_syscall >> 963 .quad alpha_ni_syscall >> 964 .quad alpha_ni_syscall /* 190 */ >> 965 .quad alpha_ni_syscall >> 966 .quad alpha_ni_syscall >> 967 .quad alpha_ni_syscall >> 968 .quad alpha_ni_syscall >> 969 .quad alpha_ni_syscall /* 195 */ >> 970 .quad alpha_ni_syscall >> 971 .quad alpha_ni_syscall >> 972 .quad alpha_ni_syscall >> 973 .quad osf_swapon >> 974 .quad sys_msgctl /* 200 */ >> 975 .quad sys_msgget >> 976 .quad sys_msgrcv >> 977 .quad sys_msgsnd >> 978 .quad sys_semctl >> 979 .quad sys_semget /* 205 */ >> 980 .quad sys_semop >> 981 .quad osf_utsname >> 982 .quad sys_lchown >> 983 .quad osf_shmat >> 984 .quad sys_shmctl /* 210 */ >> 985 .quad sys_shmdt >> 986 .quad sys_shmget >> 987 .quad alpha_ni_syscall >> 988 .quad alpha_ni_syscall >> 989 .quad alpha_ni_syscall /* 215 */ >> 990 .quad alpha_ni_syscall >> 991 .quad sys_msync >> 992 .quad alpha_ni_syscall >> 993 .quad alpha_ni_syscall >> 994 .quad alpha_ni_syscall /* 220 */ >> 995 .quad alpha_ni_syscall >> 996 .quad alpha_ni_syscall >> 997 .quad alpha_ni_syscall >> 998 .quad alpha_ni_syscall >> 999 .quad alpha_ni_syscall /* 225 */ >> 1000 .quad alpha_ni_syscall >> 1001 .quad alpha_ni_syscall >> 1002 .quad alpha_ni_syscall >> 1003 .quad alpha_ni_syscall >> 1004 .quad alpha_ni_syscall /* 230 */ >> 1005 .quad alpha_ni_syscall >> 1006 .quad alpha_ni_syscall >> 1007 .quad sys_getpgid >> 1008 .quad sys_getsid >> 1009 .quad sys_sigaltstack /* 235 */ >> 1010 .quad alpha_ni_syscall >> 1011 .quad alpha_ni_syscall >> 1012 .quad alpha_ni_syscall >> 1013 .quad alpha_ni_syscall >> 1014 .quad alpha_ni_syscall /* 240 */ >> 1015 .quad osf_sysinfo >> 1016 .quad alpha_ni_syscall >> 1017 .quad alpha_ni_syscall >> 1018 .quad osf_proplist_syscall >> 1019 .quad alpha_ni_syscall /* 245 */ >> 1020 .quad alpha_ni_syscall >> 1021 .quad alpha_ni_syscall >> 1022 .quad alpha_ni_syscall >> 1023 .quad alpha_ni_syscall >> 1024 .quad alpha_ni_syscall /* 250 */ >> 1025 .quad osf_usleep_thread >> 1026 .quad alpha_ni_syscall >> 1027 .quad alpha_ni_syscall >> 1028 .quad sys_sysfs >> 1029 .quad alpha_ni_syscall /* 255 */ >> 1030 .quad osf_getsysinfo >> 1031 .quad osf_setsysinfo >> 1032 .quad alpha_ni_syscall >> 1033 .quad alpha_ni_syscall >> 1034 .quad alpha_ni_syscall /* 260 */ >> 1035 .quad alpha_ni_syscall >> 1036 .quad alpha_ni_syscall >> 1037 .quad alpha_ni_syscall >> 1038 .quad alpha_ni_syscall >> 1039 .quad alpha_ni_syscall /* 265 */ >> 1040 .quad alpha_ni_syscall >> 1041 .quad alpha_ni_syscall >> 1042 .quad alpha_ni_syscall >> 1043 .quad alpha_ni_syscall >> 1044 .quad alpha_ni_syscall /* 270 */ >> 1045 .quad alpha_ni_syscall >> 1046 .quad alpha_ni_syscall >> 1047 .quad alpha_ni_syscall >> 1048 .quad alpha_ni_syscall >> 1049 .quad alpha_ni_syscall /* 275 */ >> 1050 .quad alpha_ni_syscall >> 1051 .quad alpha_ni_syscall >> 1052 .quad alpha_ni_syscall >> 1053 .quad alpha_ni_syscall >> 1054 .quad alpha_ni_syscall /* 280 */ >> 1055 .quad alpha_ni_syscall >> 1056 .quad alpha_ni_syscall >> 1057 .quad alpha_ni_syscall >> 1058 .quad alpha_ni_syscall >> 1059 .quad alpha_ni_syscall /* 285 */ >> 1060 .quad alpha_ni_syscall >> 1061 .quad alpha_ni_syscall >> 1062 .quad alpha_ni_syscall >> 1063 .quad alpha_ni_syscall >> 1064 .quad alpha_ni_syscall /* 290 */ >> 1065 .quad alpha_ni_syscall >> 1066 .quad alpha_ni_syscall >> 1067 .quad alpha_ni_syscall >> 1068 .quad alpha_ni_syscall >> 1069 .quad alpha_ni_syscall /* 295 */ >> 1070 .quad alpha_ni_syscall >> 1071 .quad alpha_ni_syscall >> 1072 .quad alpha_ni_syscall >> 1073 .quad alpha_ni_syscall >> 1074 /* linux-specific system calls start at 300 */ >> 1075 .quad sys_bdflush /* 300 */ >> 1076 .quad sys_sethae >> 1077 .quad sys_mount >> 1078 .quad sys_old_adjtimex >> 1079 .quad sys_swapoff >> 1080 .quad sys_getdents /* 305 */ >> 1081 .quad alpha_create_module >> 1082 .quad sys_init_module >> 1083 .quad sys_delete_module >> 1084 .quad sys_get_kernel_syms >> 1085 .quad sys_syslog /* 310 */ >> 1086 .quad sys_reboot >> 1087 .quad sys_clone >> 1088 .quad sys_uselib >> 1089 .quad sys_mlock >> 1090 .quad sys_munlock /* 315 */ >> 1091 .quad sys_mlockall >> 1092 .quad sys_munlockall >> 1093 .quad sys_sysinfo >> 1094 .quad sys_sysctl >> 1095 .quad sys_ni_syscall /* 320 */ >> 1096 .quad sys_oldumount >> 1097 .quad sys_swapon >> 1098 .quad sys_times >> 1099 .quad sys_personality >> 1100 .quad sys_setfsuid /* 325 */ >> 1101 .quad sys_setfsgid >> 1102 .quad sys_ustat >> 1103 .quad sys_statfs >> 1104 .quad sys_fstatfs >> 1105 .quad sys_sched_setparam /* 330 */ >> 1106 .quad sys_sched_getparam >> 1107 .quad sys_sched_setscheduler >> 1108 .quad sys_sched_getscheduler >> 1109 .quad sys_sched_yield >> 1110 .quad sys_sched_get_priority_max /* 335 */ >> 1111 .quad sys_sched_get_priority_min >> 1112 .quad sys_sched_rr_get_interval >> 1113 .quad sys_ni_syscall /* sys_afs_syscall */ >> 1114 .quad sys_newuname >> 1115 .quad sys_nanosleep /* 340 */ >> 1116 .quad sys_mremap >> 1117 .quad sys_nfsservctl >> 1118 .quad sys_setresuid >> 1119 .quad sys_getresuid >> 1120 .quad sys_pciconfig_read /* 345 */ >> 1121 .quad sys_pciconfig_write >> 1122 .quad sys_query_module >> 1123 .quad sys_prctl >> 1124 .quad sys_pread >> 1125 .quad sys_pwrite /* 350 */ >> 1126 .quad sys_rt_sigreturn >> 1127 .quad sys_rt_sigaction >> 1128 .quad sys_rt_sigprocmask >> 1129 .quad sys_rt_sigpending >> 1130 .quad sys_rt_sigtimedwait /* 355 */ >> 1131 .quad sys_rt_sigqueueinfo >> 1132 .quad sys_rt_sigsuspend >> 1133 .quad sys_select >> 1134 .quad sys_gettimeofday >> 1135 .quad sys_settimeofday /* 360 */ >> 1136 .quad sys_getitimer >> 1137 .quad sys_setitimer >> 1138 .quad sys_utimes >> 1139 .quad sys_getrusage >> 1140 .quad sys_wait4 /* 365 */ >> 1141 .quad sys_adjtimex >> 1142 .quad sys_getcwd >> 1143 .quad sys_capget >> 1144 .quad sys_capset >> 1145 .quad sys_sendfile /* 370 */ >> 1146 .quad sys_setresgid >> 1147 .quad sys_getresgid >> 1148 .quad sys_ni_syscall /* sys_dipc */ >> 1149 .quad sys_pivot_root >> 1150 .quad sys_mincore /* 375 */ >> 1151 .quad sys_pciconfig_iobase >> 1152 .quad sys_getdents64 >> 1153 .quad sys_gettid >> 1154 .quad sys_readahead >> 1155 .quad sys_ni_syscall /* 380, sys_security */ >> 1156 .quad sys_tkill >> 1157 >> 1158 /* Remember to update everything, kids. */ >> 1159 .ifne (. - sys_call_table) - (NR_SYSCALLS * 8) >> 1160 .err >> 1161 .endif
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.