Removed almost the whole file, as we now use assembly routines to
interface the systemcalls.
This commit is contained in:
parent
184f06453a
commit
595cc41d9c
1 changed files with 1 additions and 348 deletions
|
@ -1,354 +1,7 @@
|
|||
#include "system.h"
|
||||
#include "em_abs.h"
|
||||
#define MOVL movl (sp)+,(ap)+
|
||||
#define MOVQ movq (sp)+,(ap)+
|
||||
|
||||
# $Header$
|
||||
|
||||
.set sigvec,108
|
||||
# $Header$
|
||||
|
||||
.globl .mon
|
||||
|
||||
.mon:
|
||||
movl (sp)+,r2 # return address in r2
|
||||
movl (sp)+,r0 # monitor call in r0
|
||||
movl ap,r3
|
||||
movl $args,ap
|
||||
cvtlw r0,(ap)+
|
||||
cmpl r0,$61
|
||||
jgtru Lbadmon
|
||||
ashl $2,r0,r0
|
||||
jmp *L0(r0)
|
||||
.data
|
||||
.align 2
|
||||
L0:
|
||||
#ifndef BSD41a
|
||||
.long Lbadmon, Lexit, Lfork, Lread, Lwrite
|
||||
.long Lopen, Lclose, Lwait, Lcreat, Llink
|
||||
.long Lunlink, Lbadmon, Lchdir, Lbadmon, Lbadmon
|
||||
.long Lchmod, Lchown, Lbadmon, Lstat, Llseek
|
||||
.long Lgetpid, Lbadmon, Lbadmon, Lbadmon, Lgetuid
|
||||
.long Lbadmon, Lptrace, Lalarm, Lfstat, Lpause
|
||||
.long Lutime, Lbadmon, Lbadmon, Laccess, Lnice
|
||||
.long Lbadmon, Lsync, Lkill, Lbadmon, Lbadmon
|
||||
.long Lbadmon, Ldup, Lpipe, Lbadmon, Lprofil
|
||||
.long Lbadmon, Lbadmon, Lgetgid, Lsigtrp, Lbadmon
|
||||
.long Lbadmon, Lacct, Lbadmon, Lbadmon, Lioctl
|
||||
.long Lbadmon, Lbadmon, Lbadmon, Lbadmon, Lexece
|
||||
.long Lumask, Lchroot
|
||||
#else
|
||||
.long Lbadmon, Lexit, Lfork, Lread, Lwrite
|
||||
.long Lopen, Lclose, Lwait, Lcreat, Llink
|
||||
.long Lunlink, Lbadmon, Lchdir, Lbadmon, Lmknod
|
||||
.long Lchmod, Lchown, Lbadmon, Lstat, Llseek
|
||||
.long Lgetpid, Lmount, Lumount, Lsetuid, Lgetuid
|
||||
.long Lstime, Lptrace, Lalarm, Lfstat, Lpause
|
||||
.long Lutime, Lbadmon, Lbadmon, Laccess, Lnice
|
||||
.long Lftime, Lsync, Lkill, Lbadmon, Lbadmon
|
||||
.long Lbadmon, Ldup, Lpipe, Ltimes, Lprofil
|
||||
.long Lbadmon, Lsetgid, Lgetgid, Lsigtrp, Lbadmon
|
||||
.long Lbadmon, Lacct, Lbadmon, Llock, Lioctl
|
||||
.long Lbadmon, Lmpxall, Lbadmon, Lbadmon, Lexece
|
||||
.long Lumask, Lchroot
|
||||
#endif
|
||||
.text
|
||||
|
||||
# Each system call first stores its number of arguments, then the
|
||||
# arguments themselves.
|
||||
# The system calls are grouped according to their number of arguments
|
||||
# and their results.
|
||||
# Le*: an errornumber is expected
|
||||
# L*r0*: the value of r0 is expected
|
||||
# L*r1*: the value of r1 is expected
|
||||
# Lnores: no results expected
|
||||
|
||||
# 0 arguments.
|
||||
Lsync:
|
||||
Lpause:
|
||||
clrl (ap)+
|
||||
Lnores:
|
||||
jsb Lsyscall
|
||||
movl r3,ap
|
||||
jmp (r2)
|
||||
Lgetpid:
|
||||
clrl (ap)+
|
||||
Lr0:
|
||||
jsb Lsyscall
|
||||
pushl r0
|
||||
movl r3,ap
|
||||
jmp (r2)
|
||||
Lgetuid:
|
||||
Lgetgid:
|
||||
clrl (ap)+
|
||||
Lr0r1:
|
||||
jsb Lsyscall
|
||||
pushl r0
|
||||
pushl r1
|
||||
movl r3,ap
|
||||
jmp (r2)
|
||||
Lpipe:
|
||||
Lwait:
|
||||
Lfork:
|
||||
clrl (ap)+
|
||||
Ler0r1:
|
||||
jsb Lsyscall
|
||||
pushl r0
|
||||
pushl r1
|
||||
clrl -(sp)
|
||||
movl r3,ap
|
||||
jmp (r2)
|
||||
|
||||
# 1 argument.
|
||||
Lexit:
|
||||
Ltimes:
|
||||
cvtbl $1,(ap)+
|
||||
MOVL
|
||||
jbr Lnores
|
||||
Lclose:
|
||||
Lunlink:
|
||||
Lchdir:
|
||||
Lumount:
|
||||
Lsetuid:
|
||||
Lstime:
|
||||
Lnice:
|
||||
Lftime:
|
||||
Lsetgid:
|
||||
Lacct:
|
||||
Llock:
|
||||
Lchroot:
|
||||
cvtbl $1,(ap)+
|
||||
MOVL
|
||||
Le:
|
||||
jsb Lsyscall
|
||||
clrl -(sp)
|
||||
movl r3,ap
|
||||
jmp (r2)
|
||||
Lalarm:
|
||||
Lumask:
|
||||
cvtbl $1,(ap)+
|
||||
MOVL
|
||||
jbr Lr0
|
||||
|
||||
# 2 arguments.
|
||||
Llink:
|
||||
Lchmod:
|
||||
Lstat:
|
||||
Lfstat:
|
||||
Lutime:
|
||||
Laccess:
|
||||
Lkill:
|
||||
Lmpxall:
|
||||
cvtbl $2,(ap)+
|
||||
MOVQ
|
||||
jbr Le
|
||||
Ldup:
|
||||
cvtbl $2,(ap)+
|
||||
MOVQ
|
||||
Ler0:
|
||||
jsb Lsyscall
|
||||
pushl r0
|
||||
clrl -(sp)
|
||||
movl r3,ap
|
||||
jmp (r2)
|
||||
|
||||
# 3 arguments.
|
||||
Lioctl:
|
||||
Lexece:
|
||||
Lmknod:
|
||||
Lchown:
|
||||
Lmount:
|
||||
cvtbl $3,(ap)+
|
||||
MOVL
|
||||
MOVQ
|
||||
jbr Le
|
||||
Llseek:
|
||||
Lread:
|
||||
Lwrite:
|
||||
cvtbl $3,(ap)+
|
||||
MOVL
|
||||
MOVQ
|
||||
jbr Ler0
|
||||
|
||||
# 4 arguments.
|
||||
Lprofil:
|
||||
cvtbl $4,(ap)+
|
||||
MOVQ
|
||||
MOVQ
|
||||
jbr Lnores
|
||||
Lptrace:
|
||||
cvtbl $4,(ap)+
|
||||
MOVQ
|
||||
MOVQ
|
||||
jbr Ler0
|
||||
|
||||
Lopen:
|
||||
#ifndef BSD41a
|
||||
# The old open(name, mode) system call is simulated by
|
||||
# open(name, mode, 0).
|
||||
cvtbl $3,(ap)+
|
||||
#else
|
||||
cvtbl $2,(ap)+
|
||||
#endif
|
||||
MOVQ
|
||||
#ifndef BSD41a
|
||||
clrl (ap)+
|
||||
#endif
|
||||
jbr Ler0
|
||||
Lcreat:
|
||||
#ifndef BSD41a
|
||||
# The old creat(name, mode) system call is simulated by
|
||||
# open(name, O_WRONLY | O_CREAT | O_TRUNC, mode).
|
||||
cvtbl $5,-2(ap)
|
||||
cvtbl $3,(ap)+
|
||||
#else
|
||||
cvtbl $2,(ap)+
|
||||
#endif
|
||||
MOVL
|
||||
#ifndef BSD41a
|
||||
movl $0x601,(ap)+
|
||||
#endif
|
||||
MOVL
|
||||
jbr Ler0
|
||||
|
||||
Lsyscall:
|
||||
movl $args,ap
|
||||
chmk (ap)+
|
||||
bcc L1
|
||||
cvtwl r0,(sp) # Push the error returned twice,
|
||||
cvtwl r0,-(sp) # overwrite the return address
|
||||
movl r3,ap
|
||||
jmp (r2)
|
||||
L1:
|
||||
rsb
|
||||
Lbadmon:
|
||||
pushl $EBADMON
|
||||
jmp .fat
|
||||
Lsigtrp:
|
||||
movl 4(sp),r1 # Sig in r1
|
||||
movl (sp)+,(sp) # Trapno on top of stack
|
||||
cmpl r1,$16
|
||||
jgtru badsig
|
||||
tstl r1
|
||||
jeql badsig
|
||||
#ifdef BSD42
|
||||
movl $3,(ap)+ # sigvec(sig, vec, ovec)
|
||||
#else BSD42
|
||||
movl $2,(ap)+ # signal(sig, func)
|
||||
#endif BSD42
|
||||
movl r1,(ap)+
|
||||
movl sigadr0 [r1],r0
|
||||
tstl (sp)
|
||||
blss L2
|
||||
cmpl (sp),$252
|
||||
bgtr badtrp
|
||||
movl r0,(ap)+
|
||||
brb sys
|
||||
L2: cmpl $-3,(sp)
|
||||
bneq L3
|
||||
movl $1,(ap)+ # SIG_IGN
|
||||
brb sys
|
||||
L3: cmpl $-2,(sp)
|
||||
bneq badtrp
|
||||
clrl (ap)+ # SIG_DFL
|
||||
sys:
|
||||
#ifdef BSD42
|
||||
movl -(ap),vec # vec->sv_handler = func
|
||||
movl $vec,(ap)+
|
||||
movl $ovec,(ap)+ # Not used.
|
||||
#endif BSD42
|
||||
pushl sigtrp0 [r1]
|
||||
movl 4(sp),sigtrp0 [r1]
|
||||
movl (sp)+,(sp) # Old trap number on top of stack.
|
||||
movl $args,ap
|
||||
#ifdef BSD42
|
||||
movw $sigvec,(ap)
|
||||
#endif
|
||||
chmk (ap)+
|
||||
bcc L4
|
||||
movl (sp),sigtrp0 [r1] # Error, reset old trap number.
|
||||
pushl r0
|
||||
movl r3,ap
|
||||
jmp (r2)
|
||||
L4: clrl -(sp)
|
||||
movl r3,ap
|
||||
jmp (r2)
|
||||
badsig:
|
||||
movl $-1,(sp)
|
||||
pushl (sp)
|
||||
movl r3,ap
|
||||
jmp (r2)
|
||||
badtrp:
|
||||
movl sigtrp0 [r1],(sp)
|
||||
pushl $-1
|
||||
movl r3,ap
|
||||
jmp (r2)
|
||||
|
||||
sigs:
|
||||
.word 0x0000
|
||||
# Routine to catch signals.
|
||||
pushl fp
|
||||
movl 12(fp),fp
|
||||
movl 12(fp),fp # Restore local base, two levels!
|
||||
movl 4(ap),ap
|
||||
pushl sigtrp0 [ap]
|
||||
jsb .trp
|
||||
movl (sp)+,fp
|
||||
ret
|
||||
|
||||
.data
|
||||
#ifdef BSD42
|
||||
vec:
|
||||
.long 0 # sv_handler
|
||||
.long 0 # sv_mask
|
||||
.long 0 # sv_onstack
|
||||
ovec:
|
||||
.long 0 # sv_onstack
|
||||
.long 0 # sv_mask
|
||||
.long 0 # sv_onstack
|
||||
#endif BSD42
|
||||
args:
|
||||
.word 0
|
||||
.long 0
|
||||
.long 0
|
||||
.long 0
|
||||
.long 0
|
||||
.long 0
|
||||
.long 0
|
||||
|
||||
sigadr0:
|
||||
.long 0 #0
|
||||
.long sigs #1
|
||||
.long sigs #2
|
||||
.long sigs #3
|
||||
.long sigs #4
|
||||
.long sigs #5
|
||||
.long sigs #6
|
||||
.long sigs #7
|
||||
.long sigs #8
|
||||
.long sigs #9
|
||||
.long sigs #10
|
||||
.long sigs #11
|
||||
.long sigs #12
|
||||
.long sigs #13
|
||||
.long sigs #14
|
||||
.long sigs #15
|
||||
.long sigs #16
|
||||
|
||||
sigtrp0:
|
||||
.long -2
|
||||
.long -2
|
||||
.long -2
|
||||
.long -2
|
||||
.long -2
|
||||
.long -2
|
||||
.long -2
|
||||
.long -2
|
||||
.long -2
|
||||
.long -2
|
||||
.long -2
|
||||
.long -2
|
||||
.long -2
|
||||
.long -2
|
||||
.long -2
|
||||
.long -2
|
||||
.long -2
|
||||
|
|
Loading…
Reference in a new issue