/*----------------------------------------------------------------------
----------------------------------------------------------------------*/
-LIBGOBLIN_DWARF_ATTRFORM_EXTERN
Byte *
DWARF_AttrForm_ReadFormat_Data(
LibGoblin_DWARF_DIEValue *p_val,
LibGoblin_BinaryInfo *p_binfo,
LibGoblin_DWARF_Info_CUHeader *p_cuheader )
{
+ p_val->dw_format = dw_format;
+
switch( dw_format ) {
case DW_FORM_addr: // 0x01: address
pb_info = DWARF_AttrForm_ReadFormat_Address(
{
int i_cnt;
DWord dw_attribute;
- DWord dw_format;
+ DWord dw_ext;
LibGoblin_DWARF_DIEValue *p_val;
// Read Debug Information Entry (DIE) ---
p_val = p_binfo->dwarf.p_infoval;
memset( p_binfo->dwarf.t_attr, 0x00, sizeof( p_binfo->dwarf.t_attr) );
+ p_binfo->dwarf.i_extattrs = 0;
for( i_cnt = 0; i_cnt < p_abbrev->i_items; i_cnt++, p_val++ ) {
- dw_attribute = p_abbrev->dw_attribute[ i_cnt ];
- dw_format = p_abbrev->dw_format[ i_cnt ];
-
pb_info = DWARF_AttrForm_ReadFormat_Data(
- p_val, pb_info, pqw_remains, dw_format, p_binfo, p_cuheader );
+ p_val, pb_info, pqw_remains, p_abbrev->dw_format[i_cnt], p_binfo, p_cuheader );
+
+ dw_attribute = p_abbrev->dw_attribute[ i_cnt ];
+ if( LIBGOBLIN_DWARF_ATTR_DEF_MAX >= dw_attribute ) {
+ p_binfo->dwarf.t_attr[dw_attribute].dw_attribute = dw_attribute;
+ p_binfo->dwarf.t_attr[dw_attribute].p_val = p_val;
+ }
+ else if( LIBGOBLIN_DWARF_ATTR_MAX >= dw_attribute ) {
+ dw_ext = LIBGOBLIN_DWARF_ATTR_DEF_MAX + 1 + p_binfo->dwarf.i_extattrs;
+ p_binfo->dwarf.t_attr[dw_ext].dw_attribute = dw_attribute;
+ p_binfo->dwarf.t_attr[dw_ext].p_val = p_val;
+ p_binfo->dwarf.i_extattrs++;
+ }
+ //else {
+ // XXX: ERROR!!
+ //}
}
return pb_info;