|
|
1.1 root 1: #
2: # Copyright (c) 1979 Regents of the University of California
3: #
4: # char sccsid[] = "@(#)34err.s 4.1 10/10/80";
5: #
6: .set EARGV ,1
7: .set EASRT ,2
8: .set EASSIGN ,3
9: .set EBADFNUM ,4
10: .set EBADINUM ,5
11: .set EBADOP ,6
12: .set EBUILTIN ,7
13: .set ECASE ,8
14: .set ECHR ,9
15: .set ECLOSE,10
16: .set ECREATE,11
17: .set EFIXADD,13
18: .set EFIXDIV,14
19: .set EFIXMUL,15
20: .set EFIXNEG,16
21: .set EFIXSUB,17
22: .set EFLTADD,18
23: .set EFLTDIV,19
24: .set EFLTMUL,20
25: .set EFLTSUB,21
26: .set EFMTSIZE,22
27: .set EGOTO,23
28: .set EHALT,24
29: .set EINTR,25
30: .set ELLIMIT,26
31: .set ELN,27
32: .set EMODDIV,28
33: .set ENAMESIZE,29
34: .set ENAMRNG,30
35: .set ENILPTR,31
36: .set ENUMNTFD,32
37: .set EOPEN,33
38: .set EOUTOFMEM,34
39: .set EPACK,35
40: .set EPASTEOF,36
41: .set ERANGE,37
42: .set EREADIT,38
43: .set EREFINAF,39
44: .set EREMOVE,40
45: .set ESEEK,41
46: .set ESQRT,42
47: .set ESTKNEMP,43
48: .set ESTKOVFLO,44
49: .set ESTLIM,45
50: .set ESUBSCR,46
51: .set ESYSTEM,47
52: .set ETRASHHEAP,48
53: .set EUNPACK,49
54: .set EWRITE,50
55: .set EWRITEIT,51
56: .set ECTLWR,12
57: .set ECTUPR,52
58: .set ECTSNG,53
59: .set ENARGS,54
60: #
61: # Fielding interrupts and processing errors
62: #
63: # Process interpreter detected errors
64: #
65: error:
66: movzwl _perrno,-(sp)
67: calls $1,_error
68: jmp (r8)
69:
70: _endinterpret:
71: .byte 'e,'n,'d, 0
72:
73: #
74: # Keyboard interrupts
75: #
76: .align 1
77: .globl _intr
78: _intr:
79: .word 0
80: pushal _intr #reset interrupt signal
81: pushl $SIGINT
82: calls $2,_signal
83: pushl $EINTR
84: calls $1,_error
85: ret
86: #
87: # Segmentation Violations => No more memory available for the stack
88: #
89: .align 1
90: .globl _memsize
91: _memsize:
92: .word 0
93: pushl $ESTKOVFLO
94: calls $1,_error
95: ret
96: #
97: # Die gracefully on unexpected signals
98: #
99: .align 1
100: .globl _syserr
101: _syserr:
102: .word 0
103: pushl $ESYSTEM
104: calls $1,_error
105: ret
106: #
107: # Process computational errors
108: #
109: .align 1
110: .globl _except
111: _except:
112: .word 0
113: pushal _except #reset signal
114: pushl $SIGFPE
115: calls $2,_signal
116: movl 16(ap),r0 #r0 has PC at point following error
117: moval errtbl-4,r1 #r1 points to error offset table
118: l3404:
119: addl2 $4,r1 #determine cause of error
120: cmpl r0,(r1)+
121: blssu l3405 #not in table => system error
122: cmpl r0,(r1)+
123: bgtru l3404
124: movzwl (r1),-(sp) #select error message
125: brb l3406
126: l3405:
127: pushl $ESYSTEM
128: l3406:
129: calls $1,_error
130: ret
131: #
132: # Table of offsets and their associated errors
133: #
134: .align 1
135: errtbl:
136: .long _AS2, _OFF, EASSIGN
137: .long _ADD2, _ADD28, EFIXADD
138: .long _ADD28, _SUB2, EFLTADD
139: .long _SUB2, _SUB28, EFIXSUB
140: .long _SUB28, _MUL2, EFLTSUB
141: .long _MUL2, _MUL28, EFIXMUL
142: .long _MUL28, _DIV2, EFLTMUL
143: .long _DIV2, _MOD2, EFIXDIV
144: .long _MOD2, _ABS2, EMODDIV
145: .long _ABS2, _ABS8, EFIXNEG
146: .long _DVD2, _IND1, EFLTDIV
147: .long _STOI, _UNDEF, EBUILTIN
148: .long 0xffffffff
149: #
150: # recover values of dp and lino from the stack
151: #
152: .globl _fetchdp
153:
154: _fetchdp:
155: .word R2|R3|R4|R5|R6|R7|R8|R9|R10|R11
156: pushl fp #sift through the stack to get the
157: movl sp,oldsp # values of dp and lino
158: l3401:
159: bicw3 $0xf000,MASK(fp),mask #register save mask
160: moval REGS(fp),sp #point to saved registers
161: popr mask #pop them
162: cmpl PC(fp),$_interpret #check for interpreter frame
163: blss l3402 #not found
164: cmpl PC(fp),$_endinterpret #check for end of interpreter
165: blss l3403 #found
166: l3402:
167: movl FP(fp),fp #get next frames registers
168: jbr l3401
169: l3403:
170: movl oldsp,sp #restore current frame
171: movl (sp)+,fp
172: movl r9,*4(ap) #return dp
173: movl r11,*8(ap) #return lino
174: ret
175: .data
176: oldsp: .space 4 #old value of sp
177: mask: .space 2 #register pop mask
178: .text
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.