OSDN Git Service

(LibGoblin)
authorKoine Yuusuke(koinec) <koinec@users.osdn.me>
Mon, 24 Jun 2019 21:00:10 +0000 (06:00 +0900)
committerKoine Yuusuke(koinec) <koinec@users.osdn.me>
Mon, 24 Jun 2019 21:00:10 +0000 (06:00 +0900)
  * WorkBackup

libgoblin/drd64_libgoblin_dwarf_attrform.c
libgoblin/drd64_libgoblin_dwarf_attrform.h
libgoblin/drd64_libgoblin_dwarf_info.c

index a0617cc..88da054 100644 (file)
@@ -302,22 +302,10 @@ Byte *
                LibGoblin_DWARF_DIEValue        *p_val,
                Byte    *pb_info,
                QWord   *pqw_remains,
-               //DWARF_AbbrevEntry     *p_abbrev,
                DWord   dw_format,
                LibGoblin_BinaryInfo    *p_binfo,
                LibGoblin_DWARF_Info_CUHeader   *p_cuheader )
 {
-/*
-       LibGoblin_DWARF_DIEValue        *p_val,
-
-       // Read Debug Information Entry (DIE) ---
-       memset( p_infoval, 0x00, sizeof( LibGoblin_DWARF_DIEValue ) * p_abbrev->i_items );
-       p_val   = p_infoval;
-       memset( p_binfo->dwarf.t_attr, 0x00, sizeof( p_binfo->dwarf.t_attr) );
-       for( i_cnt = 0; i_cnt < p_abbrev->i_items; i_cnt++, p_val++ )   {
-               dw_attribute    = p_abbrev->dw_attribute[ i_cnt ];
-               dw_format       = p_abbrev->dw_format[ i_cnt ];
-*/
        switch( dw_format )     {
                case DW_FORM_addr:              // 0x01: address
                        pb_info = DWARF_AttrForm_ReadFormat_Address(
@@ -438,7 +426,40 @@ Byte *
                default:
                        break;
        }
-//     }
+
+       return pb_info;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+LIBGOBLIN_DWARF_ATTRFORM_EXTERN
+Byte *
+       DWARF_AttrForm_ReadDIEValue(
+               Byte    *pb_info,
+               QWord   *pqw_remains,
+               DWARF_AbbrevEntry       *p_abbrev,
+               LibGoblin_BinaryInfo    *p_binfo,
+               LibGoblin_DWARF_Info_CUHeader   *p_cuheader )
+{
+       int                                                     i_cnt;
+       DWord                                           dw_attribute;
+       DWord                                           dw_format;
+       LibGoblin_DWARF_DIEValue        *p_val;
+
+       // Read Debug Information Entry (DIE) ---
+       memset( p_binfo->dwarf.p_infoval, 0x00, sizeof( LibGoblin_DWARF_DIEValue ) * p_abbrev->i_items );
+       p_val   = p_binfo->dwarf.p_infoval;
+
+       memset( p_binfo->dwarf.t_attr, 0x00, sizeof( p_binfo->dwarf.t_attr) );
+
+       for( i_cnt = 0; i_cnt < p_abbrev->i_items; i_cnt++, p_val++ )   {
+               dw_attribute    = p_abbrev->dw_attribute[ i_cnt ];
+               dw_format       = p_abbrev->dw_format[ i_cnt ];
+
+               pb_info = DWARF_AttrForm_ReadFormat_Data(
+                                               p_val, pb_info, pqw_remains, dw_format, p_binfo, p_cuheader );
+       }
 
        return pb_info;
 }
index cb54b38..3964a0c 100644 (file)
@@ -52,6 +52,12 @@ LIBGOBLIN_DWARF_ATTRFORM_EXTERN
                LibGoblin_DWARF_DIEValue *p_val, Byte *pb_info, QWord *pqw_remains,
                DWord dw_format, LibGoblin_BinaryInfo *p_binfo, LibGoblin_DWARF_Info_CUHeader *p_cuheader );
 
+LIBGOBLIN_DWARF_ATTRFORM_EXTERN
+       Byte *DWARF_AttrForm_ReadDIEValue(
+               Byte *pb_info, QWord *pqw_remains,
+               DWARF_AbbrevEntry *p_abbrev,
+               LibGoblin_BinaryInfo *p_binfo,
+               LibGoblin_DWARF_Info_CUHeader *p_cuheader );
 
 
 #ifdef DRD64_SRC_LIBGOBLIN_DWARF_ATTRFORM
index a03ccd4..23cf5c8 100644 (file)
@@ -153,18 +153,18 @@ LibGoblin_SrcFile *
        char                                            *pstr_srcpath   = NULL;
        char                                            str_temp[DRD64_MAX_PATH+1];
        DWord                                           dw_arvid;
-       DWord                                           dw_attribute;
-       DWord                                           dw_format;
+       //DWord                                         dw_attribute;
+       //DWord                                         dw_format;
        QWord                                           qw_temp;
        DWARF_AbbrevEntry                       *p_arvnow;
-       LibGoblin_DWARF_DIEValue        *p_infoval;
+       //LibGoblin_DWARF_DIEValue      *p_infoval;
        LibGoblin_DWARF_DIEValue        *p_val;
        LibGoblin_SrcFile                       *p_srcfile;
 
        assert( NULL != p_binfo );
        assert( NULL != p_bfile );
 
-       p_infoval       = p_binfo->dwarf.p_infoval;
+       //p_infoval     = p_binfo->dwarf.p_infoval;
        i_childlv       = 0;
        do      {
                // Read Reference Abbrev-ID ---
@@ -179,6 +179,7 @@ LibGoblin_SrcFile *
                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;
 
@@ -191,6 +192,9 @@ LibGoblin_SrcFile *
                        pb_info = DWARF_AttrForm_ReadFormat_Data(
                                                                p_val, pb_info, &qw_size_cu, dw_format, p_binfo, pt_cuheader );
                }
+*/
+               pb_info = DWARF_AttrForm_ReadDIEValue(
+                                               pb_info, &qw_size_cu, p_arvnow, p_binfo, pt_cuheader );
 
                if( 0x00 != p_arvnow->b_children )      { i_childlv++; }
 
@@ -238,12 +242,12 @@ int
        int                                                     i_result;
        int                                                     i_srcfiles;
        int                                                     i_abbrevs;
-       int                                                     i_cnt;
+       //int                                                   i_cnt;
        Byte                                            *pb_info;
        Byte                                            *pb_custart;
        DWord                                           dw_arvid;
-       DWord                                           dw_attribute;
-       DWord                                           dw_format;
+       //DWord                                         dw_attribute;
+       //DWord                                         dw_format;
        QWord                                           qw_temp;
        QWord                                           qw_size_cu;
        QWord                                           qw_size_info;
@@ -251,8 +255,8 @@ int
        LibGoblin_BinaryFile            *p_bfile;
        DWARF_AbbrevEntry                       *p_abbrev;
        DWARF_AbbrevEntry                       *p_arvnow;
-       LibGoblin_DWARF_DIEValue        *p_infoval;
-       LibGoblin_DWARF_DIEValue        *p_val;
+       //LibGoblin_DWARF_DIEValue      *p_infoval;
+       //LibGoblin_DWARF_DIEValue      *p_val;
        LibGoblin_DWARF_Info_CUHeader   t_cuheader;
        LibGoblin_SrcFile                       *p_srcfile;
 
@@ -263,7 +267,7 @@ int
 
        i_srcfiles      = p_bfile->dwarf.i_srcfiles;
 
-       p_infoval       = p_binfo->dwarf.p_infoval;
+       //p_infoval     = p_binfo->dwarf.p_infoval;
 
        // Get section Info ---
        psec_info       = Section_GetSectionInfo( p_binfo, LIBGOBLIN_SECTION_ID_DEBUG_INFO );
@@ -322,6 +326,7 @@ int
                        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;
 
@@ -336,6 +341,9 @@ int
 
                                
                        }
+*/
+                       pb_info = DWARF_AttrForm_ReadDIEValue(
+                                                       pb_info, &qw_size_cu, p_arvnow, p_binfo, &t_cuheader );
 
                        if( 0x00 != p_arvnow->b_children )      { i_childlv++; }