xref: /plan9/sys/lib/acid/sparc (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
1*219b2ee8SDavid du Colombier// Sparc support
2*219b2ee8SDavid du Colombier
3*219b2ee8SDavid du Colombierdefn acidinit()			// Called after all the init modules are loaded
4*219b2ee8SDavid du Colombier{
5*219b2ee8SDavid du Colombier	bplist = {};
6*219b2ee8SDavid du Colombier	bpfmt = 'X';
7*219b2ee8SDavid du Colombier
8*219b2ee8SDavid du Colombier	srcpath = {
9*219b2ee8SDavid du Colombier		"./",
10*219b2ee8SDavid du Colombier		"/sys/src/libc/port/",
11*219b2ee8SDavid du Colombier		"/sys/src/libc/9sys/",
12*219b2ee8SDavid du Colombier		"/sys/src/libc/sparc/"
13*219b2ee8SDavid du Colombier	};
14*219b2ee8SDavid du Colombier
15*219b2ee8SDavid du Colombier	srcfiles = {};		// list of loaded files
16*219b2ee8SDavid du Colombier	srctext = {};		// the text of the files
17*219b2ee8SDavid du Colombier	linkreg = R15;
18*219b2ee8SDavid du Colombier}
19*219b2ee8SDavid du Colombier
20*219b2ee8SDavid du Colombierdefn stk()			// trace
21*219b2ee8SDavid du Colombier{
22*219b2ee8SDavid du Colombier	_stk(*PC, *R1, *linkreg, 0);
23*219b2ee8SDavid du Colombier}
24*219b2ee8SDavid du Colombier
25*219b2ee8SDavid du Colombierdefn lstk()			// trace with locals
26*219b2ee8SDavid du Colombier{
27*219b2ee8SDavid du Colombier	_stk(*PC, *R1, *linkreg, 1);
28*219b2ee8SDavid du Colombier}
29*219b2ee8SDavid du Colombier
30*219b2ee8SDavid du Colombierdefn gpr()			// print general purpose registers
31*219b2ee8SDavid du Colombier{
32*219b2ee8SDavid du Colombier	print("R1\t", *R1, " R2\t", *R2, " R3\t", *R3, "\n");
33*219b2ee8SDavid du Colombier	print("R4\t", *R4, " R5\t", *R5, " R6\t", *R6, "\n");
34*219b2ee8SDavid du Colombier	print("R7\t", *R7, " R8\t", *R8, " R9\t", *R9, "\n");
35*219b2ee8SDavid du Colombier	print("R10\t", *R10, " R11\t", *R11, " R12\t", *R12, "\n");
36*219b2ee8SDavid du Colombier	print("R13\t", *R13, " R14\t", *R14, " R15\t", *R15, "\n");
37*219b2ee8SDavid du Colombier	print("R16\t", *R16, " R17\t", *R17, " R18\t", *R18, "\n");
38*219b2ee8SDavid du Colombier	print("R19\t", *R19, " R20\t", *R20, " R21\t", *R21, "\n");
39*219b2ee8SDavid du Colombier	print("R22\t", *R22, " R23\t", *R23, " R24\t", *R24, "\n");
40*219b2ee8SDavid du Colombier	print("R25\t", *R25, " R26\t", *R26, " R27\t", *R27, "\n");
41*219b2ee8SDavid du Colombier	print("R28\t", *R28, " R29\t", *R29, " R30\t", *R30, "\n");
42*219b2ee8SDavid du Colombier	print("R31\t", *R31, "\n");
43*219b2ee8SDavid du Colombier}
44*219b2ee8SDavid du Colombier
45*219b2ee8SDavid du Colombierdefn spr()				// print special processor registers
46*219b2ee8SDavid du Colombier{
47*219b2ee8SDavid du Colombier	local pc;
48*219b2ee8SDavid du Colombier	local link;
49*219b2ee8SDavid du Colombier	local cause;
50*219b2ee8SDavid du Colombier
51*219b2ee8SDavid du Colombier	pc = *PC;
52*219b2ee8SDavid du Colombier	print("PC\t", pc, " ", fmt(pc, 'a'), "  ");
53*219b2ee8SDavid du Colombier	pfl(pc);
54*219b2ee8SDavid du Colombier	print("PSR\t", *PSR, "\n");
55*219b2ee8SDavid du Colombier
56*219b2ee8SDavid du Colombier	link = *R15;
57*219b2ee8SDavid du Colombier	print("SP\t", *R1, "\tLINK\t\t", link, " ", fmt(link, 'a'));
58*219b2ee8SDavid du Colombier	pfl(link);
59*219b2ee8SDavid du Colombier
60*219b2ee8SDavid du Colombier	cause = *TBR;
61*219b2ee8SDavid du Colombier	print("Y\t", *Y, "\tCAUSE\t", *Y, " ", cause, " ", reason(cause), "\n");
62*219b2ee8SDavid du Colombier}
63*219b2ee8SDavid du Colombier
64*219b2ee8SDavid du Colombierdefn Fpr()
65*219b2ee8SDavid du Colombier{
66*219b2ee8SDavid du Colombier	print("F0\t",  *fmt(F0, 'G'),  "\tF2\t",  *fmt(F2, 'G'), "\n");
67*219b2ee8SDavid du Colombier	print("F4\t",  *fmt(F4, 'G'),  "\tF6\t",  *fmt(F6, 'G'), "\n");
68*219b2ee8SDavid du Colombier	print("F8\t",  *fmt(F8, 'G'),  "\tF10\t", *fmt(F10, 'G'), "\n");
69*219b2ee8SDavid du Colombier	print("F12\t", *fmt(F12, 'G'), "\tF14\t", *fmt(F14, 'G'), "\n");
70*219b2ee8SDavid du Colombier	print("F16\t", *fmt(F16, 'G'), "\tF18\t", *fmt(F18, 'G'), "\n");
71*219b2ee8SDavid du Colombier	print("F20\t", *fmt(F20, 'G'), "\tF22\t", *fmt(F22, 'G'), "\n");
72*219b2ee8SDavid du Colombier	print("F24\t", *fmt(F24, 'G'), "\tF26\t", *fmt(F26, 'G'), "\n");
73*219b2ee8SDavid du Colombier	print("F28\t", *fmt(F28, 'G'), "\tF30\t", *fmt(F30, 'G'), "\n");
74*219b2ee8SDavid du Colombier}
75*219b2ee8SDavid du Colombier
76*219b2ee8SDavid du Colombierdefn fpr()
77*219b2ee8SDavid du Colombier{
78*219b2ee8SDavid du Colombier	print("F0\t",  *fmt(F0, 'g'),  "\tF1\t",  *fmt(F1, 'g'), "\n");
79*219b2ee8SDavid du Colombier	print("F2\t",  *fmt(F2, 'g'),  "\tF3\t",  *fmt(F3, 'g'), "\n");
80*219b2ee8SDavid du Colombier	print("F4\t",  *fmt(F4, 'g'),  "\tF5\t",  *fmt(F5, 'g'), "\n");
81*219b2ee8SDavid du Colombier	print("F6\t",  *fmt(F6, 'g'),  "\tF7\t",  *fmt(F7, 'g'), "\n");
82*219b2ee8SDavid du Colombier	print("F8\t",  *fmt(F8, 'g'),  "\tF9\t",  *fmt(F9, 'g'), "\n");
83*219b2ee8SDavid du Colombier	print("F10\t", *fmt(F10, 'g'), "\tF11\t", *fmt(F11, 'g'), "\n");
84*219b2ee8SDavid du Colombier	print("F12\t", *fmt(F12, 'g'), "\tF13\t", *fmt(F13, 'g'), "\n");
85*219b2ee8SDavid du Colombier	print("F14\t", *fmt(F14, 'g'), "\tF15\t", *fmt(F15, 'g'), "\n");
86*219b2ee8SDavid du Colombier	print("F16\t", *fmt(F16, 'g'), "\tF17\t", *fmt(F17, 'g'), "\n");
87*219b2ee8SDavid du Colombier	print("F18\t", *fmt(F18, 'g'), "\tF19\t", *fmt(F19, 'g'), "\n");
88*219b2ee8SDavid du Colombier	print("F20\t", *fmt(F20, 'g'), "\tF21\t", *fmt(F21, 'g'), "\n");
89*219b2ee8SDavid du Colombier	print("F22\t", *fmt(F22, 'g'), "\tF23\t", *fmt(F23, 'g'), "\n");
90*219b2ee8SDavid du Colombier	print("F24\t", *fmt(F24, 'g'), "\tF25\t", *fmt(F25, 'g'), "\n");
91*219b2ee8SDavid du Colombier	print("F26\t", *fmt(F26, 'g'), "\tF27\t", *fmt(F27, 'g'), "\n");
92*219b2ee8SDavid du Colombier	print("F28\t", *fmt(F28, 'g'), "\tF29\t", *fmt(F29, 'g'), "\n");
93*219b2ee8SDavid du Colombier	print("F30\t", *fmt(F30, 'g'), "\tF31\t", *fmt(F31, 'g'), "\n");
94*219b2ee8SDavid du Colombier}
95*219b2ee8SDavid du Colombier
96*219b2ee8SDavid du Colombierdefn regs()				// print all registers
97*219b2ee8SDavid du Colombier{
98*219b2ee8SDavid du Colombier	spr();
99*219b2ee8SDavid du Colombier	gpr();
100*219b2ee8SDavid du Colombier}
101*219b2ee8SDavid du Colombier
102*219b2ee8SDavid du Colombierdefn pstop(pid)
103*219b2ee8SDavid du Colombier{
104*219b2ee8SDavid du Colombier	local l;
105*219b2ee8SDavid du Colombier	local pc;
106*219b2ee8SDavid du Colombier
107*219b2ee8SDavid du Colombier	pc = *PC;
108*219b2ee8SDavid du Colombier
109*219b2ee8SDavid du Colombier	print(pid,": ", reason(*TBR), "\t");
110*219b2ee8SDavid du Colombier	print(fmt(pc, 'a'), "\t", fmt(pc, 'i'), "\n");
111*219b2ee8SDavid du Colombier
112*219b2ee8SDavid du Colombier	if notes then {
113*219b2ee8SDavid du Colombier		if notes[0] != "sys: breakpoint" then {
114*219b2ee8SDavid du Colombier			print("Notes pending:\n");
115*219b2ee8SDavid du Colombier			l = notes;
116*219b2ee8SDavid du Colombier			while l do {
117*219b2ee8SDavid du Colombier				print("\t", head l, "\n");
118*219b2ee8SDavid du Colombier				l = tail l;
119*219b2ee8SDavid du Colombier			}
120*219b2ee8SDavid du Colombier		}
121*219b2ee8SDavid du Colombier	}
122*219b2ee8SDavid du Colombier}
123*219b2ee8SDavid du Colombier
124*219b2ee8SDavid du Colombieraggr Ureg
125*219b2ee8SDavid du Colombier{
126*219b2ee8SDavid du Colombier	'U' 0 r0;
127*219b2ee8SDavid du Colombier	{
128*219b2ee8SDavid du Colombier	'U' 4 sp;
129*219b2ee8SDavid du Colombier	'U' 4 usp;
130*219b2ee8SDavid du Colombier	'U' 4 r1;
131*219b2ee8SDavid du Colombier	};
132*219b2ee8SDavid du Colombier	'U' 8 r2;
133*219b2ee8SDavid du Colombier	'U' 12 r3;
134*219b2ee8SDavid du Colombier	'U' 16 r4;
135*219b2ee8SDavid du Colombier	'U' 20 r5;
136*219b2ee8SDavid du Colombier	'U' 24 r6;
137*219b2ee8SDavid du Colombier	'U' 28 r7;
138*219b2ee8SDavid du Colombier	'U' 32 r8;
139*219b2ee8SDavid du Colombier	'U' 36 r9;
140*219b2ee8SDavid du Colombier	'U' 40 r10;
141*219b2ee8SDavid du Colombier	'U' 44 r11;
142*219b2ee8SDavid du Colombier	'U' 48 r12;
143*219b2ee8SDavid du Colombier	'U' 52 r13;
144*219b2ee8SDavid du Colombier	'U' 56 r14;
145*219b2ee8SDavid du Colombier	'U' 60 r15;
146*219b2ee8SDavid du Colombier	'U' 64 r16;
147*219b2ee8SDavid du Colombier	'U' 68 r17;
148*219b2ee8SDavid du Colombier	'U' 72 r18;
149*219b2ee8SDavid du Colombier	'U' 76 r19;
150*219b2ee8SDavid du Colombier	'U' 80 r20;
151*219b2ee8SDavid du Colombier	'U' 84 r21;
152*219b2ee8SDavid du Colombier	'U' 88 r22;
153*219b2ee8SDavid du Colombier	'U' 92 r23;
154*219b2ee8SDavid du Colombier	'U' 96 r24;
155*219b2ee8SDavid du Colombier	'U' 100 r25;
156*219b2ee8SDavid du Colombier	'U' 104 r26;
157*219b2ee8SDavid du Colombier	'U' 108 r27;
158*219b2ee8SDavid du Colombier	'U' 112 r28;
159*219b2ee8SDavid du Colombier	'U' 116 r29;
160*219b2ee8SDavid du Colombier	'U' 120 r30;
161*219b2ee8SDavid du Colombier	'U' 124 r31;
162*219b2ee8SDavid du Colombier	'U' 128 y;
163*219b2ee8SDavid du Colombier	'U' 132 tbr;
164*219b2ee8SDavid du Colombier	'U' 136 psr;
165*219b2ee8SDavid du Colombier	'U' 140 npc;
166*219b2ee8SDavid du Colombier	'U' 144 pc;
167*219b2ee8SDavid du Colombier	'U' 148 pad;
168*219b2ee8SDavid du Colombier};
169*219b2ee8SDavid du Colombier
170*219b2ee8SDavid du Colombierdefn
171*219b2ee8SDavid du ColombierUreg(addr) {
172*219b2ee8SDavid du Colombier	complex Ureg addr;
173*219b2ee8SDavid du Colombier	print("	r0	", addr.r0, "\n");
174*219b2ee8SDavid du Colombier	print("	sp	", addr.sp, "\n");
175*219b2ee8SDavid du Colombier	print("	r2	", addr.r2, "\n");
176*219b2ee8SDavid du Colombier	print("	r3	", addr.r3, "\n");
177*219b2ee8SDavid du Colombier	print("	r4	", addr.r4, "\n");
178*219b2ee8SDavid du Colombier	print("	r5	", addr.r5, "\n");
179*219b2ee8SDavid du Colombier	print("	r6	", addr.r6, "\n");
180*219b2ee8SDavid du Colombier	print("	r7	", addr.r7, "\n");
181*219b2ee8SDavid du Colombier	print("	r8	", addr.r8, "\n");
182*219b2ee8SDavid du Colombier	print("	r9	", addr.r9, "\n");
183*219b2ee8SDavid du Colombier	print("	r10	", addr.r10, "\n");
184*219b2ee8SDavid du Colombier	print("	r11	", addr.r11, "\n");
185*219b2ee8SDavid du Colombier	print("	r12	", addr.r12, "\n");
186*219b2ee8SDavid du Colombier	print("	r13	", addr.r13, "\n");
187*219b2ee8SDavid du Colombier	print("	r14	", addr.r14, "\n");
188*219b2ee8SDavid du Colombier	print("	r15	", addr.r15, "\n");
189*219b2ee8SDavid du Colombier	print("	r16	", addr.r16, "\n");
190*219b2ee8SDavid du Colombier	print("	r17	", addr.r17, "\n");
191*219b2ee8SDavid du Colombier	print("	r18	", addr.r18, "\n");
192*219b2ee8SDavid du Colombier	print("	r19	", addr.r19, "\n");
193*219b2ee8SDavid du Colombier	print("	r20	", addr.r20, "\n");
194*219b2ee8SDavid du Colombier	print("	r21	", addr.r21, "\n");
195*219b2ee8SDavid du Colombier	print("	r22	", addr.r22, "\n");
196*219b2ee8SDavid du Colombier	print("	r23	", addr.r23, "\n");
197*219b2ee8SDavid du Colombier	print("	r24	", addr.r24, "\n");
198*219b2ee8SDavid du Colombier	print("	r25	", addr.r25, "\n");
199*219b2ee8SDavid du Colombier	print("	r26	", addr.r26, "\n");
200*219b2ee8SDavid du Colombier	print("	r27	", addr.r27, "\n");
201*219b2ee8SDavid du Colombier	print("	r28	", addr.r28, "\n");
202*219b2ee8SDavid du Colombier	print("	r29	", addr.r29, "\n");
203*219b2ee8SDavid du Colombier	print("	r30	", addr.r30, "\n");
204*219b2ee8SDavid du Colombier	print("	r31	", addr.r31, "\n");
205*219b2ee8SDavid du Colombier	print("	y	", addr.y, "\n");
206*219b2ee8SDavid du Colombier	print("	tbr	", addr.tbr, "\n");
207*219b2ee8SDavid du Colombier	print("	psr	", addr.psr, "\n");
208*219b2ee8SDavid du Colombier	print("	npc	", addr.npc, "\n");
209*219b2ee8SDavid du Colombier	print("	pc	", addr.pc, "\n");
210*219b2ee8SDavid du Colombier	print("	pad	", addr.pad, "\n");
211*219b2ee8SDavid du Colombier};
212*219b2ee8SDavid du Colombier
213*219b2ee8SDavid du Colombierprint("/sys/lib/acid/sparc");
214