2 84114f06 2004-04-19 devnull * init routines
4 84114f06 2004-04-19 devnull #include "defs.h"
5 84114f06 2004-04-19 devnull #include "fns.h"
7 84114f06 2004-04-19 devnull char *symfil;
8 84114f06 2004-04-19 devnull char *corfil;
10 84114f06 2004-04-19 devnull Map *symmap;
11 84114f06 2004-04-19 devnull Map *cormap;
12 84114f06 2004-04-19 devnull Regs *correg;
13 84114f06 2004-04-19 devnull Map *dotmap;
16 84114f06 2004-04-19 devnull setsym(void)
18 84114f06 2004-04-19 devnull if(symhdr && syminit(symhdr) < 0)
19 84114f06 2004-04-19 devnull dprint("syminit: %r\n");
21 84114f06 2004-04-19 devnull Symbol s;
22 84114f06 2004-04-19 devnull if (mach->sbreg && lookup(0, mach->sbreg, &s) < 0)
23 84114f06 2004-04-19 devnull mach->sb = s.loc.addr;
28 84114f06 2004-04-19 devnull setcor(void)
30 84114f06 2004-04-19 devnull unmapproc(cormap);
31 84114f06 2004-04-19 devnull unmapfile(corhdr, cormap);
32 84114f06 2004-04-19 devnull free(correg);
33 84114f06 2004-04-19 devnull correg = nil;
35 84114f06 2004-04-19 devnull if (pid > 0) {
36 84114f06 2004-04-19 devnull if (mapproc(pid, cormap, &correg) < 0)
37 84114f06 2004-04-19 devnull dprint("mapproc %d: %r\n", pid);
39 84114f06 2004-04-19 devnull if (corhdr) {
40 84114f06 2004-04-19 devnull if (mapfile(corhdr, 0, cormap, &correg) < 0)
41 84114f06 2004-04-19 devnull dprint("mapfile %s: %r\n", corfil);
43 84114f06 2004-04-19 devnull dprint("no core image\n");
50 84114f06 2004-04-19 devnull dumbmap(int fd)
52 84114f06 2004-04-19 devnull Map *dumb;
55 84114f06 2004-04-19 devnull dumb = allocmap();
56 84114f06 2004-04-19 devnull memset(&s, 0, sizeof s);
57 84114f06 2004-04-19 devnull s.fd = fd;
58 84114f06 2004-04-19 devnull s.base = 0;
59 84114f06 2004-04-19 devnull s.offset = 0;
60 84114f06 2004-04-19 devnull s.size = 0xFFFFFFFF;
61 84114f06 2004-04-19 devnull s.name = "data";
62 84114f06 2004-04-19 devnull s.file = "<dumb>";
63 84114f06 2004-04-19 devnull if(addseg(dumb, s) < 0){
64 84114f06 2004-04-19 devnull freemap(dumb);
65 84114f06 2004-04-19 devnull return nil;
67 84114f06 2004-04-19 devnull if(mach == nil)
68 84114f06 2004-04-19 devnull mach = machcpu;
69 84114f06 2004-04-19 devnull return dumb;
73 84114f06 2004-04-19 devnull * set up maps for a direct process image (/proc)
76 84114f06 2004-04-19 devnull cmdmap(Map *map)
79 84114f06 2004-04-19 devnull char name[MAXSYM];
82 84114f06 2004-04-19 devnull readsym(name);
83 84114f06 2004-04-19 devnull i = findseg(map, name, nil);
84 84114f06 2004-04-19 devnull if (i < 0) /* not found */
85 84114f06 2004-04-19 devnull error("Invalid map name");
87 84114f06 2004-04-19 devnull if (expr(0)) {
88 84114f06 2004-04-19 devnull // if (strcmp(name, "text") == 0)
89 84114f06 2004-04-19 devnull // textseg(expv, &fhdr);
90 84114f06 2004-04-19 devnull map->seg[i].base = expv;
92 84114f06 2004-04-19 devnull error("Invalid base address");
93 84114f06 2004-04-19 devnull if (expr(0))
94 84114f06 2004-04-19 devnull map->seg[i].size = expv - map->seg[i].base;
96 84114f06 2004-04-19 devnull error("Invalid end address");
97 84114f06 2004-04-19 devnull if (expr(0))
98 84114f06 2004-04-19 devnull map->seg[i].offset = expv;
100 84114f06 2004-04-19 devnull error("Invalid file offset");
102 84114f06 2004-04-19 devnull if (rdc()=='?' && map == cormap) {
103 84114f06 2004-04-19 devnull if (fcor)
104 84114f06 2004-04-19 devnull close(fcor);
105 84114f06 2004-04-19 devnull fcor=fsym;
106 84114f06 2004-04-19 devnull corfil = symfil;
107 84114f06 2004-04-19 devnull cormap = symmap;
108 84114f06 2004-04-19 devnull } else if (lastc == '/' && map == symmap) {
109 84114f06 2004-04-19 devnull if (fsym)
110 84114f06 2004-04-19 devnull close(fsym);
111 84114f06 2004-04-19 devnull fsym=fcor;
112 84114f06 2004-04-19 devnull symfil=corfil;
113 84114f06 2004-04-19 devnull symmap=cormap;
115 84114f06 2004-04-19 devnull reread();
120 84114f06 2004-04-19 devnull kmsys(void)
124 84114f06 2004-04-19 devnull i = findseg(symmap, "text", symfil);
125 84114f06 2004-04-19 devnull if (i >= 0) {
126 84114f06 2004-04-19 devnull symmap->seg[i].base = symmap->seg[i].base&~mach->ktmask;
127 84114f06 2004-04-19 devnull symmap->seg[i].size = -symmap->seg[i].base;
129 84114f06 2004-04-19 devnull i = findseg(symmap, "data", symfil);
130 84114f06 2004-04-19 devnull if (i >= 0) {
131 84114f06 2004-04-19 devnull symmap->seg[i].base = symmap->seg[i].base&~mach->ktmask;
132 84114f06 2004-04-19 devnull symmap->seg[i].size = -symmap->seg[i].base;
137 84114f06 2004-04-19 devnull attachprocess(void)
139 84114f06 2004-04-19 devnull if (!adrflg) {
140 84114f06 2004-04-19 devnull dprint("used pid$a\n");
143 84114f06 2004-04-19 devnull pid = adrval;
144 84114f06 2004-04-19 devnull setcor();