51 getstr(Map *map, ulong addr, char *buf, uint nbuf)
55 for(i=0; i<nbuf; i++){
56 if(get1(map, addr+i, (uchar*)buf+i, 1) < 0)
61 return -1; /* no nul */
65 dyninfo(Fhdr *hdr, int x)
69 if(hdr == nil || (addr = ((Elf*)hdr->elf)->dynamic) == 0){
70 fprint(2, "no hdr/dynamic %p\n", hdr);
76 if(get4(cormap, addr, &u) < 0)
79 if(get4(cormap, addr+4, &u) < 0)
89 elfdl386mapdl(int verbose)
93 u32int linkdebug, linkmap, name, addr;
96 if((linkdebug = dyninfo(symhdr, DT_DEBUG)) == 0){
97 fprint(2, "no dt_debug section\n");
100 if(get4(cormap, linkdebug+4, &linkmap) < 0){
101 fprint(2, "get4 linkdebug+4 (0x%lux) failed\n", linkdebug);
105 for(i=0; i<100 && linkmap != 0; i++){
106 if(get4(cormap, linkmap, &addr) < 0
107 || get4(cormap, linkmap+4, &name) < 0
108 || get4(cormap, linkmap+12, &linkmap) < 0)
111 if(name == 0 || getstr(cormap, name, buf, sizeof buf) < 0 || buf[0] == 0)
113 if((hdr = crackhdr(buf, OREAD)) == nil){
114 fprint(2, "crackhdr %s: %r\n", buf);
119 fprint(2, "%s: %s %s %s\n", buf, hdr->aname, hdr->mname, hdr->fname);
120 if(mapfile(hdr, addr, symmap, nil) < 0)
121 fprint(2, "mapping %s: %r\n", buf);
124 * Need to map the text file under the core file.
126 unmapfile(corhdr, cormap);
127 mapfile(hdr, addr, cormap, nil);
128 mapfile(corhdr, 0, cormap, nil);
131 fprint(2, "syminit %s: %r\n", buf);