OSDN Git Service

(LibGoblin)
authorKoine Yuusuke(koinec) <koinec@users.osdn.me>
Mon, 27 May 2019 20:28:49 +0000 (05:28 +0900)
committerKoine Yuusuke(koinec) <koinec@users.osdn.me>
Mon, 27 May 2019 20:28:49 +0000 (05:28 +0900)
  * CreateFile: drd64_libgoblin_debug_dwarf.[ch]
  * Import: Dump DIE info. (for debug)

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

index cc83b8e..5e4b17d 100644 (file)
@@ -76,6 +76,7 @@ OBJS = drd64_libgoblin_api.o \
                drd64_libgoblin_dwarf_common.o \
                drd64_libgoblin_debug_elf.o \
                drd64_libgoblin_debug_dwarf_str.o \
+               drd64_libgoblin_debug_dwarf.o \
                drd64_libgoblin_debug_objinfo.o
 HEADER = drd64_libgoblin.h \
                drd64_libgoblin_section_defs.h \
@@ -108,6 +109,7 @@ HEADER = drd64_libgoblin.h \
                drd64_libgoblin_dwarf_common.h \
                drd64_libgoblin_debug_elf.h \
                drd64_libgoblin_debug_dwarf_str.h \
+               drd64_libgoblin_debug_dwarf.h \
                drd64_libgoblin_debug_objinfo.h \
                drd64_libgoblin_addrinfo.h \
                $(USER_HEADER) $(SUPER_HEADER) $(LIB_HEADER) 
@@ -237,6 +239,9 @@ drd64_libgoblin_debug_elf.o: drd64_libgoblin_debug_elf.c $(HEADER)
 drd64_libgoblin_debug_dwarf_str.o: drd64_libgoblin_debug_dwarf_str.c $(HEADER)
        $(CC) -c -o drd64_libgoblin_debug_dwarf_str.o $(FLAGS_DEBUG) \
                                drd64_libgoblin_debug_dwarf_str.c
+drd64_libgoblin_debug_dwarf.o: drd64_libgoblin_debug_dwarf.c $(HEADER)
+       $(CC) -c -o drd64_libgoblin_debug_dwarf.o $(FLAGS_DEBUG) \
+                               drd64_libgoblin_debug_dwarf.c
 drd64_libgoblin_debug_objinfo.o: drd64_libgoblin_debug_objinfo.c $(HEADER)
        $(CC) -c -o drd64_libgoblin_debug_objinfo.o $(FLAGS_DEBUG) \
                                drd64_libgoblin_debug_objinfo.c
index ab85976..42f89b0 100644 (file)
@@ -99,6 +99,7 @@ Comment:
 #include"drd64_libgoblin_dwarf_tag.h"
 #include"drd64_libgoblin_dwarf.h"
 #include"drd64_libgoblin_debug_dwarf_str.h"
+#include"drd64_libgoblin_debug_dwarf.h"
 #include"drd64_libgoblin_debug_elf.h"
 #include"drd64_libgoblin_debug_objinfo.h"
 
diff --git a/libgoblin/drd64_libgoblin_debug_dwarf.c b/libgoblin/drd64_libgoblin_debug_dwarf.c
new file mode 100644 (file)
index 0000000..0bed2e9
--- /dev/null
@@ -0,0 +1,105 @@
+/*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_DEBUG_DWARF
+#include"drd64_libgoblin.h"
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+LIBGOBLIN_DEBUG_DWARF_EXTERN
+void
+       Debug_DWARF_PrintDIE(
+                       LibGoblin_BinaryFile    *p_bfile,
+                       DWARF_AbbrevEntry               *p_abbrev,
+                       DWord   dw_abbrevid,
+                       int             i_childlv )
+{
+       int             i_cnt;
+       int             i_end;
+       char    str_space[65];
+       DWord   dw_tag;
+       QWord   qw_cnt;
+       LibGoblin_DWARF_DIEValue        *p_val;
+       DWARF_AbbrevEntry                       *p_arvnow;
+
+       memset( str_space, ' ', 64 );
+       i_end   = ((64 < i_childlv) ? 64  : (2 + (i_childlv * 2)));
+       str_space[i_end]        = '\0';
+
+       p_arvnow        = p_abbrev + (dw_abbrevid - 1);
+       p_val           = p_bfile->dwarf.p_infoval;
+
+       printf( "%s<%2d>: Abbrev Number: %2d (%s [%02xh])\n",
+                               str_space, i_childlv, dw_abbrevid,
+                               Debug_DWARF_GetTAGname( p_arvnow->dw_tag ), p_arvnow->dw_tag );
+
+       for( i_cnt = 0; i_cnt < p_arvnow->i_items; i_cnt++, p_val++ )   {
+               printf("%s    %-20s, %-16s : ",
+                               str_space,
+                               Debug_DWARF_GetAttributeName( p_arvnow->dw_attribute[ i_cnt ] ),
+                               Debug_DWARF_GetFormName( p_arvnow->dw_format[ i_cnt ] ) );
+
+               switch( p_val->b_type ) {
+                       case LIBGOBLIN_DWARF_INFO_TYPE_STRING:
+                               printf( "[Str  ] %s\n", p_val->value.pstr_value ); break;
+                       case LIBGOBLIN_DWARF_INFO_TYPE_WORD:
+                               printf( "[Word ] %d\n", p_val->value.w_value ); break;
+                       case LIBGOBLIN_DWARF_INFO_TYPE_DWORD:
+                               printf( "[DWord] %d\n", p_val->value.dw_value ); break;
+                       case LIBGOBLIN_DWARF_INFO_TYPE_QWORD:
+                               printf( "[QWord] %ld\n", p_val->value.qw_value ); break;
+                       case LIBGOBLIN_DWARF_INFO_TYPE_BYTE:
+                               printf( "[Byte ] %d\n", p_val->value.b_value ); break;
+                       case LIBGOBLIN_DWARF_INFO_TYPE_LINK:
+                               printf( "[LINK ] %p\n", p_val->value.pb_link ); break;
+                       case LIBGOBLIN_DWARF_INFO_TYPE_BLOCK:
+                               printf( "[Block] Size= %ld (", p_val->qw_size );
+                               for( qw_cnt = 0; qw_cnt < p_val->qw_size; qw_cnt++ )
+                                       { printf("%0xh ", *(p_val->value.pb_data + qw_cnt) ); }
+                               puts(")");
+                               break;
+                       default:
+                               break;
+               }
+
+       }
+
+       return;
+}
+
+
+/* EOF of drd64_.c ----------------------------------- */
diff --git a/libgoblin/drd64_libgoblin_debug_dwarf.h b/libgoblin/drd64_libgoblin_debug_dwarf.h
new file mode 100644 (file)
index 0000000..fcf95c6
--- /dev/null
@@ -0,0 +1,55 @@
+/*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_DEBUG_DWARF
+#define DRD64_HEADER_LIBGOBLIN_DEBUG_DWARF
+
+#include"drd64_libgoblin.h"
+
+#ifdef DRD64_SRC_LIBGOBLIN_DEBUG_DWARF
+       #define LIBGOBLIN_DEBUG_DWARF_EXTERN
+#else
+       #define LIBGOBLIN_DEBUG_DWARF_EXTERN    extern
+#endif
+
+LIBGOBLIN_DEBUG_DWARF_EXTERN
+       void Debug_DWARF_PrintDIE(
+                       LibGoblin_BinaryFile *p_bfile, DWARF_AbbrevEntry *p_abbrev,
+                       DWord dw_abbrevid, int i_childlv );
+
+#endif /* DRD64_HEADER_LIBGOBLIN_BINFO */
+
+/* EOF of drd64_.h ----------------------------------- */
index a6f8fb0..7e30cb5 100644 (file)
@@ -135,20 +135,4 @@ goto_Debug_DWARF_GetFormName_post:
 }
 
 
-/*----------------------------------------------------------------------
-----------------------------------------------------------------------*/
-LIBGOBLIN_DEBUG_DWARF_STR_EXTERN
-void
-       Debug_DWARF_PrintDIE(
-                       DWord   dw_abbrevid,
-                       DWord   dw_attribute,
-                       DWord   dw_format,
-                       int             i_childlv,
-                       LibGoblin_DWARF_DIEValue        *p_val )
-{
-
-       return;
-}
-
-
 /* EOF of drd64_.c ----------------------------------- */
index 90390a3..cd92eeb 100644 (file)
@@ -382,36 +382,6 @@ Byte *
                        break;
        }
 
-       switch( p_val->b_type ) {
-               case LIBGOBLIN_DWARF_INFO_TYPE_STRING:
-                       printf( "[Str] %s\n", p_val->value.pstr_value );
-                       break;
-               case LIBGOBLIN_DWARF_INFO_TYPE_WORD:
-                       printf( "[Word] %d\n", p_val->value.w_value );
-                       break;
-               case LIBGOBLIN_DWARF_INFO_TYPE_DWORD:
-                       printf( "[DWord] %d\n", p_val->value.dw_value );
-                       break;
-               case LIBGOBLIN_DWARF_INFO_TYPE_QWORD:
-                       printf( "[QWord] %ld\n", p_val->value.qw_value );
-                       break;
-               case LIBGOBLIN_DWARF_INFO_TYPE_BYTE:
-                       printf( "[Byte] %d\n", p_val->value.b_value );
-                       break;
-               case LIBGOBLIN_DWARF_INFO_TYPE_LINK:
-                       printf( "[LINK] %p\n", p_val->value.pb_link );
-                       break;
-               case LIBGOBLIN_DWARF_INFO_TYPE_BLOCK:
-                       printf( "[Block] Size= %ld\n            ", p_val->qw_size );
-                       for( qw_cnt = 0; qw_cnt < p_val->qw_size; qw_cnt++ )    {
-                               printf("%0xh ", *(p_val->value.pb_data + qw_cnt) );
-                       }
-                       puts("");
-                       break;
-               default:
-                       break;
-       }
-
        return pb_info;
 }
 
@@ -568,7 +538,6 @@ int
                        }
 
                        p_arvnow        = p_abbrev + (dw_arvid - 1);
-printf(" [AbbrevID = %d] %s (%02xh)\n", dw_arvid, Debug_DWARF_GetTAGname(p_arvnow->dw_tag), p_arvnow->dw_tag );
 
                        // Read Debug Information Entry (DIE) ---
                        memset( p_infoval, 0x00, sizeof( LibGoblin_DWARF_DIEValue ) * p_arvnow->i_items );
@@ -577,8 +546,6 @@ printf(" [AbbrevID = %d] %s (%02xh)\n", dw_arvid, Debug_DWARF_GetTAGname(p_arvno
                        for( i_cnt = 0; i_cnt < p_arvnow->i_items; i_cnt++, p_val++ )   {
                                dw_attribute    = p_arvnow->dw_attribute[ i_cnt ];
                                dw_format               = p_arvnow->dw_format[ i_cnt ];
-printf("     %-24s, %-24s : ", Debug_DWARF_GetAttributeName( dw_attribute ),
-                                                               Debug_DWARF_GetFormName( dw_format ) );
 
                                pb_info = DWARF_Info_ReadFormat_Data(
                                                                p_val, pb_info, &qw_size_cu, dw_format, p_binfo, &t_cuheader );
@@ -588,10 +555,14 @@ printf("     %-24s, %-24s : ", Debug_DWARF_GetAttributeName( dw_attribute ),
 
                        // Dispatch for generate Rapid-Access Table by DIE-tag
 
+                       Debug_DWARF_PrintDIE( p_bfile, p_abbrev, dw_arvid, i_childlv );
+
                }while( 0 != qw_size_cu ); 
                qw_size_info    -= t_cuheader.qw_unitsize;
 
        //}while((qw_size_info > 0) && (i_srcfiles > 0));
+
+       
        
        return 0x00;
 }