if( 1 > qw_remain-- ) { return -0x01; }
b_byte = *pb_line++;
- SrcFile_ClearSrcFileTable_inBinaryInfo( p_binfo );
-
i_files = 1;
while( '\0' != b_byte) {
// Read FileName ---
p_srcfile = SrcFile_DispenseSrcFile( p_bfile, str_filename, pstr_path );
if( NULL == p_srcfile ) { return -0x02; }
- i_result = SrcFile_RegistSrcFileTable_inBinaryInfo( p_binfo, p_srcfile, i_files );
+ i_result = SrcFile_RegistSrcFileTable_inBinaryInfo( p_binfo, p_srcfile );
if( 0x00 != i_result ) { return -0x03; }
i_files++;
b_byte = *pb_line++;
}
-/* for DEBUG
- for( i_pos = 1; i_pos < i_files; i_pos++ ) {
+// for DEBUG
+ for( i_pos = 0; i_pos < i_files; i_pos++ ) {
i_result = SrcFile_GetSrcFileTable_inBinaryInfo( p_binfo, i_pos );
p_srcfile = SrcFile_GetSrcFile( p_bfile, i_result );
- printf(" debug: %d > %s/%s\n", i_pos, p_srcfile->str_srcpath, p_srcfile->str_filename );
+ printf(" Debug SrcFileTable: %2d > [%2d] %s/%s\n",
+ i_pos, p_srcfile->i_id, p_srcfile->str_srcpath, p_srcfile->str_filename );
}
-*/
+
return 0x00;
}
int i_objid = NO_OBJ;
char *pstr_filepath = NULL;
char *pstr_path = NULL;
+ char *pstr_filename;
char str_filename[DRD64_MAX_PATH+1];
char str_path[DRD64_MAX_PATH+1];
DWord dw_lineoffset;
}
strncpy( str_filename, pval_name->value.pstr_value, DRD64_MAX_PATH );
- basename( str_filename );
+ pstr_filename = basename( str_filename );
strncpy( str_path, pval_name->value.pstr_value, DRD64_MAX_PATH );
dirname( str_path );
// (Phase3) Regist SrcFile from .dwarf_line ===================================
- p_srcfile = SrcFile_DispenseSrcFile( p_bfile, str_filename, pstr_path);
+ SrcFile_ClearSrcFileTable_inBinaryInfo( p_binfo );
+
+ p_srcfile = SrcFile_DispenseSrcFile( p_bfile, pstr_filename, pstr_path);
+ if( NULL == p_srcfile ) {
+ goto goto_DWARF_Tag_CompileUnit_compile_unit_post;
+ }
+
+ i_result = SrcFile_RegistSrcFileTable_inBinaryInfo( p_binfo, p_srcfile );
+ if( 0x00 != i_result ) {
+ goto goto_DWARF_Tag_CompileUnit_compile_unit_post;
+ }
dw_lineoffset = pval_linestmt->value.dw_value;
i_result = DWARF_Line_ReadSrcFile( p_binfo, dw_lineoffset );
assert( NULL != p_binfo );
- if( 0 == i_dwline_index ) { return -0x01; }
-
- i_srcid = *(p_binfo->dwarf.pi_srctbl + (i_dwline_index - 1));
+ i_srcid = *(p_binfo->dwarf.pi_srctbl + i_dwline_index);
return i_srcid;
}
int
SrcFile_RegistSrcFileTable_inBinaryInfo(
LibGoblin_BinaryInfo *p_binfo,
- LibGoblin_SrcFile *p_srcfile,
- int i_dwline_index )
+ LibGoblin_SrcFile *p_srcfile )
{
int *pi_srctbl = NULL;
int i_alloc;
assert( NULL != p_binfo );
- if( 0 == i_dwline_index ) { return -0x01; }
-
if(( NULL == p_binfo->dwarf.pi_srctbl )
&& ( 0 == p_binfo->dwarf.i_alloc_srctbl )) {
i_alloc = LIBGOBLIN_SRCFILE_SRCTBL_UNITS;
p_binfo->dwarf.i_alloc_srctbl = i_alloc;
p_binfo->dwarf.pi_srctbl = pi_srctbl;
- *(pi_srctbl + (i_dwline_index - 1)) = p_srcfile->i_id;
+ *(pi_srctbl + p_binfo->dwarf.i_max_srctbl) = p_srcfile->i_id;
p_binfo->dwarf.i_max_srctbl++;
return 0x00;
int SrcFile_GetSrcFileTable_inBinaryInfo( LibGoblin_BinaryInfo *p_binfo, int i_dwline_index );
LIBGOBLIN_SRCFILE_EXTERN
int SrcFile_RegistSrcFileTable_inBinaryInfo(
- LibGoblin_BinaryInfo *p_binfo, LibGoblin_SrcFile *p_srcfile, int i_dwline_index );
+ LibGoblin_BinaryInfo *p_binfo, LibGoblin_SrcFile *p_srcfile );
LIBGOBLIN_SRCFILE_EXTERN
int SrcFile_ClearSrcFileTable_inBinaryInfo( LibGoblin_BinaryInfo *p_binfo );