summaryrefslogtreecommitdiffstats
path: root/asmrun/signals.c
diff options
context:
space:
mode:
authorXavier Leroy <xavier.leroy@inria.fr>2004-08-13 11:45:44 +0000
committerXavier Leroy <xavier.leroy@inria.fr>2004-08-13 11:45:44 +0000
commit1a8c0ee7b9dbab85633345a31d33ecf888bb4420 (patch)
tree5bdeead6a2abd1064f04398284a0201e8589fa9d /asmrun/signals.c
parent84ff3e5fd9980a00bd9fefbde3334875a0cf80e7 (diff)
Prevoir de recuperer les debordements de pile lorsque youg_ptr et exn_pointer sont en registres
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@6600 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
Diffstat (limited to 'asmrun/signals.c')
-rw-r--r--asmrun/signals.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/asmrun/signals.c b/asmrun/signals.c
index 4770d01f6..602ef17c4 100644
--- a/asmrun/signals.c
+++ b/asmrun/signals.c
@@ -363,8 +363,19 @@ static int is_stack_overflow(char * fault_addr)
DECLARE_SIGNAL_HANDLER(segv_handler)
{
- if (is_stack_overflow(CONTEXT_FAULTING_ADDRESS))
+ if (is_stack_overflow(CONTEXT_FAULTING_ADDRESS)) {
+#if defined(CONTEXT_PC) \
+ && defined(CONTEXT_YOUNG_PTR) \
+ && defined(CONTEXT_EXCEPTION_POINTER)
+ if (In_code_area(CONTEXT_PC)) {
+ caml_exception_pointer = (char *) CONTEXT_EXCEPTION_POINTER;
+ caml_young_ptr = (char *) CONTEXT_YOUNG_PTR;
+ caml_raise_stack_overflow();
+ }
+#else
caml_raise_stack_overflow();
+#endif
+ }
}
#endif