/*----------------------------------------------------------------------
----------------------------------------------------------------------*/
+int
+ DWARF_Info_RegistSrcFile_fromTagCompileUnit(
+ LibGoblin_BinaryInfo *p_binfo,
+ LibGoblin_BinaryFile *p_bfile,
+ Byte *pb_info,
+ DWARF_AbbrevEntry *p_abbrev,
+ QWord qw_size_cu,
+ LibGoblin_DWARF_Info_CUHeader *pt_cuheader )
+{
+ int i_childlv;
+ int i_cnt;
+ DWord dw_arvid;
+ DWord dw_attribute;
+ DWord dw_format;
+ QWord qw_temp;
+ DWARF_AbbrevEntry *p_arvnow;
+ LibGoblin_DWARF_DIEValue *p_infoval;
+ LibGoblin_DWARF_DIEValue *p_val;
+
+ assert( NULL != p_binfo );
+ assert( NULL != p_bfile );
+
+ p_infoval = p_bfile->dwarf.p_infoval;
+ i_childlv = 0;
+ do {
+ // Read Reference Abbrev-ID ---
+ pb_info = DWARF_Common_DecodeULEB128( &qw_temp, pb_info, &qw_size_cu );
+ dw_arvid = (DWord)qw_temp;
+
+ if( 0 == dw_arvid ) {
+ i_childlv--;
+ continue;
+ }
+
+ p_arvnow = p_abbrev + (dw_arvid - 1);
+
+ // Read Debug Information Entry (DIE) ---
+ memset( p_infoval, 0x00, sizeof( LibGoblin_DWARF_DIEValue ) * p_arvnow->i_items );
+ p_val = p_infoval;
+
+ for( i_cnt = 0; i_cnt < p_arvnow->i_items; i_cnt++, p_val++ ) {
+ dw_attribute = p_arvnow->dw_attribute[ i_cnt ];
+ dw_format = p_arvnow->dw_format[ i_cnt ];
+
+ pb_info = DWARF_Info_ReadFormat_Data(
+ p_val, pb_info, &qw_size_cu, dw_format, p_binfo, pt_cuheader );
+ }
+
+ if( 0x00 != p_arvnow->b_children ) { i_childlv++; }
+
+ // Check compile unit tag ---
+ if( DW_TAG_compile_unit == p_arvnow->dw_tag ) { break; }
+
+ }while( 0 != qw_size_cu );
+
+ if( DW_TAG_compile_unit != p_arvnow->dw_tag ) { return -0x01; }
+
+ return 0;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
LIBGOBLIN_DWARF_INFO_EXTERN
int
DWARF_Info_Read(
int i_childlv;
int i_result;
int i_srcfiles;
+ int i_srcid;
int i_abbrevs;
int i_cnt;
Byte *pb_info;
&p_abbrev, &i_abbrevs,
p_binfo, p_bfile, t_cuheader.qw_abbrev_offset );
+ i_srcid = DWARF_Info_RegistSrcFile_fromTagCompileUnit(
+ p_binfo, p_bfile, pb_info, p_abbrev, qw_size_cu, &t_cuheader );
+
i_childlv = 0;
do {
// Read Reference Abbrev-ID ---
int i_result;
char str_filename[DRD64_MAX_PATH];
char str_localpath[DRD64_MAX_PATH];
+ char str_temppath[DRD64_MAX_PATH];
char *pstr_remotepath;
LibGoblin_BinaryInfo *p_binfo;
- strncpy( str_filename, basename( pstr_localfull ), DRD64_MAX_PATH );
- strncpy( str_localpath, dirname( pstr_localfull ), DRD64_MAX_PATH );
+ strncpy( str_temppath, pstr_localfull, DRD64_MAX_PATH );
+ strncpy( str_filename, basename( str_temppath ), DRD64_MAX_PATH );
+ strncpy( str_localpath, dirname( str_temppath ), DRD64_MAX_PATH );
pstr_remotepath = NULL;
if( NULL != pstr_remotefull ) {