1
2
3
4
5
6
7 #include <asm/system.h>
8
9 #define halt .long PAL_halt
10 #define rti .long PAL_rti
11
12 #define NR_SYSCALLS 320
13 #define osf_vfork sys_fork
14
15
16
17
18 #define HAE_CACHE 0
19 #define HAE_REG 8
20
21
22
23
24 #define SP_OFF 160
25
26 #define SWITCH_STACK_SIZE 320
27
28
29
30
31 #define TASK_STATE 0
32 #define TASK_COUNTER 8
33 #define TASK_PRIORITY 16
34 #define TASK_SIGNAL 24
35 #define TASK_BLOCKED 32
36 #define TASK_FLAGS 40
37
38
39
40
41 #define PF_PTRACED 0x00000010
42
43
44
45
46
47
48
49
50 #define SAVE_ALL \
51 subq $30,160,$30; \
52 stq $0,0($30); \
53 stq $1,8($30); \
54 stq $2,16($30); \
55 stq $3,24($30); \
56 stq $4,32($30); \
57 stq $5,40($30); \
58 stq $6,48($30); \
59 stq $7,56($30); \
60 stq $8,64($30); \
61 stq $19,72($30); \
62 stq $20,80($30); \
63 stq $21,88($30); \
64 stq $22,96($30); \
65 stq $23,104($30); \
66 stq $24,112($30); \
67 stq $25,120($30); \
68 stq $26,128($30); \
69 stq $27,136($30); \
70 stq $28,144($30); \
71 lda $2,hae; \
72 ldq $2,HAE_CACHE($2); \
73 stq $2,152($30)
74
75 #define RESTORE_ALL \
76 lda $8,hae; \
77 ldq $7,HAE_CACHE($8); \
78 ldq $6,152($30); \
79 subq $7,$6,$5; \
80 beq $5,99f; \
81 ldq $7,HAE_REG($8); \
82 addq $31,7,$16; \
83 call_pal PAL_swpipl; \
84 stq $6,HAE_CACHE($8); \
85 stq $6,0($7); \
86 mb; \
87 bis $0,$0,$16; \
88 call_pal PAL_swpipl; \
89 99:; \
90 ldq $0,0($30); \
91 ldq $1,8($30); \
92 ldq $2,16($30); \
93 ldq $3,24($30); \
94 ldq $4,32($30); \
95 ldq $5,40($30); \
96 ldq $6,48($30); \
97 ldq $7,56($30); \
98 ldq $8,64($30); \
99 ldq $19,72($30); \
100 ldq $20,80($30); \
101 ldq $21,88($30); \
102 ldq $22,96($30); \
103 ldq $23,104($30); \
104 ldq $24,112($30); \
105 ldq $25,120($30); \
106 ldq $26,128($30); \
107 ldq $27,136($30); \
108 ldq $28,144($30); \
109 addq $30,160,$30
110
111 .text
112 .set noat
113 #ifdef __linux__
114 .set singlegp
115 #endif
116
117 .align 3
118 .globl entInt
119 .ent entInt
120 entInt:
121 SAVE_ALL
122
123 lda $0,intr_count
124 ldq $1,0($0)
125 addq $1,1,$1
126 stq $1,0($0)
127
128 lda $27,do_entInt
129 jsr $26,($27),do_entInt
130
131 1: lda $0,intr_count
132 ldq $1,0($0)
133 subq $1,1,$1
134 bne $1,2f
135 lda $2,bh_active
136 ldq $3,0($2)
137 lda $2,bh_mask
138 ldq $2,0($2)
139 and $2,$3,$2
140 bne $2,3f
141 stq $1,0($0)
142 br $31,ret_from_sys_call
143 .align 3
144 2: stq $1,0($0)
145 br $31,restore_all
146 .align 3
147 3: lda $27,do_bottom_half
148 jsr $26,($27),do_bottom_half
149 br $31,1b
150 .end entInt
151
152 .align 3
153 .globl entMM
154 .ent entMM
155 entMM:
156 SAVE_ALL
157 lda $27,do_page_fault
158 lda $26,ret_from_sys_call
159 jsr $31,($27),do_page_fault
160 .end entMM
161
162 .align 3
163 .globl entArith
164 .ent entArith
165 entArith:
166 SAVE_ALL
167 lda $27,do_entArith
168 lda $26,ret_from_sys_call
169 jsr $31,($27),do_entArith
170 .end entArith
171
172 .align 3
173 .globl entIF
174 .ent entIF
175 entIF:
176 SAVE_ALL
177 lda $27,do_entIF
178 lda $26,ret_from_sys_call
179 jsr $31,($27),do_entIF
180 .end entIF
181
182
183
184
185
186
187
188
189
190
191 .align 3
192 .globl kernel_fork
193 .ent kernel_fork
194 kernel_fork:
195 subq $30,6*8,$30
196 stq $31,0($30)
197 stq $26,8($30)
198 stq $29,16($30)
199 stq $16,24($30)
200 stq $17,32($30)
201 stq $18,40($30)
202 bis $31,2,$0
203 SAVE_ALL
204 lda $27,sys_fork
205 jsr $26,($27),sys_fork
206 stq $0,0($30)
207 br ret_from_sys_call
208 .end kernel_fork
209
210 .align 3
211 .ent do_switch_stack
212 do_switch_stack:
213 lda $30,-SWITCH_STACK_SIZE($30)
214 stq $9,0($30)
215 stq $10,8($30)
216 stq $11,16($30)
217 stq $12,24($30)
218 stq $13,32($30)
219 stq $14,40($30)
220 stq $15,48($30)
221 stq $26,56($30)
222 stt $f0,64($30)
223 stt $f1,72($30)
224 stt $f2,80($30)
225 stt $f3,88($30)
226 stt $f4,96($30)
227 stt $f5,104($30)
228 stt $f6,112($30)
229 stt $f7,120($30)
230 stt $f8,128($30)
231 stt $f9,136($30)
232 stt $f10,144($30)
233 stt $f11,152($30)
234 stt $f12,160($30)
235 stt $f13,168($30)
236 stt $f14,176($30)
237 stt $f15,184($30)
238 stt $f16,192($30)
239 stt $f17,200($30)
240 stt $f18,208($30)
241 stt $f19,216($30)
242 stt $f20,224($30)
243 stt $f21,232($30)
244 stt $f22,240($30)
245 stt $f23,248($30)
246 stt $f24,256($30)
247 stt $f25,264($30)
248 stt $f26,272($30)
249 stt $f27,280($30)
250 stt $f28,288($30)
251 stt $f29,296($30)
252 stt $f30,304($30)
253 ret $31,($1),1
254 .end do_switch_stack
255
256 .align 3
257 .ent undo_switch_stack
258 undo_switch_stack:
259 ldq $9,0($30)
260 ldq $10,8($30)
261 ldq $11,16($30)
262 ldq $12,24($30)
263 ldq $13,32($30)
264 ldq $14,40($30)
265 ldq $15,48($30)
266 ldq $26,56($30)
267 ldt $f0,64($30)
268 ldt $f1,72($30)
269 ldt $f2,80($30)
270 ldt $f3,88($30)
271 ldt $f4,96($30)
272 ldt $f5,104($30)
273 ldt $f6,112($30)
274 ldt $f7,120($30)
275 ldt $f8,128($30)
276 ldt $f9,136($30)
277 ldt $f10,144($30)
278 ldt $f11,152($30)
279 ldt $f12,160($30)
280 ldt $f13,168($30)
281 ldt $f14,176($30)
282 ldt $f15,184($30)
283 ldt $f16,192($30)
284 ldt $f17,200($30)
285 ldt $f18,208($30)
286 ldt $f19,216($30)
287 ldt $f20,224($30)
288 ldt $f21,232($30)
289 ldt $f22,240($30)
290 ldt $f23,248($30)
291 ldt $f24,256($30)
292 ldt $f25,264($30)
293 ldt $f26,272($30)
294 ldt $f27,280($30)
295 ldt $f28,288($30)
296 ldt $f29,296($30)
297 ldt $f30,304($30)
298 lda $30,SWITCH_STACK_SIZE($30)
299 ret $31,($1),1
300 .end undo_switch_stack
301
302 .align 3
303 .globl entUna
304 .ent entUna
305 entUna:
306 lda $30,-256($30)
307 stq $0,0($30)
308 ldq $0,256($30)
309 stq $1,8($30)
310 stq $2,16($30)
311 stq $3,24($30)
312 and $0,8,$0
313 stq $4,32($30)
314 bne $0,entUnaUser
315 stq $5,40($30)
316 stq $6,48($30)
317 stq $7,56($30)
318 stq $8,64($30)
319 stq $9,72($30)
320 stq $10,80($30)
321 stq $11,88($30)
322 stq $12,96($30)
323 stq $13,104($30)
324 stq $14,112($30)
325 stq $15,120($30)
326
327 stq $19,152($30)
328 stq $20,160($30)
329 stq $21,168($30)
330 stq $22,176($30)
331 stq $23,184($30)
332 stq $24,192($30)
333 stq $25,200($30)
334 stq $26,208($30)
335 stq $27,216($30)
336 stq $28,224($30)
337 stq $29,232($30)
338 stq $30,240($30)
339 stq $31,248($30)
340 lda $27,do_entUna
341 jsr $26,($27),do_entUna
342 ldq $0,0($30)
343 ldq $1,8($30)
344 ldq $2,16($30)
345 ldq $3,24($30)
346 ldq $4,32($30)
347 ldq $5,40($30)
348 ldq $6,48($30)
349 ldq $7,56($30)
350 ldq $8,64($30)
351 ldq $9,72($30)
352 ldq $10,80($30)
353 ldq $11,88($30)
354 ldq $12,96($30)
355 ldq $13,104($30)
356 ldq $14,112($30)
357 ldq $15,120($30)
358
359 ldq $19,152($30)
360 ldq $20,160($30)
361 ldq $21,168($30)
362 ldq $22,176($30)
363 ldq $23,184($30)
364 ldq $24,192($30)
365 ldq $25,200($30)
366 ldq $26,208($30)
367 ldq $27,216($30)
368 ldq $28,224($30)
369 ldq $29,232($30)
370 ldq $30,240($30)
371 lda $30,256($30)
372 rti
373 .end entUna
374
375 .align 3
376 .ent entUnaUser
377 entUnaUser:
378 ldq $0,0($30)
379 lda $30,256($30)
380 SAVE_ALL
381 lda $30,-56($30)
382 stq $9,0($30)
383 stq $10,8($30)
384 stq $11,16($30)
385 stq $12,24($30)
386 stq $13,32($30)
387 stq $14,40($30)
388 stq $15,48($30)
389 lda $27,do_entUnaUser
390 bis $31,$30,$19
391 jsr $26,($27),do_entUnaUser
392 ldq $9,0($30)
393 ldq $10,8($30)
394 ldq $11,16($30)
395 ldq $12,24($30)
396 ldq $13,32($30)
397 ldq $14,40($30)
398 ldq $15,48($30)
399 lda $30,56($30)
400 br $31,ret_from_sys_call
401
402 .end entUnaUser
403
404 .align 3
405 .globl sys_fork
406 .ent sys_fork
407 sys_fork:
408 br $1,do_switch_stack
409 bis $30,$30,$16
410 lda $27,alpha_fork
411 jsr $26,($27),alpha_fork
412 br $1,undo_switch_stack
413 ret $31,($26),1
414 .end sys_fork
415
416 .align 3
417 .globl alpha_switch_to
418 .ent alpha_switch_to
419 alpha_switch_to:
420 br $1,do_switch_stack
421 call_pal PAL_swpctx
422 br $1,undo_switch_stack
423 ret $31,($26),1
424 .end alpha_switch_to
425
426
427
428
429
430
431
432
433 .align 3
434 .globl entSys
435 .globl ret_from_sys_call
436 .ent entSys
437 entSys:
438 stq $16,24($30)
439 stq $17,32($30)
440 stq $18,40($30)
441 SAVE_ALL
442 lda $1,NR_SYSCALLS($31)
443 lda $2,sys_call_table
444 lda $27,do_entSys
445 cmpult $0,$1,$1
446 s8addq $0,$2,$2
447 beq $1,1f
448 ldq $27,0($2)
449 1: jsr $26,($27),do_entSys
450 blt $0,syscall_error
451 stq $0,0($30)
452 ret_success:
453 stq $31,72($30)
454 .align 3
455 ret_from_sys_call:
456 ldq $0,SP_OFF($30)
457 cmovne $26,0,$19
458 and $0,8,$0
459 beq $0,restore_all
460 ret_from_reschedule:
461 lda $0,need_resched
462 lda $1,current
463 ldl $2,0($0)
464 lda $4,init_task
465 ldq $3,0($1)
466 bne $2,reschedule
467 subq $4,$3,$4
468 beq $4,restore_all
469 ldq $4,TASK_SIGNAL($3)
470 ldq $16,TASK_BLOCKED($3)
471 bic $4,$16,$4
472 bne $4,signal_return
473 restore_all:
474 RESTORE_ALL
475 rti
476
477 .align 3
478 syscall_error:
479
480
481
482
483
484
485 addq $0,255,$1
486 beq $1,ret_success
487
488 bis $31,$31,$26
489 ldq $19,0($30)
490 ldq $20,72($30)
491 subq $31,$0,$0
492 addq $31,1,$1
493 stq $0,0($30)
494 stq $1,72($30)
495 br $31,ret_from_sys_call
496
497 .align 3
498 signal_return:
499 bis $30,$30,$17
500 br $1,do_switch_stack
501 bis $30,$30,$18
502 lda $27,do_signal
503 jsr $26,($27),do_signal
504 lda $30,SWITCH_STACK_SIZE($30)
505 br $31,restore_all
506 .end entSys
507
508 .align 3
509 .ent reschedule
510 reschedule:
511 subq $30,16,$30
512 stq $19,0($30)
513 stq $20,8($30)
514 lda $27,schedule
515 jsr $26,($27),schedule
516 ldq $19,0($30)
517 ldq $20,8($30)
518 addq $30,16,$30
519 br $31,ret_from_reschedule
520 .end reschedule
521
522 .align 3
523 .ent sys_sigreturn
524 sys_sigreturn:
525 bis $30,$30,$17
526 lda $30,-SWITCH_STACK_SIZE($30)
527 bis $30,$30,$18
528 lda $27,do_sigreturn
529 jsr $26,($27),do_sigreturn
530 br $1,undo_switch_stack
531 br $31,ret_from_sys_call
532 .end sys_sigreturn
533
534 .align 3
535 .ent sys_sigsuspend
536 sys_sigsuspend:
537 bis $30,$30,$17
538 br $1,do_switch_stack
539 bis $30,$30,$18
540 lda $27,do_sigsuspend
541 jsr $26,($27),do_sigsuspend
542 lda $30,SWITCH_STACK_SIZE($30)
543 br $31,ret_from_sys_call
544 .end sys_sigsuspend
545
546 .align 3
547 .globl sys_call_table
548 sys_call_table:
549 .quad do_entSys, sys_exit, sys_fork, sys_read, sys_write
550 .quad do_entSys, sys_close, sys_wait4, do_entSys, sys_link
551 .quad sys_unlink, do_entSys, sys_chdir, sys_fchdir, sys_mknod
552 .quad sys_chmod, sys_chown, sys_brk, do_entSys, sys_lseek
553 .quad sys_getxpid, osf_mount, osf_umount, sys_setuid, sys_getxuid
554 .quad do_entSys, sys_ptrace, do_entSys, do_entSys, do_entSys
555 .quad do_entSys, do_entSys, do_entSys, sys_access, do_entSys
556 .quad do_entSys, sys_sync, sys_kill, do_entSys, sys_setpgid
557 .quad do_entSys, sys_dup, sys_pipe, do_entSys, do_entSys
558 .quad sys_open, do_entSys, sys_getxgid, osf_sigprocmask, do_entSys
559 .quad do_entSys, sys_acct, do_entSys, do_entSys, sys_ioctl
560 .quad do_entSys, do_entSys, sys_symlink, sys_readlink, sys_execve
561 .quad sys_umask, do_entSys, do_entSys, sys_getpgrp, sys_getpagesize
562 .quad do_entSys, osf_vfork, sys_newstat, sys_newlstat, do_entSys
563 .quad do_entSys, osf_mmap, do_entSys, sys_munmap, sys_mprotect
564 .quad sys_madvise, sys_vhangup, do_entSys, do_entSys, sys_getgroups
565
566 .quad sys_setgroups, do_entSys, sys_setpgid, sys_setitimer, do_entSys
567 .quad do_entSys, sys_getitimer, sys_gethostname, sys_sethostname, sys_getdtablesize
568 .quad sys_dup2, sys_newfstat, sys_fcntl, sys_select, do_entSys
569 .quad sys_fsync, sys_setpriority, sys_socket, sys_connect, sys_accept
570 .quad sys_getpriority, sys_send, sys_recv, sys_sigreturn, sys_bind
571 .quad sys_setsockopt, sys_listen, do_entSys, do_entSys, do_entSys
572 .quad do_entSys, sys_sigsuspend, do_entSys, do_entSys, do_entSys
573 .quad do_entSys, sys_gettimeofday, sys_getrusage, sys_getsockopt, do_entSys
574 .quad do_entSys, do_entSys, sys_settimeofday, sys_fchown, sys_fchmod
575 .quad sys_recvfrom, sys_setreuid, sys_setregid, sys_rename, sys_truncate
576 .quad sys_ftruncate, do_entSys, sys_setgid, sys_sendto, sys_shutdown
577 .quad sys_socketpair, sys_mkdir, sys_rmdir, sys_utimes, do_entSys
578 .quad do_entSys, sys_getpeername, do_entSys, do_entSys, sys_getrlimit
579 .quad sys_setrlimit, do_entSys, sys_setsid, do_entSys, do_entSys
580 .quad sys_getsockname, do_entSys, do_entSys, do_entSys, do_entSys
581 .quad do_entSys, sys_sigaction, do_entSys, do_entSys, osf_getdirentries
582 .quad osf_statfs, osf_fstatfs, do_entSys, do_entSys, do_entSys
583 .quad osf_getdomainname, do_entSys, do_entSys, do_entSys, do_entSys
584 .quad do_entSys, do_entSys, do_entSys, do_entSys, do_entSys
585 .quad do_entSys, do_entSys, do_entSys, do_entSys, do_entSys
586 .quad do_entSys, do_entSys, do_entSys, do_entSys, do_entSys
587 .quad do_entSys, do_entSys, do_entSys, do_entSys, do_entSys
588 .quad do_entSys, do_entSys, do_entSys, do_entSys, do_entSys
589 .quad do_entSys, do_entSys, do_entSys, do_entSys, osf_swapon
590 .quad sys_msgctl, sys_msgget, sys_msgrcv, sys_msgsnd, sys_semctl
591 .quad sys_semget, sys_semop, osf_utsname, do_entSys, osf_shmat
592 .quad sys_shmctl, sys_shmdt, sys_shmget, do_entSys, do_entSys
593 .quad do_entSys, do_entSys, do_entSys, do_entSys, do_entSys
594 .quad do_entSys, do_entSys, do_entSys, do_entSys, do_entSys
595 .quad do_entSys, do_entSys, do_entSys, do_entSys, do_entSys
596 .quad do_entSys, do_entSys, do_entSys, do_entSys, do_entSys
597 .quad do_entSys, do_entSys, do_entSys, do_entSys, do_entSys
598 .quad do_entSys, do_entSys, do_entSys, do_entSys, osf_proplist_syscall
599 .quad do_entSys, do_entSys, do_entSys, do_entSys, do_entSys
600 .quad do_entSys, osf_usleep_thread, do_entSys, do_entSys, do_entSys
601 .quad do_entSys, do_entSys, do_entSys, do_entSys, do_entSys
602 .quad do_entSys, do_entSys, do_entSys, do_entSys, do_entSys
603 .quad do_entSys, do_entSys, do_entSys, do_entSys, do_entSys
604 .quad do_entSys, do_entSys, do_entSys, do_entSys, do_entSys
605 .quad do_entSys, do_entSys, do_entSys, do_entSys, do_entSys
606 .quad do_entSys, do_entSys, do_entSys, do_entSys, do_entSys
607 .quad do_entSys, do_entSys, do_entSys, do_entSys, do_entSys
608 .quad do_entSys, do_entSys, do_entSys, do_entSys, do_entSys
609 .quad do_entSys, do_entSys, do_entSys, do_entSys, do_entSys
610
611 .quad sys_bdflush, sys_sethae, sys_mount, sys_adjtimex, sys_swapoff
612 .quad sys_getdents, sys_create_module, sys_init_module, sys_delete_module, sys_get_kernel_syms
613 .quad sys_syslog, sys_reboot, do_entSys, do_entSys, do_entSys
614 .quad do_entSys, do_entSys, do_entSys, do_entSys, do_entSys
615