Blame


1 0a61c07d 2004-04-19 devnull // 386 support
2 0a61c07d 2004-04-19 devnull
3 0a61c07d 2004-04-19 devnull defn acidinit() // Called after all the init modules are loaded
4 0a61c07d 2004-04-19 devnull {
5 0a61c07d 2004-04-19 devnull bplist = {};
6 0a61c07d 2004-04-19 devnull bpfmt = 'b';
7 0a61c07d 2004-04-19 devnull
8 0a61c07d 2004-04-19 devnull srcpath = {
9 0a61c07d 2004-04-19 devnull "./",
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/"
13 0a61c07d 2004-04-19 devnull };
14 0a61c07d 2004-04-19 devnull
15 0a61c07d 2004-04-19 devnull srcfiles = {}; // list of loaded files
16 0a61c07d 2004-04-19 devnull srctext = {}; // the text of the files
17 0a61c07d 2004-04-19 devnull }
18 0a61c07d 2004-04-19 devnull
19 0a61c07d 2004-04-19 devnull defn linkreg(addr)
20 0a61c07d 2004-04-19 devnull {
21 0a61c07d 2004-04-19 devnull return {};
22 0a61c07d 2004-04-19 devnull }
23 0a61c07d 2004-04-19 devnull
24 0a61c07d 2004-04-19 devnull defn stk() // trace
25 0a61c07d 2004-04-19 devnull {
26 0a61c07d 2004-04-19 devnull _stk({"PC", *PC, "SP", *SP}, 0);
27 0a61c07d 2004-04-19 devnull }
28 0a61c07d 2004-04-19 devnull
29 0a61c07d 2004-04-19 devnull defn lstk() // trace with locals
30 0a61c07d 2004-04-19 devnull {
31 0a61c07d 2004-04-19 devnull _stk({"PC", *PC, "SP", *SP}, 1);
32 0a61c07d 2004-04-19 devnull }
33 0a61c07d 2004-04-19 devnull
34 0a61c07d 2004-04-19 devnull defn gpr() // print general(hah hah!) purpose registers
35 0a61c07d 2004-04-19 devnull {
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");
38 0a61c07d 2004-04-19 devnull }
39 0a61c07d 2004-04-19 devnull
40 0a61c07d 2004-04-19 devnull defn spr() // print special processor registers
41 0a61c07d 2004-04-19 devnull {
42 0a61c07d 2004-04-19 devnull local pc;
43 0a61c07d 2004-04-19 devnull local cause;
44 0a61c07d 2004-04-19 devnull
45 0a61c07d 2004-04-19 devnull pc = *PC;
46 0a61c07d 2004-04-19 devnull print("PC\t", pc, " ", fmt(pc, 'a'), " ");
47 0a61c07d 2004-04-19 devnull pfl(pc);
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");
51 0a61c07d 2004-04-19 devnull
52 0a61c07d 2004-04-19 devnull cause = *TRAP;
53 0a61c07d 2004-04-19 devnull print("TRAP\t", cause, " ", reason(cause), "\n");
54 0a61c07d 2004-04-19 devnull }
55 0a61c07d 2004-04-19 devnull
56 0a61c07d 2004-04-19 devnull defn regs() // print all registers
57 0a61c07d 2004-04-19 devnull {
58 0a61c07d 2004-04-19 devnull spr();
59 0a61c07d 2004-04-19 devnull gpr();
60 0a61c07d 2004-04-19 devnull }
61 0a61c07d 2004-04-19 devnull
62 0a61c07d 2004-04-19 devnull defn mmregs()
63 0a61c07d 2004-04-19 devnull {
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");
68 0a61c07d 2004-04-19 devnull }
69 0a61c07d 2004-04-19 devnull
70 0a61c07d 2004-04-19 devnull defn pstop(pid)
71 0a61c07d 2004-04-19 devnull {
72 0a61c07d 2004-04-19 devnull local l;
73 0a61c07d 2004-04-19 devnull local pc;
74 0a61c07d 2004-04-19 devnull
75 0a61c07d 2004-04-19 devnull pc = *PC;
76 0a61c07d 2004-04-19 devnull
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");
79 0a61c07d 2004-04-19 devnull
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;
87 0a61c07d 2004-04-19 devnull }
88 0a61c07d 2004-04-19 devnull }
89 0a61c07d 2004-04-19 devnull }
90 0a61c07d 2004-04-19 devnull }
91 0a61c07d 2004-04-19 devnull
92 0a61c07d 2004-04-19 devnull aggr Ureg
93 0a61c07d 2004-04-19 devnull {
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;
111 0a61c07d 2004-04-19 devnull {
112 0a61c07d 2004-04-19 devnull 'U' 68 usp;
113 0a61c07d 2004-04-19 devnull 'U' 68 sp;
114 0a61c07d 2004-04-19 devnull };
115 0a61c07d 2004-04-19 devnull 'U' 72 ss;
116 0a61c07d 2004-04-19 devnull };
117 0a61c07d 2004-04-19 devnull
118 0a61c07d 2004-04-19 devnull defn
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");
140 0a61c07d 2004-04-19 devnull };
141 0a61c07d 2004-04-19 devnull sizeofUreg = 76;
142 0a61c07d 2004-04-19 devnull
143 0a61c07d 2004-04-19 devnull aggr Linkdebug
144 0a61c07d 2004-04-19 devnull {
145 0a61c07d 2004-04-19 devnull 'X' 0 version;
146 0a61c07d 2004-04-19 devnull 'X' 4 map;
147 0a61c07d 2004-04-19 devnull };
148 0a61c07d 2004-04-19 devnull
149 0a61c07d 2004-04-19 devnull aggr Linkmap
150 0a61c07d 2004-04-19 devnull {
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;
156 0a61c07d 2004-04-19 devnull };
157 0a61c07d 2004-04-19 devnull
158 0a61c07d 2004-04-19 devnull defn
159 0a61c07d 2004-04-19 devnull linkdebug()
160 0a61c07d 2004-04-19 devnull {
161 0a61c07d 2004-04-19 devnull local a;
162 0a61c07d 2004-04-19 devnull
163 0a61c07d 2004-04-19 devnull if !havesymbol("_DYNAMIC") then
164 0a61c07d 2004-04-19 devnull return 0;
165 0a61c07d 2004-04-19 devnull
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;
171 0a61c07d 2004-04-19 devnull }
172 0a61c07d 2004-04-19 devnull return 0;
173 0a61c07d 2004-04-19 devnull }
174 0a61c07d 2004-04-19 devnull
175 0a61c07d 2004-04-19 devnull defn
176 7284df18 2004-04-19 devnull dynamicmap()
177 0a61c07d 2004-04-19 devnull {
178 6c885647 2004-04-20 devnull if systype == "linux" || systype == "freebsd" then {
179 0a61c07d 2004-04-19 devnull local r, m, n;
180 0a61c07d 2004-04-19 devnull
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;
185 0a61c07d 2004-04-19 devnull n = 0;
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;
192 0a61c07d 2004-04-19 devnull }
193 0a61c07d 2004-04-19 devnull }
194 0a61c07d 2004-04-19 devnull }
195 7284df18 2004-04-19 devnull }
196 0a61c07d 2004-04-19 devnull
197 7284df18 2004-04-19 devnull defn
198 7284df18 2004-04-19 devnull acidmap()
199 7284df18 2004-04-19 devnull {
200 08ddcb74 2005-02-11 devnull // dynamicmap();
201 7284df18 2004-04-19 devnull acidtypes();
202 0a61c07d 2004-04-19 devnull }
203 0a61c07d 2004-04-19 devnull
204 0a61c07d 2004-04-19 devnull print(acidfile);