//Debug_Index_DWARFInfo_DumpObjectInfo( p_binfo, 0xff );
// XXX: for DEBUG!
- //Debug_ObjectInfo_Print_AllGroupLink( p_pginfo, 0xff );
+ Debug_ObjectInfo_Print_AllGroupLink( p_pginfo, 0xff );
return i_result;
}
int i_len,
Byte b_level )
{
-
// Set Space String ---
if( 0 < i_depth ) {
*(pstr_space + i_len - 2) = '+';
default:
break;
}
+
+ if( NO_SRC != p_obj->i_srcid ) {
+ printf(" %s\t\t[SrcFile] SrcFileID= %d, Line= %u\n",
+ pstr_space, p_obj->i_srcid, p_obj->dw_srcline );
+ }
+
printf(" %s\n", pstr_space );
*(pstr_space + i_len) = '\0';
}
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+LIBGOBLIN_DWARF_ATTRFORM_EXTERN
+void
+ DWARF_AttrForm_ExtensionDIEValue(
+ LibGoblin_DWARF_DIEValue *p_val )
+{
+ QWord qw_value;
+
+ if( LIBGOBLIN_DWARF_INFO_TYPE_BYTE == p_val->b_type )
+ { qw_value = (QWord)p_val->value.b_value; }
+ else if( LIBGOBLIN_DWARF_INFO_TYPE_WORD == p_val->b_type )
+ { qw_value = (QWord)p_val->value.w_value; }
+ else if( LIBGOBLIN_DWARF_INFO_TYPE_DWORD == p_val->b_type )
+ { qw_value = (QWord)p_val->value.dw_value; }
+ else if( LIBGOBLIN_DWARF_INFO_TYPE_QWORD == p_val->b_type )
+ { qw_value = (QWord)p_val->value.qw_value; }
+ else
+ { return; }
+
+ p_val->b_type = LIBGOBLIN_DWARF_INFO_TYPE_QWORD;
+ p_val->value.qw_value = qw_value;
+ p_val->qw_size = 8;
+
+ return;
+}
+
+
/* EOF of drd64_.c ----------------------------------- */
LIBGOBLIN_DWARF_ATTRFORM_EXTERN
LibGoblin_DWARF_DIEValue *DWARF_AttrForm_GetDIEValue(
LibGoblin_BinaryInfo *p_binfo, DWord dw_attribute );
+LIBGOBLIN_DWARF_ATTRFORM_EXTERN
+ void DWARF_AttrForm_ExtensionDIEValue(
+ LibGoblin_DWARF_DIEValue *p_val );
+
#ifdef DRD64_SRC_LIBGOBLIN_DWARF_ATTRFORM
Byte *DWARF_AttrForm_ReadFormat_Data(
t_ancestry[i_childlv].i_objid = i_objid;
- //Debug_DWARF_PrintDIE( p_binfo, p_abbrev, dw_arvid, i_childlv );
+ Debug_DWARF_PrintDIE( p_binfo, p_abbrev, dw_arvid, i_childlv );
if( 0x00 != p_arvnow->b_children ) {
i_childlv++;
{ DW_TAG_string_type, DWARF_Tag_NotClang_UnImplement }, // 0x12: notclang
{ DW_TAG_structure_type, DWARF_Tag_Struct_UnImplement }, // 0x13: struct
{ 0x14, NULL },
-{ DW_TAG_subroutine_type, DWARF_Tag_Type_UnImplement }, // 0x15: type
+{ DW_TAG_subroutine_type, DWARF_Tag_Type_Common_type }, // 0x15: type
{ DW_TAG_typedef, DWARF_Tag_Type_typedef }, // 0x16: type
{ DW_TAG_union_type, DWARF_Tag_Struct_UnImplement }, // 0x17: struct
{ DW_TAG_unspecified_parameters,DWARF_Tag_Parameter_UnImplement }, // 0x18: parameter
return -0x03;
}
- // XXX: TODO support for DW_AT_decl_file/line --- (2019/08/27)
+ 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; }
LibGoblin_DWARF_DIEValue *pval_name;
LibGoblin_DWARF_DIEValue *pval_type;
LibGoblin_DWARF_DIEValue *pval_addr_class;
+ LibGoblin_DWARF_DIEValue *pval_prototyped;
// Data Extract
pval_type = DWARF_AttrForm_GetDIEValue( p_binfo, DW_AT_type );
pval_name = DWARF_AttrForm_GetDIEValue( p_binfo, DW_AT_name );
pval_addr_class = DWARF_AttrForm_GetDIEValue( p_binfo, DW_AT_address_class );
+ pval_prototyped = DWARF_AttrForm_GetDIEValue( p_binfo, DW_AT_prototyped );
if( NULL != pval_type ) {
pb_link = pval_type->value.pb_link;
pobj_now->info.type.b_bit_offset = 0;
pobj_now->info.type.b_endianity = DW_END_default;
+ if( NULL != pval_prototyped )
+ { pobj_now->info.type.b_prototyped = 0x01; }
+
return pobj_now->i_id;
}
Byte b_bit_size;
Byte b_endianity;
Byte b_addr_class;
+ Byte b_prototyped;
int i_objid_type;
Byte *p_dwtype;
} type;
int i_secid;
int i_srcid; // SourceInfo struct ID
+ DWord dw_srcline;
Byte b_elf_flags;
Word w_secid; // ==OLD== SectionInfo ItemIndex belong with this object.