Commit | Line | Data |
---|---|---|
b202b2da | 1 | #\f |
31cef89c BJ |
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 | |
b202b2da CH |
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 | # | |
31cef89c BJ |
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 | # | |
b202b2da CH |
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 | |
31cef89c | 116 | movl 16(ap),r0 #r0 has PC at point following error |
b202b2da CH |
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 | |
b202b2da CH |
137 | .long _ADD2, _ADD28, EFIXADD |
138 | .long _ADD28, _SUB2, EFLTADD | |
139 | .long _SUB2, _SUB28, EFIXSUB | |
31cef89c BJ |
140 | .long _SUB28, _MUL2, EFLTSUB |
141 | .long _MUL2, _MUL28, EFIXMUL | |
b202b2da CH |
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 | |
b202b2da | 147 | .long _STOI, _UNDEF, EBUILTIN |
b202b2da CH |
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 |