p_obj->info.type.b_bit_offset, p_obj->info.type.b_bit_size,
p_obj->info.type.b_endianity );
printf(" %s\t\t[TYPE(Single)] Link Addr= %8ph -> ObjID= %d\n",
- pstr_space, p_obj->info.type.p_dwtype, p_obj->info.type.i_objid_type );
+ pstr_space, p_obj->dwarf.pb_dwinfo_type, p_obj->dwarf.i_objid_type );
return;
}
pstr_space, p_obj->addrlink.i_prev_id, p_obj->addrlink.i_next_id,
p_obj->dwarf.pb_info );
printf(" %s\t\t[TYPEDEF] Link Addr= %8ph -> ObjID= %d\n",
- pstr_space, p_obj->info.type.p_dwtype, p_obj->info.type.i_objid_type );
+ pstr_space, p_obj->dwarf.pb_dwinfo_type, p_obj->dwarf.i_objid_type );
return;
}
char *pstr_filename;
char str_filename[DRD64_MAX_PATH+1];
char str_path[DRD64_MAX_PATH+1];
+ Byte *pb_link = NULL;
DWord dw_srcline = 0;
DWord dw_lineoffset;
QWord qw_low_pc;
assert( NULL != p_binfo );
- pval_name = DWARF_AttrForm_GetDIEValue( p_binfo, DW_AT_name );
- pval_lowpc = DWARF_AttrForm_GetDIEValue( p_binfo, DW_AT_low_pc );
- pval_highpc = DWARF_AttrForm_GetDIEValue( p_binfo, DW_AT_high_pc );
- pval_ranges = DWARF_AttrForm_GetDIEValue( p_binfo, DW_AT_ranges );
- pval_inline = DWARF_AttrForm_GetDIEValue( p_binfo, DW_AT_inline );
- pval_declfile = DWARF_AttrForm_GetDIEValue( p_binfo, DW_AT_decl_file );
- pval_declline = DWARF_AttrForm_GetDIEValue( p_binfo, DW_AT_decl_line );
+ pval_name = DWARF_AttrForm_GetDIEValue( p_binfo, DW_AT_name );
+ pval_lowpc = DWARF_AttrForm_GetDIEValue( p_binfo, DW_AT_low_pc );
+ pval_highpc = DWARF_AttrForm_GetDIEValue( p_binfo, DW_AT_high_pc );
+ pval_ranges = DWARF_AttrForm_GetDIEValue( p_binfo, DW_AT_ranges );
+ pval_inline = DWARF_AttrForm_GetDIEValue( p_binfo, DW_AT_inline );
+ pval_declfile = DWARF_AttrForm_GetDIEValue( p_binfo, DW_AT_decl_file );
+ pval_declline = DWARF_AttrForm_GetDIEValue( p_binfo, DW_AT_decl_line );
+ pval_type = DWARF_AttrForm_GetDIEValue( p_binfo, DW_AT_type );
// UnImplement
- pval_prototyped = DWARF_AttrForm_GetDIEValue( p_binfo, DW_AT_prototyped );
- pval_external = DWARF_AttrForm_GetDIEValue( p_binfo, DW_AT_external );
- pval_entry_pc = DWARF_AttrForm_GetDIEValue( p_binfo, DW_AT_entry_pc );
- pval_segment = DWARF_AttrForm_GetDIEValue( p_binfo, DW_AT_segment );
- pval_addr_class = DWARF_AttrForm_GetDIEValue( p_binfo, DW_AT_address_class );
+ pval_prototyped = DWARF_AttrForm_GetDIEValue( p_binfo, DW_AT_prototyped );
+ pval_external = DWARF_AttrForm_GetDIEValue( p_binfo, DW_AT_external );
+ pval_entry_pc = DWARF_AttrForm_GetDIEValue( p_binfo, DW_AT_entry_pc );
+ pval_segment = DWARF_AttrForm_GetDIEValue( p_binfo, DW_AT_segment );
+ pval_addr_class = DWARF_AttrForm_GetDIEValue( p_binfo, DW_AT_address_class );
pval_return_addr = DWARF_AttrForm_GetDIEValue( p_binfo, DW_AT_return_addr );
pval_frame_base = DWARF_AttrForm_GetDIEValue( p_binfo, DW_AT_frame_base );
pval_static_link = DWARF_AttrForm_GetDIEValue( p_binfo, DW_AT_static_link );
- pval_type = DWARF_AttrForm_GetDIEValue( p_binfo, DW_AT_type );
pval_calling_convention = DWARF_AttrForm_GetDIEValue( p_binfo, DW_AT_calling_convention );
if( NULL == pval_name )
{ goto goto_DWARF_Tag_Function_subprogram_post; }
- //if( NULL != pval_name ) { pstr_filepath = pval_name->value.pstr_value; }
p_pginfo = ProgInfo_GetProgInfo( p_binfo->i_pginfo );
assert( NULL != p_pginfo );
dw_srcline = (DWord)pval_declline->value.qw_value;
}
+ if( NULL != pval_type )
+ { pb_link = pval_type->value.pb_link; }
+
// Inset & Regist. ObjectInfo ------------------------------------
for( i_cnt = 0; i_cnt < t_ranges.i_ranges; i_cnt++ ) {
OBJINFO_INSETMODE_INSET | OBJINFO_INSETMODE_ADOPT | OBJINFO_INSETMODE_CHKNAME,
OBJINFO_TYPE_FUNCTION, pval_name->value.pstr_value );
- pobj_now->i_srcid = i_srcid;
- pobj_now->dw_srcline = dw_srcline;
+ pobj_now->i_srcid = i_srcid;
+ pobj_now->dw_srcline = dw_srcline;
+ pobj_now->dwarf.i_objid_type = NO_OBJ;
+ pobj_now->dwarf.pb_dwinfo_type = pb_link;
if( 0 == i_cnt ) {
pobj_parent = pobj_now;
else
{ pobj_now->pstr_name = NULL; }
- pobj_now->info.type.i_objid_type = NO_OBJ;
- pobj_now->info.type.p_dwtype = pb_link;
+ pobj_now->dwarf.i_objid_type = NO_OBJ;
+ pobj_now->dwarf.pb_dwinfo_type = pb_link;
pobj_now->info.type.dw_size = 0;
pobj_now->info.type.b_encoding = 0x00;
pobj_now->info.type.b_bit_size = 0;
else
{ pobj_now->info.type.b_addr_class = 0x00; }
- pobj_now->info.type.i_objid_type = NO_OBJ;
- pobj_now->info.type.p_dwtype = pb_link;
+ pobj_now->dwarf.i_objid_type = NO_OBJ;
+ pobj_now->dwarf.pb_dwinfo_type = pb_link;
pobj_now->info.type.dw_size = 0;
pobj_now->info.type.b_encoding = 0x00;
pobj_now->info.type.b_bit_size = 0;
pobj_now->info.type.dw_size = (DWord)pval_byte_size->value.b_value;
pobj_now->info.type.b_encoding = pval_encoding->value.b_value;
pobj_now->info.type.b_endianity = DW_END_default;
- pobj_now->info.type.i_objid_type = NO_OBJ;
- pobj_now->info.type.p_dwtype = NULL;
+ pobj_now->dwarf.i_objid_type = NO_OBJ;
+ pobj_now->dwarf.pb_dwinfo_type = NULL;
if( NULL != pval_bit_size )
{ pobj_now->info.type.b_bit_size = pval_bit_size->value.b_value; }
LibGoblin_ObjectInfo *pobj_now )
{
int i_result;
- int i_objid_parent;
+ int i_objid_type;
Byte *pb_dwinfo;
LibGoblin_ObjectInfo *pobj_parent;
- if(( OBJINFO_TYPE_TYPE_SINGLE != pobj_now->b_type )
- && ( OBJINFO_TYPE_TYPE_MULTI != pobj_now->b_type )
- && ( OBJINFO_TYPE_TYPEDEF != pobj_now->b_type ))
- { goto goto_ObjectInfo_PostProc_ResolvTypeLink_post; }
- if( NULL == pobj_now->info.type.p_dwtype )
+ if( NULL == pobj_now->dwarf.pb_dwinfo_type )
{ goto goto_ObjectInfo_PostProc_ResolvTypeLink_post; }
- pb_dwinfo = pobj_now->info.type.p_dwtype;
- i_objid_parent = Index_DWARFInfo_SearchObjectInfo( p_binfo, pb_dwinfo );
+ pb_dwinfo = pobj_now->dwarf.pb_dwinfo_type;
+ i_objid_type = Index_DWARFInfo_SearchObjectInfo( p_binfo, pb_dwinfo );
/*
printf(" Link: ObjID=%d dwinfo=%8ph -> LinkAddr=%8p => parent: %d (old: %d)\n",
i_objid_parent, pobj_now->grplink.i_parent_id );
*/
- if( NO_OBJ != i_objid_parent ) {
- pobj_parent = OBJINFO( p_pginfo, i_objid_parent );
+ if(( NO_OBJ != i_objid_type ) && ( OBJINFO_TYPE_FUNCTION != pobj_now->b_type )) {
+ pobj_parent = OBJINFO( p_pginfo, i_objid_type );
i_result = ObjectInfo_AdoptObjectInfo( p_pginfo, pobj_parent, pobj_now );
- pobj_now->info.type.i_objid_type = i_objid_parent;
+ pobj_now->dwarf.i_objid_type = i_objid_type;
}
goto_ObjectInfo_PostProc_ResolvTypeLink_post: