8 _dwarfnametounit(Dwarf *d, char *name, DwarfBlock *bl, DwarfSym *s)
23 werrstr("bad length in dwarf name header");
28 if(vers != 1 && vers != 2){
29 werrstr("bad version %d in dwarf name header", vers);
33 dwarfget4(&b); /* unit length */
38 str = dwarfgetstring(&b);
39 if(strcmp(str, name) == 0){
40 if(dwarfenumunit(d, unit, s) < 0)
42 if(unit + off >= s->b.ep - d->info.data){
43 werrstr("bad offset in name entry");
46 s->b.p = d->info.data + unit + off;
47 if(dwarfnextsym(d, s) < 0)
49 if(s->attrs.name==nil || strcmp(s->attrs.name, name)!=0){
50 werrstr("unexpected name %#q in lookup for %#q", s->attrs.name, name);
58 werrstr("unknown name '%s'", name);
63 dwarflookupname(Dwarf *d, char *name, DwarfSym *sym)
65 return _dwarfnametounit(d, name, &d->pubnames, sym);
71 dwarflookuptype(Dwarf *d, char *name, DwarfSym *sym)
73 return _dwarfnametounit(d, name, &d->pubtypes, sym);