OSDN Git Service

(LibGoblin)
authorKoine Yuusuke(koinec) <koinec@users.osdn.me>
Wed, 16 Oct 2019 12:23:44 +0000 (21:23 +0900)
committerKoine Yuusuke(koinec) <koinec@users.osdn.me>
Wed, 16 Oct 2019 12:23:44 +0000 (21:23 +0900)
  * WorkBackup

libgoblin/drd64_libgoblin_debug_objinfo.c
libgoblin/drd64_libgoblin_dwarf_tag_function.c
libgoblin/drd64_libgoblin_dwarf_tag_type.c
libgoblin/drd64_libgoblin_objinfo.c
libgoblin/drd64_libgoblin_type.h

index aef5b61..915ef5d 100644 (file)
@@ -47,12 +47,12 @@ static char gstr_type[256][9]       = {
        "TYPE:MUL",             // 0x06
        "TYPE:SIG",             // 0x07
 
-       "FUNCTION",             // 0x08
-       "OBJECT",               // 0x09
-       "COMMON",               // 0x0a
-       "TLS",                  // 0x0b
+       "TYPEDEF",              // 0x08
+       "FUNCTION",             // 0x09
+       "OBJECT",               // 0x0a
+       "COMMON",               // 0x0b
+       "TLS",                  // 0x0c
        "REL",                  // 0x0d
-       "",                             // 0x0d
        "",                             // 0x0e
        "",                             // 0x0f
        "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
@@ -505,6 +505,22 @@ void
        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
@@ -566,6 +582,10 @@ void
                        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;
index 584e35e..d44c57a 100644 (file)
@@ -222,7 +222,7 @@ int
                }
                //p_obj->i_srcid        = p_srcfile->i_id;
        }
-       
+
 /*
        p_bfile = BinaryFile_GetBinaryFile( p_binfo->i_binfile );
        assert( NULL != p_bfile );
index ff297aa..821f99d 100644 (file)
@@ -109,7 +109,7 @@ int
 
        pobj_now        = ObjectInfo_InsetObject(
                                                p_pginfo, ptrval_start, (QWord)0, pobj_parent,
-                                               OBJINFO_INSETMODE_ADOPT, OBJINFO_TYPE_TYPE_SINGLE, NULL );
+                                               OBJINFO_INSETMODE_ADOPT, OBJINFO_TYPE_TYPEDEF, NULL );
        if( NULL == pobj_now )  {
                return -0x03;
        }
index 078d5bf..176735f 100644 (file)
@@ -398,14 +398,10 @@ LibGoblin_ObjectInfo *
                }
 
                if( ptr_value == p_objnow->addr.ptr_addr.value )        {
-//printf("DEBUG: %s (%x) : size= %lxh, obj= %lxh (%s)\n", pstr_name, dw_hash, qw_size, p_objnow->addr.qw_size, p_objnow->pstr_name );
                        if( qw_size > p_objnow->addr.qw_size )
                                { break; }
-                       else if( qw_size < p_objnow->addr.qw_size )     {
-                               if( b_type < p_objnow->b_type )         { break; }
-                       }
-                       else    {       // qw_size == p_objnow->addr.qw_size
-//printf("DEBUG: %s (%x) <=> %s (%x) is chkmode.\n", pstr_name, dw_hash, p_objnow->pstr_name, p_objnow->dw_hash );
+
+                       else if( qw_size == p_objnow->addr.qw_size )    {
                                if( b_type < p_objnow->b_type )         { break; }
 
                                if( OBJINFO_INSETMODE_CHKNAME & b_mode )        {
index e2ef0fd..817de1e 100644 (file)
@@ -98,11 +98,12 @@ typedef struct      {
 #define        OBJINFO_TYPE_OBJFILE            0x05
 #define        OBJINFO_TYPE_TYPE_MULTI         0x06
 #define        OBJINFO_TYPE_TYPE_SINGLE        0x07
-#define        OBJINFO_TYPE_FUNCTION           0x08
-#define        OBJINFO_TYPE_OBJECT                     0x09
-#define        OBJINFO_TYPE_COMMON                     0x0a
-#define        OBJINFO_TYPE_TLS                        0x0b
-#define        OBJINFO_TYPE_REL                        0x0c
+#define        OBJINFO_TYPE_TYPEDEF            0x08
+#define        OBJINFO_TYPE_FUNCTION           0x09
+#define        OBJINFO_TYPE_OBJECT                     0x0a
+#define        OBJINFO_TYPE_COMMON                     0x0b
+#define        OBJINFO_TYPE_TLS                        0x0c
+#define        OBJINFO_TYPE_REL                        0x0d
 #define        OBJINFO_TYPE_NONE                       0x7f
 
 typedef        struct  {