OSDN Git Service

2019/03/14(Thr) 05:13
authorKoine Yuusuke(koinec) <koinec@users.osdn.me>
Wed, 13 Mar 2019 20:13:27 +0000 (05:13 +0900)
committerKoine Yuusuke(koinec) <koinec@users.osdn.me>
Wed, 13 Mar 2019 20:13:27 +0000 (05:13 +0900)
 (LibGoblin)
  * Implemented resolving then dynamic symbol.

libgoblin/drd64_libgoblin_elf.c
libgoblin/drd64_libgoblin_elf_dynsym.c

index 6057124..19db17c 100644 (file)
@@ -175,7 +175,7 @@ int
                return i_result;
        }
 
-       //Debug_ObjectInfo_Print_AllGroupLink( p_pginfo, 0xff );
+       Debug_ObjectInfo_Print_AllGroupLink( p_pginfo, 0xff );
 
 
        /* Analyze Dwarf-Debug Info. */
index 7b186b7..fc4ae42 100644 (file)
@@ -47,6 +47,7 @@ int
 {
        char    *pstr_symname;
        Byte    b_binding;
+       Byte    b_bindtemp;
        Byte    *pb_dynstr;
        int             i_bid;
        int             i_result;
@@ -143,21 +144,21 @@ int
                pstr_symname    =  (char *)(pb_dynstr + p_sym->st_name);
 
                // Check .gnu.hash ---
+               b_binding       = 255;
                i_symindex      = -0x01;
                while( -0x01 != i_bid )         {
                        p_binlib        = BinaryInfo_GetBinInfo( i_bid );
                        assert( NULL != p_binlib );
 
-                       i_result        = ELF64_GnuHash_SearchDynSym( p_binlib, pstr_symname, p_vernow, &b_binding );
+                       i_result        = ELF64_GnuHash_SearchDynSym( p_binlib, pstr_symname, p_vernow, &b_bindtemp );
                        if( 0 <= i_result )             {
                                i_symindex      = i_result;
-                               break;
+                               b_binding       = b_bindtemp;
+                               if( STB_WEAK != b_binding )     { break; }
                        }
 
                        i_bid   = BinInfo_SearchNextSlave( p_binfo->i_id, i_bid );
                }
-       printf(" debug: [%2u] %s (%s)[binding:%d] = %d\n",
-                               dw_sym, pstr_symname, p_binlib->str_filename, b_binding, i_symindex );
                
                if( 0 > i_symindex )    { continue; }