{ 0x0c, NULL },
{ DW_TAG_member, DWARF_Tag_Struct_UnImplement }, // 0x0d: struct
{ 0x0e, NULL },
-{ DW_TAG_pointer_type, DWARF_Tag_Type_UnImplement }, // 0x0f: type
+{ DW_TAG_pointer_type, DWARF_Tag_Type_pointer_type }, // 0x0f: type
{ DW_TAG_reference_type, DWARF_Tag_Type_UnImplement }, // 0x10: type
{ DW_TAG_compile_unit, DWARF_Tag_CompileUnit_compile_unit },// 0x11: compileunit
/*----------------------------------------------------------------------
+ DW_TAG_pointer_type
+ DW_AT_type
+ DW_AT_name
+ DW_AT_address_class
+ DW_AT_count (for UPC lnag. only)
+----------------------------------------------------------------------*/
+LIBGOBLIN_DWARF_TAG_TYPE_EXTERN
+int
+ DWARF_Tag_Type_pointer_type(
+ 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;
+ 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;
+
+ // Data Extract
+ pval_type = DWARF_AttrForm_GetDIEValue( p_binfo, DW_AT_type );
+ pval_name = DWARF_AttrForm_GetDIEValue( p_binfo, DW_AT_nem);
+
+ if( NULL == pval_type ) {
+ return -0x02;
+ }
+
+ 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_TYPE_SINGLE );
+ if( NULL == pobj_now ) {
+ return -0x03;
+ }
+
+ if( NULL != pval_name )
+ { pobj_now->pstr_name = pval_name->value.pstr_value; }
+ else
+ { pobj_now->pstr_name = "*"; }
+
+ pobj_now->info.type.i_objid_type = NO_OBJ;
+ pobj_now->info.type.p_dwtype = 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;
+
+ return pobj_now->i_id;
+}
+
+
+/*----------------------------------------------------------------------
DW_TAG_const_type
DW_AT_type
+ DW_AT_name
+ DW_AT_address_class
+ DW_AT_count (for UPC lnag. only)
----------------------------------------------------------------------*/
LIBGOBLIN_DWARF_TAG_TYPE_EXTERN
int
int i_childlv, LibGoblin_DWARF_Info_Ancestry *p_ancestry,
LibGoblin_DWARF_Info_CUHeader *p_cuheader );
LIBGOBLIN_DWARF_TAG_TYPE_EXTERN
+ int DWARF_Tag_Type_pointer_type(
+ DWord dw_tag, LibGoblin_BinaryInfo *p_binfo,
+ int i_childlv, LibGoblin_DWARF_Info_Ancestry *p_ancestry,
+ LibGoblin_DWARF_Info_CUHeader *p_cuheader );
+LIBGOBLIN_DWARF_TAG_TYPE_EXTERN
int DWARF_Tag_Type_const_type(
DWord dw_tag, LibGoblin_BinaryInfo *p_binfo,
int i_childlv, LibGoblin_DWARF_Info_Ancestry *p_ancestry,