OSDN Git Service

(LibGoblin)
authorKoine Yuusuke(koinec) <koinec@users.osdn.me>
Thu, 29 Aug 2019 12:56:31 +0000 (21:56 +0900)
committerKoine Yuusuke(koinec) <koinec@users.osdn.me>
Thu, 29 Aug 2019 12:56:31 +0000 (21:56 +0900)
  * WorkBackup (Correcting SrcFile Table Regist Logic.)

libgoblin/drd64_libgoblin_dwarf_line.c
libgoblin/drd64_libgoblin_dwarf_tag_compileunit.c
libgoblin/drd64_libgoblin_srcfile.c
libgoblin/drd64_libgoblin_srcfile.h

index d98a7e2..52f8334 100644 (file)
@@ -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;
 }
index 2323521..898c64b 100644 (file)
@@ -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 );
index df3283a..3029a98 100644 (file)
@@ -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;
index c2c1cc5..3dd3b01 100644 (file)
@@ -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 );