summaryrefslogtreecommitdiffstats
path: root/asmrun/signals_asm.c
diff options
context:
space:
mode:
Diffstat (limited to 'asmrun/signals_asm.c')
-rw-r--r--asmrun/signals_asm.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/asmrun/signals_asm.c b/asmrun/signals_asm.c
index 85d441dae..f8f542ada 100644
--- a/asmrun/signals_asm.c
+++ b/asmrun/signals_asm.c
@@ -46,12 +46,11 @@ extern void caml_win32_overflow_detection();
#endif
extern char * caml_code_area_start, * caml_code_area_end;
-CAMLextern int caml_is_in_code(void *);
-#define In_code_area(pc) \
+#define Is_in_code_area(pc) \
( ((char *)(pc) >= caml_code_area_start && \
(char *)(pc) <= caml_code_area_end) \
- || caml_is_in_code((void *)(pc)) )
+ || (Classify_addr(pc) & In_code_area) )
/* This routine is the common entry point for garbage collection
and signal handling. It can trigger a callback to Caml code.
@@ -86,7 +85,7 @@ DECLARE_SIGNAL_HANDLER(handle_signal)
Use the signal context to modify that register too, but only if
we are inside Caml code (not inside C code). */
#if defined(CONTEXT_PC) && defined(CONTEXT_YOUNG_LIMIT)
- if (In_code_area(CONTEXT_PC))
+ if (Is_in_code_area(CONTEXT_PC))
CONTEXT_YOUNG_LIMIT = (context_reg) caml_young_limit;
#endif
}
@@ -192,7 +191,7 @@ DECLARE_SIGNAL_HANDLER(segv_handler)
&& fault_addr < system_stack_top
&& fault_addr >= system_stack_top - limit.rlim_cur - 0x2000
#ifdef CONTEXT_PC
- && In_code_area(CONTEXT_PC)
+ && Is_in_code_area(CONTEXT_PC)
#endif
) {
/* Turn this into a Stack_overflow exception */