From fb4e23d004b5235494af99c0ff7cce08d6c42225 Mon Sep 17 00:00:00 2001 From: Aleksey Demakov Date: Tue, 10 Jan 2006 21:03:44 +0000 Subject: [PATCH] added fixup_absolute_list field to _jit_block struct --- ChangeLog | 3 +++ jit/jit-function.c | 1 + jit/jit-internal.h | 5 +++-- jit/jit-rules-x86.c | 9 +++++++++ 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index c66b7c5..14b39dc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,9 @@ * jit/jit-gen-x86.h (x86_jump_memindex): add macro for indirect jumps. + * jit/jit-internal.h, jit/jit-function.c, jiy/jit-rules-x86.c: + add fixup_absolute_list field to _jit_block struct for fixing up + absolute address references to a block. 2006-01-08 Aleksey Demakov diff --git a/jit/jit-function.c b/jit/jit-function.c index 54d6ad6..6dc130a 100644 --- a/jit/jit-function.c +++ b/jit/jit-function.c @@ -710,6 +710,7 @@ int jit_function_compile(jit_function_t func) { block->address = 0; block->fixup_list = 0; + block->fixup_absolute_list = 0; } } diff --git a/jit/jit-internal.h b/jit/jit-internal.h index e2255aa..e7a4e69 100644 --- a/jit/jit-internal.h +++ b/jit/jit-internal.h @@ -184,8 +184,9 @@ struct _jit_block int entered_via_top : 1; int entered_via_branch : 1; int ends_in_dead : 1; - void *address; - void *fixup_list; + void *address; + void *fixup_list; + void *fixup_absolute_list; }; /* diff --git a/jit/jit-rules-x86.c b/jit/jit-rules-x86.c index b94f705..5093e11 100644 --- a/jit/jit-rules-x86.c +++ b/jit/jit-rules-x86.c @@ -1397,6 +1397,15 @@ void _jit_gen_start_block(jit_gencode_t gen, jit_block_t block) fixup = next; } block->fixup_list = 0; + + fixup = (void**)(block->fixup_absolute_list); + while(fixup != 0) + { + next = (void **)(fixup[0]); + fixup[0] = (void *)((jit_nint)(block->address)); + fixup = next; + } + block->fixup_absolute_list = 0; } void _jit_gen_end_block(jit_gencode_t gen, jit_block_t block) -- 2.47.3