RPA Toolkit
fixed codemap reallocation in the middle of addition -> crash.
[rpatk.git] / rvm / rvmrelocmap.h
1 #ifndef _RVMRELOCMAP_H_
2 #define _RVMRELOCMAP_H_
3
4 #include "rtypes.h"
5 #include "rarray.h"
6 #include "rhash.h"
7 #include "rstring.h"
8 #include "rvmcpu.h"
9 #include "rvmcodemap.h"
10
11 #ifdef __cplusplus
12 extern "C" {
13 #endif
14
15 typedef enum {
16         RVM_RELOC_DEFAULT = 0,
17         RVM_RELOC_JUMP,
18         RVM_RELOC_BRANCH,
19         RVM_RELOC_STRING,
20         RVM_RELOC_BLOB,
21 } rvm_reloctype_t;
22
23
24 typedef struct rvm_relocrecord_s {
25         rvm_reloctype_t type;
26         rulong offset;
27         rulong label;
28 } rvm_relocrecord_t;
29
30
31 typedef struct rvm_relocmap_s {
32         rarray_t *records;
33 } rvm_relocmap_t;
34
35
36 rvm_relocmap_t *rvm_relocmap_create();
37 void rvm_relocmap_destroy(rvm_relocmap_t *relocmap);
38 void rvm_relocmap_clear(rvm_relocmap_t *relocmap);
39 rlong rvm_relocmap_add(rvm_relocmap_t *relocmap, rvm_reloctype_t type, rulong offset, rulong label);
40 rvm_relocrecord_t *rvm_relocmap_get(rvm_relocmap_t *relocmap, rulong index);
41 rulong rvm_relocmap_length(rvm_relocmap_t *relocmap);
42 rint rvm_relocmap_relocate(rvm_relocmap_t *relocmap, rvm_codemap_t *codemap, rvm_asmins_t *code, rvm_codelabel_t **err);
43
44
45 #ifdef __cplusplus
46 }
47 #endif
48
49 #endif