#define LIBGOBLIN_BINFO_EXTERN extern
#endif
-#define DRD64_LIBGOBLIN_BINFO_UNITS 8
-
-#define DRD64_LIBGOBLIN_BINFO_TYPE_NONE 0x00
-#define DRD64_LIBGOBLIN_BINFO_TYPE_ELF 0x01
-#define DRD64_LIBGOBLIN_BINFO_TYPE_ELF64 0x64
-#define DRD64_LIBGOBLIN_BINFO_TYPE_ELF32 0x32
-
-#define DRD64_LIBGOBLIN_BINFO_ENDIAN_NONE 0x00
-#define DRD64_LIBGOBLIN_BINFO_ENDIAN_LITTLE 0x01
-#define DRD64_LIBGOBLIN_BINFO_ENDIAN_BIG 0x02
-
-typedef struct {
- int i_id;
-
- DWord dw_size;
- Byte *p_binary;
-
- Byte b_type;
- Byte b_endian;
-
- void *p_format;
-
-} Drd64_LibGoblin_BinaryInfo;
-
+#if defined DRD64_SRC_LIBGOBLIN_BINFO
+ #define LIBGOBLIN_BINFO_INTERNALFUNC
+#elif defined DRD64_SRC_TEST_LIBGOBLIN_BINFO
+ #define LIBGOBLIN_BINFO_INTERNALFUNC
+#endif
+#define LIBGOBLIN_BINFO_UNITS 8
-LIBGOBLIN_BINFO_EXTERN Drd64_LibGoblin_BinaryInfo *gp_binary_info;
-LIBGOBLIN_BINFO_EXTERN int gi_max_binary_info;
-LIBGOBLIN_BINFO_EXTERN int gi_now_binary_info;
+#ifdef DRD64_SRC_LIBGOBLIN_BINFO
+LibGoblin_BinaryInfo *gp_binary_info = NULL;
+int gi_alloc_binary_info = 0;
+int gi_max_binary_info = 0;
+int gi_now_binary_info = 0;
+#endif
+#define BINFO(n) ((LibGoblin_BinaryInfo *)(gp_binary_info + (n)))
+#define BINFOID(n) ((n)->i_id)
LIBGOBLIN_BINFO_EXTERN
- Drd64_LibGoblin_BinaryInfo *
- Drd64_LibDrd64_BinInfo_AllocBinInfo(
- void );
-
+ LibGoblin_BinaryInfo *BinaryInfo_GetBinInfo( int i_bid );
LIBGOBLIN_BINFO_EXTERN
- int
- Drd64_LibGoblin_FreeBinaryInfo(
- Drd64_LibGoblin_BinaryInfo *p_binfo );
-
+ int BinInfo_SearchFilename( char *pstr_libname, LibGoblin_BinaryInfo *p_binfo_self );
LIBGOBLIN_BINFO_EXTERN
- int
- Drd64_LibGoblin_InitBinaryInfo(
- void );
-
+ const char *BinaryInfo_GetRPath( LibGoblin_BinaryInfo *p_binfo, char *pstr_rpath );
LIBGOBLIN_BINFO_EXTERN
- int
- Drd64_LibGoblin_TermBinaryInfo(
- void );
-
+ int BinaryInfo_SetRPath(
+ LibGoblin_BinaryInfo *p_binfo, const char *pstr_rpath );
+LIBGOBLIN_BINFO_EXTERN
+ int BinaryInfo_SetRunPath(
+ LibGoblin_BinaryInfo *p_binfo, const char *pstr_runpath );
+LIBGOBLIN_BINFO_EXTERN
+ int BinaryInfo_SetProgramPath(
+ LibGoblin_BinaryInfo *p_binfo, const char *pstr_progpath, const char *pstr_realpath );
LIBGOBLIN_BINFO_EXTERN
- Drd64_LibGoblin_BinaryInfo *
- Drd64_LibGoblin_BInfo_GetBinaryInfo(
- int i_bid );
+ LibGoblin_BinaryInfo *BinaryInfo_AllocBinInfo(
+ LibGoblin_ProgramInfo *p_pginfo, const char *pstr_filename, int i_parent_bid );
+LIBGOBLIN_BINFO_EXTERN
+ int BinaryInfo_FreeBinInfo( LibGoblin_BinaryInfo *p_binfo );
+LIBGOBLIN_BINFO_EXTERN
+ int BinaryInfo_Init( void );
+LIBGOBLIN_BINFO_EXTERN
+ int BinaryInfo_Term( void );
+#ifdef LIBGOBLIN_BINFO_INTERNALFUNC
+ void BinaryInfo_ClearBinInfo( LibGoblin_BinaryInfo *p_binfo );
+ int BinInfo_AppendChain( LibGoblin_BinaryInfo *p_binfo_now );
+ int BinInfo_DeleteChain( LibGoblin_BinaryInfo *p_binfo_del );
+#endif
+
#endif /* DRD64_HEADER_LIBGOBLIN_BINFO */