OSDN Git Service

(LibGoblin)
[drdeamon64/drdeamon64.git] / libgoblin / drd64_libgoblin_debug_objinfo.c
index 0ba2f11..237575d 100644 (file)
@@ -38,45 +38,40 @@ Comment:
 #include"drd64_libgoblin.h"
 
 static char    gstr_type[256][9]       = {
-       "NULL",
-       "MASTER",
-       "PROGHDR",
-       "SECTION",
-       "FUNCTION",
-       "OBJECT",
-       "COMMON",
-       "TLS",
-       "REL",
-       "", "", "", "", "", "", "",
-       "", "", "", "", "", "", "", "",
-       "", "", "", "", "", "", "", "",
-       "", "", "", "", "", "", "", "",
-       "", "", "", "", "", "", "", "",
-       "", "", "", "", "", "", "", "",
-
-       "", "", "", "", "", "", "", "",
-       "", "", "", "", "", "", "", "",
-       "", "", "", "", "", "", "", "",
-       "", "", "", "", "", "", "", "",
-       "", "", "", "", "", "", "", "",
-       "", "", "", "", "", "", "", "",
-       "", "", "", "", "", "", "", "",
-
-       "", "", "", "", "", "", "", "",
-       "", "", "", "", "", "", "", "",
-       "", "", "", "", "", "", "", "",
-       "", "", "", "", "", "", "", "",
-       "", "", "", "", "", "", "", "",
-       "", "", "", "", "", "", "", "",
-       "", "", "", "", "", "", "", "",
-
-       "", "", "", "", "", "", "", "",
-       "", "", "", "", "", "", "", "",
-       "", "", "", "", "", "", "", "",
-       "", "", "", "", "", "", "", "",
-       "", "", "", "", "", "", "", "",
-       "", "", "", "", "", "", "", "",
-       "", "", "", "", "", "", "", ""
+       "NULL",                 // 0x00
+       "MASTER",               // 0x01
+       "PROGRAM",              // 0x02
+       "PROGHDR",              // 0x03
+       "SECTION",              // 0x04
+       "OBJFILE",              // 0x05
+       "TYPE:MUL",             // 0x06
+       "TYPE:SIG",             // 0x07
+
+       "TYPEDEF",              // 0x08
+       "FUNCTION",             // 0x09
+       "OBJECT",               // 0x0a
+       "COMMON",               // 0x0b
+       "TLS",                  // 0x0c
+       "REL",                  // 0x0d
+       "",                             // 0x0e
+       "",                             // 0x0f
+       "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+       "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+       "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+       "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+       "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+       "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+       "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", 
+       "NONE",
+
+       "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+       "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+       "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+       "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+       "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+       "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+       "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+       "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""
 };
 
 /*====================================================================*/
@@ -92,13 +87,14 @@ void
        char    str_visibility[32];
        LibGoblin_BinaryInfo    *p_binfo_origin;
 
-       printf(" %s\t\t[OBJINFO] Addr.Link(%3d <-> %3d)  File{ Offset=%8p, Size=%8ld, FID=%d }\n",
+       printf(" %s\t\t[OBJINFO] Addr.Link(%3d <-> %3d) .debug_info=%8ph  File{ Offset=%8p, Size=%8ld, BinFileID=%d }\n",
                                pstr_space, 
                                p_obj->addrlink.i_prev_id, p_obj->addrlink.i_next_id,
-                               p_obj->file.pv_offset, p_obj->file.qw_size, p_obj->file.i_fid );
+                               p_obj->dwarf.pb_info,
+                               p_obj->file.pv_offset, p_obj->file.qw_size, p_obj->file.i_binfile );
 
        // Symbol type - ELFNN_ST_TYPE - st_info
-       switch( p_obj->info.symbol.b_type )     {
+       switch( p_obj->elfsym.b_type )  {
                case STT_NOTYPE:        // 0 - Unspecified type.
                        strcpy( str_type, "NoType" );
                        break;
@@ -127,12 +123,12 @@ void
                        strcpy( str_type, "GNU IFunc" );
                        break;
                default:
-                       snprintf( str_type, 31, "(%02xh)", p_obj->info.symbol.b_type );
+                       snprintf( str_type, 31, "(%02xh)", p_obj->elfsym.b_type );
                        break;
        }
 
        // Symbol Binding - ELFNN_ST_BIND - st_info
-       switch( p_obj->info.symbol.b_binding )  {
+       switch( p_obj->elfsym.b_binding )       {
                case STB_LOCAL:                 // 0 - Local symbol
                        strcpy( str_binding, "Local" );
                        break;
@@ -146,13 +142,13 @@ void
                        strcpy( str_binding, "GNU Unique" );
                        break;
                default:
-                       snprintf( str_binding, 31, "(%02xh)", p_obj->info.symbol.b_binding );
+                       snprintf( str_binding, 31, "(%02xh)", p_obj->elfsym.b_binding );
                        break;
        }
 
 
        // Symbol visibility - ELFNN_ST_VISIBILITY - st_other
-       switch( p_obj->info.symbol.b_visibility )       {
+       switch( p_obj->elfsym.b_visibility )    {
                case STV_DEFAULT:       // 0x00 - Default visibility (see binding).
                        strcpy( str_visibility, "Default" );
                        break;
@@ -175,7 +171,7 @@ void
                        strcpy( str_visibility, "ELIMINATE" );
                        break;
                default:
-                       snprintf( str_binding, 31, "(%02xh)", p_obj->info.symbol.b_binding );
+                       snprintf( str_binding, 31, "(%02xh)", p_obj->elfsym.b_binding );
                        break;
        }
 
@@ -262,10 +258,11 @@ void
        char    str_flag[256];
        DWord   qw_flag;
 
-       printf(" %s\t\t[OBJINFO] Addr.Link(%3d <-> %3d)  File{ Offset=%8p, Size=%8ld, FID=%d }\n",
+       printf(" %s\t\t[OBJINFO] Addr.Link(%3d <-> %3d) .debug_info=%8ph File{ Offset=%8p, Size=%8ld, BinFileID=%d }\n",
                                pstr_space, 
                                p_obj->addrlink.i_prev_id, p_obj->addrlink.i_next_id,
-                               p_obj->file.pv_offset, p_obj->file.qw_size, p_obj->file.i_fid );
+                               p_obj->dwarf.pb_info,
+                               p_obj->file.pv_offset, p_obj->file.qw_size, p_obj->file.i_binfile );
 
 
        switch( p_obj->info.section.dw_type )   {
@@ -388,10 +385,11 @@ void
        char    str_flag[8];
        DWord   dw_flag;
 
-       printf(" %s\t\t[OBJINFO] Addr.Link(%3d <-> %3d)  File{ Offset=%8p, Size=%8ld, FID=%d }\n",
+       printf(" %s\t\t[OBJINFO] Addr.Link(%3d <-> %3d) .debug_info=%8ph File{ Offset=%8p, Size=%8ld, BinFileID=%d }\n",
                                pstr_space, 
                                p_obj->addrlink.i_prev_id, p_obj->addrlink.i_next_id,
-                               p_obj->file.pv_offset, p_obj->file.qw_size, p_obj->file.i_fid );
+                               p_obj->dwarf.pb_info,
+                               p_obj->file.pv_offset, p_obj->file.qw_size, p_obj->file.i_binfile );
 
        switch( p_obj->info.proghdr.dw_type )   {
                case PT_NULL:
@@ -437,7 +435,92 @@ void
        return;
 }
 
-                       
+/*--------------------------------------------------------------------*/
+void
+       Debug_ObjectInfo_Print_ProgramFile(
+                       LibGoblin_ObjectInfo    *p_obj,
+                       char    *pstr_space,
+                       Byte    b_level )
+{
+       printf(" %s\t\t[OBJINFO] Addr.Link(%3d <-> %3d) .debug_info=%8ph\n",
+                               pstr_space, p_obj->addrlink.i_prev_id, p_obj->addrlink.i_next_id,
+                               p_obj->dwarf.pb_info );
+
+       printf(" %s\t\t[PROGRAM] BinaryInfo ID= %d\n",
+                               pstr_space, p_obj->info.program.i_binfo_id );
+
+       return;
+}
+
+/*--------------------------------------------------------------------*/
+void
+       Debug_ObjectInfo_Print_ObjectFile(
+                       LibGoblin_ObjectInfo    *p_obj,
+                       char    *pstr_space,
+                       Byte    b_level )
+{
+       printf(" %s\t\t[OBJINFO] Addr.Link(%3d <-> %3d) .debug_info=%8ph\n",
+                               pstr_space, p_obj->addrlink.i_prev_id, p_obj->addrlink.i_next_id,
+                               p_obj->dwarf.pb_info );
+       printf(" %s\t\t[OBJFILE] Abbrev Nums=%3d (%8ph)  CU Header: size=%ld, ver=%d, pointer size=%d\n",
+                               pstr_space, p_obj->info.objfile.i_abbrevs, p_obj->info.objfile.p_abbrev,
+                               p_obj->info.objfile.t_cuheader.qw_unitsize,
+                               p_obj->info.objfile.t_cuheader.w_version,
+                               p_obj->info.objfile.t_cuheader.b_pointersize );
+
+       return;
+}
+
+/*--------------------------------------------------------------------*/
+void
+       Debug_ObjectInfo_Print_Type_Single(
+                       LibGoblin_ObjectInfo    *p_obj,
+                       char    *pstr_space,
+                       Byte    b_level )
+{
+       printf(" %s\t\t[OBJINFO] Addr.Link(%3d <-> %3d) .debug_info=%8ph\n",
+                               pstr_space, p_obj->addrlink.i_prev_id, p_obj->addrlink.i_next_id,
+                               p_obj->dwarf.pb_info );
+       printf(" %s\t\t[TYPE(Single)] size= %u, encoding= %xh, BitOffset=%d, BitSize=%d, Endianity=%x\n",
+                               pstr_space, p_obj->info.type.dw_size, p_obj->info.type.b_encoding,
+                               p_obj->info.type.b_bit_offset, p_obj->info.type.b_bit_size,
+                               p_obj->info.type.b_endianity );
+       printf(" %s\t\t[TYPE(Single)] Link Addr= %8ph  -> ObjID= %d\n",
+                               pstr_space, p_obj->info.type.p_dwtype, p_obj->info.type.i_objid_type );
+
+       return;
+}
+
+/*--------------------------------------------------------------------*/
+void
+       Debug_ObjectInfo_Print_Type_Multi(
+                       LibGoblin_ObjectInfo    *p_obj,
+                       char    *pstr_space,
+                       Byte    b_level )
+{
+       printf(" %s\t\t[OBJINFO] Addr.Link(%3d <-> %3d) .debug_info=%8ph\n",
+                               pstr_space, p_obj->addrlink.i_prev_id, p_obj->addrlink.i_next_id,
+                               p_obj->dwarf.pb_info );
+
+       return;
+}
+
+/*--------------------------------------------------------------------*/
+void
+       Debug_ObjectInfo_Print_Typedef(
+                       LibGoblin_ObjectInfo    *p_obj,
+                       char    *pstr_space,
+                       Byte    b_level )
+{
+       printf(" %s\t\t[OBJINFO] Addr.Link(%3d <-> %3d) .debug_info=%8ph\n",
+                               pstr_space, p_obj->addrlink.i_prev_id, p_obj->addrlink.i_next_id,
+                               p_obj->dwarf.pb_info );
+       printf(" %s\t\t[TYPEDEF] Link Addr= %8ph  -> ObjID= %d\n",
+                               pstr_space, p_obj->info.type.p_dwtype, p_obj->info.type.i_objid_type );
+
+       return;
+}
+
 /*====================================================================*/
 /*--------------------------------------------------------------------*/
 void
@@ -448,7 +531,6 @@ void
                        int             i_len,
                        Byte    b_level )
 {
-
        // Set Space String ---
        if( 0 < i_depth )       {
                *(pstr_space + i_len - 2)       = '+';
@@ -476,6 +558,10 @@ void
        else    { strcat( pstr_space, "   " ); }
 
        switch( p_obj->b_type ) {
+               case OBJINFO_TYPE_PROGRAM:
+                       Debug_ObjectInfo_Print_ProgramFile( p_obj, pstr_space, b_level );
+                       break;
+
                case OBJINFO_TYPE_PROGHDR:
                        Debug_ObjectInfo_Print_ProgramHeader( p_obj, pstr_space, b_level );
                        break;
@@ -484,6 +570,22 @@ void
                        Debug_ObjectInfo_Print_Section( p_obj, pstr_space, b_level );
                        break;
 
+               case OBJINFO_TYPE_OBJFILE:
+                       Debug_ObjectInfo_Print_ObjectFile( p_obj, pstr_space, b_level );
+                       break;
+
+               case OBJINFO_TYPE_TYPE_SINGLE:
+                       Debug_ObjectInfo_Print_Type_Single( p_obj, pstr_space, b_level );
+                       break;
+
+               case OBJINFO_TYPE_TYPE_MULTI:
+                       Debug_ObjectInfo_Print_Type_Multi( p_obj, pstr_space, b_level );
+                       break;
+
+               case OBJINFO_TYPE_TYPEDEF:
+                       Debug_ObjectInfo_Print_Typedef( p_obj, pstr_space, b_level );
+                       break;
+
                case OBJINFO_TYPE_FUNCTION:
                        Debug_ObjectInfo_Print_Function( p_obj, pstr_space, b_level );
                        break;
@@ -507,6 +609,12 @@ void
                default:
                        break;
        }
+
+       if( NO_SRC != p_obj->i_srcid )  {
+               printf(" %s\t\t[SrcFile] SrcFileID= %d,  Line= %u\n",
+                                       pstr_space, p_obj->i_srcid, p_obj->dw_srcline );
+       }
+
        printf(" %s\n", pstr_space );
 
        *(pstr_space + i_len)   = '\0';