xref: /plan9/sys/lib/acid/amd64 (revision 23173ec17955c609738f37acefe0c6e72a169a75)
1*23173ec1SDavid du Colombier// amd64
2*23173ec1SDavid du Colombier
3*23173ec1SDavid du Colombierdefn acidinit()
4*23173ec1SDavid du Colombier{
5*23173ec1SDavid du Colombier	bplist = {};
6*23173ec1SDavid du Colombier	bpfmt = 'b';
7*23173ec1SDavid du Colombier
8*23173ec1SDavid du Colombier	srcpath = {
9*23173ec1SDavid du Colombier		"./",
10*23173ec1SDavid du Colombier		"/sys/src/libc/port/",
11*23173ec1SDavid du Colombier		"/sys/src/libc/9sys/",
12*23173ec1SDavid du Colombier		"/sys/src/libc/amd64/"
13*23173ec1SDavid du Colombier	};
14*23173ec1SDavid du Colombier
15*23173ec1SDavid du Colombier	srcfiles = {};		// list of loaded files
16*23173ec1SDavid du Colombier	srctext = {};		// the text of the files
17*23173ec1SDavid du Colombier}
18*23173ec1SDavid du Colombier
19*23173ec1SDavid du Colombierdefn gpr()
20*23173ec1SDavid du Colombier{
21*23173ec1SDavid du Colombier	print("AX    ", *AX, "\n");
22*23173ec1SDavid du Colombier	print("BX    ", *BX, "\n");
23*23173ec1SDavid du Colombier	print("CX    ", *CX, "\n");
24*23173ec1SDavid du Colombier	print("DX    ", *DX, "\n");
25*23173ec1SDavid du Colombier	print("DI    ", *DI, "\n");
26*23173ec1SDavid du Colombier	print("SI    ", *SI, "\n");
27*23173ec1SDavid du Colombier	print("BP    ", *BP, "\n");
28*23173ec1SDavid du Colombier	print("R8    ", *R8, "\n");
29*23173ec1SDavid du Colombier	print("R9    ", *R9, "\n");
30*23173ec1SDavid du Colombier	print("R10   ", *R10, "\n");
31*23173ec1SDavid du Colombier	print("R11   ", *R11, "\n");
32*23173ec1SDavid du Colombier	print("R12   ", *R12, "\n");
33*23173ec1SDavid du Colombier	print("R13   ", *R13, "\n");
34*23173ec1SDavid du Colombier	print("R14   ", *R14, "\n");
35*23173ec1SDavid du Colombier	print("R15   ", *R15, "\n");
36*23173ec1SDavid du Colombier}
37*23173ec1SDavid du Colombier
38*23173ec1SDavid du Colombierdefn spr()
39*23173ec1SDavid du Colombier{
40*23173ec1SDavid du Colombier	print("DS  ", *DS, "  ES  ", *ES, "  FS  ", *FS, "  GS  ", *GS, "\n");
41*23173ec1SDavid du Colombier	print("TYPE  ", *TYPE, "\n");
42*23173ec1SDavid du Colombier	print("ERROR ", *ERROR, "\n");
43*23173ec1SDavid du Colombier	print("PC    ", *PC, "\n");
44*23173ec1SDavid du Colombier	print("CS    ", *CS, "\n");
45*23173ec1SDavid du Colombier	print("FLAGS ", *FLAGS, "\n");
46*23173ec1SDavid du Colombier	print("SP    ", *SP, "\n");
47*23173ec1SDavid du Colombier	print("SS    ", *SS, "\n");
48*23173ec1SDavid du Colombier}
49*23173ec1SDavid du Colombier
50*23173ec1SDavid du Colombierdefn x87r()
51*23173ec1SDavid du Colombier{
52*23173ec1SDavid du Colombier	print("FCW  ", *FCW, "  FSW  ", *FSW, "  FTW  ", *FTW, "  FOP  ", *FOP, "\n");
53*23173ec1SDavid du Colombier	print("RIP  ", *RIP, "   RDP  ", *RDP, "\n");
54*23173ec1SDavid du Colombier	print("M0   ", *M0, "\n");
55*23173ec1SDavid du Colombier	print("M1   ", *M1, "\n");
56*23173ec1SDavid du Colombier	print("M2   ", *M2, "\n");
57*23173ec1SDavid du Colombier	print("M3   ", *M3, "\n");
58*23173ec1SDavid du Colombier	print("M4   ", *M4, "\n");
59*23173ec1SDavid du Colombier	print("M5   ", *M5, "\n");
60*23173ec1SDavid du Colombier	print("M6   ", *M6, "\n");
61*23173ec1SDavid du Colombier	print("M7   ", *M7, "\n");
62*23173ec1SDavid du Colombier}
63*23173ec1SDavid du Colombier
64*23173ec1SDavid du Colombierdefn xmmr()
65*23173ec1SDavid du Colombier{
66*23173ec1SDavid du Colombier	print("MXCSR  ", *MXCSR, "   MXCSRMASK  ", *MXCSRMASK, "\n");
67*23173ec1SDavid du Colombier	print("X0   ", *X0, "\n");
68*23173ec1SDavid du Colombier	print("X1   ", *X1, "\n");
69*23173ec1SDavid du Colombier	print("X2   ", *X2, "\n");
70*23173ec1SDavid du Colombier	print("X3   ", *X3, "\n");
71*23173ec1SDavid du Colombier	print("X4   ", *X4, "\n");
72*23173ec1SDavid du Colombier	print("X5   ", *X5, "\n");
73*23173ec1SDavid du Colombier	print("X6   ", *X6, "\n");
74*23173ec1SDavid du Colombier	print("X7   ", *X7, "\n");
75*23173ec1SDavid du Colombier	print("X8   ", *X8, "\n");
76*23173ec1SDavid du Colombier	print("X9   ", *X9, "\n");
77*23173ec1SDavid du Colombier	print("X10  ", *X10, "\n");
78*23173ec1SDavid du Colombier	print("X11  ", *X11, "\n");
79*23173ec1SDavid du Colombier	print("X12  ", *X12, "\n");
80*23173ec1SDavid du Colombier	print("X13  ", *X13, "\n");
81*23173ec1SDavid du Colombier	print("X14  ", *X14, "\n");
82*23173ec1SDavid du Colombier	print("X15  ", *X15, "\n");
83*23173ec1SDavid du Colombier}
84*23173ec1SDavid du Colombier
85*23173ec1SDavid du Colombierdefn fpr()
86*23173ec1SDavid du Colombier{
87*23173ec1SDavid du Colombier	xmmr();
88*23173ec1SDavid du Colombier}
89*23173ec1SDavid du Colombier
90*23173ec1SDavid du Colombierdefn regs()
91*23173ec1SDavid du Colombier{
92*23173ec1SDavid du Colombier	gpr();
93*23173ec1SDavid du Colombier	spr();
94*23173ec1SDavid du Colombier}
95*23173ec1SDavid du Colombier
96*23173ec1SDavid du Colombierdefn pstop(pid)
97*23173ec1SDavid du Colombier{
98*23173ec1SDavid du Colombier	local l;
99*23173ec1SDavid du Colombier	local pc;
100*23173ec1SDavid du Colombier
101*23173ec1SDavid du Colombier	pc = *PC;
102*23173ec1SDavid du Colombier
103*23173ec1SDavid du Colombier	print(pid,": ", reason(*TRAP), "\t");
104*23173ec1SDavid du Colombier	print(fmt(pc, 'a'), "\t", fmt(pc, 'i'), "\n");
105*23173ec1SDavid du Colombier
106*23173ec1SDavid du Colombier	if notes then {
107*23173ec1SDavid du Colombier		if notes[0] != "sys: breakpoint" then {
108*23173ec1SDavid du Colombier			print("Notes pending:\n");
109*23173ec1SDavid du Colombier			l = notes;
110*23173ec1SDavid du Colombier			while l do {
111*23173ec1SDavid du Colombier				print("\t", head l, "\n");
112*23173ec1SDavid du Colombier				l = tail l;
113*23173ec1SDavid du Colombier			}
114*23173ec1SDavid du Colombier		}
115*23173ec1SDavid du Colombier	}
116*23173ec1SDavid du Colombier}
117*23173ec1SDavid du Colombier
118*23173ec1SDavid du Colombierdefn lstk()				// trace with locals
119*23173ec1SDavid du Colombier{
120*23173ec1SDavid du Colombier	_stk(*PC, *SP, 0, 1);
121*23173ec1SDavid du Colombier}
122*23173ec1SDavid du Colombier
123*23173ec1SDavid du Colombierdefn stk()
124*23173ec1SDavid du Colombier{
125*23173ec1SDavid du Colombier	_stk(*PC, *SP, 0, 0);
126*23173ec1SDavid du Colombier}
127*23173ec1SDavid du Colombier
128*23173ec1SDavid du Colombieraggr Ureg
129*23173ec1SDavid du Colombier{
130*23173ec1SDavid du Colombier	'W' 0 ax;
131*23173ec1SDavid du Colombier	'W' 8 bx;
132*23173ec1SDavid du Colombier	'W' 16 cx;
133*23173ec1SDavid du Colombier	'W' 24 dx;
134*23173ec1SDavid du Colombier	'W' 32 si;
135*23173ec1SDavid du Colombier	'W' 40 di;
136*23173ec1SDavid du Colombier	'W' 48 bp;
137*23173ec1SDavid du Colombier	'W' 56 r8;
138*23173ec1SDavid du Colombier	'W' 64 r9;
139*23173ec1SDavid du Colombier	'W' 72 r10;
140*23173ec1SDavid du Colombier	'W' 80 r11;
141*23173ec1SDavid du Colombier	'W' 88 r12;
142*23173ec1SDavid du Colombier	'W' 96 r13;
143*23173ec1SDavid du Colombier	'W' 104 r14;
144*23173ec1SDavid du Colombier	'W' 112 r15;
145*23173ec1SDavid du Colombier	'u' 120 ds;
146*23173ec1SDavid du Colombier	'u' 122 es;
147*23173ec1SDavid du Colombier	'u' 124 fs;
148*23173ec1SDavid du Colombier	'u' 126 gs;
149*23173ec1SDavid du Colombier	'W' 128 type;
150*23173ec1SDavid du Colombier	'W' 136 error;
151*23173ec1SDavid du Colombier	'W' 144 ip;
152*23173ec1SDavid du Colombier	'W' 152 cs;
153*23173ec1SDavid du Colombier	'W' 160 flags;
154*23173ec1SDavid du Colombier	'W' 168 sp;
155*23173ec1SDavid du Colombier	'W' 176 ss;
156*23173ec1SDavid du Colombier};
157*23173ec1SDavid du Colombier
158*23173ec1SDavid du Colombierdefn
159*23173ec1SDavid du ColombierUreg(addr) {
160*23173ec1SDavid du Colombier	complex Ureg addr;
161*23173ec1SDavid du Colombier	print("	ax	", addr.ax, "\n");
162*23173ec1SDavid du Colombier	print("	bx	", addr.bx, "\n");
163*23173ec1SDavid du Colombier	print("	cx	", addr.cx, "\n");
164*23173ec1SDavid du Colombier	print("	dx	", addr.dx, "\n");
165*23173ec1SDavid du Colombier	print("	si	", addr.si, "\n");
166*23173ec1SDavid du Colombier	print("	di	", addr.di, "\n");
167*23173ec1SDavid du Colombier	print("	bp	", addr.bp, "\n");
168*23173ec1SDavid du Colombier	print("	r8	", addr.r8, "\n");
169*23173ec1SDavid du Colombier	print("	r9	", addr.r9, "\n");
170*23173ec1SDavid du Colombier	print("	r10	", addr.r10, "\n");
171*23173ec1SDavid du Colombier	print("	r11	", addr.r11, "\n");
172*23173ec1SDavid du Colombier	print("	r12	", addr.r12, "\n");
173*23173ec1SDavid du Colombier	print("	r13	", addr.r13, "\n");
174*23173ec1SDavid du Colombier	print("	r14	", addr.r14, "\n");
175*23173ec1SDavid du Colombier	print("	r15	", addr.r15, "\n");
176*23173ec1SDavid du Colombier	print("	ds	", addr.ds, "\n");
177*23173ec1SDavid du Colombier	print("	es	", addr.es, "\n");
178*23173ec1SDavid du Colombier	print("	fs	", addr.fs, "\n");
179*23173ec1SDavid du Colombier	print("	gs	", addr.gs, "\n");
180*23173ec1SDavid du Colombier	print("	type	", addr.type, "\n");
181*23173ec1SDavid du Colombier	print("	error	", addr.error, "\n");
182*23173ec1SDavid du Colombier	print("	ip	", addr.ip, "\n");
183*23173ec1SDavid du Colombier	print("	cs	", addr.cs, "\n");
184*23173ec1SDavid du Colombier	print("	flags	", addr.flags, "\n");
185*23173ec1SDavid du Colombier	print("	sp	", addr.sp, "\n");
186*23173ec1SDavid du Colombier	print("	ss	", addr.ss, "\n");
187*23173ec1SDavid du Colombier};
188*23173ec1SDavid du ColombiersizeofUreg = 184;
189*23173ec1SDavid du Colombier
190*23173ec1SDavid du Colombierprint("/sys/lib/acid/amd64");
191