From f31b200b58e994b7505707931d4278e3f61cc2d6 Mon Sep 17 00:00:00 2001 From: Camil Staps Date: Mon, 24 Dec 2018 14:15:16 +0100 Subject: Iterative development --- sjit_c.c | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) (limited to 'sjit_c.c') diff --git a/sjit_c.c b/sjit_c.c index 50e8f57..879ec18 100644 --- a/sjit_c.c +++ b/sjit_c.c @@ -106,7 +106,7 @@ static inline void gen_instr(char *full_code, char **code_p, uint64_t **pgm_p, u case Call: arg=pgm[1]; #ifdef DEBUG_JIT_INSTRUCTIONS - fprintf(stderr,"Call %lu -> %d\n",arg,mapping[arg]-(&code[5]-full_code)); + fprintf(stderr,"Call %lu -> %d\n",arg,mapping[arg]-(uint32_t)(&code[5]-full_code)); #endif code[0]='\xe8'; /* callq ARG */ *(uint32_t*)&code[1]=mapping[arg]-(&code[5]-full_code); @@ -181,15 +181,20 @@ static inline void gen_instr(char *full_code, char **code_p, uint64_t **pgm_p, u *pgm_p=pgm; } -unsigned int jit(uint64_t *pgm) { +void init_jit(uint64_t max_instrs, uint64_t max_code_len, + char **code_block, uint32_t **mapping) { + *code_block=mmap (NULL,max_code_len,PROT_READ | PROT_EXEC,MAP_ANONYMOUS | MAP_PRIVATE,0,0); + *mapping=malloc (max_instrs*sizeof(uint32_t)); +} + +char *jit_append(char *code_block, uint32_t code_len, char *code_ptr, + uint32_t *mapping, uint32_t n_instr, uint64_t *pgm, int is_main) { uint32_t len=*pgm++; uint32_t i; - - uint32_t *mapping=malloc(len*sizeof(uint32_t)); - uint32_t code_i=0; + uint32_t code_i=code_ptr-code_block; uint64_t *pgm_p=pgm; - for (i=0; i