xref: /plan9-contrib/sys/lib/acid/arm (revision 23173ec17955c609738f37acefe0c6e72a169a75)
177737d7aSDavid du Colombier// ARM support
27dd7cddfSDavid du Colombier
37dd7cddfSDavid du Colombierdefn acidinit()			// Called after all the init modules are loaded
47dd7cddfSDavid du Colombier{
57dd7cddfSDavid du Colombier	bplist = {};
677737d7aSDavid du Colombier	bpfmt = 'X';
77dd7cddfSDavid du Colombier
87dd7cddfSDavid du Colombier	srcpath = {
97dd7cddfSDavid du Colombier		"./",
107dd7cddfSDavid du Colombier		"/sys/src/libc/port/",
117dd7cddfSDavid du Colombier		"/sys/src/libc/9sys/",
127dd7cddfSDavid du Colombier		"/sys/src/libc/arm/"
137dd7cddfSDavid du Colombier	};
147dd7cddfSDavid du Colombier
157dd7cddfSDavid du Colombier	srcfiles = {};			// list of loaded files
167dd7cddfSDavid du Colombier	srctext = {};			// the text of the files
177dd7cddfSDavid du Colombier}
187dd7cddfSDavid du Colombier
197dd7cddfSDavid du Colombierdefn linkreg(addr)
207dd7cddfSDavid du Colombier{
2177737d7aSDavid du Colombier	return *R14;
227dd7cddfSDavid du Colombier}
237dd7cddfSDavid du Colombier
247dd7cddfSDavid du Colombierdefn stk()				// trace
257dd7cddfSDavid du Colombier{
2677737d7aSDavid du Colombier	_stk(*PC, *SP, linkreg(0), 0);
277dd7cddfSDavid du Colombier}
287dd7cddfSDavid du Colombier
297dd7cddfSDavid du Colombierdefn lstk()				// trace with locals
307dd7cddfSDavid du Colombier{
3177737d7aSDavid du Colombier	_stk(*PC, *SP, linkreg(0), 1);
327dd7cddfSDavid du Colombier}
337dd7cddfSDavid du Colombier
347dd7cddfSDavid du Colombierdefn gpr()			// print general purpose registers
357dd7cddfSDavid du Colombier{
3680ee5cbfSDavid du Colombier	print("R0\t", *R0, " R1\t", *R1, " R2\t", *R2, "\n");
3780ee5cbfSDavid du Colombier	print("R3\t", *R3, " R4\t", *R4, " R5\t", *R5, "\n");
3880ee5cbfSDavid du Colombier	print("R6\t", *R6, " R7\t", *R7, " R8\t", *R8, "\n");
3980ee5cbfSDavid du Colombier	print("R9\t", *R9, " R10\t", *R10, " R11\t", *R11, "\n");
4080ee5cbfSDavid du Colombier	print("R12\t", *R12, " R13\t", *R13, " R14\t", *R14, "\n");
4180ee5cbfSDavid du Colombier	print("R15\t", *R15, "\n");
427dd7cddfSDavid du Colombier}
437dd7cddfSDavid du Colombier
447dd7cddfSDavid du Colombierdefn regs()				// print all registers
457dd7cddfSDavid du Colombier{
467dd7cddfSDavid du Colombier	gpr();
477dd7cddfSDavid du Colombier}
487dd7cddfSDavid du Colombier
497dd7cddfSDavid du Colombierdefn pstop(pid)
507dd7cddfSDavid du Colombier{
5177737d7aSDavid du Colombier	local l;
5277737d7aSDavid du Colombier	local pc;
5377737d7aSDavid du Colombier
5477737d7aSDavid du Colombier	pc = *PC;
5577737d7aSDavid du Colombier
5677737d7aSDavid du Colombier	print(pid,": ", reason(*TYPE), "\t");
5777737d7aSDavid du Colombier	print(fmt(pc, 'a'), "\t", fmt(pc, 'i'), "\n");
5877737d7aSDavid du Colombier
5977737d7aSDavid du Colombier	if notes then {
6077737d7aSDavid du Colombier		if notes[0] != "sys: breakpoint" then {
6177737d7aSDavid du Colombier			print("Notes pending:\n");
6277737d7aSDavid du Colombier			l = notes;
6377737d7aSDavid du Colombier			while l do {
6477737d7aSDavid du Colombier				print("\t", head l, "\n");
6577737d7aSDavid du Colombier				l = tail l;
6677737d7aSDavid du Colombier			}
6777737d7aSDavid du Colombier		}
6877737d7aSDavid du Colombier	}
697dd7cddfSDavid du Colombier}
707dd7cddfSDavid du Colombier
71*23173ec1SDavid du ColombiersizeofUreg=72;
727dd7cddfSDavid du Colombieraggr Ureg
737dd7cddfSDavid du Colombier{
747dd7cddfSDavid du Colombier	'U' 0 r0;
757dd7cddfSDavid du Colombier	'U' 4 r1;
767dd7cddfSDavid du Colombier	'U' 8 r2;
777dd7cddfSDavid du Colombier	'U' 12 r3;
787dd7cddfSDavid du Colombier	'U' 16 r4;
797dd7cddfSDavid du Colombier	'U' 20 r5;
807dd7cddfSDavid du Colombier	'U' 24 r6;
817dd7cddfSDavid du Colombier	'U' 28 r7;
827dd7cddfSDavid du Colombier	'U' 32 r8;
837dd7cddfSDavid du Colombier	'U' 36 r9;
847dd7cddfSDavid du Colombier	'U' 40 r10;
857dd7cddfSDavid du Colombier	'U' 44 r11;
867dd7cddfSDavid du Colombier	'U' 48 r12;
877dd7cddfSDavid du Colombier	'U' 52 r13;
887dd7cddfSDavid du Colombier	'U' 56 r14;
8980ee5cbfSDavid du Colombier	'U' 60 type;
9080ee5cbfSDavid du Colombier	'U' 64 psr;
9180ee5cbfSDavid du Colombier	'U' 68 pc;
927dd7cddfSDavid du Colombier};
937dd7cddfSDavid du Colombier
947dd7cddfSDavid du Colombierdefn
957dd7cddfSDavid du ColombierUreg(addr) {
967dd7cddfSDavid du Colombier	complex Ureg addr;
977dd7cddfSDavid du Colombier	print("	r0	", addr.r0, "\n");
987dd7cddfSDavid du Colombier	print("	r1	", addr.r1, "\n");
997dd7cddfSDavid du Colombier	print("	r2	", addr.r2, "\n");
1007dd7cddfSDavid du Colombier	print("	r3	", addr.r3, "\n");
1017dd7cddfSDavid du Colombier	print("	r4	", addr.r4, "\n");
1027dd7cddfSDavid du Colombier	print("	r5	", addr.r5, "\n");
1037dd7cddfSDavid du Colombier	print("	r6	", addr.r6, "\n");
1047dd7cddfSDavid du Colombier	print("	r7	", addr.r7, "\n");
1057dd7cddfSDavid du Colombier	print("	r8	", addr.r8, "\n");
1067dd7cddfSDavid du Colombier	print("	r9	", addr.r9, "\n");
1077dd7cddfSDavid du Colombier	print("	r10	", addr.r10, "\n");
1087dd7cddfSDavid du Colombier	print("	r11	", addr.r11, "\n");
1097dd7cddfSDavid du Colombier	print("	r12	", addr.r12, "\n");
1107dd7cddfSDavid du Colombier	print("	r13	", addr.r13, "\n");
1117dd7cddfSDavid du Colombier	print("	r14	", addr.r14, "\n");
1127dd7cddfSDavid du Colombier	print("	type	", addr.type, "\n");
1137dd7cddfSDavid du Colombier	print("	psr	", addr.psr, "\n");
1147dd7cddfSDavid du Colombier	print("	pc	", addr.pc, "\n");
1157dd7cddfSDavid du Colombier};
1167dd7cddfSDavid du Colombier
1177dd7cddfSDavid du Colombierprint("/sys/lib/acid/arm");
118