]> git.unchartedbackwaters.co.uk Git - francis/libjit.git/commitdiff
added fixup_absolute_list field to _jit_block struct
authorAleksey Demakov <ademakov@gmail.com>
Tue, 10 Jan 2006 21:03:44 +0000 (21:03 +0000)
committerAleksey Demakov <ademakov@gmail.com>
Tue, 10 Jan 2006 21:03:44 +0000 (21:03 +0000)
ChangeLog
jit/jit-function.c
jit/jit-internal.h
jit/jit-rules-x86.c

index c66b7c54b87f2d1fa55da7464eac92da516bde07..14b39dceb19d8b6cc5538f1b31796dc25eedd078 100644 (file)
--- 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  <ademakov@gmail.com>
 
index 54d6ad67f42caf1c5b807e503621a207c973c6e6..6dc130ab37c6d15e8ec9a68203a18b26e3727eaf 100644 (file)
@@ -710,6 +710,7 @@ int jit_function_compile(jit_function_t func)
                        {
                                block->address = 0;
                                block->fixup_list = 0;
+                               block->fixup_absolute_list = 0;
                        }
                }
 
index e2255aa92290dd2785ff1e3f28abe1945ba79533..e7a4e692106e696ecb636e9c57bc55a2fe05e697 100644 (file)
@@ -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;
 };
 
 /*
index b94f70549db413dccb9fe8c3672aad53180b3d90..5093e11b5a0765e2e19d918e5760199fb7ff48b1 100644 (file)
@@ -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)