7 _dwarfnametounit(Dwarf
*d
, char *name
, DwarfBlock
*bl
, DwarfSym
*s
)
22 werrstr("bad length in dwarf name header");
27 if(vers
!= 1 && vers
!= 2){
28 werrstr("bad version %d in dwarf name header", vers
);
32 dwarfget4(&b
); /* unit length */
37 str
= dwarfgetstring(&b
);
38 if(strcmp(str
, name
) == 0){
39 if(dwarfenumunit(d
, unit
, s
) < 0)
41 if(unit
+ off
>= s
->b
.ep
- d
->info
.data
){
42 werrstr("bad offset in name entry");
45 s
->b
.p
= d
->info
.data
+ unit
+ off
;
46 if(dwarfnextsym(d
, s
) < 0)
48 if(s
->attrs
.name
==nil
|| strcmp(s
->attrs
.name
, name
)!=0){
49 werrstr("unexpected name %#q in lookup for %#q", s
->attrs
.name
, name
);
57 werrstr("unknown name '%s'", name
);
62 dwarflookupname(Dwarf
*d
, char *name
, DwarfSym
*sym
)
64 return _dwarfnametounit(d
, name
, &d
->pubnames
, sym
);
70 dwarflookuptype(Dwarf *d, char *name, DwarfSym *sym)
72 return _dwarfnametounit(d, name, &d->pubtypes, sym);