#include"drd64_libgoblin.h"
/*----------------------------------------------------------------------
-DW_TAG_inlined_subroutine
DW_TAG_lexical_block
DW_TAG_label
----------------------------------------------------------------------*/
/*----------------------------------------------------------------------
DW_TAG_subprogram
+ DW_TAG_inlined_subroutine
+ DW_TAG_entry_point
DW_AT_name
DW_AT_decl_file
DW_AT_decl_line
pobj_now->dwarf.i_objid_type = NO_OBJ;
pobj_now->dwarf.pb_dwinfo_type = pb_link;
+ pobj_now->info.function.dw_functype = dw_tag;
pobj_now->info.function.flag.external = ((NULL != pval_external) ? 1 : 0 );
pobj_now->info.function.flag.prototyped = ((NULL != pval_prototyped) ? 1 : 0 );
return NO_OBJ;
}
+
/*----------------------------------------------------------------------
+ DW_TAG_structure_type
+ DW_AT_name
+ DW_AT_decl_file
+ DW_AT_decl_line
+ DW_AT_byte_size
+
+ DW_AT_type
+ DW_AT_declaration
+ DW_AT_specification
+ DW_AT_start_scope
+ DW_AT_accessibility
+ DW_AT_mutable
+ DW_AT_data_member_location
+ DW_AT_byte_size
+ DW_AT_bit_offset
+ DW_AT_bit_size
----------------------------------------------------------------------*/
+LIBGOBLIN_DWARF_TAG_STRUCT_EXTERN
+int
+ DWARF_Tag_Struct_typedef(
+ DWord dw_tag,
+ LibGoblin_BinaryInfo *p_binfo,
+ int i_childlv,
+ LibGoblin_DWARF_Info_Ancestry *p_ancestry,
+ LibGoblin_DWARF_Info_CUHeader *p_cuheader )
+{
+/*
+ Byte *pb_link = NULL;
+ int i_obj_parent;
+ PtrValue ptrval_start;
+ LibGoblin_ObjectInfo *pobj_now;
+ LibGoblin_ObjectInfo *pobj_parent;
+ LibGoblin_ProgramInfo *p_pginfo;
+ LibGoblin_DWARF_DIEValue *pval_name;
+ LibGoblin_DWARF_DIEValue *pval_type;
+ LibGoblin_DWARF_DIEValue *pval_declfile;
+ LibGoblin_DWARF_DIEValue *pval_declline;
+ LibGoblin_DWARF_DIEValue *pval_byte_size;
+
+ // Data Extract
+ pval_type = DWARF_AttrForm_GetDIEValue( p_binfo, DW_AT_type );
+ pval_name = DWARF_AttrForm_GetDIEValue( p_binfo, DW_AT_name );
+ pval_declfile = DWARF_AttrForm_GetDIEValue( p_binfo, DW_AT_decl_file );
+ pval_declline = DWARF_AttrForm_GetDIEValue( p_binfo, DW_AT_decl_line );
+ pval_byte_size = DWARF_AttrForm_GetDIEValue( p_binfo, DW_AT_byte_size );
+
+ if( NULL != pval_type )
+ { pb_link = pval_type->value.pb_link; }
+
+ i_obj_parent = p_ancestry[i_childlv - 1].i_objid;
+
+ p_pginfo = ProgInfo_GetProgInfo( p_binfo->i_pginfo );
+ assert( NULL != p_pginfo );
+
+ pobj_parent = ObjectInfo_GetObjectInfo( p_pginfo, i_obj_parent );
+ ptrval_start = pobj_parent->addr.ptr_addr.value;
+
+ pobj_now = ObjectInfo_InsetObject(
+ p_pginfo, ptrval_start, (QWord)0, pobj_parent,
+ OBJINFO_INSETMODE_ADOPT, OBJINFO_TYPE_TYPEDEF, NULL );
+ if( NULL == pobj_now ) {
+ return -0x03;
+ }
+
+ if( NULL != pval_declfile ) {
+ DWARF_AttrForm_ExtensionDIEValue( pval_declfile );
+ pobj_now->i_srcid = SrcFile_GetSrcFileTable_inBinaryInfo(
+ p_binfo, (int)pval_declfile->value.qw_value );
+ }
+
+ if( NULL != pval_declline ) {
+ DWARF_AttrForm_ExtensionDIEValue( pval_declline );
+ pobj_now->dw_srcline = (DWord)pval_declline->value.qw_value;
+ }
+
+ if( NULL != pval_name )
+ { pobj_now->pstr_name = pval_name->value.pstr_value; }
+ else
+ { pobj_now->pstr_name = NULL; }
+
+ 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.b_bit_offset = 0;
+ pobj_now->info.type.b_endianity = DW_END_default;
+ pobj_now->info.type.b_addr_class = 0x00;
+ pobj_now->info.type.dw_size = (DWord)pval_byte_size->value.b_value;
+
+ return pobj_now->i_id;
+*/
+
+ return NO_OBJ;
+}
/* EOF of drd64_.c ----------------------------------- */