OSDN Git Service

(LibGoblin)
authorKoine Yuusuke(koinec) <koinec@users.osdn.me>
Sun, 18 Aug 2019 12:16:34 +0000 (21:16 +0900)
committerKoine Yuusuke(koinec) <koinec@users.osdn.me>
Sun, 18 Aug 2019 12:16:34 +0000 (21:16 +0900)
  * WorkBackup

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

index 818d432..43fe694 100644 (file)
@@ -73,6 +73,7 @@ OBJS = drd64_libgoblin_api.o \
                drd64_libgoblin_dwarf_attrform.o \
                drd64_libgoblin_dwarf_info.o \
                drd64_libgoblin_dwarf_oldline.o \
+               drd64_libgoblin_dwarf_tag_compileunit.o \
                drd64_libgoblin_dwarf_tag_type.o \
                drd64_libgoblin_dwarf_tag_struct.o \
                drd64_libgoblin_dwarf_tag_parameter.o \
@@ -116,6 +117,7 @@ HEADER = drd64_libgoblin.h \
                drd64_libgoblin_dwarf_attrform.h \
                drd64_libgoblin_dwarf_info.h \
                drd64_libgoblin_dwarf_oldline.h \
+               drd64_libgoblin_dwarf_tag_compileunit.h \
                drd64_libgoblin_dwarf_tag_type.h \
                drd64_libgoblin_dwarf_tag_struct.h \
                drd64_libgoblin_dwarf_tag_parameter.h \
@@ -249,6 +251,10 @@ drd64_libgoblin_dwarf_oldline.o: \
                drd64_libgoblin_dwarf_oldline.c $(HEADER)
        $(CC) -c -o drd64_libgoblin_dwarf_oldline.o $(FLAGS_DEBUG) \
                                drd64_libgoblin_dwarf_oldline.c
+drd64_libgoblin_dwarf_tag_compileunit.o: \
+               drd64_libgoblin_dwarf_tag_compileunit.c $(HEADER)
+       $(CC) -c -o drd64_libgoblin_dwarf_tag_compileunit.o $(FLAGS_DEBUG) \
+                               drd64_libgoblin_dwarf_tag_compileunit.c
 drd64_libgoblin_dwarf_tag_type.o: \
                drd64_libgoblin_dwarf_tag_type.c $(HEADER)
        $(CC) -c -o drd64_libgoblin_dwarf_tag_type.o $(FLAGS_DEBUG) \
index a7e7ff7..eaa3831 100644 (file)
@@ -71,6 +71,7 @@ Comment:
 #include"../include/libfiletype.h"
 #include"../include/libbrownie.h"
 #include"drd64_libgoblin_section_defs.h"
+#include"drd64_libgoblin_type_dwarf.h"
 #include"drd64_libgoblin_type.h"
 #include"drd64_libgoblin_proginfo.h"
 #include"drd64_libgoblin_binfo.h"
@@ -97,6 +98,7 @@ Comment:
 #include"drd64_libgoblin_dwarf_attrform.h"
 #include"drd64_libgoblin_dwarf_info.h"
 #include"drd64_libgoblin_dwarf_oldline.h"
+#include"drd64_libgoblin_dwarf_tag_compileunit.h"
 #include"drd64_libgoblin_dwarf_tag_type.h"
 #include"drd64_libgoblin_dwarf_tag_struct.h"
 #include"drd64_libgoblin_dwarf_tag_parameter.h"
index 0b6e7ab..ff44aaa 100644 (file)
@@ -218,6 +218,7 @@ int
        int                                                     i_objfiles;
        int                                                     i_abbrevs;
        Byte                                            *pb_info;
+       Byte                                            *pb_now;
        Byte                                            *pb_custart;
        DWord                                           dw_arvid;
        QWord                                           qw_temp;
@@ -229,6 +230,7 @@ int
        DWARF_AbbrevEntry                       *p_arvnow;
        LibGoblin_DWARF_Info_CUHeader   t_cuheader;
        LibGoblin_SrcFile                       *p_srcfile;
+       LibGoblin_DWARF_Info_Ancestry   t_ancestry[DWARF_ANCESTRY_MAX];
 
        assert( NULL != p_binfo );
 
@@ -271,17 +273,18 @@ int
 
                        //printf( "\n SrcFile: %s,  Orig.Path: %s\n", p_srcfile->str_filename, p_srcfile->str_srcpath );
                }
-/*
-               printf( "    size: %ld, ver:%d, abbrev off.:%ld, addr.size: %d\n",
-                       t_cuheader.qw_unitsize,
-                       t_cuheader.w_version,
-                       t_cuheader.qw_abbrev_offset,
-                       t_cuheader.b_pointersize);
-*/
+
+               //printf( "    size: %ld, ver:%d, abbrev off.:%ld, addr.size: %d\n",
+               //      t_cuheader.qw_unitsize, t_cuheader.w_version, t_cuheader.qw_abbrev_offset, t_cuheader.b_pointersize);
 
                // Read & Process DWARF info TAG ---
                i_childlv       = 0;
+               t_ancestry[0].pb_dwinfo = NULL;
+               t_ancestry[0].i_objid   = NO_OBJ;
+
                do      {
+                       pb_now  = pb_info;
+
                        // Read Reference Abbrev-ID ---
                        pb_info = DWARF_Common_DecodeULEB128( &qw_temp, pb_info, &qw_size_cu );
                        dw_arvid        = (DWord)qw_temp;
@@ -298,11 +301,19 @@ int
                                                        pb_info, &qw_size_cu, p_arvnow, p_binfo, &t_cuheader );
 
                        // Dispatch for generate Rapid-Access Table by DIE-tag
-                       i_result        = DWARF_Tag_Dispatch( p_binfo, p_arvnow );
+                       i_result        = DWARF_Tag_Dispatch( p_binfo, p_arvnow, i_childlv, t_ancestry );
+                       //i_result      = DWARF_Tag_Dispatch( p_binfo, p_arvnow );
+
+                       t_ancestry[i_childlv].pb_dwinfo = pb_now;
+                       t_ancestry[i_childlv].i_objid   = i_result;
 
                        Debug_DWARF_PrintDIE( p_binfo, p_abbrev, dw_arvid, i_childlv );
 
-                       if( 0x00 != p_arvnow->b_children )      { i_childlv++; }
+                       if( 0x00 != p_arvnow->b_children )      {
+                               i_childlv++;
+                               t_ancestry[i_childlv].pb_dwinfo = NULL;
+                               t_ancestry[i_childlv].i_objid   = NO_OBJ;
+                       }
 
                }while( 0 != qw_size_cu ); 
                qw_size_info    -= t_cuheader.qw_unitsize;
diff --git a/libgoblin/drd64_libgoblin_dwarf_tag_compileunit.c b/libgoblin/drd64_libgoblin_dwarf_tag_compileunit.c
new file mode 100644 (file)
index 0000000..e476236
--- /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_.c
+Function: 
+Comment: 
+----------------------------------------------------------------------*/
+
+#define        DRD64_SRC_LIBGOBLIN_DWARF_TAG_COMPILEUNIT
+#include"drd64_libgoblin.h"
+
+/*----------------------------------------------------------------------
+DW_TAG_compile_unit
+DW_TAG_partial_unit
+DW_TAG_imported_unit
+----------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+LIBGOBLIN_DWARF_TAG_COMPILEUNIT_EXTERN
+int
+       DWARF_Tag_CompileUnit_UnImplement(
+               DWord                                   dw_tag,
+               LibGoblin_BinaryInfo    *p_binfo )
+{
+       printf( "  UnImplement DWARF Tag(CompileUnit): %s [%02xh]\n",
+                                       Debug_DWARF_GetTAGname( dw_tag ), dw_tag );
+
+       return 0x00;
+}
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+
+
+
+/* EOF of drd64_.c ----------------------------------- */
diff --git a/libgoblin/drd64_libgoblin_dwarf_tag_compileunit.h b/libgoblin/drd64_libgoblin_dwarf_tag_compileunit.h
new file mode 100644 (file)
index 0000000..e6b323d
--- /dev/null
@@ -0,0 +1,54 @@
+/*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_TAG_COMPILEUNIT
+#define DRD64_HEADER_LIBGOBLIN_DWARF_TAG_COMPILEUNIT
+
+#include"drd64_libgoblin.h"
+
+#ifdef DRD64_SRC_LIBGOBLIN_DWARF_TAG_COMPILEUNIT
+       #define LIBGOBLIN_DWARF_TAG_COMPILEUNIT_EXTERN
+#else
+       #define LIBGOBLIN_DWARF_TAG_COMPILEUNIT_EXTERN  extern
+#endif
+
+LIBGOBLIN_DWARF_TAG_COMPILEUNIT_EXTERN
+       int DWARF_Tag_CompileUnit_UnImplement( DWord dw_tag, LibGoblin_BinaryInfo *p_binfo );
+
+
+#endif /* DRD64_HEADER_LIBGOBLIN_BINFO */
+
+/* EOF of drd64_.h ----------------------------------- */
index b8ae48b..7c1f789 100644 (file)
@@ -56,7 +56,9 @@ LIBGOBLIN_DWARF_TAG_DISPATCH_EXTERN
 int
        DWARF_Tag_Dispatch(
                LibGoblin_BinaryInfo    *p_binfo,
-               DWARF_AbbrevEntry               *p_abbrev )
+               DWARF_AbbrevEntry               *p_abbrev,
+               int                                             i_childlv,
+               LibGoblin_DWARF_Info_Ancestry   *p_ancestry )
 {
        int             i_result;
        DWord   dw_cnt;
index fba0c7e..a94bcba 100644 (file)
@@ -57,8 +57,9 @@ typedef       struct  {
 LIBGOBLIN_DWARF_TAG_DISPATCH_EXTERN
        int DWARF_Tag_Dispatch(
         LibGoblin_BinaryInfo    *p_binfo,
-        DWARF_AbbrevEntry       *p_abbrev );
-
+        DWARF_AbbrevEntry       *p_abbrev,
+               int                                             i_childlv, 
+               LibGoblin_DWARF_Info_Ancestry   *p_ancestry );
 
 // DW_TAG_file_type (for PASCAL) is TagID unknown.
 
@@ -82,7 +83,7 @@ DWARF_TagFunction     dwarf_tag[LIBGOBLIN_DWARF_TAG_MAX]      = {
                { DW_TAG_pointer_type,                  DWARF_Tag_Type_UnImplement },           // 0x0f: type
 
                { DW_TAG_reference_type,                DWARF_Tag_Type_UnImplement },           // 0x10: type
-               { DW_TAG_compile_unit,                  NULL }, // 0x11
+               { DW_TAG_compile_unit,                  DWARF_Tag_CompileUnit_UnImplement },// 0x11: compileunit
                { DW_TAG_string_type,                   DWARF_Tag_NotClang_UnImplement },       // 0x12: notclang
                { DW_TAG_structure_type,                DWARF_Tag_Struct_UnImplement },         // 0x13: struct
                { 0x14,                                                 NULL },
@@ -129,8 +130,8 @@ DWARF_TagFunction   dwarf_tag[LIBGOBLIN_DWARF_TAG_MAX]      = {
                { DW_TAG_namespace,                             DWARF_Tag_Class_UnImplement },          // 0x39: class
                { DW_TAG_imported_module,               DWARF_Tag_Class_UnImplement },          // 0x3a: class
                { DW_TAG_unspecified_type,              DWARF_Tag_Type_UnImplement },           // 0x3b: type
-               { DW_TAG_partial_unit,                  DWARF_Tag_NotClang_UnImplement },       // 0x3c: notclang
-               { DW_TAG_imported_unit,                 DWARF_Tag_NotClang_UnImplement },       // 0x3d: notclang
+               { DW_TAG_partial_unit,                  DWARF_Tag_CompileUnit_UnImplement},     // 0x3c: compileunit
+               { DW_TAG_imported_unit,                 DWARF_Tag_CompileUnit_UnImplement },// 0x3d: compileunit
                { 0x3e, NULL },
                { DW_TAG_condition,                             DWARF_Tag_NotClang_UnImplement },       // 0x3f: notclang
 
index c2bd234..560586b 100644 (file)
@@ -53,73 +53,6 @@ typedef      struct  {
 
 
 /*=====================================================================*/
-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 {
-       DWord   dw_id;
-       DWord   dw_tag;
-       Byte    b_children;
-       int             i_items;
-       DWord   dw_attribute[ DWARF_ABBREV_MAXITEMS ];
-       DWord   dw_format[ DWARF_ABBREV_MAXITEMS ];
-} DWARF_AbbrevEntry;
-
-
-/*=====================================================================*/
-#define        LIBGOBLIN_DWARF_INFO_TYPE_NONE          0x00
-#define        LIBGOBLIN_DWARF_INFO_TYPE_BYTE          0x01
-#define        LIBGOBLIN_DWARF_INFO_TYPE_WORD          0x02
-#define        LIBGOBLIN_DWARF_INFO_TYPE_DWORD         0x03
-#define        LIBGOBLIN_DWARF_INFO_TYPE_QWORD         0x04
-#define        LIBGOBLIN_DWARF_INFO_TYPE_INT64         0x05
-#define        LIBGOBLIN_DWARF_INFO_TYPE_POINTER       0x06
-#define        LIBGOBLIN_DWARF_INFO_TYPE_STRING        0x07
-#define        LIBGOBLIN_DWARF_INFO_TYPE_BLOCK         0x08
-#define        LIBGOBLIN_DWARF_INFO_TYPE_LINK          0x09
-
-typedef struct {
-       Byte    b_type;
-       QWord   qw_size;
-       DWord   dw_format;
-
-       union   {
-               Byte    b_value;
-               Word    w_value;
-               DWord   dw_value;
-               QWord   qw_value;
-               QWord   qw_link;
-               Int64   ii_value;
-               void    *p_value;
-               Byte    *pb_link;
-               char    *pstr_value;
-               Byte    *pb_data;               // for BlockData
-       } value;
-} LibGoblin_DWARF_DIEValue;
-
-
-/*=====================================================================*/
-typedef struct {
-       DWord                           dw_attribute;
-       LibGoblin_DWARF_DIEValue        *p_val;
-} LibGoblin_DWARF_Attribute;
-
-
-/*=====================================================================*/
 typedef struct {
        Byte    *pb_sechdr;
        Byte    *pb_data;               // FileLocation (Offset)
diff --git a/libgoblin/drd64_libgoblin_type_dwarf.h b/libgoblin/drd64_libgoblin_type_dwarf.h
new file mode 100644 (file)
index 0000000..ffb58d8
--- /dev/null
@@ -0,0 +1,119 @@
+/*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_TYPE_DWARF
+#define DRD64_HEADER_LIBGOBLIN_TYPE_DWARF
+
+
+/*=====================================================================*/
+#define        DWARF_ANCESTRY_MAX      64
+
+typedef        struct  {
+       Byte    *pb_dwinfo;
+       int             i_objid;
+} LibGoblin_DWARF_Info_Ancestry;
+
+
+/*=====================================================================*/
+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 {
+       DWord   dw_id;
+       DWord   dw_tag;
+       Byte    b_children;
+       int             i_items;
+       DWord   dw_attribute[ DWARF_ABBREV_MAXITEMS ];
+       DWord   dw_format[ DWARF_ABBREV_MAXITEMS ];
+} DWARF_AbbrevEntry;
+
+
+/*=====================================================================*/
+#define        LIBGOBLIN_DWARF_INFO_TYPE_NONE          0x00
+#define        LIBGOBLIN_DWARF_INFO_TYPE_BYTE          0x01
+#define        LIBGOBLIN_DWARF_INFO_TYPE_WORD          0x02
+#define        LIBGOBLIN_DWARF_INFO_TYPE_DWORD         0x03
+#define        LIBGOBLIN_DWARF_INFO_TYPE_QWORD         0x04
+#define        LIBGOBLIN_DWARF_INFO_TYPE_INT64         0x05
+#define        LIBGOBLIN_DWARF_INFO_TYPE_POINTER       0x06
+#define        LIBGOBLIN_DWARF_INFO_TYPE_STRING        0x07
+#define        LIBGOBLIN_DWARF_INFO_TYPE_BLOCK         0x08
+#define        LIBGOBLIN_DWARF_INFO_TYPE_LINK          0x09
+
+typedef struct {
+       Byte    b_type;
+       QWord   qw_size;
+       DWord   dw_format;
+
+       union   {
+               Byte    b_value;
+               Word    w_value;
+               DWord   dw_value;
+               QWord   qw_value;
+               QWord   qw_link;
+               Int64   ii_value;
+               void    *p_value;
+               Byte    *pb_link;
+               char    *pstr_value;
+               Byte    *pb_data;               // for BlockData
+       } value;
+} LibGoblin_DWARF_DIEValue;
+
+
+/*=====================================================================*/
+typedef struct {
+       DWord                           dw_attribute;
+       LibGoblin_DWARF_DIEValue        *p_val;
+} LibGoblin_DWARF_Attribute;
+
+
+#endif /* DRD64_HEADER_LIBGOBLIN_TYPE*/
+
+/* EOF of drd64_.h ----------------------------------- */