PS2SDK
PS2 Homebrew Libraries
erl.h
Go to the documentation of this file.
1 /*
2 # _____ ___ ____ ___ ____
3 # ____| | ____| | | |____|
4 # | ___| |____ ___| ____| | \ PS2DEV Open Source Project.
5 #-----------------------------------------------------------------------
6 # Copyright 2001-2004, ps2dev - http://www.ps2dev.org
7 # Licenced under Academic Free License version 2.0
8 # Review ps2sdk README & LICENSE files for further details.
9 */
10 
16 #ifndef __ERL_H__
17 #define __ERL_H__
18 
19 #include <tamtypes.h>
20 
21 struct htab;
22 
24 #define ERL_FLAG_STICKY 1
25 
26 #define ERL_FLAG_STATIC 2
27 
28 #define ERL_FLAG_CLEAR 4
29 
30 struct erl_record_t {
31  u8 * bytes;
32  u32 fullsize;
33  char * name;
34  char ** dependancies;
35  u32 flags;
36 
37  /* Private */
38  struct htab * symbols;
39  struct erl_record_t * next, * prev;
40 }; // 32 bytes.
41 
42 struct symbol_t {
43  struct erl_record_t * provider;
44  u32 address;
45 };
46 
47 #ifdef __cplusplus
48 extern "C" {
49 #endif
50 
51 extern char _init_erl_prefix[];
52 
53 typedef struct erl_record_t * (*erl_loader_t)(char * erl_id);
54 
55 extern erl_loader_t _init_load_erl;
56 
57 extern struct erl_record_t * load_erl_from_mem(u8 * mem, int argc, char ** argv);
58 extern struct erl_record_t * load_erl_from_file(const char * fname, int argc, char ** argv);
59 extern struct erl_record_t * _init_load_erl_from_file(const char * fname, char * erl_id);
60 
61 /*
62  * By default, ERLs are relocated at a dynamic memory address -- a pointer
63  * returned by malloc(). The *_to_addr functions allow you to define a static
64  * address (must be different from ERL_DYN_ADDR) without allocating any memory.
65  */
66 #define ERL_DYN_ADDR 0
67 
68 extern struct erl_record_t * load_erl_from_mem_to_addr(u8 * mem, u32 addr, int argc, char ** argv);
69 extern struct erl_record_t * load_erl_from_file_to_addr(const char * fname, u32 addr, int argc, char ** argv);
70 extern struct erl_record_t * _init_load_erl_from_file_to_addr(const char * fname, u32 addr, char * erl_id);
71 
72 extern int unload_erl(struct erl_record_t * erl);
73 
74 extern int erl_add_global_symbol(const char * symbol, u32 address);
75 
76 extern struct erl_record_t * find_erl(const char * name);
77 extern struct erl_record_t * erl_resolve(u32 address);
78 
79 extern struct symbol_t * erl_find_local_symbol(const char * symbol, struct erl_record_t * erl);
80 extern struct symbol_t * erl_find_symbol(const char * symbol);
81 
82 extern void erl_flush_symbols(struct erl_record_t * erl);
83 
84 #ifdef __cplusplus
85 }
86 #endif
87 
88 #endif /* __ERL_H__ */
symbol_t
Definition: erl.h:42
erl_record_t
Definition: erl.h:30
htab
Definition: hashtab.h:53
tamtypes.h
symbol
Definition: main.c:241