Home | Info | Community | Development | myReactOS | Contact Us
[static]
Definition at line 408 of file dwarfinfo.c.
Referenced by dwarfnextsym().
{ int i, f, n, got; static int nbad; void *v; /* initialize ptab first time through for quick access */ if(ptab[DwarfAttrName].name != DwarfAttrName) for(i=0; plist[i].name; i++) ptab[plist[i].name] = plist[i]; memset(attrs, 0, sizeof *attrs); attrs->tag = a->tag; attrs->haskids = a->haskids; for(i=0; i<a->nattr; i++){ n = a->attr[i].name; f = a->attr[i].form; if(n < 0 || n >= DwarfAttrMax || ptab[n].name==0){ if(++nbad == 1) werrstr("dwarf parse attrs: unexpected attribute name 0x%x", n); continue; //return -1; } v = (char*)attrs + ptab[n].off; got = 0; if(f == FormIndirect) f = dwarfget128(b); if((ptab[n].type&(TConstant|TReference|TAddress)) && getulong(b, f, unit, v, &got) >= 0) ; else if((ptab[n].type&TFlag) && getuchar(b, f, v) >= 0) got = TFlag; else if((ptab[n].type&TString) && getstring(b, f, v) >= 0) got = TString; else if((ptab[n].type&TBlock) && getblock(b, f, v) >= 0) got = TBlock; else{ if(skipform(b, f) < 0){ if(++nbad == 1) werrstr("dwarf parse attrs: cannot skip form %d", f); return -1; } } if(got == TBlock && (ptab[n].type&TConstant)) got = constblock(b->d, v, v); *((uchar*)attrs+ptab[n].haveoff) = got; } return 0; }