RPA Toolkit
Modified the public API of rvm_relocmap_t to add support for multiple relocation...
[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 enum {
25         RVM_RELOC_CODE = 0,
26         RVM_RELOC_DATA,
27 } rvm_reloctarget_t;
28
29
30 typedef struct rvm_relocrecord_s {
31         rvm_reloctarget_t target;
32         rvm_reloctype_t type;
33         rulong offset;
34         rulong label;
35 } rvm_relocrecord_t;
36
37
38 typedef struct rvm_relocmap_s {
39         rarray_t *records;
40 } rvm_relocmap_t;
41
42
43 rvm_relocmap_t *rvm_relocmap_create();
44 void rvm_relocmap_destroy(rvm_relocmap_t *relocmap);
45 void rvm_relocmap_clear(rvm_relocmap_t *relocmap);
46 rlong rvm_relocmap_add(rvm_relocmap_t *relocmap, rvm_reloctarget_t target, rvm_reloctype_t type, rulong offset, rulong label);
47 rvm_relocrecord_t *rvm_relocmap_get(rvm_relocmap_t *relocmap, rulong index);
48 rulong rvm_relocmap_length(rvm_relocmap_t *relocmap);
49 rint rvm_relocmap_relocate(rvm_relocmap_t *relocmap, rvm_codemap_t *codemap, rvm_asmins_t *code, rvm_codelabel_t **err);
50
51
52 #ifdef __cplusplus
53 }
54 #endif
55
56 #endif