1 0a61c07d 2004-04-19 devnull // 386 support
3 0a61c07d 2004-04-19 devnull defn acidinit() // Called after all the init modules are loaded
5 0a61c07d 2004-04-19 devnull bplist = {};
6 0a61c07d 2004-04-19 devnull bpfmt = 'b';
8 0a61c07d 2004-04-19 devnull srcpath = {
10 0a61c07d 2004-04-19 devnull "/sys/src/libc/port/",
11 0a61c07d 2004-04-19 devnull "/sys/src/libc/9sys/",
12 0a61c07d 2004-04-19 devnull "/sys/src/libc/386/"
15 0a61c07d 2004-04-19 devnull srcfiles = {}; // list of loaded files
16 0a61c07d 2004-04-19 devnull srctext = {}; // the text of the files
19 0a61c07d 2004-04-19 devnull defn linkreg(addr)
21 0a61c07d 2004-04-19 devnull return {};
24 0a61c07d 2004-04-19 devnull defn stk() // trace
26 0a61c07d 2004-04-19 devnull _stk({"PC", *PC, "SP", *SP}, 0);
29 0a61c07d 2004-04-19 devnull defn lstk() // trace with locals
31 0a61c07d 2004-04-19 devnull _stk({"PC", *PC, "SP", *SP}, 1);
34 0a61c07d 2004-04-19 devnull defn gpr() // print general(hah hah!) purpose registers
36 0a61c07d 2004-04-19 devnull print("AX\t", *AX, " BX\t", *BX, " CX\t", *CX, " DX\t", *DX, "\n");
37 0a61c07d 2004-04-19 devnull print("DI\t", *DI, " SI\t", *SI, " BP\t", *BP, "\n");
40 0a61c07d 2004-04-19 devnull defn spr() // print special processor registers
42 0a61c07d 2004-04-19 devnull local pc;
43 0a61c07d 2004-04-19 devnull local cause;
45 0a61c07d 2004-04-19 devnull pc = *PC;
46 0a61c07d 2004-04-19 devnull print("PC\t", pc, " ", fmt(pc, 'a'), " ");
48 0a61c07d 2004-04-19 devnull print("SP\t", *SP, " ECODE ", *ECODE, " EFLAG ", *EFLAGS, "\n");
49 0a61c07d 2004-04-19 devnull print("CS\t", *CS, " DS\t ", *DS, " SS\t", *SS, "\n");
50 0a61c07d 2004-04-19 devnull print("GS\t", *GS, " FS\t ", *FS, " ES\t", *ES, "\n");
52 0a61c07d 2004-04-19 devnull cause = *TRAP;
53 0a61c07d 2004-04-19 devnull print("TRAP\t", cause, " ", reason(cause), "\n");
56 0a61c07d 2004-04-19 devnull defn regs() // print all registers
62 0a61c07d 2004-04-19 devnull defn mmregs()
64 0a61c07d 2004-04-19 devnull print("MM0\t", *MM0, " MM1\t", *MM1, "\n");
65 0a61c07d 2004-04-19 devnull print("MM2\t", *MM2, " MM3\t", *MM3, "\n");
66 0a61c07d 2004-04-19 devnull print("MM4\t", *MM4, " MM5\t", *MM5, "\n");
67 0a61c07d 2004-04-19 devnull print("MM6\t", *MM6, " MM7\t", *MM7, "\n");
70 0a61c07d 2004-04-19 devnull defn pstop(pid)
73 0a61c07d 2004-04-19 devnull local pc;
75 0a61c07d 2004-04-19 devnull pc = *PC;
77 0a61c07d 2004-04-19 devnull print(pid,": ", reason(*TRAP), "\t");
78 0a61c07d 2004-04-19 devnull print(fmt(pc, 'a'), "\t", *fmt(pc, 'i'), "\n");
80 0a61c07d 2004-04-19 devnull if notes then {
81 0a61c07d 2004-04-19 devnull if notes[0] != "sys: breakpoint" then {
82 0a61c07d 2004-04-19 devnull print("Notes pending:\n");
83 0a61c07d 2004-04-19 devnull l = notes;
84 0a61c07d 2004-04-19 devnull while l do {
85 0a61c07d 2004-04-19 devnull print("\t", head l, "\n");
86 0a61c07d 2004-04-19 devnull l = tail l;
92 0a61c07d 2004-04-19 devnull aggr Ureg
94 0a61c07d 2004-04-19 devnull 'U' 0 di;
95 0a61c07d 2004-04-19 devnull 'U' 4 si;
96 0a61c07d 2004-04-19 devnull 'U' 8 bp;
97 0a61c07d 2004-04-19 devnull 'U' 12 nsp;
98 0a61c07d 2004-04-19 devnull 'U' 16 bx;
99 0a61c07d 2004-04-19 devnull 'U' 20 dx;
100 0a61c07d 2004-04-19 devnull 'U' 24 cx;
101 0a61c07d 2004-04-19 devnull 'U' 28 ax;
102 0a61c07d 2004-04-19 devnull 'U' 32 gs;
103 0a61c07d 2004-04-19 devnull 'U' 36 fs;
104 0a61c07d 2004-04-19 devnull 'U' 40 es;
105 0a61c07d 2004-04-19 devnull 'U' 44 ds;
106 0a61c07d 2004-04-19 devnull 'U' 48 trap;
107 0a61c07d 2004-04-19 devnull 'U' 52 ecode;
108 0a61c07d 2004-04-19 devnull 'U' 56 pc;
109 0a61c07d 2004-04-19 devnull 'U' 60 cs;
110 0a61c07d 2004-04-19 devnull 'U' 64 flags;
112 0a61c07d 2004-04-19 devnull 'U' 68 usp;
113 0a61c07d 2004-04-19 devnull 'U' 68 sp;
115 0a61c07d 2004-04-19 devnull 'U' 72 ss;
119 0a61c07d 2004-04-19 devnull Ureg(addr) {
120 0a61c07d 2004-04-19 devnull complex Ureg addr;
121 0a61c07d 2004-04-19 devnull print(" di ", addr.di, "\n");
122 0a61c07d 2004-04-19 devnull print(" si ", addr.si, "\n");
123 0a61c07d 2004-04-19 devnull print(" bp ", addr.bp, "\n");
124 0a61c07d 2004-04-19 devnull print(" nsp ", addr.nsp, "\n");
125 0a61c07d 2004-04-19 devnull print(" bx ", addr.bx, "\n");
126 0a61c07d 2004-04-19 devnull print(" dx ", addr.dx, "\n");
127 0a61c07d 2004-04-19 devnull print(" cx ", addr.cx, "\n");
128 0a61c07d 2004-04-19 devnull print(" ax ", addr.ax, "\n");
129 0a61c07d 2004-04-19 devnull print(" gs ", addr.gs, "\n");
130 0a61c07d 2004-04-19 devnull print(" fs ", addr.fs, "\n");
131 0a61c07d 2004-04-19 devnull print(" es ", addr.es, "\n");
132 0a61c07d 2004-04-19 devnull print(" ds ", addr.ds, "\n");
133 0a61c07d 2004-04-19 devnull print(" trap ", addr.trap, "\n");
134 0a61c07d 2004-04-19 devnull print(" ecode ", addr.ecode, "\n");
135 0a61c07d 2004-04-19 devnull print(" pc ", addr.pc, "\n");
136 0a61c07d 2004-04-19 devnull print(" cs ", addr.cs, "\n");
137 0a61c07d 2004-04-19 devnull print(" flags ", addr.flags, "\n");
138 0a61c07d 2004-04-19 devnull print(" sp ", addr.sp, "\n");
139 0a61c07d 2004-04-19 devnull print(" ss ", addr.ss, "\n");
141 0a61c07d 2004-04-19 devnull sizeofUreg = 76;
143 0a61c07d 2004-04-19 devnull aggr Linkdebug
145 0a61c07d 2004-04-19 devnull 'X' 0 version;
146 0a61c07d 2004-04-19 devnull 'X' 4 map;
149 0a61c07d 2004-04-19 devnull aggr Linkmap
151 0a61c07d 2004-04-19 devnull 'X' 0 addr;
152 0a61c07d 2004-04-19 devnull 'X' 4 name;
153 0a61c07d 2004-04-19 devnull 'X' 8 dynsect;
154 0a61c07d 2004-04-19 devnull 'X' 12 next;
155 0a61c07d 2004-04-19 devnull 'X' 16 prev;
159 0a61c07d 2004-04-19 devnull linkdebug()
161 0a61c07d 2004-04-19 devnull local a;
163 0a61c07d 2004-04-19 devnull if !havesymbol("_DYNAMIC") then
164 0a61c07d 2004-04-19 devnull return 0;
166 0a61c07d 2004-04-19 devnull a = _DYNAMIC;
167 0a61c07d 2004-04-19 devnull while *a != 0 do {
168 0a61c07d 2004-04-19 devnull if *a == 21 then // 21 == DT_DEBUG
169 0a61c07d 2004-04-19 devnull return *(a+4);
170 0a61c07d 2004-04-19 devnull a = a+8;
172 0a61c07d 2004-04-19 devnull return 0;
176 7284df18 2004-04-19 devnull dynamicmap()
178 6c885647 2004-04-20 devnull if systype == "linux" || systype == "freebsd" then {
179 0a61c07d 2004-04-19 devnull local r, m, n;
181 0a61c07d 2004-04-19 devnull r = linkdebug();
182 0a61c07d 2004-04-19 devnull if r then {
183 0a61c07d 2004-04-19 devnull complex Linkdebug r;
184 0a61c07d 2004-04-19 devnull m = r.map;
186 0a61c07d 2004-04-19 devnull while m != 0 && n < 100 do {
187 0a61c07d 2004-04-19 devnull complex Linkmap m;
188 6c885647 2004-04-20 devnull if m.name && *(m.name\b) && access(*(m.name\s)) then
189 08ddcb74 2005-02-11 devnull print("textfile({\"", *(m.name\s), "\", ", m.addr\X, "});\n");
190 0a61c07d 2004-04-19 devnull m = m.next;
191 0a61c07d 2004-04-19 devnull n = n+1;
198 7284df18 2004-04-19 devnull acidmap()
200 08ddcb74 2005-02-11 devnull // dynamicmap();
201 7284df18 2004-04-19 devnull acidtypes();
204 0a61c07d 2004-04-19 devnull print(acidfile);