OSDN Git Service

2019/05/21(Tue) 05:29
authorKoine Yuusuke(koinec) <koinec@users.osdn.me>
Mon, 20 May 2019 20:29:05 +0000 (05:29 +0900)
committerKoine Yuusuke(koinec) <koinec@users.osdn.me>
Mon, 20 May 2019 20:29:05 +0000 (05:29 +0900)
 (LibGoblin)
  * WorkBackup

libgoblin/drd64_libgoblin_dwarf_info.c

index 6b7e751..e53f7a3 100644 (file)
@@ -483,6 +483,7 @@ int
        DWARF_Info_Read(
                LibGoblin_BinaryInfo    *p_binfo )
 {
+       int                                                     i_childlv;
        int                                                     i_result;
        int                                                     i_srcfiles;
        int                                                     i_abbrevs;
@@ -543,11 +544,17 @@ int
                                                                &p_abbrev, &i_abbrevs,
                                                                p_binfo, p_bfile, t_cuheader.qw_abbrev_offset );
 
+               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;
-                       //assert( 0 < dw_arvid );
+
+                       if( 0 == dw_arvid )     {
+                               i_childlv--;
+                               continue;
+                       }
+
                        p_arvnow        = p_abbrev + (dw_arvid - 1);
 printf(" [AbbrevID = %d] TAG=%02xh\n", dw_arvid, p_arvnow->dw_tag );
 
@@ -564,6 +571,8 @@ printf("     Attr=%02xh, FORM=%02xh : ", dw_attribute, dw_format );
                                                                p_val, pb_info, &qw_size_cu, dw_format, p_binfo, &t_cuheader );
                        }
 
+                       if( 0x00 != p_arvnow->b_children )      { i_childlv++; }
+
                        // Dispatch for generate Rapid-Access Table by DIE-tag
 
                }while( 0 != qw_size_cu );