From: Koine Yuusuke(koinec) Date: Thu, 29 Aug 2019 12:56:31 +0000 (+0900) Subject: (LibGoblin) X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=a2950d5ff1a9729029c2d00016e9e5340a2e57cb;p=drdeamon64%2Fdrdeamon64.git (LibGoblin) * WorkBackup (Correcting SrcFile Table Regist Logic.) --- diff --git a/libgoblin/drd64_libgoblin_dwarf_line.c b/libgoblin/drd64_libgoblin_dwarf_line.c index d98a7e2..52f8334 100644 --- a/libgoblin/drd64_libgoblin_dwarf_line.c +++ b/libgoblin/drd64_libgoblin_dwarf_line.c @@ -236,8 +236,6 @@ int if( 1 > qw_remain-- ) { return -0x01; } b_byte = *pb_line++; - SrcFile_ClearSrcFileTable_inBinaryInfo( p_binfo ); - i_files = 1; while( '\0' != b_byte) { // Read FileName --- @@ -272,7 +270,7 @@ int 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++; @@ -281,14 +279,15 @@ int 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; } diff --git a/libgoblin/drd64_libgoblin_dwarf_tag_compileunit.c b/libgoblin/drd64_libgoblin_dwarf_tag_compileunit.c index 2323521..898c64b 100644 --- a/libgoblin/drd64_libgoblin_dwarf_tag_compileunit.c +++ b/libgoblin/drd64_libgoblin_dwarf_tag_compileunit.c @@ -82,6 +82,7 @@ int 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; @@ -114,7 +115,7 @@ int } 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 ); @@ -191,7 +192,17 @@ int // (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 ); diff --git a/libgoblin/drd64_libgoblin_srcfile.c b/libgoblin/drd64_libgoblin_srcfile.c index df3283a..3029a98 100644 --- a/libgoblin/drd64_libgoblin_srcfile.c +++ b/libgoblin/drd64_libgoblin_srcfile.c @@ -55,9 +55,7 @@ int 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; } @@ -70,16 +68,13 @@ LIBGOBLIN_SRCFILE_EXTERN 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; @@ -99,7 +94,7 @@ int 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; diff --git a/libgoblin/drd64_libgoblin_srcfile.h b/libgoblin/drd64_libgoblin_srcfile.h index c2c1cc5..3dd3b01 100644 --- a/libgoblin/drd64_libgoblin_srcfile.h +++ b/libgoblin/drd64_libgoblin_srcfile.h @@ -62,7 +62,7 @@ LIBGOBLIN_SRCFILE_EXTERN 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 );