OSDN Git Service

(LibGoblin)
authorKoine Yuusuke(koinec) <koinec@users.osdn.me>
Thu, 13 Jun 2019 20:38:05 +0000 (05:38 +0900)
committerKoine Yuusuke(koinec) <koinec@users.osdn.me>
Thu, 13 Jun 2019 20:38:05 +0000 (05:38 +0900)
  * CreateFile: drd64_libgoblin_dwarf_attrform.[ch]
  * Split dwarf_info.[ch] to dwarf_attform.[ch]

libgoblin/Makefile
libgoblin/drd64_libgoblin.h
libgoblin/drd64_libgoblin_dwarf_attrform.c [new file with mode: 0644]
libgoblin/drd64_libgoblin_dwarf_attrform.h [new file with mode: 0644]
libgoblin/drd64_libgoblin_dwarf_info.c
libgoblin/drd64_libgoblin_dwarf_info.h
libgoblin/drd64_libgoblin_type.h

index 5e4b17d..2bed1f4 100644 (file)
@@ -70,6 +70,7 @@ OBJS = drd64_libgoblin_api.o \
                drd64_libgoblin_elf32.o \
                drd64_libgoblin_dwarf.o \
                drd64_libgoblin_dwarf_abbrev.o \
                drd64_libgoblin_elf32.o \
                drd64_libgoblin_dwarf.o \
                drd64_libgoblin_dwarf_abbrev.o \
+               drd64_libgoblin_dwarf_attrform.o \
                drd64_libgoblin_dwarf_info.o \
                drd64_libgoblin_dwarf_line.o \
                drd64_libgoblin_dwarf_tag.o \
                drd64_libgoblin_dwarf_info.o \
                drd64_libgoblin_dwarf_line.o \
                drd64_libgoblin_dwarf_tag.o \
@@ -103,6 +104,7 @@ HEADER = drd64_libgoblin.h \
                drd64_libgoblin_elf32.h \
                drd64_libgoblin_dwarf.h \
                drd64_libgoblin_dwarf_abbrev.h \
                drd64_libgoblin_elf32.h \
                drd64_libgoblin_dwarf.h \
                drd64_libgoblin_dwarf_abbrev.h \
+               drd64_libgoblin_dwarf_attrform.h \
                drd64_libgoblin_dwarf_info.h \
                drd64_libgoblin_dwarf_line.h \
                drd64_libgoblin_dwarf_tag.h \
                drd64_libgoblin_dwarf_info.h \
                drd64_libgoblin_dwarf_line.h \
                drd64_libgoblin_dwarf_tag.h \
@@ -217,6 +219,10 @@ drd64_libgoblin_dwarf.o: drd64_libgoblin_dwarf.c $(HEADER)
 drd64_libgoblin_dwarf_abbrev.o: drd64_libgoblin_dwarf_abbrev.c $(HEADER)
        $(CC) -c -o drd64_libgoblin_dwarf_abbrev.o $(FLAGS_DEBUG) \
                                drd64_libgoblin_dwarf_abbrev.c
 drd64_libgoblin_dwarf_abbrev.o: drd64_libgoblin_dwarf_abbrev.c $(HEADER)
        $(CC) -c -o drd64_libgoblin_dwarf_abbrev.o $(FLAGS_DEBUG) \
                                drd64_libgoblin_dwarf_abbrev.c
+drd64_libgoblin_dwarf_attrform.o: \
+               drd64_libgoblin_dwarf_attrform.c $(HEADER)
+       $(CC) -c -o drd64_libgoblin_dwarf_attrform.o $(FLAGS_DEBUG) \
+                               drd64_libgoblin_dwarf_attrform.c
 drd64_libgoblin_dwarf_info.o: \
                drd64_libgoblin_dwarf_info.c $(HEADER)
        $(CC) -c -o drd64_libgoblin_dwarf_info.o $(FLAGS_DEBUG) \
 drd64_libgoblin_dwarf_info.o: \
                drd64_libgoblin_dwarf_info.c $(HEADER)
        $(CC) -c -o drd64_libgoblin_dwarf_info.o $(FLAGS_DEBUG) \
index 42f89b0..f8dc8af 100644 (file)
@@ -94,6 +94,7 @@ Comment:
 #include"drd64_libgoblin_elf32.h"
 #include"drd64_libgoblin_dwarf_common.h"
 #include"drd64_libgoblin_dwarf_abbrev.h"
 #include"drd64_libgoblin_elf32.h"
 #include"drd64_libgoblin_dwarf_common.h"
 #include"drd64_libgoblin_dwarf_abbrev.h"
+#include"drd64_libgoblin_dwarf_attrform.h"
 #include"drd64_libgoblin_dwarf_info.h"
 #include"drd64_libgoblin_dwarf_line.h"
 #include"drd64_libgoblin_dwarf_tag.h"
 #include"drd64_libgoblin_dwarf_info.h"
 #include"drd64_libgoblin_dwarf_line.h"
 #include"drd64_libgoblin_dwarf_tag.h"
diff --git a/libgoblin/drd64_libgoblin_dwarf_attrform.c b/libgoblin/drd64_libgoblin_dwarf_attrform.c
new file mode 100644 (file)
index 0000000..de47f9a
--- /dev/null
@@ -0,0 +1,434 @@
+/*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
+
+                         D r . D e a m o n  6 4
+                        for INTEL64(R), AMD64(R)
+       
+   Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY Koine Yuusuke(koinec) ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL Koine Yuusuke(koinec) OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+OF THE POSSIBILITY OF SUCH DAMAGE.
+
+DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/
+
+/* File Info -----------------------------------------------------------
+File: drd64_.c
+Function: 
+Comment: 
+----------------------------------------------------------------------*/
+
+#define        DRD64_SRC_LIBGOBLIN_DWARF_ATTRFORM
+#include"drd64_libgoblin.h"
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+Byte *
+       DWARF_AttrForm_ReadFormat_Ref_inCU(
+               LibGoblin_DWARF_DIEValue        *p_val,
+               Byte    *pb_src, 
+               QWord   *pqw_remain,
+               Byte    b_bytes,
+               Byte    *pb_custart )
+{
+       Byte    b_size;
+       Word    w_size;
+       DWord   dw_size;
+       QWord   qw_size;
+
+       assert( NULL != pb_src );
+       assert( NULL != p_val );
+
+       if( 1 == b_bytes )      {
+               pb_src  = DWARF_Common_Read_Byte( &b_size, pb_src, pqw_remain );
+               qw_size = (QWord)b_size;
+       }
+       else if( 2 == b_bytes ) {
+               pb_src  = DWARF_Common_Read_Word( &w_size, pb_src, pqw_remain );
+               qw_size = (QWord)w_size;
+       }
+       else if( 4 == b_bytes ) {
+               pb_src  = DWARF_Common_Read_DWord( &dw_size, pb_src, pqw_remain );
+               qw_size = (QWord)dw_size;
+       }
+       else if( 8 == b_bytes ) {
+               pb_src  = DWARF_Common_Read_QWord( &qw_size, pb_src, pqw_remain );
+       }
+       else    {
+               pb_src  = DWARF_Common_DecodeULEB128( &qw_size, pb_src, pqw_remain );
+       }
+       if( NULL == pb_src )    { return NULL; }
+
+       p_val->value.pb_link    = pb_custart + qw_size;
+       p_val->b_type                   = LIBGOBLIN_DWARF_INFO_TYPE_LINK;
+       p_val->qw_size                  = (QWord)b_bytes;
+       
+       return pb_src;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+Byte *
+       DWARF_AttrForm_ReadFormat_Block(
+               LibGoblin_DWARF_DIEValue        *p_val,
+               Byte    *pb_src, 
+               QWord   *pqw_remain,
+               int             i_sizebytes )
+{
+       Byte    b_size;
+       Word    w_size;
+       DWord   dw_size;
+       QWord   qw_size;
+
+       assert( NULL != pb_src );
+       assert( NULL != p_val );
+
+       if( 1 == i_sizebytes )  {
+               pb_src  = DWARF_Common_Read_Byte( &b_size, pb_src, pqw_remain );
+               qw_size = (QWord)b_size;
+       }
+       else if( 2 == i_sizebytes )     {
+               pb_src  = DWARF_Common_Read_Word( &w_size, pb_src, pqw_remain );
+               qw_size = (QWord)w_size;
+       }
+       else if( 4 == i_sizebytes )     {
+               pb_src  = DWARF_Common_Read_DWord( &dw_size, pb_src, pqw_remain );
+               qw_size = (QWord)dw_size;
+       }
+       else if( 8 == i_sizebytes )     {
+               pb_src  = DWARF_Common_Read_QWord( &qw_size, pb_src, pqw_remain );
+       }
+       else    {
+               pb_src  = DWARF_Common_DecodeULEB128( &qw_size, pb_src, pqw_remain );
+       }
+
+       if( *pqw_remain >= qw_size )    {
+               p_val->qw_size                  = qw_size;
+               p_val->value.pb_data    = pb_src;
+               p_val->b_type                   = LIBGOBLIN_DWARF_INFO_TYPE_BLOCK;
+               pb_src                                  += qw_size;
+               *pqw_remain                             -= qw_size;
+       }
+       else    { pb_src        = NULL; }
+
+       return pb_src;
+}
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+Byte *
+       DWARF_AttrForm_ReadFormat_Strp(
+               LibGoblin_DWARF_DIEValue        *p_val,
+               Byte    *pb_src, 
+               QWord   *pqw_remain,
+               LibGoblin_BinaryInfo    *p_binfo,
+               Byte    b_bits )
+{
+       Byte    *pb_string      = NULL;
+       QWord   qw_offset;
+       DWord   dw_offset;
+       LibGoblin_SectionInfo   *psec_dbgstr;
+
+       assert( NULL != pb_src );
+       assert( NULL != p_val );
+
+       psec_dbgstr     = Section_GetSectionInfo( p_binfo, LIBGOBLIN_SECTION_ID_DEBUG_STR );
+       assert( NULL != psec_dbgstr );
+       assert( NULL != psec_dbgstr->pb_data );
+
+       if( 8 == b_bits )       {
+               pb_src          = DWARF_Common_Read_QWord( &qw_offset, pb_src, pqw_remain );
+               pb_string       = psec_dbgstr->pb_data + qw_offset;
+       }
+       else if( 4 == b_bits )  {
+               pb_src  = DWARF_Common_Read_DWord( &dw_offset, pb_src, pqw_remain );
+               pb_string       = psec_dbgstr->pb_data + dw_offset;
+       }
+
+       p_val->value.pstr_value = (char *)pb_string;
+       p_val->b_type                   = LIBGOBLIN_DWARF_INFO_TYPE_STRING;
+       p_val->qw_size                  = 0;
+
+       return pb_src;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+Byte *
+       DWARF_AttrForm_ReadFormat_String(
+               LibGoblin_DWARF_DIEValue        *p_val,
+               Byte    *pb_src, 
+               QWord   *pqw_remain )
+{
+       Byte    *pb_now;
+       QWord   qw_size = 0;
+
+       assert( NULL != pb_src );
+       assert( NULL != p_val );
+
+       pb_now  = pb_src;
+
+       while( (0 < *pqw_remain) && ('\0' != *pb_now) ) {
+               pb_now++;
+               qw_size++;
+               (*pqw_remain)--;
+       }
+
+       if( 0 < *pqw_remain )   {
+               p_val->value.pstr_value = (char *)pb_src;
+               p_val->b_type                   = LIBGOBLIN_DWARF_INFO_TYPE_STRING;
+               p_val->qw_size                  = qw_size;
+
+               pb_now++;
+               (*pqw_remain)--;
+       }
+
+       return pb_now;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+Byte *
+       DWARF_AttrForm_ReadFormat_Address(
+               LibGoblin_DWARF_DIEValue        *p_val,
+               Byte    *pb_src, 
+               QWord   *pqw_remain,
+               Byte    b_pointersize )
+{
+       assert( NULL != pb_src );
+       assert( NULL != p_val );
+
+       if( 8 == b_pointersize )        {
+               pb_src  = DWARF_Common_Read_QWord(
+                                               &(p_val->value.qw_value), pb_src, pqw_remain );
+               p_val->b_type   = LIBGOBLIN_DWARF_INFO_TYPE_QWORD;
+               p_val->qw_size  = 8;
+       }
+       else if( 4 == b_pointersize )   {
+               pb_src  = DWARF_Common_Read_DWord(
+                                               &(p_val->value.dw_value), pb_src, pqw_remain );
+               p_val->b_type   = LIBGOBLIN_DWARF_INFO_TYPE_DWORD;
+               p_val->qw_size  = 4;
+       }
+       else if( 2 == b_pointersize )   {
+               pb_src  = DWARF_Common_Read_Word(
+                                               &(p_val->value.w_value), pb_src, pqw_remain );
+               p_val->b_type   = LIBGOBLIN_DWARF_INFO_TYPE_WORD;
+               p_val->qw_size  = 2;
+       }
+
+       return pb_src;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+Byte *
+       DWARF_AttrForm_ReadFormat_Offset(
+               LibGoblin_DWARF_DIEValue        *p_val,
+               Byte    *pb_src, 
+               QWord   *pqw_remain,
+               LibGoblin_BinaryInfo    *p_binfo,
+               Byte    b_bits )
+{
+       assert( NULL != pb_src );
+       assert( NULL != p_val );
+
+       if( 8 == b_bits )       {
+               pb_src  = DWARF_Common_Read_QWord( &(p_val->value.qw_value), pb_src, pqw_remain );
+               p_val->b_type   = LIBGOBLIN_DWARF_INFO_TYPE_QWORD;
+               p_val->qw_size  = 8;
+       }
+       else if( 4 == b_bits )  {
+               pb_src  = DWARF_Common_Read_DWord( &(p_val->value.dw_value), pb_src, pqw_remain );
+               p_val->b_type   = LIBGOBLIN_DWARF_INFO_TYPE_DWORD;
+               p_val->qw_size  = 4;
+       }
+
+       return pb_src;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+Byte *
+       DWARF_AttrForm_ReadFormat_InDirect(
+               LibGoblin_DWARF_DIEValue        *p_val,
+               Byte    *pb_info,
+               QWord   *pqw_remains,
+               LibGoblin_BinaryInfo    *p_binfo,
+               LibGoblin_DWARF_Info_CUHeader   *p_cuheader )
+{
+       QWord   qw_size;
+       DWord   dw_form;
+
+       // Get InDirect DW_FORM_*** value. ---
+       pb_info = DWARF_Common_DecodeULEB128( &qw_size, pb_info, pqw_remains );
+       dw_form = (DWord)qw_size;
+
+       // Re-Call Read FormatData Function ---
+       pb_info = DWARF_AttrForm_ReadFormat_Data(
+                                               p_val, pb_info, pqw_remains, dw_form, p_binfo, p_cuheader );
+
+       return pb_info;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+LIBGOBLIN_DWARF_ATTRFORM_EXTERN
+Byte *
+       DWARF_AttrForm_ReadFormat_Data(
+               LibGoblin_DWARF_DIEValue        *p_val,
+               Byte    *pb_info,
+               QWord   *pqw_remains,
+               DWord   dw_format,
+               LibGoblin_BinaryInfo    *p_binfo,
+               LibGoblin_DWARF_Info_CUHeader   *p_cuheader )
+{
+       switch( dw_format )     {
+               case DW_FORM_addr:              // 0x01: address
+                       pb_info = DWARF_AttrForm_ReadFormat_Address(
+                                                               p_val, pb_info, pqw_remains, p_cuheader->b_pointersize ); 
+                       break;
+               case DW_FORM_block2:    // 0x03: block
+                       pb_info = DWARF_AttrForm_ReadFormat_Block( p_val, pb_info, pqw_remains, 2);
+                       break;
+               case DW_FORM_block4:    // 0x04: block
+                       pb_info = DWARF_AttrForm_ReadFormat_Block( p_val, pb_info, pqw_remains, 4);
+                       break;
+               case DW_FORM_data2:             // 0x05: const.
+                       pb_info = DWARF_Common_Read_Word( &(p_val->value.w_value), pb_info, pqw_remains );
+                       p_val->b_type   = LIBGOBLIN_DWARF_INFO_TYPE_WORD;
+                       p_val->qw_size  = 2;
+                       break;
+               case DW_FORM_data4:             // 0x06: const. line/loc/mac/rng-ptr
+                       pb_info = DWARF_Common_Read_DWord( &(p_val->value.dw_value), pb_info, pqw_remains );
+                       p_val->b_type   = LIBGOBLIN_DWARF_INFO_TYPE_DWORD;
+                       p_val->qw_size  = 4;
+                       break;
+               case DW_FORM_data8:             // 0x07: const. line/loc/mac/rng-ptr
+                       pb_info = DWARF_Common_Read_QWord( &(p_val->value.qw_value), pb_info, pqw_remains );
+                       p_val->b_type   = LIBGOBLIN_DWARF_INFO_TYPE_QWORD;
+                       p_val->qw_size  = 8;
+                       break;
+               case DW_FORM_string:    // 0x08: string
+                       pb_info = DWARF_AttrForm_ReadFormat_String( p_val, pb_info, pqw_remains );
+                       break;
+               case DW_FORM_block:             // 0x09: block
+                       pb_info = DWARF_AttrForm_ReadFormat_Block( p_val, pb_info, pqw_remains, -1);
+                       break;
+               case DW_FORM_block1:    // 0x0a: block
+                       pb_info = DWARF_AttrForm_ReadFormat_Block( p_val, pb_info, pqw_remains, 1);
+                       break;
+               case DW_FORM_data1:             // 0x0b: const.
+                       pb_info = DWARF_Common_Read_Byte( &(p_val->value.b_value), pb_info, pqw_remains );
+                       p_val->b_type   = LIBGOBLIN_DWARF_INFO_TYPE_BYTE;
+                       p_val->qw_size  = 1;
+                       break;
+               case DW_FORM_flag:              // 0x0c: flag
+                       pb_info = DWARF_Common_Read_Byte( &(p_val->value.b_value), pb_info, pqw_remains );
+                       p_val->b_type   = LIBGOBLIN_DWARF_INFO_TYPE_BYTE;
+                       p_val->qw_size  = 1;
+                       break;
+               case DW_FORM_sdata:             // 0x0d: sdata
+                       pb_info = DWARF_Common_DecodeLEB128( &(p_val->value.ii_value), pb_info, pqw_remains );
+                       p_val->b_type   = LIBGOBLIN_DWARF_INFO_TYPE_INT64;
+                       p_val->qw_size  = 8;
+                       break;
+               case DW_FORM_strp:              // 0x0e: string (in .debug_str section)
+                       pb_info = DWARF_AttrForm_ReadFormat_Strp(
+                                                               p_val, pb_info, pqw_remains, p_binfo, p_cuheader->b_offsetsize );
+                       break;
+               case DW_FORM_udata:             // 0x0f: const.
+                       pb_info = DWARF_Common_DecodeULEB128( &(p_val->value.qw_value), pb_info, pqw_remains );
+                       p_val->b_type   = LIBGOBLIN_DWARF_INFO_TYPE_QWORD;
+                       p_val->qw_size  = 8;
+                       break;
+               case DW_FORM_ref_addr:  // 0x10: ref.
+                       pb_info = DWARF_AttrForm_ReadFormat_Address(
+                                                               p_val, pb_info, pqw_remains, p_cuheader->b_pointersize ); 
+                       break;
+               case DW_FORM_ref1:              // 0x11: ref.
+                       pb_info = DWARF_AttrForm_ReadFormat_Ref_inCU(
+                                                               p_val, pb_info, pqw_remains, 1, p_cuheader->pb_custart );
+                       break;
+               case DW_FORM_ref2:              // 0x12: ref.
+                       pb_info = DWARF_AttrForm_ReadFormat_Ref_inCU(
+                                                               p_val, pb_info, pqw_remains, 2, p_cuheader->pb_custart );
+                       break;
+               case DW_FORM_ref4:              // 0x13: ref.
+                       pb_info = DWARF_AttrForm_ReadFormat_Ref_inCU(
+                                                               p_val, pb_info, pqw_remains, 4, p_cuheader->pb_custart );
+                       break;
+               case DW_FORM_ref8:              // 0x14: ref.
+                       pb_info = DWARF_AttrForm_ReadFormat_Ref_inCU(
+                                                               p_val, pb_info, pqw_remains, 8, p_cuheader->pb_custart );
+                       break;
+               case DW_FORM_ref_udata: // 0x15: ref.
+                       pb_info = DWARF_AttrForm_ReadFormat_Ref_inCU(
+                                                               p_val, pb_info, pqw_remains, -1, p_cuheader->pb_custart );
+                       break;
+               case DW_FORM_indirect:  // 0x16: ref.
+                       pb_info = DWARF_AttrForm_ReadFormat_InDirect(
+                                                               p_val, pb_info, pqw_remains, p_binfo, p_cuheader );
+                       break;
+               case DW_FORM_sec_offset:        // 0x17:
+                       // offset from the beginning of the .debug_line section
+                       //  to the first byte of the data making up the line number list for the compilation unit.
+                       // 1: const. value (size: offsetsize)
+                       pb_info = DWARF_AttrForm_ReadFormat_Offset(
+                                                               p_val, pb_info, pqw_remains, p_binfo, p_cuheader->b_offsetsize );
+                       break;
+               case DW_FORM_exprloc:           // 0x18:
+                       // 1: uLEB128 = length
+                       // 2: info. bytes specified by the length(1:) (DWARF expression)
+                       pb_info = DWARF_AttrForm_ReadFormat_Block( p_val, pb_info, pqw_remains, -1);
+                       break;
+               case DW_FORM_flag_present:      // 0x19:
+                       // have NONE value because implicitly flag is TRUE.
+                       //   => NONE Proc.
+                       break;
+               case DW_FORM_ref_sig8:          // 0x20:
+                       // 1: pointer (8byte)
+                       pb_info = DWARF_Common_Read_QWord( &(p_val->value.qw_value), pb_info, pqw_remains );
+                       p_val->b_type   = LIBGOBLIN_DWARF_INFO_TYPE_QWORD;
+                       p_val->qw_size  = 8;
+                       break;
+               case DW_FORM_GNU_ref_alt:       // 0x1f20:
+                       pb_info = DWARF_AttrForm_ReadFormat_Offset(
+                                                               p_val, pb_info, pqw_remains, p_binfo, p_cuheader->b_offsetsize );
+                       break;
+               case DW_FORM_GNU_strp_alt:      // 0x1f21:
+                       pb_info = DWARF_AttrForm_ReadFormat_Offset(
+                                                               p_val, pb_info, pqw_remains, p_binfo, p_cuheader->b_offsetsize );
+                       break;
+               default:
+                       break;
+       }
+
+       return pb_info;
+}
+
+
+/* EOF of drd64_.c ----------------------------------- */
diff --git a/libgoblin/drd64_libgoblin_dwarf_attrform.h b/libgoblin/drd64_libgoblin_dwarf_attrform.h
new file mode 100644 (file)
index 0000000..cb54b38
--- /dev/null
@@ -0,0 +1,65 @@
+/*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
+
+                         D r . D e a m o n  6 4
+                        for INTEL64(R), AMD64(R)
+       
+   Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY Koine Yuusuke(koinec) ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL Koine Yuusuke(koinec) OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+OF THE POSSIBILITY OF SUCH DAMAGE.
+
+DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/
+
+/* File Info -----------------------------------------------------------
+File: drd64_.h
+Function: Header 
+Comment: 
+----------------------------------------------------------------------*/
+
+#ifndef DRD64_HEADER_LIBGOBLIN_DWARF_ATTRFORM
+#define DRD64_HEADER_LIBGOBLIN_DWARF_ATTRFORM
+
+#include"drd64_libgoblin.h"
+
+#ifdef DRD64_SRC_LIBGOBLIN_DWARF_ATTRFORM
+       #define LIBGOBLIN_DWARF_ATTRFORM_EXTERN
+#else
+       #define LIBGOBLIN_DWARF_ATTRFORM_EXTERN extern
+#endif
+
+#define        LIBGOBLIN_DWARF_ATTRFORM_MAXDIENUMS     30
+
+LIBGOBLIN_DWARF_ATTRFORM_EXTERN
+       Byte *DWARF_AttrForm_ReadFormat_Data(
+               LibGoblin_DWARF_DIEValue *p_val, Byte *pb_info, QWord *pqw_remains,
+               DWord dw_format, LibGoblin_BinaryInfo *p_binfo, LibGoblin_DWARF_Info_CUHeader *p_cuheader );
+
+
+
+#ifdef DRD64_SRC_LIBGOBLIN_DWARF_ATTRFORM
+Byte *DWARF_AttrForm_ReadFormat_InDirect(
+                       LibGoblin_DWARF_DIEValue *p_val, Byte *pb_info, QWord *pqw_remains,
+                       LibGoblin_BinaryInfo *p_binfo, LibGoblin_DWARF_Info_CUHeader *p_cuheader );
+#endif
+
+#endif /* DRD64_HEADER_LIBGOBLIN_BINFO */
+
+/* EOF of drd64_.h ----------------------------------- */
index 0b15e11..ff5be34 100644 (file)
@@ -37,397 +37,6 @@ Comment:
 #define        DRD64_SRC_LIBGOBLIN_DWARF_INFO
 #include"drd64_libgoblin.h"
 
 #define        DRD64_SRC_LIBGOBLIN_DWARF_INFO
 #include"drd64_libgoblin.h"
 
-/*----------------------------------------------------------------------
-----------------------------------------------------------------------*/
-Byte *
-       DWARF_Info_ReadFormat_Ref_inCU(
-               LibGoblin_DWARF_DIEValue        *p_val,
-               Byte    *pb_src, 
-               QWord   *pqw_remain,
-               Byte    b_bytes,
-               Byte    *pb_custart )
-{
-       Byte    b_size;
-       Word    w_size;
-       DWord   dw_size;
-       QWord   qw_size;
-
-       assert( NULL != pb_src );
-       assert( NULL != p_val );
-
-       if( 1 == b_bytes )      {
-               pb_src  = DWARF_Common_Read_Byte( &b_size, pb_src, pqw_remain );
-               qw_size = (QWord)b_size;
-       }
-       else if( 2 == b_bytes ) {
-               pb_src  = DWARF_Common_Read_Word( &w_size, pb_src, pqw_remain );
-               qw_size = (QWord)w_size;
-       }
-       else if( 4 == b_bytes ) {
-               pb_src  = DWARF_Common_Read_DWord( &dw_size, pb_src, pqw_remain );
-               qw_size = (QWord)dw_size;
-       }
-       else if( 8 == b_bytes ) {
-               pb_src  = DWARF_Common_Read_QWord( &qw_size, pb_src, pqw_remain );
-       }
-       else    {
-               pb_src  = DWARF_Common_DecodeULEB128( &qw_size, pb_src, pqw_remain );
-       }
-       if( NULL == pb_src )    { return NULL; }
-
-       p_val->value.pb_link    = pb_custart + qw_size;
-       p_val->b_type                   = LIBGOBLIN_DWARF_INFO_TYPE_LINK;
-       p_val->qw_size                  = (QWord)b_bytes;
-       
-       return pb_src;
-}
-
-
-/*----------------------------------------------------------------------
-----------------------------------------------------------------------*/
-Byte *
-       DWARF_Info_ReadFormat_Block(
-               LibGoblin_DWARF_DIEValue        *p_val,
-               Byte    *pb_src, 
-               QWord   *pqw_remain,
-               int             i_sizebytes )
-{
-       Byte    b_size;
-       Word    w_size;
-       DWord   dw_size;
-       QWord   qw_size;
-
-       assert( NULL != pb_src );
-       assert( NULL != p_val );
-
-       if( 1 == i_sizebytes )  {
-               pb_src  = DWARF_Common_Read_Byte( &b_size, pb_src, pqw_remain );
-               qw_size = (QWord)b_size;
-       }
-       else if( 2 == i_sizebytes )     {
-               pb_src  = DWARF_Common_Read_Word( &w_size, pb_src, pqw_remain );
-               qw_size = (QWord)w_size;
-       }
-       else if( 4 == i_sizebytes )     {
-               pb_src  = DWARF_Common_Read_DWord( &dw_size, pb_src, pqw_remain );
-               qw_size = (QWord)dw_size;
-       }
-       else if( 8 == i_sizebytes )     {
-               pb_src  = DWARF_Common_Read_QWord( &qw_size, pb_src, pqw_remain );
-       }
-       else    {
-               pb_src  = DWARF_Common_DecodeULEB128( &qw_size, pb_src, pqw_remain );
-       }
-
-       if( *pqw_remain >= qw_size )    {
-               p_val->qw_size                  = qw_size;
-               p_val->value.pb_data    = pb_src;
-               p_val->b_type                   = LIBGOBLIN_DWARF_INFO_TYPE_BLOCK;
-               pb_src                                  += qw_size;
-               *pqw_remain                             -= qw_size;
-       }
-       else    { pb_src        = NULL; }
-
-       return pb_src;
-}
-
-/*----------------------------------------------------------------------
-----------------------------------------------------------------------*/
-Byte *
-       DWARF_Info_ReadFormat_Strp(
-               LibGoblin_DWARF_DIEValue        *p_val,
-               Byte    *pb_src, 
-               QWord   *pqw_remain,
-               LibGoblin_BinaryInfo    *p_binfo,
-               Byte    b_bits )
-{
-       Byte    *pb_string      = NULL;
-       QWord   qw_offset;
-       DWord   dw_offset;
-       LibGoblin_SectionInfo   *psec_dbgstr;
-
-       assert( NULL != pb_src );
-       assert( NULL != p_val );
-
-       psec_dbgstr     = Section_GetSectionInfo( p_binfo, LIBGOBLIN_SECTION_ID_DEBUG_STR );
-       assert( NULL != psec_dbgstr );
-       assert( NULL != psec_dbgstr->pb_data );
-
-       if( 8 == b_bits )       {
-               pb_src          = DWARF_Common_Read_QWord( &qw_offset, pb_src, pqw_remain );
-               pb_string       = psec_dbgstr->pb_data + qw_offset;
-       }
-       else if( 4 == b_bits )  {
-               pb_src  = DWARF_Common_Read_DWord( &dw_offset, pb_src, pqw_remain );
-               pb_string       = psec_dbgstr->pb_data + dw_offset;
-       }
-
-       p_val->value.pstr_value = (char *)pb_string;
-       p_val->b_type                   = LIBGOBLIN_DWARF_INFO_TYPE_STRING;
-       p_val->qw_size                  = 0;
-
-       return pb_src;
-}
-
-
-/*----------------------------------------------------------------------
-----------------------------------------------------------------------*/
-Byte *
-       DWARF_Info_ReadFormat_String(
-               LibGoblin_DWARF_DIEValue        *p_val,
-               Byte    *pb_src, 
-               QWord   *pqw_remain )
-{
-       Byte    *pb_now;
-       QWord   qw_size = 0;
-
-       assert( NULL != pb_src );
-       assert( NULL != p_val );
-
-       pb_now  = pb_src;
-
-       while( (0 < *pqw_remain) && ('\0' != *pb_now) ) {
-               pb_now++;
-               qw_size++;
-               (*pqw_remain)--;
-       }
-
-       if( 0 < *pqw_remain )   {
-               p_val->value.pstr_value = (char *)pb_src;
-               p_val->b_type                   = LIBGOBLIN_DWARF_INFO_TYPE_STRING;
-               p_val->qw_size                  = qw_size;
-
-               pb_now++;
-               (*pqw_remain)--;
-       }
-
-       return pb_now;
-}
-
-
-/*----------------------------------------------------------------------
-----------------------------------------------------------------------*/
-Byte *
-       DWARF_Info_ReadFormat_Address(
-               LibGoblin_DWARF_DIEValue        *p_val,
-               Byte    *pb_src, 
-               QWord   *pqw_remain,
-               Byte    b_pointersize )
-{
-       assert( NULL != pb_src );
-       assert( NULL != p_val );
-
-       if( 8 == b_pointersize )        {
-               pb_src  = DWARF_Common_Read_QWord(
-                                               &(p_val->value.qw_value), pb_src, pqw_remain );
-               p_val->b_type   = LIBGOBLIN_DWARF_INFO_TYPE_QWORD;
-               p_val->qw_size  = 8;
-       }
-       else if( 4 == b_pointersize )   {
-               pb_src  = DWARF_Common_Read_DWord(
-                                               &(p_val->value.dw_value), pb_src, pqw_remain );
-               p_val->b_type   = LIBGOBLIN_DWARF_INFO_TYPE_DWORD;
-               p_val->qw_size  = 4;
-       }
-       else if( 2 == b_pointersize )   {
-               pb_src  = DWARF_Common_Read_Word(
-                                               &(p_val->value.w_value), pb_src, pqw_remain );
-               p_val->b_type   = LIBGOBLIN_DWARF_INFO_TYPE_WORD;
-               p_val->qw_size  = 2;
-       }
-
-       return pb_src;
-}
-
-
-/*----------------------------------------------------------------------
-----------------------------------------------------------------------*/
-Byte *
-       DWARF_Info_ReadFormat_Offset(
-               LibGoblin_DWARF_DIEValue        *p_val,
-               Byte    *pb_src, 
-               QWord   *pqw_remain,
-               LibGoblin_BinaryInfo    *p_binfo,
-               Byte    b_bits )
-{
-       assert( NULL != pb_src );
-       assert( NULL != p_val );
-
-       if( 8 == b_bits )       {
-               pb_src  = DWARF_Common_Read_QWord( &(p_val->value.qw_value), pb_src, pqw_remain );
-               p_val->b_type   = LIBGOBLIN_DWARF_INFO_TYPE_QWORD;
-               p_val->qw_size  = 8;
-       }
-       else if( 4 == b_bits )  {
-               pb_src  = DWARF_Common_Read_DWord( &(p_val->value.dw_value), pb_src, pqw_remain );
-               p_val->b_type   = LIBGOBLIN_DWARF_INFO_TYPE_DWORD;
-               p_val->qw_size  = 4;
-       }
-
-       return pb_src;
-}
-
-
-/*----------------------------------------------------------------------
-----------------------------------------------------------------------*/
-Byte *
-       DWARF_Info_ReadFormat_InDirect(
-               LibGoblin_DWARF_DIEValue        *p_val,
-               Byte    *pb_info,
-               QWord   *pqw_remains,
-               LibGoblin_BinaryInfo    *p_binfo,
-               LibGoblin_DWARF_Info_CUHeader   *p_cuheader )
-{
-       QWord   qw_size;
-       DWord   dw_form;
-
-       // Get InDirect DW_FORM_*** value. ---
-       pb_info = DWARF_Common_DecodeULEB128( &qw_size, pb_info, pqw_remains );
-       dw_form = (DWord)qw_size;
-
-       // Re-Call Read FormatData Function ---
-       pb_info = DWARF_Info_ReadFormat_Data(
-                                               p_val, pb_info, pqw_remains, dw_form, p_binfo, p_cuheader );
-
-       return pb_info;
-}
-
-
-/*----------------------------------------------------------------------
-----------------------------------------------------------------------*/
-Byte *
-       DWARF_Info_ReadFormat_Data(
-               LibGoblin_DWARF_DIEValue        *p_val,
-               Byte    *pb_info,
-               QWord   *pqw_remains,
-               DWord   dw_format,
-               LibGoblin_BinaryInfo    *p_binfo,
-               LibGoblin_DWARF_Info_CUHeader   *p_cuheader )
-{
-       switch( dw_format )     {
-               case DW_FORM_addr:              // 0x01: address
-                       pb_info = DWARF_Info_ReadFormat_Address(
-                                                               p_val, pb_info, pqw_remains, p_cuheader->b_pointersize ); 
-                       break;
-               case DW_FORM_block2:    // 0x03: block
-                       pb_info = DWARF_Info_ReadFormat_Block( p_val, pb_info, pqw_remains, 2);
-                       break;
-               case DW_FORM_block4:    // 0x04: block
-                       pb_info = DWARF_Info_ReadFormat_Block( p_val, pb_info, pqw_remains, 4);
-                       break;
-               case DW_FORM_data2:             // 0x05: const.
-                       pb_info = DWARF_Common_Read_Word( &(p_val->value.w_value), pb_info, pqw_remains );
-                       p_val->b_type   = LIBGOBLIN_DWARF_INFO_TYPE_WORD;
-                       p_val->qw_size  = 2;
-                       break;
-               case DW_FORM_data4:             // 0x06: const. line/loc/mac/rng-ptr
-                       pb_info = DWARF_Common_Read_DWord( &(p_val->value.dw_value), pb_info, pqw_remains );
-                       p_val->b_type   = LIBGOBLIN_DWARF_INFO_TYPE_DWORD;
-                       p_val->qw_size  = 4;
-                       break;
-               case DW_FORM_data8:             // 0x07: const. line/loc/mac/rng-ptr
-                       pb_info = DWARF_Common_Read_QWord( &(p_val->value.qw_value), pb_info, pqw_remains );
-                       p_val->b_type   = LIBGOBLIN_DWARF_INFO_TYPE_QWORD;
-                       p_val->qw_size  = 8;
-                       break;
-               case DW_FORM_string:    // 0x08: string
-                       pb_info = DWARF_Info_ReadFormat_String( p_val, pb_info, pqw_remains );
-                       break;
-               case DW_FORM_block:             // 0x09: block
-                       pb_info = DWARF_Info_ReadFormat_Block( p_val, pb_info, pqw_remains, -1);
-                       break;
-               case DW_FORM_block1:    // 0x0a: block
-                       pb_info = DWARF_Info_ReadFormat_Block( p_val, pb_info, pqw_remains, 1);
-                       break;
-               case DW_FORM_data1:             // 0x0b: const.
-                       pb_info = DWARF_Common_Read_Byte( &(p_val->value.b_value), pb_info, pqw_remains );
-                       p_val->b_type   = LIBGOBLIN_DWARF_INFO_TYPE_BYTE;
-                       p_val->qw_size  = 1;
-                       break;
-               case DW_FORM_flag:              // 0x0c: flag
-                       pb_info = DWARF_Common_Read_Byte( &(p_val->value.b_value), pb_info, pqw_remains );
-                       p_val->b_type   = LIBGOBLIN_DWARF_INFO_TYPE_BYTE;
-                       p_val->qw_size  = 1;
-                       break;
-               case DW_FORM_sdata:             // 0x0d: sdata
-                       pb_info = DWARF_Common_DecodeLEB128( &(p_val->value.ii_value), pb_info, pqw_remains );
-                       p_val->b_type   = LIBGOBLIN_DWARF_INFO_TYPE_INT64;
-                       p_val->qw_size  = 8;
-                       break;
-               case DW_FORM_strp:              // 0x0e: string (in .debug_str section)
-                       pb_info = DWARF_Info_ReadFormat_Strp(
-                                                               p_val, pb_info, pqw_remains, p_binfo, p_cuheader->b_offsetsize );
-                       break;
-               case DW_FORM_udata:             // 0x0f: const.
-                       pb_info = DWARF_Common_DecodeULEB128( &(p_val->value.qw_value), pb_info, pqw_remains );
-                       p_val->b_type   = LIBGOBLIN_DWARF_INFO_TYPE_QWORD;
-                       p_val->qw_size  = 8;
-                       break;
-               case DW_FORM_ref_addr:  // 0x10: ref.
-                       pb_info = DWARF_Info_ReadFormat_Address(
-                                                               p_val, pb_info, pqw_remains, p_cuheader->b_pointersize ); 
-                       break;
-               case DW_FORM_ref1:              // 0x11: ref.
-                       pb_info = DWARF_Info_ReadFormat_Ref_inCU(
-                                                               p_val, pb_info, pqw_remains, 1, p_cuheader->pb_custart );
-                       break;
-               case DW_FORM_ref2:              // 0x12: ref.
-                       pb_info = DWARF_Info_ReadFormat_Ref_inCU(
-                                                               p_val, pb_info, pqw_remains, 2, p_cuheader->pb_custart );
-                       break;
-               case DW_FORM_ref4:              // 0x13: ref.
-                       pb_info = DWARF_Info_ReadFormat_Ref_inCU(
-                                                               p_val, pb_info, pqw_remains, 4, p_cuheader->pb_custart );
-                       break;
-               case DW_FORM_ref8:              // 0x14: ref.
-                       pb_info = DWARF_Info_ReadFormat_Ref_inCU(
-                                                               p_val, pb_info, pqw_remains, 8, p_cuheader->pb_custart );
-                       break;
-               case DW_FORM_ref_udata: // 0x15: ref.
-                       pb_info = DWARF_Info_ReadFormat_Ref_inCU(
-                                                               p_val, pb_info, pqw_remains, -1, p_cuheader->pb_custart );
-                       break;
-               case DW_FORM_indirect:  // 0x16: ref.
-                       pb_info = DWARF_Info_ReadFormat_InDirect(
-                                                               p_val, pb_info, pqw_remains, p_binfo, p_cuheader );
-                       break;
-               case DW_FORM_sec_offset:        // 0x17:
-                       // offset from the beginning of the .debug_line section
-                       //  to the first byte of the data making up the line number list for the compilation unit.
-                       // 1: const. value (size: offsetsize)
-                       pb_info = DWARF_Info_ReadFormat_Offset(
-                                                               p_val, pb_info, pqw_remains, p_binfo, p_cuheader->b_offsetsize );
-                       break;
-               case DW_FORM_exprloc:           // 0x18:
-                       // 1: uLEB128 = length
-                       // 2: info. bytes specified by the length(1:) (DWARF expression)
-                       pb_info = DWARF_Info_ReadFormat_Block( p_val, pb_info, pqw_remains, -1);
-                       break;
-               case DW_FORM_flag_present:      // 0x19:
-                       // have NONE value because implicitly flag is TRUE.
-                       //   => NONE Proc.
-                       break;
-               case DW_FORM_ref_sig8:          // 0x20:
-                       // 1: pointer (8byte)
-                       pb_info = DWARF_Common_Read_QWord( &(p_val->value.qw_value), pb_info, pqw_remains );
-                       p_val->b_type   = LIBGOBLIN_DWARF_INFO_TYPE_QWORD;
-                       p_val->qw_size  = 8;
-                       break;
-               case DW_FORM_GNU_ref_alt:       // 0x1f20:
-                       pb_info = DWARF_Info_ReadFormat_Offset(
-                                                               p_val, pb_info, pqw_remains, p_binfo, p_cuheader->b_offsetsize );
-                       break;
-               case DW_FORM_GNU_strp_alt:      // 0x1f21:
-                       pb_info = DWARF_Info_ReadFormat_Offset(
-                                                               p_val, pb_info, pqw_remains, p_binfo, p_cuheader->b_offsetsize );
-                       break;
-               default:
-                       break;
-       }
-
-       return pb_info;
-}
-
 
 /*----------------------------------------------------------------------
 ----------------------------------------------------------------------*/
 
 /*----------------------------------------------------------------------
 ----------------------------------------------------------------------*/
@@ -577,7 +186,9 @@ LibGoblin_SrcFile *
                        dw_attribute    = p_arvnow->dw_attribute[ i_cnt ];
                        dw_format               = p_arvnow->dw_format[ i_cnt ];
 
                        dw_attribute    = p_arvnow->dw_attribute[ i_cnt ];
                        dw_format               = p_arvnow->dw_format[ i_cnt ];
 
-                       pb_info = DWARF_Info_ReadFormat_Data(
+                       //pb_info       = DWARF_Info_ReadFormat_Data(
+                       //                                      p_val, pb_info, &qw_size_cu, dw_format, p_binfo, pt_cuheader );
+                       pb_info = DWARF_AttrForm_ReadFormat_Data(
                                                                p_val, pb_info, &qw_size_cu, dw_format, p_binfo, pt_cuheader );
                }
 
                                                                p_val, pb_info, &qw_size_cu, dw_format, p_binfo, pt_cuheader );
                }
 
@@ -719,7 +330,9 @@ int
                                dw_attribute    = p_arvnow->dw_attribute[ i_cnt ];
                                dw_format               = p_arvnow->dw_format[ i_cnt ];
 
                                dw_attribute    = p_arvnow->dw_attribute[ i_cnt ];
                                dw_format               = p_arvnow->dw_format[ i_cnt ];
 
-                               pb_info = DWARF_Info_ReadFormat_Data(
+                               //pb_info       = DWARF_Info_ReadFormat_Data(
+                               //                              p_val, pb_info, &qw_size_cu, dw_format, p_binfo, &t_cuheader );
+                               pb_info = DWARF_AttrForm_ReadFormat_Data(
                                                                p_val, pb_info, &qw_size_cu, dw_format, p_binfo, &t_cuheader );
                        }
 
                                                                p_val, pb_info, &qw_size_cu, dw_format, p_binfo, &t_cuheader );
                        }
 
index 05709c2..529c824 100644 (file)
@@ -47,19 +47,6 @@ Comment:
 
 #define        LIBGOBLIN_DWARF_INFO_MAXDIENUMS 30
 
 
 #define        LIBGOBLIN_DWARF_INFO_MAXDIENUMS 30
 
-typedef struct  {
-       QWord   qw_unitsize;
-       Word    w_version;
-       Byte    b_pointersize;
-       Byte    b_bits;
-       Byte    b_offsetsize;
-       QWord   qw_abbrev_offset;
-       Byte    *pb_custart;
-
-       QWord   qw_type_signature;      // for DWARF4
-       QWord   qw_type_offset;         // for DWARF4
-} LibGoblin_DWARF_Info_CUHeader;
-
 
 // OLD ---
 typedef struct {
 
 // OLD ---
 typedef struct {
@@ -73,13 +60,6 @@ LIBGOBLIN_DWARF_INFO_EXTERN
 
 
 #ifdef DRD64_SRC_LIBGOBLIN_DWARF_INFO
 
 
 #ifdef DRD64_SRC_LIBGOBLIN_DWARF_INFO
-Byte *DWARF_Info_ReadFormat_InDirect(
-                       LibGoblin_DWARF_DIEValue *p_val, Byte *pb_info, QWord *pqw_remains,
-                       LibGoblin_BinaryInfo *p_binfo, LibGoblin_DWARF_Info_CUHeader *p_cuheader );
-Byte *DWARF_Info_ReadFormat_Data(
-                       LibGoblin_DWARF_DIEValue *p_val, Byte *pb_info, QWord *pqw_remains,
-                       DWord dw_format, LibGoblin_BinaryInfo *p_binfo,
-                       LibGoblin_DWARF_Info_CUHeader *p_cuheader );
 #endif
 
 #endif /* DRD64_HEADER_LIBGOBLIN_BINFO */
 #endif
 
 #endif /* DRD64_HEADER_LIBGOBLIN_BINFO */
index 715474e..17a958d 100644 (file)
@@ -39,6 +39,21 @@ Comment:
 
 
 /*=====================================================================*/
 
 
 /*=====================================================================*/
+typedef struct  {
+       QWord   qw_unitsize;
+       Word    w_version;
+       Byte    b_pointersize;
+       Byte    b_bits;
+       Byte    b_offsetsize;
+       QWord   qw_abbrev_offset;
+       Byte    *pb_custart;
+
+       QWord   qw_type_signature;      // for DWARF4
+       QWord   qw_type_offset;         // for DWARF4
+} LibGoblin_DWARF_Info_CUHeader;
+
+
+/*=====================================================================*/
 #define        DWARF_ABBREV_MAXITEMS   30
 
 typedef struct {
 #define        DWARF_ABBREV_MAXITEMS   30
 
 typedef struct {