diff options
author | Xavier Leroy <xavier.leroy@inria.fr> | 2004-08-13 11:45:44 +0000 |
---|---|---|
committer | Xavier Leroy <xavier.leroy@inria.fr> | 2004-08-13 11:45:44 +0000 |
commit | 1a8c0ee7b9dbab85633345a31d33ecf888bb4420 (patch) | |
tree | 5bdeead6a2abd1064f04398284a0201e8589fa9d /asmrun/signals.c | |
parent | 84ff3e5fd9980a00bd9fefbde3334875a0cf80e7 (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.c | 13 |
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 |