OSDN Git Service

(LibGoblin)
authorKoine Yuusuke(koinec) <koinec@users.osdn.me>
Tue, 22 Oct 2019 11:35:43 +0000 (20:35 +0900)
committerKoine Yuusuke(koinec) <koinec@users.osdn.me>
Tue, 22 Oct 2019 11:35:43 +0000 (20:35 +0900)
  * WorkBackup (Implement DWARF info. TAG_subprogram)

libgoblin/drd64_libgoblin_debug_objinfo.c
libgoblin/drd64_libgoblin_objinfo.c
libgoblin/drd64_libgoblin_objinfo_postproc.c

index d2f0c3d..c445291 100644 (file)
@@ -199,17 +199,64 @@ void
                        char    *pstr_space,
                        Byte    b_level )
 {
-       //Debug_ObjectInfo_Print_SymbolCommon( p_obj, pstr_space, b_level );
+       DWord   dw_size;
+       DWord   dw_cnt;
 
        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 );
-*/
+       if( NO_OBJ == p_obj->info.function.i_objid_master )     {
+               printf(" %s\t\t[FUNCTION] Master (%s:%s:%s:%s) Convention= %d\n",
+                               pstr_space,
+                               ((0 != p_obj->info.function.flag.inline_def) ?  "inline def." : " - "), 
+                               ((0 != p_obj->info.function.flag.inlined) ?             "  inlined  " : " - "), 
+                               ((0 != p_obj->info.function.flag.external) ?    " external  " : " - "), 
+                               ((0 != p_obj->info.function.flag.prototyped) ?  "prototyped " : " - "),
+                               p_obj->info.function.b_convention );
+       }
+       else    {
+               printf(" %s\t\t[FUNCTION] Slave(%2d) (%s:%s:%s:%s) Convention= %d\\n",
+                               pstr_space, p_obj->info.function.i_objid_master,
+                               ((0 != p_obj->info.function.flag.inline_def) ?  "inline def." : " - "), 
+                               ((0 != p_obj->info.function.flag.inlined) ?             "  inlined  " : " - "), 
+                               ((0 != p_obj->info.function.flag.external) ?    " external  " : " - "), 
+                               ((0 != p_obj->info.function.flag.prototyped) ?  "prototyped " : " - "),
+                               p_obj->info.function.b_convention );
+       }
+
+       dw_size = ((16 < p_obj->info.function.dw_sz_frame_base)
+                                               ? 16 : p_obj->info.function.dw_sz_frame_base);
+       if( 0 < dw_size )       {
+               printf(" %s\t\t[FUNCTION] FrameBase (%2lu): ",
+                               pstr_space, p_obj->info.function.dw_sz_frame_base );
+
+               for( dw_cnt = 0; dw_cnt < dw_size; dw_cnt++ )
+                       { printf( "%02xh ", *(p_obj->info.function.pb_frame_base + dw_cnt) ); }
+               puts("");
+       }
+
+       dw_size = ((16 < p_obj->info.function.dw_sz_return_addr)
+                                               ? 16 : p_obj->info.function.dw_sz_return_addr);
+       if( 0 < dw_size )       {
+               printf(" %s\t\t[FUNCTION] ReturnAddr. (%2lu): ",
+                               pstr_space, p_obj->info.function.dw_sz_return_addr );
+
+               for( dw_cnt = 0; dw_cnt < dw_size; dw_cnt++ )
+                       { printf( "%02xh ", *(p_obj->info.function.pb_return_addr + dw_cnt) ); }
+               puts("");
+       }
+
+       dw_size = ((16 < p_obj->info.function.dw_sz_static_link)
+                                               ? 16 : p_obj->info.function.dw_sz_static_link);
+       if( 0 < dw_size )       {
+               printf(" %s\t\t[FUNCTION] StaticLink (%2lu): ",
+                               pstr_space, p_obj->info.function.dw_sz_static_link );
+
+               for( dw_cnt = 0; dw_cnt < dw_size; dw_cnt++ )
+                       { printf( "%02xh ", *(p_obj->info.function.pb_static_link + dw_cnt) ); }
+               puts("");
+       }
+
        printf(" %s\t\t[FUNCTION] ReturnType: Link Addr= %8ph  -> ObjID= %d\n",
                                pstr_space, p_obj->dwarf.pb_dwinfo_type, p_obj->dwarf.i_objid_type );
        return;
index 176735f..f1ed52c 100644 (file)
@@ -133,6 +133,8 @@ void
        p_objinfo->typelink.i_prev_id           = NO_OBJ;
        p_objinfo->typelink.i_next_id           = NO_OBJ;
 
+       p_objinfo->dwarf.i_objid_type           = NO_OBJ;
+
        p_objinfo->i_srcid                                      = NO_SRC;
 
        return;
index 9a4c25a..5327ddc 100644 (file)
@@ -63,11 +63,11 @@ int
                                i_objid_parent, pobj_now->grplink.i_parent_id );
 */
 
+       pobj_now->dwarf.i_objid_type    = i_objid_type;
+
        if(( NO_OBJ != i_objid_type ) && ( OBJINFO_TYPE_FUNCTION != pobj_now->b_type )) {
                pobj_parent     = OBJINFO( p_pginfo, i_objid_type );
                i_result        = ObjectInfo_AdoptObjectInfo( p_pginfo, pobj_parent, pobj_now );
-               
-               pobj_now->dwarf.i_objid_type    = i_objid_type;
        }
 
 goto_ObjectInfo_PostProc_ResolvTypeLink_post: