OSDN Git Service

2018/09/24(Mon) PM20:48
authorKoine Yuusuke(koinec) <koinec@users.osdn.me>
Mon, 24 Sep 2018 11:48:25 +0000 (20:48 +0900)
committerKoine Yuusuke(koinec) <koinec@users.osdn.me>
Mon, 24 Sep 2018 11:48:25 +0000 (20:48 +0900)
  * merge branch split_BinaryFile

Squashed commit of the following:
commit 8b1fba681cf24a64694463569daa73794536272f
Author: Koine Yuusuke(koinec) <koinec@users.osdn.me>
Date:   Mon Sep 24 20:39:21 2018 +0900

    2018/09/24(Mon) PM20:40
      * Replace struct Menber:  LibGoblin_BinaryInfo t_binfile[3] -> p_binfile

38 files changed:
include/libgoblin.h
libbrownie/drd64_libbrownie_searchlib.c
libgoblin/Makefile
libgoblin/drd64_libgoblin.h
libgoblin/drd64_libgoblin_addrinfo.c
libgoblin/drd64_libgoblin_analyze.c
libgoblin/drd64_libgoblin_analyze.h
libgoblin/drd64_libgoblin_binaryfile.c [new file with mode: 0644]
libgoblin/drd64_libgoblin_binaryfile.h [moved from libgoblin/drd64_libgoblin_libraryinfo.h with 59% similarity]
libgoblin/drd64_libgoblin_binfo.c
libgoblin/drd64_libgoblin_binfo.h
libgoblin/drd64_libgoblin_checkbin.c
libgoblin/drd64_libgoblin_checkbin.h
libgoblin/drd64_libgoblin_dwarf.c
libgoblin/drd64_libgoblin_dwarf_abbrev.c
libgoblin/drd64_libgoblin_dwarf_info.c
libgoblin/drd64_libgoblin_dwarf_line.c
libgoblin/drd64_libgoblin_elf.c
libgoblin/drd64_libgoblin_elf.h
libgoblin/drd64_libgoblin_elf64.c
libgoblin/drd64_libgoblin_elf64.h
libgoblin/drd64_libgoblin_elf_dynver.c
libgoblin/drd64_libgoblin_elf_dynver.h
libgoblin/drd64_libgoblin_libraryinfo.c [deleted file]
libgoblin/drd64_libgoblin_loadprog.c
libgoblin/drd64_libgoblin_proginfo.c
libgoblin/drd64_libgoblin_proginfo.h
libgoblin/drd64_libgoblin_readbin.c
libgoblin/drd64_libgoblin_readbin.h
libgoblin/drd64_libgoblin_section.c
libgoblin/drd64_libgoblin_section.h
libgoblin/drd64_libgoblin_type.h
libgoblin/test_libgoblin.c
libgoblin/test_libgoblin.h
libgoblin/test_libgoblin_binaryfile.c [moved from libgoblin/test_libgoblin_libraryinfo.c with 60% similarity]
libgoblin/test_libgoblin_binfo.c
libgoblin/test_libgoblin_readbin.c
testpg/testpg02/Makefile

index 91c0001..a3ac5db 100644 (file)
@@ -88,7 +88,7 @@ LIBGOBLIN_API_PROGINFO
 LIBGOBLIN_API_BINFO
        const char *LibGoblin_GetRPath_fromBinInfo( int i_bid, char *pstr_rpath );
 LIBGOBLIN_API_BINFO
-       int LibGoblin_AllocBinInfo( int i_pgid );
+       int LibGoblin_AllocBinInfo( int i_pgid, const char *pstr_filename, const char *pstr_path );
 LIBGOBLIN_API_BINFO
        int LibGoblin_FreeBinInfo( int i_binfoid );
 
index d0eb8fa..8b3fec5 100644 (file)
@@ -39,6 +39,16 @@ Comment:
 
 
 /*----------------------------------------------------------------------
+Is Exist the Library File in dir (pstr_path & "/" & pstr_solibname)
+
+Return:
+        0x00: OK (exist LibraryFile)
+       -0x01: Path + .so FileName string size over.
+
+int LibBrownie_SearchLib_IsExistLibrary(
+       char    *pstr_path,                     // Library Dir. string
+       char    *pstr_solibname         // Library(.so) FileName
+)
 ----------------------------------------------------------------------*/
 int
        LibBrownie_SearchLib_IsExistLibrary(
@@ -50,6 +60,7 @@ int
        struct  stat    t_filestat;
        char    str_solibpath[DRD64_MAX_PATH];
 
+       // Check Library Path & FileName Size ---
        sz_len  = strnlen( pstr_path, DRD64_MAX_PATH );
        sz_len  += strnlen( pstr_solibname, DRD64_MAX_PATH );
 
@@ -67,6 +78,16 @@ int
 
 
 /***********************************************************************
+int LibBrownie_GetLibraryPath(
+       char    *pstr_solibpath,        [OUT] .so existed Library FullPath 
+       char    *pstr_solibname,        [IN] .so Library Filename
+       char    *pstr_rpath,            [IN] rpath string from .dynamic seciton
+       char    *pstr_ldsohints         [IN] LD_LIBRARYPATH env string.
+)
+
+ * LocalLibrary ( if pstr_rpath != NULL )
+    pstr_solibpath = pstr_rpath & "/" & pstr_solibname
 ***********************************************************************/
 LIBBROWNIE_SEARCHLIB_API
 int
@@ -91,6 +112,7 @@ int
                return -0x02;
        }
 
+       // LocalLibrary ( rpath in .dynamic section)
        if( NULL != pstr_rpath )        {
                if( '\0' != *pstr_rpath )       {
                        i_result        = LibBrownie_SearchLib_IsExistLibrary( pstr_rpath, pstr_solibname );
@@ -101,6 +123,8 @@ int
                }
        }
 
+       // System Library ( in /usr/lib | /usr/local/lib | ... )
+       //   Get from LD_LIBRARYPATH dir.
        sz_len  = strlen( pstr_ldsohints );
        pstr_hintslist  = (char *)alloca( sz_len + 1 );
        if( NULL == pstr_hintslist )    {
index 0886192..455c05b 100644 (file)
@@ -50,7 +50,7 @@ TARGET = libgoblin.a
 OBJS = drd64_libgoblin_system.o \
                drd64_libgoblin_proginfo.o \
                drd64_libgoblin_binfo.o \
-               drd64_libgoblin_libraryinfo.o \
+               drd64_libgoblin_binaryfile.o \
                drd64_libgoblin_checkbin.o \
                drd64_libgoblin_analyze.o \
                drd64_libgoblin_readbin.o \
@@ -75,7 +75,7 @@ HEADER = drd64_libgoblin.h \
                drd64_libgoblin_type.h \
                drd64_libgoblin_proginfo.h \
                drd64_libgoblin_binfo.h \
-               drd64_libgoblin_libraryinfo.h \
+               drd64_libgoblin_binaryfile.h \
                drd64_libgoblin_checkbin.h \
                drd64_libgoblin_analyze.h \
                drd64_libgoblin_readbin.h \
@@ -106,7 +106,7 @@ TEST_HEADER = test_libgoblin.h
 TEST_OBJS = test_libgoblin.o \
                        test_libgoblin_system.o \
                        test_libgoblin_proginfo.o \
-                       test_libgoblin_libraryinfo.o \
+                       test_libgoblin_binaryfile.o \
                        test_libgoblin_loadprog.o \
                        test_libgoblin_binfo.o \
                        test_libgoblin_readbin.o \
@@ -135,9 +135,9 @@ drd64_libgoblin_proginfo.o: drd64_libgoblin_proginfo.c $(HEADER)
 drd64_libgoblin_binfo.o: drd64_libgoblin_binfo.c $(HEADER)
        $(CC) -c -o drd64_libgoblin_binfo.o $(FLAGS_DEBUG) \
                                drd64_libgoblin_binfo.c
-drd64_libgoblin_libraryinfo.o: drd64_libgoblin_libraryinfo.c $(HEADER)
-       $(CC) -c -o drd64_libgoblin_libraryinfo.o $(FLAGS_DEBUG) \
-                               drd64_libgoblin_libraryinfo.c
+drd64_libgoblin_binaryfile.o: drd64_libgoblin_binaryfile.c $(HEADER)
+       $(CC) -c -o drd64_libgoblin_binaryfile.o $(FLAGS_DEBUG) \
+                               drd64_libgoblin_binaryfile.c
 drd64_libgoblin_checkbin.o: drd64_libgoblin_checkbin.c $(HEADER)
        $(CC) -c -o drd64_libgoblin_checkbin.o $(FLAGS_DEBUG) \
                                drd64_libgoblin_checkbin.c
@@ -220,10 +220,10 @@ test_libgoblin_proginfo.o: test_libgoblin_proginfo.c $(HEADER) $(TEST_HEADER)
        $(CC) -c -o test_libgoblin_proginfo.o \
                        $(FLAGS_DEBUG) $(FLAGS_COMPILE) $(TEST_FLAGS_COMPILE) \
                        test_libgoblin_proginfo.c
-test_libgoblin_libraryinfo.o: test_libgoblin_libraryinfo.c $(HEADER) $(TEST_HEADER)
-       $(CC) -c -o test_libgoblin_libraryinfo.o \
+test_libgoblin_binaryfile.o: test_libgoblin_binaryfile.c $(HEADER) $(TEST_HEADER)
+       $(CC) -c -o test_libgoblin_binaryfile.o \
                        $(FLAGS_DEBUG) $(FLAGS_COMPILE) $(TEST_FLAGS_COMPILE) \
-                       test_libgoblin_libraryinfo.c
+                       test_libgoblin_binaryfile.c
 test_libgoblin_loadprog.o: test_libgoblin_loadprog.c $(HEADER) $(TEST_HEADER)
        $(CC) -c -o test_libgoblin_loadprog.o \
                        $(FLAGS_DEBUG) $(FLAGS_COMPILE) $(TEST_FLAGS_COMPILE) \
index d468c76..7dc55b6 100644 (file)
@@ -72,7 +72,7 @@ Comment:
 #include"drd64_libgoblin_type.h"
 #include"drd64_libgoblin_proginfo.h"
 #include"drd64_libgoblin_binfo.h"
-#include"drd64_libgoblin_libraryinfo.h"
+#include"drd64_libgoblin_binaryfile.h"
 #include"drd64_libgoblin_checkbin.h"
 #include"drd64_libgoblin_analyze.h"
 #include"drd64_libgoblin_readbin.h"
index fdc677f..5b29e9e 100644 (file)
@@ -72,7 +72,7 @@ int
                // p_addr->dw_next is update when finalizing ELF/DWARF reading phase.
                p_addr->b_elf_flags     = p_sym64->st_info;
                p_addr->w_secid         = LibGoblin_Section_GetSectionID_fromSectionNumber_inElf(
-                                                               p_binfo, p_secinfo->i_fid, p_sym64->st_shndx );
+                                                               p_binfo, p_sym64->st_shndx );
                if( STT_SECTION == (p_addr->b_elf_flags & 0x0f) )
                        { p_addr->pstr_name     = LibGoblin_Section_GetSectionName( p_binfo, p_addr->w_secid ); }
                else
@@ -87,7 +87,7 @@ int
                // p_addr->dw_next is update when finalizing ELF/DWARF reading phase.
                p_addr->b_elf_flags     = p_sym32->st_info;
                p_addr->w_secid         = LibGoblin_Section_GetSectionID_fromSectionNumber_inElf(
-                                                               p_binfo, p_secinfo->i_fid, p_sym32->st_shndx );
+                                                               p_binfo, p_sym32->st_shndx );
                if( STT_SECTION == (p_addr->b_elf_flags & 0x0f) )
                        { p_addr->pstr_name     = LibGoblin_Section_GetSectionName( p_binfo, p_addr->w_secid ); }
                else
index 3005abb..1f9beca 100644 (file)
@@ -44,34 +44,29 @@ Comment:
 LIBGOBLIN_ANALYZE_EXTERN
 int
        LibGoblin_AnalyzeBinary(
-               LibGoblin_BinaryInfo    *p_binfo,
-               int             i_analyzefid )
+               LibGoblin_BinaryInfo    *p_binfo )
 {
        int             i_result        = 0x00;
        LibGoblin_BinaryFile    *p_bfile;
 
        assert( NULL != p_binfo );
 
-       p_bfile = &(p_binfo->t_binfile[ i_analyzefid ]);
+       p_bfile = p_binfo->p_binfile;
+       assert( NULL != p_bfile );
        
        /* Check binaryfile is ELF file */
        if( 0x00 == (DRD64_LIBFILETYPE_SUB_ELF & p_bfile->t_ftype.w_subtype) )  {
                return 0x01;
        }
 
-       if((LIBGOBLIN_BINFO_FILE_CORE == i_analyzefid) &&
-                               (DRD64_LIBFILETYPE_SUB_ELF_CORE != p_bfile->t_ftype.w_subtype)) {
-               return 0x02;
-       }
-
        /* Analyze ELF & Debug-Info. ---*/
        //i_result = LibGoblin_AnalyzeElf( p_binfo, i_analyzefid );
-       i_result = LibGoblin_Elf_ReadELF_Phase1( p_binfo, i_analyzefid );
+       i_result = LibGoblin_Elf_ReadELF_Phase1( p_binfo );
        if( 0x00 != i_result )  {
                return 0x03;
        }
 
-       i_result = LibGoblin_Elf_ReadELF_Phase2( p_binfo, i_analyzefid );
+       i_result = LibGoblin_Elf_ReadELF_Phase2( p_binfo );
 
        return i_result;
 }
index 76e758a..65f126a 100644 (file)
@@ -47,7 +47,7 @@ Comment:
 
 LIBGOBLIN_ANALYZE_EXTERN
        int LibGoblin_AnalyzeBinary(
-                       LibGoblin_BinaryInfo *p_bin, int i_analyzefid );
+                       LibGoblin_BinaryInfo *p_bin );
 
 
 
diff --git a/libgoblin/drd64_libgoblin_binaryfile.c b/libgoblin/drd64_libgoblin_binaryfile.c
new file mode 100644 (file)
index 0000000..9edbb5e
--- /dev/null
@@ -0,0 +1,217 @@
+/*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_BINARYFILE
+#include"drd64_libgoblin.h"
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+LIBGOBLIN_BINARYFILE_EXTERN
+LibGoblin_BinaryFile   *
+       BinaryFile_GetBinaryFile(
+                       int             i_bfid )
+{
+       if(( gi_max_binary_file <= i_bfid ) || ( 0 > i_bfid ))
+               { return NULL; }
+       
+       if( -0x01 == BINFILE( i_bfid )->i_id )
+               { return NULL; }
+
+       return BINFILE( i_bfid );
+}
+
+
+/*----------------------------------------------------------------------
+OK
+----------------------------------------------------------------------*/
+void
+       BinaryFile_ClearBinaryFile(
+                       LibGoblin_BinaryFile    *p_binfile )
+{
+       assert( NULL != p_binfile );
+
+       memset( p_binfile, 0x00, sizeof( LibGoblin_BinaryFile ) );
+
+       p_binfile->i_id = -0x01;
+
+       return;
+}
+
+
+/*----------------------------------------------------------------------
+OK
+----------------------------------------------------------------------*/
+LIBGOBLIN_BINARYFILE_EXTERN
+LibGoblin_BinaryFile   *
+       BinaryFile_AllocBinaryFile(
+                       void )
+{
+       int                                     i_cnt;
+       int                                     i_id_now        = -0x01;
+       LibGoblin_BinaryFile    *p_binfile      = NULL;
+       LibGoblin_BinaryFile    *p_bfilebase;
+
+       if( gi_now_binary_file < gi_max_binary_file )   {
+               // Search Non-Used & Alloced BinaryFile struct.
+               for( i_cnt = 0; i_cnt < gi_max_binary_file; i_cnt++ )   {
+                       if( -0x01 == BINFILE( i_cnt )->i_id )   {
+                               p_binfile       = BINFILE( i_cnt );
+                               i_id_now        = i_cnt;
+                               goto    goto_BinaryFile_AllocBinaryFile_dataset;
+                       }
+               }
+
+               // Bug -- Not Exist Non-used BinaryFile struct.
+               goto    goto_BinaryFile_AllocBinaryFile_post;
+       }
+
+       if( gi_now_binary_file == gi_alloc_binary_file )        {
+               p_bfilebase     = (LibGoblin_BinaryFile *)realloc( gp_binary_file,
+                                                               sizeof( LibGoblin_BinaryFile ) * 
+                                                               ( gi_alloc_binary_file + LIBGOBLIN_BINARYFILE_UNITS ) );
+               if( NULL == p_bfilebase )       {
+                       goto    goto_BinaryFile_AllocBinaryFile_post;
+               }
+
+               gp_binary_file                  = p_bfilebase;
+               gi_alloc_binary_file    += LIBGOBLIN_BINARYFILE_UNITS;
+       }
+
+       i_id_now        = gi_now_binary_file;
+
+goto_BinaryFile_AllocBinaryFile_dataset:
+       if( i_id_now == gi_max_binary_file )    { gi_max_binary_file++; }
+       p_binfile               = BINFILE( i_id_now );
+       p_binfile->i_id = i_id_now;
+       p_binfile->i_refcount   = 1;
+       gi_now_binary_file++;
+
+goto_BinaryFile_AllocBinaryFile_post:
+       return p_binfile;
+}
+
+
+
+/*----------------------------------------------------------------------
+OK
+----------------------------------------------------------------------*/
+LIBGOBLIN_BINARYFILE_EXTERN
+int
+       BinaryFile_FreeBinaryFile(
+                       LibGoblin_BinaryFile    *p_binfile )
+{
+       int             i_id;
+       
+       assert( NULL != p_binfile );
+
+       if( -0x01 == p_binfile->i_id )  { return 0x00; }
+
+       i_id    = p_binfile->i_id;
+       BinaryFile_ClearBinaryFile( p_binfile );
+
+       if( gi_max_binary_file == (i_id + 1) )
+               { gi_max_binary_file--; }
+       
+       gi_now_binary_file--;
+       if( 0 == gi_now_binary_file )   { gi_max_binary_file = 0; }
+
+       return 0x00;
+}
+
+
+/*----------------------------------------------------------------------
+OK
+----------------------------------------------------------------------*/
+LIBGOBLIN_BINARYFILE_EXTERN
+int
+       BinaryFile_Init(
+                       void )
+{
+       int             i_cnt;
+       LibGoblin_BinaryFile    *p_binfile;
+
+       if( 0 != gi_max_binary_file )   {
+               return -0x01;
+       }
+
+       gp_binary_file  = (LibGoblin_BinaryFile *)malloc(
+                                               sizeof( LibGoblin_BinaryFile ) * LIBGOBLIN_BINARYFILE_UNITS );
+       if( NULL == gp_binary_file )    {
+               return -0x02;
+       }
+
+       for( i_cnt = 0; i_cnt < LIBGOBLIN_BINARYFILE_UNITS; i_cnt++ )           {
+               p_binfile       = BINFILE( i_cnt );
+               BinaryFile_ClearBinaryFile( p_binfile );
+       }
+
+       gi_alloc_binary_file    = LIBGOBLIN_BINARYFILE_UNITS;
+       gi_max_binary_file              = 0;
+       gi_now_binary_file              = 0;
+       
+       return 0x00;
+}
+
+
+/*----------------------------------------------------------------------
+OK
+----------------------------------------------------------------------*/
+LIBGOBLIN_BINARYFILE_EXTERN
+int
+       BinaryFile_Term(
+                       void )
+{
+       LibGoblin_BinaryFile    *p_binfile;
+
+       if( 0 < gi_now_binary_file )    {
+               for( ; gi_max_binary_file > 0; gi_max_binary_file-- )   {
+                       p_binfile       = BINFILE( gi_max_binary_file - 1 );
+                       BinaryFile_FreeBinaryFile( p_binfile );
+               }
+       }
+
+       free( gp_binary_file );
+       
+       gp_binary_file                  = NULL;
+       gi_alloc_binary_file    = 0;
+       gi_max_binary_file              = 0;
+       gi_now_binary_file              = 0;
+
+       return 0x00;
+}
+
+
+/* EOF of drd64_.c ----------------------------------- */
similarity index 59%
rename from libgoblin/drd64_libgoblin_libraryinfo.h
rename to libgoblin/drd64_libgoblin_binaryfile.h
index 7ec07fa..a27c757 100644 (file)
@@ -34,53 +34,53 @@ Function: Header
 Comment: 
 ----------------------------------------------------------------------*/
 
-#ifndef DRD64_HEADER_LIBGOBLIN_LIBRARYINFO
-#define DRD64_HEADER_LIBGOBLIN_LIBRARYINFO
+#ifndef DRD64_HEADER_LIBGOBLIN_BINARYFILE
+#define DRD64_HEADER_LIBGOBLIN_BINARYFILE
 
-#ifdef DRD64_SRC_LIBGOBLIN_LIBRARYINFO
-       #define LIBGOBLIN_LIBRARYINFO_EXTERN
+#ifdef DRD64_SRC_LIBGOBLIN_BINARYFILE
+       #define LIBGOBLIN_BINARYFILE_EXTERN
 #else
-       #define LIBGOBLIN_LIBRARYINFO_EXTERN    extern
+       #define LIBGOBLIN_BINARYFILE_EXTERN     extern
 #endif
 
-#if defined DRD64_SRC_LIBGOBLIN_LIBRARYINFO
-       #define LIBGOBLIN_LIBRARYINFO_INTERNALFUNC
-#elif defined DRD64_SRC_TEST_LIBGOBLIN_LIBRARYINFO
-       #define LIBGOBLIN_LIBRARYINFO_INTERNALFUNC
+#if defined DRD64_SRC_LIBGOBLIN_BINARYFILE
+       #define LIBGOBLIN_BINARYFILE_INTERNALFUNC
+#elif defined DRD64_SRC_TEST_LIBGOBLIN_BINARYFILE
+       #define LIBGOBLIN_BINARYFILE_INTERNALFUNC
 #endif
 
-#define LIBGOBLIN_LIBRARYINFO_UNITS            32
-#define LIBGOBLIN_LIBRARYINFO_MAX_BINFO        128
+#define LIBGOBLIN_BINARYFILE_UNITS             32
+#define LIBGOBLIN_BINARYFILE_MAX_BINFO 128
 
-#ifdef DRD64_SRC_LIBGOBLIN_LIBRARYINFO
-LibGoblin_LibraryInfo  *gp_library_info                = NULL;
-int                                            gi_alloc_library_info   = 0;
-int                                            gi_max_library_info             = 0;
-int                                            gi_now_library_info             = 0;
+#ifdef DRD64_SRC_LIBGOBLIN_BINARYFILE
+LibGoblin_BinaryFile   *gp_binary_file         = NULL;
+int                                            gi_alloc_binary_file    = 0;
+int                                            gi_max_binary_file              = 0;
+int                                            gi_now_binary_file              = 0;
 #endif
 
-#define        LIBINFO(n)      ((LibGoblin_LibraryInfo *)(gp_library_info + (n)))
+#define        BINFILE(n)      ((LibGoblin_BinaryFile *)(gp_binary_file + (n)))
 
 
-LIBGOBLIN_LIBRARYINFO_EXTERN
-       LibGoblin_LibraryInfo *LibraryInfo_GetLibraryInfo( int i_libid );
+LIBGOBLIN_BINARYFILE_EXTERN
+       LibGoblin_BinaryFile *BinaryFile_GetBinaryFile( int i_libid );
 /*
-LIBGOBLIN_LIBRARYINFO_EXTERN
-       LibGoblin_BinaryInfo *LibGoblin_LibraryInfo_AddBinaryInfo(
+LIBGOBLIN_BINARYFILE_EXTERN
+       LibGoblin_BinaryInfo *LibGoblin_BinaryFile_AddBinaryInfo(
                        LibGoblin_ProgramInfo *p_pginfo, const char *pstr_binname, int i_req_bid );
 */
-LIBGOBLIN_LIBRARYINFO_EXTERN
-       LibGoblin_LibraryInfo *LibraryInfo_AllocLibraryInfo( void );
-LIBGOBLIN_LIBRARYINFO_EXTERN
-       int LibraryInfo_FreeLibraryInfo( LibGoblin_LibraryInfo *p_libinfo );
-LIBGOBLIN_LIBRARYINFO_EXTERN
-       int LibraryInfo_Init( void );
-LIBGOBLIN_LIBRARYINFO_EXTERN
-       int LibraryInfo_Term( void );
-
-
-#ifdef LIBGOBLIN_LIBRARYINFO_INTERNALFUNC
-void LibraryInfo_ClearLibraryInfo( LibGoblin_LibraryInfo *p_libinfo );
+LIBGOBLIN_BINARYFILE_EXTERN
+       LibGoblin_BinaryFile *BinaryFile_AllocBinaryFile( void );
+LIBGOBLIN_BINARYFILE_EXTERN
+       int BinaryFile_FreeBinaryFile( LibGoblin_BinaryFile *p_libinfo );
+LIBGOBLIN_BINARYFILE_EXTERN
+       int BinaryFile_Init( void );
+LIBGOBLIN_BINARYFILE_EXTERN
+       int BinaryFile_Term( void );
+
+
+#ifdef LIBGOBLIN_BINARYFILE_INTERNALFUNC
+void BinaryFile_ClearBinaryFile( LibGoblin_BinaryFile *p_libinfo );
 
 #endif
 
index 3611955..6ac3cdc 100644 (file)
@@ -89,7 +89,7 @@ const char *
 
        p_binfo = LibGoblin_BinInfo_GetBinInfo( i_bid );
        if( NULL == p_binfo )   {
-               return -0x01;
+               return NULL;
        }
 
        pcstr_result    = LibGoblin_BinInfo_GetRPath( p_binfo, pstr_rpath );
@@ -104,15 +104,15 @@ void
        LibGoblin_BinInfo_ClearBinInfo(
                        LibGoblin_BinaryInfo    *p_binfo )
 {
-       int             i_cnt;
-       
        assert( NULL != p_binfo );
 
        memset( p_binfo, 0x00, sizeof( LibGoblin_BinaryInfo ) );
 
+       //XXX
        p_binfo->i_id   = -0x01;
-       for( i_cnt = 0; i_cnt < LIBGOBLIN_BINFO_MAXFILES; i_cnt++ )     {
-               p_binfo->t_binfile[i_cnt].i_fd  = -0x01;
+
+       if( NULL != p_binfo->p_binfile )        {
+               p_binfo->p_binfile->i_fd        = -0x01;
        }
 
        return;
@@ -212,8 +212,8 @@ int
                return -0x02;
        }
 
-       p_bfile = &(p_binfo->t_binfile[LIBGOBLIN_BINFO_FILE_EXEC]);
-       if( '\0' != p_bfile->str_filepath[0] )  {
+       p_bfile = p_binfo->p_binfile;
+       if( '\0' != p_bfile->str_path[0] )      {
                return -0x03;
        }
 
@@ -236,7 +236,7 @@ int
        }
        
        // Set Real-BinaryFile Path to LibGoblin_BinaryFile ---
-       strncpy( p_bfile->str_filepath, pstr_realpath, DRD64_MAX_PATH );
+       strncpy( p_bfile->str_path, pstr_realpath, DRD64_MAX_PATH );
 
        // Set ProgramFile Path to LibGoblin_BinaryInfo ---
        for( pstr_temp = str_temp + i_len;
@@ -257,12 +257,15 @@ int
 LIBGOBLIN_BINFO_EXTERN
 LibGoblin_BinaryInfo *
        LibGoblin_BinInfo_AllocBinInfo(
-                       LibGoblin_ProgramInfo   *p_pginfo )
+                       LibGoblin_ProgramInfo   *p_pginfo,
+                       const char *pstr_filename, 
+                       const char *pstr_path )
 {
        int             i_cnt;
        int             i_id_now;
        LibGoblin_BinaryInfo *p_binfo_base;
        LibGoblin_BinaryInfo *p_binfo_now;
+       LibGoblin_BinaryFile *p_binfile;
        
        p_binfo_now     = NULL;
        i_id_now        = -1;
@@ -309,9 +312,15 @@ LibGoblin_BinaryInfo *
 
        assert( NULL != p_binfo_now );
 
+       p_binfile       = BinaryFile_AllocBinaryFile();
+       if( NULL == p_binfile ) {
+               return NULL;
+       }
+
        LibGoblin_BinInfo_ClearBinInfo( p_binfo_now );
        p_binfo_now->i_id               = i_id_now;
        p_binfo_now->b_phase    = LIBGOBLIN_BINFO_PHASE_ALLOCED;
+       p_binfo_now->p_binfile  = p_binfile;
        p_binfo_now->pv_pginfo  = (void *)p_pginfo;
 
        return p_binfo_now;
@@ -323,14 +332,16 @@ LibGoblin_BinaryInfo *
 LIBGOBLIN_API_BINFO
 int
        LibGoblin_AllocBinInfo(
-                       int     i_pgid )
+                       int     i_pgid,
+                       const char *pstr_filename, 
+                       const char *pstr_path )
 {
        LibGoblin_ProgramInfo   *p_pginfo       = NULL;
        LibGoblin_BinaryInfo    *p_binfo        = NULL;
 
        p_pginfo        = LibGoblin_ProgInfo_GetProgInfo( i_pgid );
 
-       p_binfo = LibGoblin_BinInfo_AllocBinInfo( p_pginfo );
+       p_binfo = LibGoblin_BinInfo_AllocBinInfo( p_pginfo, pstr_filename, pstr_path );
        if( NULL == p_binfo )   {
                return -0x01;
        }
@@ -348,7 +359,6 @@ int
 {
        int             i_binfoid;      
        int             i_result;
-       int             i_cnt;
 
        if( NULL == p_binfo )   { return 0x01; }
 
@@ -357,13 +367,14 @@ int
                return -0x02;
        }
 
-       for( i_cnt = 0; i_cnt < LIBGOBLIN_BINFO_MAXFILES; i_cnt++ )     {
-               if( NULL == p_binfo->t_binfile[i_cnt].p_elf )   {
-                       free( p_binfo->t_binfile[i_cnt].p_elf );
-                       p_binfo->t_binfile[i_cnt].p_elf = NULL;
-               }
+       if( NULL == p_binfo->p_binfile->p_elf ) {
+               free( p_binfo->p_binfile->p_elf );
+               p_binfo->p_binfile->p_elf       = NULL;
        }
 
+       BinaryFile_FreeBinaryFile( p_binfo->p_binfile );
+       p_binfo->p_binfile      = NULL;
+
        i_binfoid       = p_binfo->i_id;
        LibGoblin_BinInfo_ClearBinInfo( p_binfo );
 
index 61bf4b8..256d4b2 100644 (file)
@@ -77,7 +77,8 @@ LIBGOBLIN_BINFO_EXTERN
        int LibGoblin_BinInfo_SetProgramPath(
                        LibGoblin_BinaryInfo *p_binfo, const char *pstr_progpath, const char *pstr_realpath );
 LIBGOBLIN_BINFO_EXTERN
-       LibGoblin_BinaryInfo *LibGoblin_BinInfo_AllocBinInfo( LibGoblin_ProgramInfo *p_pginfo );
+       LibGoblin_BinaryInfo *LibGoblin_BinInfo_AllocBinInfo(
+                       LibGoblin_ProgramInfo *p_pginfo, const char *pstr_filename, const char *pstr_path );
 LIBGOBLIN_BINFO_EXTERN
        int LibGoblin_BinInfo_FreeBinInfo( LibGoblin_BinaryInfo *p_binfo );
 LIBGOBLIN_BINFO_EXTERN
index 2fa8288..a66ded5 100644 (file)
@@ -41,13 +41,12 @@ Comment:
 LIBGOBLIN_CHECKBIN_EXTERN
 int
        LibGoblin_CheckBinary(
-                       LibGoblin_BinaryInfo    *p_binfo,
-                       int             i_analyzefid )
+                       LibGoblin_BinaryInfo    *p_binfo )
 {
        Byte    *pb_data;
 
        assert( NULL != p_binfo );
-       pb_data = p_binfo->t_binfile[i_analyzefid].pb_binary;
+       pb_data = p_binfo->p_binfile->pb_binary;
        assert( NULL != pb_data );
 
        /* Analyze ELF Ident Header from Bits ---*/
index b70b3c5..6b26cea 100644 (file)
@@ -48,7 +48,7 @@ Comment:
 
 LIBGOBLIN_CHECKBIN_EXTERN
        int LibGoblin_CheckBinary(
-                               LibGoblin_BinaryInfo *p_bin, int i_analyzefid );
+                               LibGoblin_BinaryInfo *p_binfo );
 
 
 #endif /* DRD64_HEADER_LIBGOBLIN_CHECKBIN */
index 4e31d71..84b950b 100644 (file)
@@ -51,7 +51,7 @@ int
 
        /* Get .debug_abbrev section Info */
        pb_data_abbrev  = LibGoblin_Elf_GetSection(
-                                               &qw_size_abbrev, p_bin, 0,
+                                               &qw_size_abbrev, p_bin,
                                                LIBGOBLIN_SECTION_ID_DEBUG_ABBREV );
        if( NULL == pb_data_abbrev )    { return 0x00; }
 
index 8c61941..e39ca7b 100644 (file)
@@ -137,7 +137,7 @@ int
 
        /* Get .debug_abbrev section Info */
        pb_data = LibGoblin_Elf_GetSection(
-                                       &qw_size_abbrev, p_bin, 0,
+                                       &qw_size_abbrev, p_bin,
                                        LIBGOBLIN_SECTION_ID_DEBUG_ABBREV );
        if( NULL == pb_data )   { return 0x01; }
 
@@ -222,7 +222,7 @@ int
 
        /* Get .debug_abbrev section Info */
        pb_data = LibGoblin_Elf_GetSection(
-                                       &qw_size_abbrev, p_bin, 0,
+                                       &qw_size_abbrev, p_bin,
                                        LIBGOBLIN_SECTION_ID_DEBUG_ABBREV );
        if( NULL == pb_data )   { return 0x01; }
 
index c24a080..18b7707 100644 (file)
@@ -493,7 +493,7 @@ int
 
        /* Get .debug_abbrev section Info */
        pb_data = LibGoblin_Elf_GetSection(
-                                       &qw_size_info, p_bin, 0,
+                                       &qw_size_info, p_bin,
                                        LIBGOBLIN_SECTION_ID_DEBUG_INFO );
        if( NULL == pb_data )   { return 0x01; }
 
index c23964c..cca5256 100644 (file)
@@ -654,7 +654,7 @@ int
 
        /* Get .debug_abbrev section Info */
        pb_data = LibGoblin_Elf_GetSection(
-                                       &qw_size, p_bin, 0,
+                                       &qw_size, p_bin,
                                        LIBGOBLIN_SECTION_ID_DEBUG_LINE );
        if( NULL == pb_data )   { return 0x01; }
 
index f845ddb..c188f5a 100644 (file)
@@ -65,7 +65,7 @@ Byte *
        LibGoblin_Elf_GetSection(
                QWord   *qw_secsize,
                LibGoblin_BinaryInfo    *p_binfo,
-               int             i_analyzefid,
+               //int           i_analyzefid,
                Byte    b_secid )
 {
        Byte                                    *pb_data;
@@ -73,7 +73,7 @@ Byte *
        LibGoblin_SectionInfo   *p_sectbl;
 
        assert( NULL != p_binfo );
-       p_bfile = &(p_binfo->t_binfile[ i_analyzefid ]);
+       p_bfile = p_binfo->p_binfile;
 
        pb_data         = NULL;
        *qw_secsize     = 0;
@@ -96,28 +96,27 @@ Byte *
 LIBGOBLIN_ELF_EXTERN
 int
        LibGoblin_Elf_ReadELF_Phase1(
-               LibGoblin_BinaryInfo    *p_binfo,
-               int             i_analyzefid )
+               LibGoblin_BinaryInfo    *p_binfo )
 {
        int             i_result        = 0x00;
-       Byte    *pb_data;
-       LibGoblin_BinaryFile            *p_bfile;
-       LibGoblin_SymbolWorkTable       t_symwork;
+       //Byte  *pb_data;
+       //LibGoblin_BinaryFile          *p_bfile;
+       //LibGoblin_SymbolWorkTable     t_symwork;
 
        assert( NULL != p_binfo );
-       p_bfile = &(p_binfo->t_binfile[ i_analyzefid ]);
-       pb_data = p_bfile->pb_binary;
-       assert( NULL != pb_data );
+       //p_bfile       = p_binfo->p_binfile;
+       //pb_data       = p_bfile->pb_binary;
+       //assert( NULL != pb_data );
 
        /* ReCheck ELF Header -------------------*/
-       i_result        = LibGoblin_CheckBinary( p_binfo, i_analyzefid );
+       i_result        = LibGoblin_CheckBinary( p_binfo );
        if( 0x00 != i_result )  {
                return i_result;
        }
 
        /* Analyze ELF Basical Struct & data -----*/
        if( LIBGOBLIN_BINFO_TYPE_ELF64 == p_binfo->b_type )             {
-               i_result        = LibGoblin_Elf64_SetSectionInfo( p_binfo, i_analyzefid );
+               i_result        = LibGoblin_Elf64_SetSectionInfo( p_binfo );
        }
        else if( LIBGOBLIN_BINFO_TYPE_ELF32 == p_binfo->b_type )        {
        }
@@ -126,7 +125,7 @@ int
                return -0x01;
        }
 
-       i_result        = LibGoblin_Elf_DynVer_ReadDynamicSection( p_binfo, i_analyzefid );
+       i_result        = LibGoblin_Elf_DynVer_ReadDynamicSection( p_binfo );
        if( 0x00 > i_result )   {
                return -0x02;
        }
@@ -140,8 +139,7 @@ int
 LIBGOBLIN_ELF_EXTERN
 int
        LibGoblin_Elf_ReadELF_Phase2(
-               LibGoblin_BinaryInfo    *p_binfo,
-               int             i_analyzefid )
+               LibGoblin_BinaryInfo    *p_binfo )
 {
        int             i_result;
        Byte    *pb_data;
@@ -149,13 +147,13 @@ int
        LibGoblin_SymbolWorkTable       t_symwork;
 
        assert( NULL != p_binfo );
-       p_bfile = &(p_binfo->t_binfile[ i_analyzefid ]);
+       p_bfile = p_binfo->p_binfile;
        pb_data = p_bfile->pb_binary;
        assert( NULL != pb_data );
 
        /* Create Symbol-Table ------------------*/
        i_result        = LibGoblin_Section_ReadSymtabSection_toWorkTable(
-                                                                       p_binfo, i_analyzefid, &t_symwork );
+                                                                       p_binfo, &t_symwork );
        if( 0x00 != i_result )  {
                return i_result;
        }
index e8337a3..581d0a3 100644 (file)
@@ -50,11 +50,11 @@ LIBGOBLIN_ELF_EXTERN
        int LibGoblin_IsElf( Byte *p_data );
 LIBGOBLIN_ELF_EXTERN
        Byte *LibGoblin_Elf_GetSection(
-                       QWord *qw_secsize, LibGoblin_BinaryInfo *p_bin, int i_analyzefid, Byte b_secid );
+                       QWord *qw_secsize, LibGoblin_BinaryInfo *p_bin, Byte b_secid );
 LIBGOBLIN_ELF_EXTERN
-       int LibGoblin_Elf_ReadELF_Phase1( LibGoblin_BinaryInfo *p_binfo, int i_analyzefid );
+       int LibGoblin_Elf_ReadELF_Phase1( LibGoblin_BinaryInfo *p_binfo );
 LIBGOBLIN_ELF_EXTERN
-       int LibGoblin_Elf_ReadELF_Phase2( LibGoblin_BinaryInfo *p_binfo, int i_analyzefid );
+       int LibGoblin_Elf_ReadELF_Phase2( LibGoblin_BinaryInfo *p_binfo );
 
 
 #endif /* DRD64_HEADER_LIBGOBLIN_BINFO */
index e2674d9..c96eaa0 100644 (file)
@@ -42,8 +42,7 @@ Comment:
 ----------------------------------------------------------------------*/
 int
        LibGoblin_Elf64_SetSectionInfo(
-               LibGoblin_BinaryInfo    *p_binfo,
-               int             i_analyzefid )
+               LibGoblin_BinaryInfo    *p_binfo )
 {
        int                     i_cnt;
        int                     i_globid;
@@ -60,7 +59,7 @@ int
        LibGoblin_SectionInfo   *p_globsec;
 
        assert( NULL != p_binfo );
-       p_bfile = &(p_binfo->t_binfile[i_analyzefid]);
+       p_bfile = p_binfo->p_binfile;
        pb_data = p_bfile->pb_binary;
        assert( NULL != pb_data );
 
@@ -124,7 +123,7 @@ int
                        p_globsec->pb_data              = p_sectbl->pb_data;
                        p_globsec->pstr_secname = p_sectbl->pstr_secname;
                        p_globsec->qw_size              = p_sectbl->qw_size;
-                       p_globsec->i_fid                = i_analyzefid;
+                       p_globsec->i_fid                = 0;    // XXX: i_analyzefid;
                }
 
        }
@@ -149,7 +148,7 @@ int
                p_globsec->pb_data              = p_sectbl->pb_data;
                p_globsec->pstr_secname = p_sectbl->pstr_secname;
                p_globsec->qw_size              = p_sectbl->qw_size;
-               p_globsec->i_fid                = i_analyzefid;
+               p_globsec->i_fid                = 0;    // XXX: i_analyzefid;
        }
        
        return 0x00;
@@ -162,17 +161,16 @@ Will Deprecating because split ELF reading code for ReadELF_Phase1/2()
 LIBGOBLIN_ELF64_EXTERN
 int
        LibGoblin_Elf64_Analyze(
-               LibGoblin_BinaryInfo    *p_binfo,
-               int                                             i_analyzefid )
+               LibGoblin_BinaryInfo    *p_binfo )
 {
        Byte    *pb_data;
 
        assert( NULL != p_binfo );
-       pb_data = p_binfo->t_binfile[i_analyzefid].pb_binary;
+       pb_data = p_binfo->p_binfile->pb_binary;
        assert( NULL != pb_data );
 
        /* Read & Analyze Section Header */
-       LibGoblin_Elf64_SetSectionInfo( p_binfo, i_analyzefid );
+       LibGoblin_Elf64_SetSectionInfo( p_binfo );
        
        return 0x00;
 }
index 45d5dfa..fe88ce2 100644 (file)
@@ -47,7 +47,7 @@ Comment:
 
 
 LIBGOBLIN_ELF64_EXTERN
-       int LibGoblin_Elf64_Analyze( LibGoblin_BinaryInfo *p_bin, int i_analyzefid );
+       int LibGoblin_Elf64_Analyze( LibGoblin_BinaryInfo *p_binfo );
 
 
 
index 4b4d858..134084a 100644 (file)
@@ -43,8 +43,7 @@ Comment:
 LIBGOBLIN_ELF_DYNVER_EXTERN
 int
        LibGoblin_Elf_DynVer_ReadDynamicSection(
-               LibGoblin_BinaryInfo    *p_binfo,
-               int             i_analyzefid )
+               LibGoblin_BinaryInfo    *p_binfo )
 {
        Byte                                    *pb_data;
        Byte                                    *pb_dynstr;
@@ -61,18 +60,18 @@ int
        LibGoblin_ProgramInfo   *p_pginfo;
 
        assert( NULL != p_binfo );
-       p_bfile = &(p_binfo->t_binfile[i_analyzefid]);
+       p_bfile = p_binfo->p_binfile;
        p_pginfo        = (LibGoblin_ProgramInfo *)p_binfo->pv_pginfo;
 
        // Read & Check SectionInfo ---
        p_sec_dynamic   = LibGoblin_Section_GetSectionInfo_fid(
-                                               p_binfo, LIBGOBLIN_SECTION_ID_DYNAMIC, i_analyzefid );
+                                               p_binfo, LIBGOBLIN_SECTION_ID_DYNAMIC );
        if( NULL == p_sec_dynamic )             {
                return 0x01;
        }
 
        p_sec_dynstr    = LibGoblin_Section_GetSectionInfo_fid(
-                                               p_binfo, LIBGOBLIN_SECTION_ID_DYNSTR, i_analyzefid );
+                                               p_binfo, LIBGOBLIN_SECTION_ID_DYNSTR );
        if( NULL == p_sec_dynstr )              {
                return 0x02;
        }
@@ -102,7 +101,7 @@ int
 
                if( DT_NEEDED == qw_tag )       {
                        p_bintmp        = LibGoblin_ProgInfo_AddBinaryInfo(
-                                                               p_pginfo, ((char *)(pb_dynstr + qw_value)), p_binfo->i_id );
+                                                               p_pginfo, ((char *)(pb_dynstr + qw_value)), NULL, p_binfo->i_id );
                }
                else if( DT_RPATH == qw_tag )   {
                        LibGoblin_BinInfo_SetRPath( p_binfo, (const char *)(pb_dynstr + qw_value) );
index 7a381f8..8f91702 100644 (file)
@@ -47,7 +47,7 @@ Comment:
 
 LIBGOBLIN_ELF_DYNVER_EXTERN
        int LibGoblin_Elf_DynVer_ReadDynamicSection(
-                       LibGoblin_BinaryInfo *p_binfo, int i_analyzefid );
+                       LibGoblin_BinaryInfo *p_binfo );
 
 
 #endif /* DRD64_HEADER_LIBGOBLIN_BINFO */
diff --git a/libgoblin/drd64_libgoblin_libraryinfo.c b/libgoblin/drd64_libgoblin_libraryinfo.c
deleted file mode 100644 (file)
index 6213893..0000000
+++ /dev/null
@@ -1,269 +0,0 @@
-/*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_LIBRARYINFO
-#include"drd64_libgoblin.h"
-
-/*----------------------------------------------------------------------
-----------------------------------------------------------------------*/
-LIBGOBLIN_LIBRARYINFO_EXTERN
-LibGoblin_LibraryInfo  *
-       LibraryInfo_GetLibraryInfo(
-                       int             i_libid )
-{
-       if(( gi_max_library_info <= i_libid ) || ( 0 > i_libid ))
-               { return NULL; }
-       
-       if( -0x01 == LIBINFO( i_libid )->i_id )
-               { return NULL; }
-
-       return LIBINFO( i_libid );
-}
-
-
-/*----------------------------------------------------------------------
-XXX
-----------------------------------------------------------------------*/
-/*
-LIBGOBLIN_LIBRARYINFO_EXTERN
-LibGoblin_BinaryInfo *
-       LibGoblin_LibraryInfo_AddBinaryInfo(
-                       LibGoblin_LibraryInfo   *p_pginfo,
-                       const char      *pstr_binname,
-                       int                     i_req_bid )
-{
-       int             i_binfoid;
-       int             i_result;
-       int             i_cnt;
-       LibGoblin_BinaryInfo    *p_binfo        = NULL;
-
-       assert( NULL != p_pginfo );
-
-       i_binfoid       = p_pginfo->i_num_binfo;
-       if( LIBGOBLIN_LIBRARYINFO_MAX_BINFO <= i_binfoid )              {
-               return NULL;
-       }
-
-       // Check Alloced Same-Library ---
-       for( i_cnt = 0; i_cnt < p_pginfo->i_num_binfo; i_cnt++ )        {
-               if( !strncmp( (p_pginfo->p_binfo[ i_cnt ])->str_filename,
-                                       pstr_binname, DRD64_MAX_PATH ) )        {
-                       return p_pginfo->p_binfo[ i_cnt ];
-               }
-       }
-
-       // Alloc BinaryInfo ---
-       p_binfo = LibGoblin_BinInfo_AllocBinInfo( p_pginfo );
-       if( NULL == p_binfo )   {
-               return NULL;
-       }
-
-       p_pginfo->p_binfo[ i_binfoid ]  = p_binfo;
-       p_pginfo->i_num_binfo++;
-
-       i_result        = LibGoblin_BinInfo_SetProgramName( p_binfo, pstr_binname, i_req_bid );
-       if( 0x00 != i_result )  {
-               LibGoblin_BinInfo_FreeBinInfo( p_binfo );
-               // XXX - error check!
-
-               return NULL;
-       }
-
-       return p_binfo;
-}
-*/
-
-
-/*----------------------------------------------------------------------
-OK
-----------------------------------------------------------------------*/
-void
-       LibraryInfo_ClearLibraryInfo(
-                       LibGoblin_LibraryInfo   *p_libinfo )
-{
-       assert( NULL != p_libinfo );
-
-       memset( p_libinfo, 0x00, sizeof( LibGoblin_LibraryInfo ) );
-
-       p_libinfo->i_id = -0x01;
-
-       return;
-}
-
-
-/*----------------------------------------------------------------------
-OK
-----------------------------------------------------------------------*/
-LIBGOBLIN_LIBRARYINFO_EXTERN
-LibGoblin_LibraryInfo  *
-       LibraryInfo_AllocLibraryInfo(
-                       void )
-{
-       int                                     i_cnt;
-       int                                     i_id_now        = -0x01;
-       LibGoblin_LibraryInfo   *p_libinfo      = NULL;
-       LibGoblin_LibraryInfo   *p_libbase;
-
-       if( gi_now_library_info < gi_max_library_info ) {
-               // Search Non-Used & Alloced LibraryInfo struct.
-               for( i_cnt = 0; i_cnt < gi_max_library_info; i_cnt++ )  {
-                       if( -0x01 == LIBINFO( i_cnt )->i_id )   {
-                               p_libinfo       = LIBINFO( i_cnt );
-                               i_id_now        = i_cnt;
-                               goto    goto_LibraryInfo_AllocLibraryInfo_dataset;
-                       }
-               }
-
-               // Bug -- Not Exist Non-used LibraryInfo struct.
-               goto    goto_LibraryInfo_AllocLibraryInfo_post;
-       }
-
-       if( gi_now_library_info == gi_alloc_library_info )      {
-               p_libbase       = (LibGoblin_LibraryInfo *)realloc( gp_library_info,
-                                                               sizeof( LibGoblin_LibraryInfo ) * 
-                                                               ( gi_alloc_library_info + LIBGOBLIN_LIBRARYINFO_UNITS ) );
-               if( NULL == p_libbase ) {
-                       goto    goto_LibraryInfo_AllocLibraryInfo_post;
-               }
-
-               gp_library_info = p_libbase;
-               gi_alloc_library_info   += LIBGOBLIN_LIBRARYINFO_UNITS;
-       }
-
-       i_id_now        = gi_now_library_info;
-
-goto_LibraryInfo_AllocLibraryInfo_dataset:
-       if( i_id_now == gi_max_library_info )   { gi_max_library_info++; }
-       p_libinfo               = LIBINFO( i_id_now );
-       p_libinfo->i_id = i_id_now;
-       gi_now_library_info++;
-
-goto_LibraryInfo_AllocLibraryInfo_post:
-       return p_libinfo;
-}
-
-
-
-/*----------------------------------------------------------------------
-OK
-----------------------------------------------------------------------*/
-LIBGOBLIN_LIBRARYINFO_EXTERN
-int
-       LibraryInfo_FreeLibraryInfo(
-                       LibGoblin_LibraryInfo   *p_libinfo )
-{
-       int             i_id;
-       
-       assert( NULL != p_libinfo );
-
-       if( -0x01 == p_libinfo->i_id )  { return 0x00; }
-
-       i_id    = p_libinfo->i_id;
-       LibraryInfo_ClearLibraryInfo( p_libinfo );
-
-       if( gi_max_library_info == (i_id + 1) )
-               { gi_max_library_info--; }
-       
-       gi_now_library_info--;
-       if( 0 == gi_now_library_info )  { gi_max_library_info = 0; }
-
-       return 0x00;
-}
-
-
-/*----------------------------------------------------------------------
-OK
-----------------------------------------------------------------------*/
-LIBGOBLIN_LIBRARYINFO_EXTERN
-int
-       LibraryInfo_Init(
-                       void )
-{
-       int             i_cnt;
-       LibGoblin_LibraryInfo   *p_libinfo;
-
-       if( 0 != gi_max_library_info )  {
-               return -0x01;
-       }
-
-       gp_library_info = (LibGoblin_LibraryInfo *)malloc(
-                                               sizeof( LibGoblin_LibraryInfo ) * LIBGOBLIN_LIBRARYINFO_UNITS );
-       if( NULL == gp_library_info )   {
-               return -0x02;
-       }
-
-       for( i_cnt = 0; i_cnt < LIBGOBLIN_LIBRARYINFO_UNITS; i_cnt++ )          {
-               p_libinfo       = LIBINFO( i_cnt );
-               LibraryInfo_ClearLibraryInfo( p_libinfo );
-       }
-
-       gi_alloc_library_info   = LIBGOBLIN_LIBRARYINFO_UNITS;
-       gi_max_library_info             = 0;
-       gi_now_library_info             = 0;
-       
-       return 0x00;
-}
-
-
-/*----------------------------------------------------------------------
-OK
-----------------------------------------------------------------------*/
-LIBGOBLIN_LIBRARYINFO_EXTERN
-int
-       LibraryInfo_Term(
-                       void )
-{
-       LibGoblin_LibraryInfo   *p_libinfo;
-
-       if( 0 < gi_now_library_info )   {
-               for( ; gi_max_library_info > 0; gi_max_library_info-- ) {
-                       p_libinfo       = LIBINFO( gi_max_library_info - 1 );
-                       LibraryInfo_FreeLibraryInfo( p_libinfo );
-               }
-       }
-
-       free( gp_library_info );
-       
-       gp_library_info                 = NULL;
-       gi_alloc_library_info   = 0;
-       gi_max_library_info             = 0;
-       gi_now_library_info             = 0;
-
-       return 0x00;
-}
-
-
-/* EOF of drd64_.c ----------------------------------- */
index fc5baf1..607f4d5 100644 (file)
@@ -70,18 +70,18 @@ int
                        return -0x02;
                }
 
-               i_result        = LibGoblin_ReadBinary_File( p_binfo, NULL, LIBGOBLIN_BINFO_FILE_EXEC );
+               i_result        = LibGoblin_ReadBinary_File( p_binfo, NULL );
                if( 0x00 != i_result )  {
                        return -0x03;
                }
 
-               p_bfile = NULL;
-               p_bfile = &(p_binfo->t_binfile[LIBGOBLIN_BINFO_FILE_EXEC]);
+               p_bfile = p_binfo->p_binfile;
                if( 0x00 == (DRD64_LIBFILETYPE_SUB_ELF & p_bfile->t_ftype.w_subtype) )  {
                        return -0x04;
                }
        
-               i_result        = LibGoblin_Elf_ReadELF_Phase1( p_binfo, LIBGOBLIN_BINFO_FILE_EXEC );
+               //i_result      = LibGoblin_Elf_ReadELF_Phase1( p_binfo, LIBGOBLIN_BINFO_FILE_EXEC );
+               i_result        = LibGoblin_Elf_ReadELF_Phase1( p_binfo );
                if( 0x00 != i_result )  {
                        return -0x05;
                }
@@ -119,7 +119,6 @@ int
 {
        int             i_result;
        LibGoblin_ProgramInfo   *p_pginfo;
-       LibGoblin_BinaryInfo    *p_binfo;
 
        p_pginfo        = LibGoblin_ProgInfo_GetProgInfo( i_pgid );
        if( NULL == p_pginfo )  {
@@ -147,7 +146,9 @@ int
                        LibGoblin_LibraryFileList       *p_libflist )
 {
        int             i_result;
+       char    *pstr_temp;
        char    *pstr_progfile;
+       char    *pstr_path;
        LibGoblin_ProgramInfo   *p_pginfo;
        LibGoblin_BinaryInfo    *p_binfo;
 
@@ -165,9 +166,16 @@ int
        p_libflist->i_start     = 0;
        p_libflist->i_end       = 1;
 
-       pstr_progfile   = basename( pstr_progpath );
+       // XXX
+       pstr_temp       = alloca( DRD64_MAX_PATH + 1);
+       strncpy( pstr_temp, pstr_progpath, DRD64_MAX_PATH );
+       pstr_progfile   = basename( pstr_temp );
+
+       pstr_temp       = alloca( DRD64_MAX_PATH + 1);
+       strncpy( pstr_temp, pstr_progpath, DRD64_MAX_PATH );
+       pstr_path       = basename( pstr_temp );
 
-       p_binfo = LibGoblin_ProgInfo_AddBinaryInfo( p_pginfo, pstr_progfile, 0 );
+       p_binfo = LibGoblin_ProgInfo_AddBinaryInfo( p_pginfo, pstr_progfile, pstr_path, 0 );
        if( NULL == p_binfo )   {
                return -0x01;
        }
index aaeeae1..3ff943d 100644 (file)
@@ -97,7 +97,8 @@ LIBGOBLIN_PROGINFO_EXTERN
 LibGoblin_BinaryInfo *
        LibGoblin_ProgInfo_AddBinaryInfo(
                        LibGoblin_ProgramInfo   *p_pginfo,
-                       const char      *pstr_binname,
+                       const char      *pstr_binfilename,
+                       const char      *pstr_binpath,
                        int                     i_req_bid )
 {
        int             i_binfoid;
@@ -115,13 +116,13 @@ LibGoblin_BinaryInfo *
        // Check Alloced Same-Library ---
        for( i_cnt = 0; i_cnt < p_pginfo->i_num_binfo; i_cnt++ )        {
                if( !strncmp( (p_pginfo->p_binfo[ i_cnt ])->str_filename,
-                                       pstr_binname, DRD64_MAX_PATH ) )        {
+                                       pstr_binfilename, DRD64_MAX_PATH ) )    {
                        return p_pginfo->p_binfo[ i_cnt ];
                }
        }
 
        // Alloc BinaryInfo ---
-       p_binfo = LibGoblin_BinInfo_AllocBinInfo( p_pginfo );
+       p_binfo = LibGoblin_BinInfo_AllocBinInfo( p_pginfo, pstr_binfilename, pstr_binpath );
        if( NULL == p_binfo )   {
                return NULL;
        }
@@ -129,7 +130,7 @@ LibGoblin_BinaryInfo *
        p_pginfo->p_binfo[ i_binfoid ]  = p_binfo;
        p_pginfo->i_num_binfo++;
 
-       i_result        = LibGoblin_BinInfo_SetProgramName( p_binfo, pstr_binname, i_req_bid );
+       i_result        = LibGoblin_BinInfo_SetProgramName( p_binfo, pstr_binfilename, i_req_bid );
        if( 0x00 != i_result )  {
                LibGoblin_BinInfo_FreeBinInfo( p_binfo );
                // XXX - error check!
index 1ccfee5..fef969c 100644 (file)
@@ -68,7 +68,7 @@ LIBGOBLIN_PROGINFO_EXTERN
        int LibGoblin_ProgInfo_GetBinaryInfos( LibGoblin_ProgramInfo *p_pginfo );
 LIBGOBLIN_PROGINFO_EXTERN
        LibGoblin_BinaryInfo *LibGoblin_ProgInfo_AddBinaryInfo(
-                       LibGoblin_ProgramInfo *p_pginfo, const char *pstr_binname, int i_req_bid );
+                       LibGoblin_ProgramInfo *p_pginfo, const char *pstr_binfilename, const char *pstr_binpath, int i_req_bid );
 LIBGOBLIN_PROGINFO_EXTERN
        LibGoblin_ProgramInfo *LibGoblin_ProgInfo_AllocProgInfo( void );
 LIBGOBLIN_PROGINFO_EXTERN
index aad6f64..0a4e73c 100644 (file)
@@ -44,8 +44,7 @@ LIBGOBLIN_READBIN_EXTERN
 int
        LibGoblin_ReadBinary_File(
                        LibGoblin_BinaryInfo    *p_binfo,
-                       const char      *pstr_filepath,
-                       int                     i_filetype )
+                       const char      *pstr_filepath )
 {
        int             i_result        = 0x00;
        int             i_err;
@@ -56,13 +55,15 @@ int
        LibGoblin_BinaryFile    *p_bfile;
 
        assert( NULL != p_binfo );
+       p_bfile = p_binfo->p_binfile;
+       assert( NULL != p_bfile );
 
        if( NULL == pstr_filepath )             {
                if ( LIBGOBLIN_BINFO_PHASE_SETPROG != p_binfo->b_phase )        {
                        return -0x01;
                }
                
-               pstr_binfile    = p_binfo->t_binfile[i_filetype].str_filepath;
+               pstr_binfile    = p_bfile->str_path;
                if( '\0' == pstr_binfile )      {
                        return -0x02;
                }
@@ -92,7 +93,7 @@ int
 
        /* XXX : check i_filetype value */
 
-       p_bfile = &(p_binfo->t_binfile[ i_filetype ]);
+       //p_bfile       = &(p_binfo->t_binfile[ i_filetype ]);
 
        /* Memory Mapping from Binary-file */
        pb_head  = mmap( NULL, t_ftype.dw_filesize, PROT_READ, MAP_SHARED, i_fd, 0 );
@@ -109,7 +110,7 @@ int
        p_bfile->dw_flag        = LIBGOBLIN_BINFO_FILE_MMAP;
        p_binfo->b_phase        = LIBGOBLIN_BINFO_PHASE_BINREAD;
        if( NULL != pstr_filepath )
-               { strncpy( p_bfile->str_filepath, pstr_binfile, DRD64_MAX_PATH ); }
+               { strncpy( p_bfile->str_path, pstr_binfile, DRD64_MAX_PATH ); }
 
        //i_result      = LibGoblin_AnalyzeBinary( p_binfo, i_filetype );
         
@@ -126,8 +127,7 @@ int
        LibGoblin_ReadBinary_Memory(
                        LibGoblin_BinaryInfo    *p_binfo,
                        Byte    *pb_data,
-                       DWord   dw_size,
-                       int             i_filetype )
+                       DWord   dw_size )
 {
        int             i_result;
        LibGoblin_BinaryFile    *p_bfile;
@@ -147,7 +147,8 @@ int
                return -0x01;
        }
 
-       p_bfile = &(p_binfo->t_binfile[ i_filetype ]);
+       p_bfile = p_binfo->p_binfile;
+       assert( NULL != p_bfile );
 
        memcpy( (void *)&(p_bfile->t_ftype), (void *)&t_ftype, sizeof( LibFileType_FileType ));
        p_bfile->pb_binary      = pb_data;
@@ -178,7 +179,7 @@ int
        }
 
        for( i_cnt = 0; i_cnt < LIBGOBLIN_BINFO_MAXFILES; i_cnt++ )     {
-               p_bfile = &(p_binfo->t_binfile[ i_cnt ]);
+               p_bfile = p_binfo->p_binfile;
 
                if( -0x01 == p_bfile->i_fd )    { continue; }
 
index f5d05ce..38e9832 100644 (file)
@@ -47,10 +47,10 @@ Comment:
 
 LIBGOBLIN_READBIN_EXTERN
        int LibGoblin_ReadBinary_File(
-                               LibGoblin_BinaryInfo *p_binfo, const char *pstr_filepath, int i_filetype );
+                               LibGoblin_BinaryInfo *p_binfo, const char *pstr_filepath );
 LIBGOBLIN_READBIN_EXTERN
        int LibGoblin_ReadBinary_Memory(
-                               LibGoblin_BinaryInfo *p_binfo, Byte *pb_data, DWord dw_size, int i_filetype );
+                               LibGoblin_BinaryInfo *p_binfo, Byte *pb_data, DWord dw_size );
 LIBGOBLIN_READBIN_EXTERN
        int LibGoblin_ReadBinary_FreeBinary( LibGoblin_BinaryInfo *p_binfo );
 
index 9eef3a3..654ff1a 100644 (file)
@@ -80,14 +80,13 @@ LIBGOBLIN_SECTION_EXTERN
 LibGoblin_SectionInfo *
        LibGoblin_Section_GetSectionInfo_fid(
                        LibGoblin_BinaryInfo    *p_binfo,
-                       Byte    b_secid,
-                       int             i_analyzefid )
+                       Byte    b_secid )
 {
        LibGoblin_BinaryFile    *p_bfile;
        LibGoblin_SectionInfo   *p_secinfo;
 
        assert( NULL != p_binfo );
-       p_bfile = &(p_binfo->t_binfile[ i_analyzefid ]);
+       p_bfile = p_binfo->p_binfile;
 
        if( LIBGOBLIN_SECTION_ID_MAX <= b_secid )       { return NULL; }
 
@@ -103,7 +102,6 @@ LIBGOBLIN_SECTION_EXTERN
 Word
        LibGoblin_Section_GetSectionID_fromSectionNumber_inElf(
                        LibGoblin_BinaryInfo    *p_binfo,
-                       int             i_analyzefid, 
                        Word    w_secnumber )
 {
        Byte    b_secid;
@@ -118,7 +116,7 @@ Word
                return w_secnumber;
        }
 
-       p_bfile = &(p_binfo->t_binfile[i_analyzefid]);
+       p_bfile = p_binfo->p_binfile;
        
        for( b_secid = 0; b_secid < LIBGOBLIN_SECTION_ID_MAX; b_secid++ )       {
                p_secinfo       = &(p_bfile->t_section[ b_secid ]);
@@ -141,7 +139,6 @@ LIBGOBLIN_SECTION_EXTERN
 int
        LibGoblin_Section_ReadSymtabSection_toWorkTable(
                        LibGoblin_BinaryInfo    *p_binfo,
-                       int             i_analyzefid,
                        LibGoblin_SymbolWorkTable       *p_symwork )
 {
        Byte            *pb_symtab;
@@ -158,7 +155,7 @@ int
 
        // Check BinaryInfo & Get SymbolEntires
        p_secinfo       = LibGoblin_Section_GetSectionInfo_fid(
-                                               p_binfo, LIBGOBLIN_SECTION_ID_SYMTAB, i_analyzefid );
+                                               p_binfo, LIBGOBLIN_SECTION_ID_SYMTAB );
        if( NULL == p_secinfo ) {
                return -0x01;
        }
index bf18d46..d4a370d 100644 (file)
@@ -94,19 +94,19 @@ LIBGOBLIN_SECTION_EXTERN
        char *LibGoblin_Section_GetSectionName( LibGoblin_BinaryInfo *p_binfo, Byte b_secid );
 LIBGOBLIN_SECTION_EXTERN
        LibGoblin_SectionInfo *LibGoblin_Section_GetSectionInfo_fid(
-                       LibGoblin_BinaryInfo *p_binfo, Byte b_secid, int i_analyzefid );
+                       LibGoblin_BinaryInfo *p_binfo, Byte b_secid );
 LIBGOBLIN_SECTION_EXTERN
        LibGoblin_SectionInfo *LibGoblin_Section_GetSectionInfo(
                        LibGoblin_BinaryInfo *p_binfo, Byte b_secid );
 LIBGOBLIN_SECTION_EXTERN
        LibGoblin_SectionInfo *LibGoblin_Section_GetSectionInfo_fid(
-                       LibGoblin_BinaryInfo *p_binfo, Byte b_secid, int i_analyzefid );
+                       LibGoblin_BinaryInfo *p_binfo, Byte b_secid );
 LIBGOBLIN_SECTION_EXTERN
        Word LibGoblin_Section_GetSectionID_fromSectionNumber_inElf(
-                       LibGoblin_BinaryInfo *p_binfo, int i_analyzefid, Word w_secnumber );
+                       LibGoblin_BinaryInfo *p_binfo, Word w_secnumber );
 LIBGOBLIN_SECTION_EXTERN
        int LibGoblin_Section_ReadSymtabSection_toWorkTable(
-                       LibGoblin_BinaryInfo *p_binfo, int i_analyzefid,
+                       LibGoblin_BinaryInfo *p_binfo,
                        LibGoblin_SymbolWorkTable *p_symwork );
 
 
index fae13cf..945ee3b 100644 (file)
@@ -61,17 +61,6 @@ Comment:
 #define        LIBGOBLIN_BINFO_SECTION_DATA    0x01
 #define        LIBGOBLIN_BINFO_SECTION_BSS             0x02
 
-#define        LIBGOBLIN_BINFO_PHASE_INIT              0x00
-#define        LIBGOBLIN_BINFO_PHASE_ALLOCED   0x10
-#define        LIBGOBLIN_BINFO_PHASE_SETNAME   0x20
-#define        LIBGOBLIN_BINFO_PHASE_SETPROG   0x30
-#define        LIBGOBLIN_BINFO_PHASE_BINREAD   0x40
-#define        LIBGOBLIN_BINFO_PHASE_ANALYZED  0x50
-
-#define        LIBGOBLIN_BINFO_MAXFILES                3
-#define        LIBGOBLIN_BINFO_FILE_EXEC               0
-#define        LIBGOBLIN_BINFO_FILE_CORE               1
-#define        LIBGOBLIN_BINFO_FILE_DEBUG              2
 
 #define        LIBGOBLIN_BINFO_FILE_MMAP               (DWord)0x01
 #define        LIBGOBLIN_BINFO_FILE_EXTALLOC   (DWord)0x02
@@ -102,6 +91,7 @@ typedef      struct  {
 
 
 /*=====================================================================*/
+/*
 typedef struct  {
        int             i_id;
        char    str_libfilepath[DRD64_MAX_PATH];
@@ -109,14 +99,19 @@ typedef struct  {
        char    str_rpath[DRD64_MAX_PATH];
        void    *p_nextlib;
 } LibGoblin_LibraryInfo;
-
+*/
 
 /*=====================================================================*/
 typedef struct {
+       int                     i_id;
+       int                     i_refcount;
+
        /* Binary-File Info. */
        int                     i_fd;
        DWord           dw_flag;
-       char            str_filepath[DRD64_MAX_PATH];
+       char            str_filename[DRD64_MAX_PATH];
+       char            str_path[DRD64_MAX_PATH];
+       char            str_rpath[DRD64_MAX_PATH];              // .dyn Section rpath
        LibFileType_FileType    t_ftype;
 
        /* Binary-File Memory Image Access Info. */
@@ -131,6 +126,18 @@ typedef struct     {
 
 
 /*=====================================================================*/
+#define        LIBGOBLIN_BINFO_PHASE_INIT              0x00
+#define        LIBGOBLIN_BINFO_PHASE_ALLOCED   0x10
+#define        LIBGOBLIN_BINFO_PHASE_SETNAME   0x20
+#define        LIBGOBLIN_BINFO_PHASE_SETPROG   0x30
+#define        LIBGOBLIN_BINFO_PHASE_BINREAD   0x40
+#define        LIBGOBLIN_BINFO_PHASE_ANALYZED  0x50
+
+#define        LIBGOBLIN_BINFO_MAXFILES                3
+#define        LIBGOBLIN_BINFO_FILE_EXEC               0
+#define        LIBGOBLIN_BINFO_FILE_CORE               1
+#define        LIBGOBLIN_BINFO_FILE_DEBUG              2
+
 typedef struct {
        /* BinaryInfo Struct ID */
        int                     i_id;
@@ -152,10 +159,10 @@ typedef struct    {
        /* Exec. File Info. */
        char            str_filename[DRD64_MAX_PATH];
        char            str_path[DRD64_MAX_PATH];
-       char            str_rpath[DRD64_MAX_PATH];
+       char            str_rpath[DRD64_MAX_PATH];              // .dynamic Section - rpath (.so location path)
        int                     i_req_bid;
        
-       LibGoblin_BinaryFile    t_binfile[3];
+       LibGoblin_BinaryFile    *p_binfile;
 
        /* Binary-Format Depending Info. (ELF)*/
        //void          *p_format;
@@ -163,6 +170,7 @@ typedef struct      {
        LibGoblin_SectionInfo   t_section[LIBGOBLIN_SECTION_ID_MAX];
        
        void            *pv_pginfo;
+       void            *pv_lib_binfile_next;   // NEW
 
 }      LibGoblin_BinaryInfo;
 
@@ -174,10 +182,11 @@ typedef   struct  {
 
        int                                             i_num_binfo;
        LibGoblin_BinaryInfo    *p_binfo[LIBGOBLIN_PROGINFO_MAX_BINFO];
+       LibGoblin_BinaryInfo    *p_binfo_core;          // NEW
+       LibGoblin_BinaryInfo    *p_binfo_debug;         // NEW
 
        int                                             i_opened_bid;
 
-       LibGoblin_LibraryInfo           *p_libinfo;
 
        // Working Area
        LibGoblin_LibraryFileList       t_libflist;
index 1221cc7..63e35f1 100644 (file)
@@ -52,7 +52,7 @@ int
        Test_LibGoblin_System();
        Test_LibGoblin_BinInfo();
        Test_LibGoblin_ProgInfo();
-       Test_LibGoblin_LibraryInfo();
+       Test_LibGoblin_BinaryFile();
        Test_LibGoblin_ReadBinary();
        Test_LibGoblin_SymWork();
        Test_LibGoblin_LoadProg();
index 6a23cf4..ff1f6fc 100644 (file)
@@ -63,12 +63,12 @@ DRD64_TEST_LIBGOBLIN_BINFO_EXTERN int Test_LibGoblin_BinInfo( void );
 #endif
 DRD64_TEST_LIBGOBLIN_PROGINFO_EXTERN int Test_LibGoblin_ProgInfo( void );
 
-#ifdef DRD64_SRC_TEST_LIBGOBLIN_LIBRARYINFO
-       #define DRD64_TEST_LIBGOBLIN_LIBRARYINFO_EXTERN
+#ifdef DRD64_SRC_TEST_LIBGOBLIN_BINARYFILE
+       #define DRD64_TEST_LIBGOBLIN_BINARYFILE_EXTERN
 #else
-       #define DRD64_TEST_LIBGOBLIN_LIBRARYINFO_EXTERN         extern
+       #define DRD64_TEST_LIBGOBLIN_BINARYFILE_EXTERN          extern
 #endif
-DRD64_TEST_LIBGOBLIN_LIBRARYINFO_EXTERN int Test_LibGoblin_LibraryInfo( void );
+DRD64_TEST_LIBGOBLIN_BINARYFILE_EXTERN int Test_LibGoblin_BinaryFile( void );
 
 #ifdef DRD64_SRC_TEST_LIBGOBLIN_READBINARY
        #define DRD64_TEST_LIBGOBLIN_READBINARY_EXTERN
similarity index 60%
rename from libgoblin/test_libgoblin_libraryinfo.c
rename to libgoblin/test_libgoblin_binaryfile.c
index 9805333..f4eeb31 100644 (file)
@@ -34,28 +34,28 @@ Function:
 Comment: 
 ----------------------------------------------------------------------*/
 
-#define        DRD64_SRC_TEST_LIBGOBLIN_PROGINFO
+#define        DRD64_SRC_TEST_LIBGOBLIN_BINARYFILE
 #include"drd64_libgoblin.h"
 #include"test_libgoblin.h"
 
 
-/* LibraryInfo_AllocLibraryInfo() & FreeLibraryInfo() *****************/
+/* BinaryFile_AllocBinaryFile() & FreeBinaryFile() *****************/
 /*--------------------------------------------------------------------*/
-void Test_LibraryInfo_AllocFree_test00_001( void )
+void Test_BinaryFile_AllocFree_test00_001( void )
 {
        int             i_result;
-       LibGoblin_LibraryInfo   *p_libinfo;
+       LibGoblin_BinaryFile    *p_binfile;
 
-       i_result        = LibraryInfo_Init();
+       i_result        = BinaryFile_Init();
        CU_ASSERT( 0x00 == i_result );
 
-       p_libinfo       = LibraryInfo_AllocLibraryInfo();
-       CU_ASSERT( NULL != p_libinfo );
+       p_binfile       = BinaryFile_AllocBinaryFile();
+       CU_ASSERT( NULL != p_binfile );
 
-       i_result        = LibraryInfo_FreeLibraryInfo( p_libinfo );
+       i_result        = BinaryFile_FreeBinaryFile( p_binfile );
        CU_ASSERT( 0x00 == i_result );
 
-       i_result        = LibraryInfo_Term();
+       i_result        = BinaryFile_Term();
        CU_ASSERT( 0x00 == i_result );
 
        return;
@@ -63,67 +63,67 @@ void Test_LibraryInfo_AllocFree_test00_001( void )
 
 
 /*--------------------------------------------------------------------*/
-void Test_LibraryInfo_AllocFree_test00_002( void )
+void Test_BinaryFile_AllocFree_test00_002( void )
 {
        int             i_cnt;
        int             i_result;
-       LibGoblin_LibraryInfo   *p_libinfo;
+       LibGoblin_BinaryFile    *p_binfile;
 
-       i_result        = LibraryInfo_Init();
+       i_result        = BinaryFile_Init();
        CU_ASSERT( 0x00 == i_result );
 
 
        for( i_cnt = 0; i_cnt < 128; i_cnt++ )  {
-               p_libinfo       = LibraryInfo_AllocLibraryInfo();
-               CU_ASSERT( NULL != p_libinfo );
-               CU_ASSERT( i_cnt == p_libinfo->i_id );
+               p_binfile       = BinaryFile_AllocBinaryFile();
+               CU_ASSERT( NULL != p_binfile );
+               CU_ASSERT( i_cnt == p_binfile->i_id );
        }
 
        for( i_cnt = 0; i_cnt < 128; i_cnt += 8 )       {
-               p_libinfo       = NULL;
-               p_libinfo       = LibraryInfo_GetLibraryInfo( i_cnt );
-               CU_ASSERT( NULL != p_libinfo );
+               p_binfile       = NULL;
+               p_binfile       = BinaryFile_GetBinaryFile( i_cnt );
+               CU_ASSERT( NULL != p_binfile );
 
-               i_result        = LibraryInfo_FreeLibraryInfo( p_libinfo );
+               i_result        = BinaryFile_FreeBinaryFile( p_binfile );
                CU_ASSERT( 0x00 == i_result );
        }
 
        for( i_cnt = 0; i_cnt < 16; i_cnt++ )   {
-               p_libinfo       = NULL;
-               p_libinfo       = LibraryInfo_AllocLibraryInfo();
-               CU_ASSERT( NULL != p_libinfo );
-               CU_ASSERT( (i_cnt * 8) == p_libinfo->i_id );
+               p_binfile       = NULL;
+               p_binfile       = BinaryFile_AllocBinaryFile();
+               CU_ASSERT( NULL != p_binfile );
+               CU_ASSERT( (i_cnt * 8) == p_binfile->i_id );
        }
 
        for( i_cnt = 0; i_cnt < 128; i_cnt++ )  {
-               p_libinfo       = NULL;
-               p_libinfo       = LibraryInfo_GetLibraryInfo( i_cnt );
-               CU_ASSERT( NULL != p_libinfo );
+               p_binfile       = NULL;
+               p_binfile       = BinaryFile_GetBinaryFile( i_cnt );
+               CU_ASSERT( NULL != p_binfile );
 
-               i_result        = LibraryInfo_FreeLibraryInfo( p_libinfo );
+               i_result        = BinaryFile_FreeBinaryFile( p_binfile );
                CU_ASSERT( 0x00 == i_result );
        }
 
-       p_libinfo       = LibraryInfo_GetLibraryInfo( 0 );
-       CU_ASSERT( NULL == p_libinfo );
+       p_binfile       = BinaryFile_GetBinaryFile( 0 );
+       CU_ASSERT( NULL == p_binfile );
 
-       i_result        = LibraryInfo_Term();
+       i_result        = BinaryFile_Term();
        CU_ASSERT( 0x00 == i_result );
 
        return;
 }
 
 
-/* LibraryInfo_Init() & Term() ****************************************/
+/* BinaryFile_Init() & Term() ****************************************/
 /*--------------------------------------------------------------------*/
-void Test_LibraryInfo_InitTerm_test00_001( void )
+void Test_BinaryFile_InitTerm_test00_001( void )
 {
        int             i_result;
 
-       i_result        = LibraryInfo_Init();
+       i_result        = BinaryFile_Init();
        CU_ASSERT( 0x00 == i_result );
 
-       i_result        = LibraryInfo_Term();
+       i_result        = BinaryFile_Term();
        CU_ASSERT( 0x00 == i_result );
 
        return;
@@ -132,21 +132,21 @@ void Test_LibraryInfo_InitTerm_test00_001( void )
 
 /*----------------------------------------------------------------------
 ----------------------------------------------------------------------*/
-DRD64_TEST_LIBGOBLIN_LIBRARYINFO_EXTERN
+DRD64_TEST_LIBGOBLIN_BINARYFILE_EXTERN
 int
-       Test_LibGoblin_LibraryInfo(
+       Test_LibGoblin_BinaryFile(
                void )
 {
        CU_pSuite       pt_goblin;
 
-       pt_goblin       = CU_add_suite( "LibGoblin_LibraryInfo", NULL, NULL );
+       pt_goblin       = CU_add_suite( "LibGoblin_BinaryFile", NULL, NULL );
 
-       CU_add_test( pt_goblin, "LibraryInfo_InitTerm_test00_001",
-                                                                Test_LibraryInfo_InitTerm_test00_001 );
-       CU_add_test( pt_goblin, "LibraryInfo_AllocFree_test00_001",
-                                                                Test_LibraryInfo_AllocFree_test00_001 );
-       CU_add_test( pt_goblin, "LibraryInfo_AllocFree_test00_002",
-                                                                Test_LibraryInfo_AllocFree_test00_002 );
+       CU_add_test( pt_goblin, "BinaryFile_InitTerm_test00_001",
+                                                                Test_BinaryFile_InitTerm_test00_001 );
+       CU_add_test( pt_goblin, "BinaryFile_AllocFree_test00_001",
+                                                                Test_BinaryFile_AllocFree_test00_001 );
+       CU_add_test( pt_goblin, "BinaryFile_AllocFree_test00_002",
+                                                                Test_BinaryFile_AllocFree_test00_002 );
 
 
        return 0x00;
index d21d992..27c941d 100644 (file)
@@ -41,6 +41,7 @@ Comment:
 
 /* LibGoblin_BinInfo_AllocBinInfo() & FreeBinInfo() *******************/
 /*--------------------------------------------------------------------*/
+/*
 void Test_LibGoblin_BinInfo_AllocFree_test00_001( void )
 {
        int             i_bid;
@@ -60,9 +61,10 @@ void Test_LibGoblin_BinInfo_AllocFree_test00_001( void )
 
        return;
 }
-
+*/
 
 /*--------------------------------------------------------------------*/
+/*
 void Test_LibGoblin_BinInfo_AllocFree_test00_002( void )
 {
        int             i_cnt;
@@ -103,6 +105,7 @@ void Test_LibGoblin_BinInfo_AllocFree_test00_002( void )
 
        return;
 }
+*/
 
 
 /* LibGoblin_BinInfo_Init() & Term() **********************************/
@@ -131,13 +134,14 @@ int
        CU_pSuite       pt_goblin;
 
        pt_goblin       = CU_add_suite( "LibGoblin_BinInfo", NULL, NULL );
-
        CU_add_test( pt_goblin, "LibGoblin_BinInfo_InitTerm_test00_001",
                                                                 Test_LibGoblin_BinInfo_InitTerm_test00_001 );
+/*
        CU_add_test( pt_goblin, "LibGoblin_BinInfo_AllocFree_test00_001",
                                                                 Test_LibGoblin_BinInfo_AllocFree_test00_001 );
        CU_add_test( pt_goblin, "LibGoblin_BinInfo_AllocFree_test00_002",
                                                                 Test_LibGoblin_BinInfo_AllocFree_test00_002 );
+*/
 
 
        return 0x00;
index 46abcb1..271f650 100644 (file)
@@ -50,14 +50,14 @@ void Test_LibGoblin_ReadBinary_File_test00_001( void )
        i_result        = LibGoblin_Init();
        CU_ASSERT( 0x00 == i_result );
 
-       i_binfoid       = LibGoblin_AllocBinInfo( -1 );
+       i_binfoid       = LibGoblin_AllocBinInfo( -1, "dwarftest", "../testdata/" );
        CU_ASSERT( 0x00 == i_binfoid );
 
        p_binfo = LibGoblin_BinInfo_GetBinInfo( i_binfoid );
        CU_ASSERT( NULL != p_binfo );
 
        i_result        = LibGoblin_ReadBinary_File( p_binfo,
-                                               "../testdata/dwarftest", LIBGOBLIN_BINFO_FILE_EXEC );
+                                               "../testdata/dwarftest" );
        CU_ASSERT( 0x00 == i_result );
 
        i_result        = LibGoblin_Debug_Elf_PrintSectionTable( p_binfo, 0xff );
@@ -89,7 +89,7 @@ void Test_LibGoblin_ReadBinary_File_test00_002( void )
        i_result        = LibGoblin_Init();
        CU_ASSERT( 0x00 == i_result );
 
-       i_binfoid       = LibGoblin_AllocBinInfo( -1 );
+       i_binfoid       = LibGoblin_AllocBinInfo( -1, "dwarftest", "../testdata/" );
        CU_ASSERT( 0x00 == i_binfoid );
 
        p_binfo = LibGoblin_BinInfo_GetBinInfo( i_binfoid );
@@ -98,7 +98,7 @@ void Test_LibGoblin_ReadBinary_File_test00_002( void )
        i_result        = LibGoblin_BinInfo_SetProgramPath( p_binfo,
                                                "../testdata/dwarftest", "../testdata/dwarftest" );
 
-       i_result        = LibGoblin_ReadBinary_File( p_binfo, NULL, LIBGOBLIN_BINFO_FILE_EXEC );
+       i_result        = LibGoblin_ReadBinary_File( p_binfo, NULL );
        CU_ASSERT( 0x00 == i_result );
 
        i_result        = LibGoblin_ReadBinary_FreeBinary( p_binfo );
@@ -129,7 +129,7 @@ void Test_LibGoblin_ReadBinary_Memory_test00_001( void )
        i_result        = LibGoblin_Init();
        CU_ASSERT( 0x00 == i_result );
 
-       i_binfoid       = LibGoblin_AllocBinInfo( -1 );
+       i_binfoid       = LibGoblin_AllocBinInfo( -1, "dwarftest", "../testdata/" );
        CU_ASSERT( 0x00 == i_binfoid );
 
        p_binfo = LibGoblin_BinInfo_GetBinInfo( i_binfoid );
@@ -147,8 +147,7 @@ void Test_LibGoblin_ReadBinary_Memory_test00_001( void )
        sz_read = read( i_fd, pb_data, t_sb.st_size );
        CU_ASSERT( sz_read == t_sb.st_size );
 
-       i_result        = LibGoblin_ReadBinary_Memory( p_binfo, pb_data,
-                                                               t_sb.st_size, LIBGOBLIN_BINFO_FILE_EXEC );
+       i_result        = LibGoblin_ReadBinary_Memory( p_binfo, pb_data, t_sb.st_size );
        CU_ASSERT( 0x00 == i_result );
 
        i_result        = LibGoblin_ReadBinary_FreeBinary( p_binfo );
index d4a729e..c610f5d 100644 (file)
@@ -43,6 +43,7 @@ FLAGS_DEBUG = -g
 #
 ## TESTPG_HEADER =
 
+#FLAGS_LINKER = -L. -lm -Xlinker -rpath -Xlinker .. -Xlinker -rpath -Xlinker .
 FLAGS_LINKER = -L. -lm -Xlinker -rpath -Xlinker .
 
 TESTPG02_TARGET_FULL = dwarftest