BSD 4 release
[unix-history] / usr / src / cmd / px / 34err.s
CommitLineData
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#
65error:
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
118l3404:
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
126l3405:
127 pushl $ESYSTEM
128l3406:
129 calls $1,_error
130 ret
131#
132# Table of offsets and their associated errors
133#
134 .align 1
135errtbl:
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
158l3401:
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
166l3402:
167 movl FP(fp),fp #get next frames registers
168 jbr l3401
169l3403:
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
176oldsp: .space 4 #old value of sp
177mask: .space 2 #register pop mask
178 .text