Signed-off-by: Tomek Grabiec <[email protected]>
---
include/jit/compilation-unit.h | 6 ++++++
jit/emit.c | 3 +++
jit/exception.c | 8 ++++----
3 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/include/jit/compilation-unit.h b/include/jit/compilation-unit.h
index 66fcb7c..d3366f7 100644
--- a/include/jit/compilation-unit.h
+++ b/include/jit/compilation-unit.h
@@ -55,6 +55,12 @@ struct compilation_unit {
unsigned char *exit_past_unlock_ptr;
unsigned char *unwind_past_unlock_ptr;
+ /*
+ * These are native pointers to basic blocks.
+ */
+ unsigned char *exit_bb_ptr;
+ unsigned char *unwind_bb_ptr;
+
struct list_head static_fixup_site_list;
struct list_head tableswitch_list;
struct list_head lookupswitch_list;
diff --git a/jit/emit.c b/jit/emit.c
index 0966923..a65f35f 100644
--- a/jit/emit.c
+++ b/jit/emit.c
@@ -201,6 +201,9 @@ int emit_machine_code(struct compilation_unit *cu)
backpatch_lookupswitch_targets(cu);
build_exception_handlers_table(cu);
+ cu->exit_bb_ptr = bb_native_ptr(cu->exit_bb);
+ cu->unwind_bb_ptr = bb_native_ptr(cu->unwind_bb);
+
jit_text_reserve(buffer_offset(cu->objcode));
jit_text_unlock();
diff --git a/jit/exception.c b/jit/exception.c
index de71618..0171ca8 100644
--- a/jit/exception.c
+++ b/jit/exception.c
@@ -250,14 +250,14 @@ static unsigned char *find_handler(struct
compilation_unit *cu,
static bool
is_inside_exit_unlock(struct compilation_unit *cu, unsigned char *ptr)
{
- return ptr >= bb_native_ptr(cu->exit_bb) &&
+ return ptr >= cu->exit_bb_ptr &&
ptr < cu->exit_past_unlock_ptr;
}
static bool
is_inside_unwind_unlock(struct compilation_unit *cu, unsigned char *ptr)
{
- return ptr >= bb_native_ptr(cu->unwind_bb) &&
+ return ptr >= cu->unwind_bb_ptr &&
ptr < cu->unwind_past_unlock_ptr;
}
@@ -319,7 +319,7 @@ throw_from_jit(struct compilation_unit *cu, struct
jit_stack_frame *frame,
if (is_inside_exit_unlock(cu, native_ptr))
return cu->exit_past_unlock_ptr;
- return bb_native_ptr(cu->exit_bb);
+ return cu->exit_bb_ptr;
}
if (opt_trace_exceptions)
@@ -328,7 +328,7 @@ throw_from_jit(struct compilation_unit *cu, struct
jit_stack_frame *frame,
if (is_inside_unwind_unlock(cu, native_ptr))
return cu->unwind_past_unlock_ptr;
- return bb_native_ptr(cu->unwind_bb);
+ return cu->unwind_bb_ptr;
}
void
--
1.6.0.6
------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day
trial. Simplify your report design, integration and deployment - and focus on
what you do best, core application coding. Discover what's new with
Crystal Reports now. http://p.sf.net/sfu/bobj-july
_______________________________________________
Jatovm-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jatovm-devel