Revu backtrace pour que ca marche avec des threads. Ajout et utilisation de printexc.h

git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@3526 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
master
Xavier Leroy 2001-06-15 14:22:38 +00:00
parent 0b4806665f
commit f0e7035637
8 changed files with 66 additions and 20 deletions

View File

@ -3,6 +3,10 @@ alloc.o: alloc.c alloc.h misc.h config.h ../config/m.h ../config/s.h \
stacks.h
array.o: array.c alloc.h misc.h config.h ../config/m.h ../config/s.h \
mlvalues.h fail.h memory.h gc.h major_gc.h freelist.h minor_gc.h
backtrace.o: backtrace.c config.h ../config/m.h ../config/s.h \
mlvalues.h misc.h alloc.h io.h instruct.h intext.h fix_code.h exec.h \
startup.h stacks.h memory.h gc.h major_gc.h freelist.h minor_gc.h \
sys.h backtrace.h
callback.o: callback.c callback.h mlvalues.h config.h ../config/m.h \
../config/s.h misc.h fail.h memory.h gc.h major_gc.h freelist.h \
minor_gc.h interp.h instruct.h fix_code.h stacks.h
@ -23,7 +27,7 @@ extern.o: extern.c alloc.h misc.h config.h ../config/m.h ../config/s.h \
major_gc.h freelist.h minor_gc.h reverse.h
fail.o: fail.c alloc.h misc.h config.h ../config/m.h ../config/s.h \
mlvalues.h fail.h io.h gc.h memory.h major_gc.h freelist.h minor_gc.h \
signals.h stacks.h
printexc.h signals.h stacks.h
finalise.o: finalise.c callback.h mlvalues.h config.h ../config/m.h \
../config/s.h misc.h fail.h roots.h memory.h gc.h major_gc.h \
freelist.h minor_gc.h signals.h
@ -45,9 +49,9 @@ intern.o: intern.c alloc.h misc.h config.h ../config/m.h ../config/s.h \
mlvalues.h custom.h fail.h gc.h intext.h io.h fix_code.h memory.h \
major_gc.h freelist.h minor_gc.h reverse.h
interp.o: interp.c alloc.h misc.h config.h ../config/m.h ../config/s.h \
mlvalues.h callback.h debugger.h fail.h fix_code.h instrtrace.h \
instruct.h interp.h major_gc.h freelist.h memory.h gc.h minor_gc.h \
prims.h signals.h stacks.h jumptbl.h
mlvalues.h backtrace.h callback.h debugger.h fail.h fix_code.h \
instrtrace.h instruct.h interp.h major_gc.h freelist.h memory.h gc.h \
minor_gc.h prims.h signals.h stacks.h jumptbl.h
ints.o: ints.c alloc.h misc.h config.h ../config/m.h ../config/s.h \
mlvalues.h custom.h fail.h intext.h io.h fix_code.h memory.h gc.h \
major_gc.h freelist.h minor_gc.h
@ -75,6 +79,7 @@ minor_gc.o: minor_gc.c config.h ../config/m.h ../config/s.h fail.h \
misc.h mlvalues.h finalise.h roots.h memory.h gc.h major_gc.h \
freelist.h minor_gc.h gc_ctrl.h signals.h
misc.o: misc.c config.h ../config/m.h ../config/s.h misc.h
mpwtool.o: mpwtool.c
obj.o: obj.c alloc.h misc.h config.h ../config/m.h ../config/s.h \
mlvalues.h fail.h gc.h major_gc.h freelist.h memory.h minor_gc.h \
prims.h
@ -82,8 +87,8 @@ parsing.o: parsing.c config.h ../config/m.h ../config/s.h mlvalues.h \
misc.h memory.h gc.h major_gc.h freelist.h minor_gc.h alloc.h
prims.o: prims.c mlvalues.h config.h ../config/m.h ../config/s.h \
misc.h prims.h
printexc.o: printexc.c fail.h misc.h config.h ../config/m.h \
../config/s.h mlvalues.h
printexc.o: printexc.c backtrace.h mlvalues.h config.h ../config/m.h \
../config/s.h misc.h debugger.h fail.h printexc.h
roots.o: roots.c finalise.h roots.h misc.h config.h ../config/m.h \
../config/s.h memory.h gc.h mlvalues.h major_gc.h freelist.h \
minor_gc.h stacks.h
@ -94,9 +99,10 @@ signals.o: signals.c alloc.h misc.h config.h ../config/m.h \
stacks.o: stacks.c config.h ../config/m.h ../config/s.h fail.h misc.h \
mlvalues.h stacks.h memory.h gc.h major_gc.h freelist.h minor_gc.h
startup.o: startup.c config.h ../config/m.h ../config/s.h alloc.h \
misc.h mlvalues.h callback.h custom.h debugger.h exec.h fail.h \
fix_code.h gc_ctrl.h interp.h intext.h io.h memory.h gc.h major_gc.h \
freelist.h minor_gc.h prims.h reverse.h signals.h stacks.h sys.h
misc.h mlvalues.h backtrace.h callback.h custom.h debugger.h exec.h \
fail.h fix_code.h gc_ctrl.h instrtrace.h interp.h intext.h io.h \
memory.h gc.h major_gc.h freelist.h minor_gc.h prims.h printexc.h \
reverse.h signals.h stacks.h sys.h startup.h
str.o: str.c alloc.h misc.h config.h ../config/m.h ../config/s.h \
mlvalues.h fail.h
sys.o: sys.c config.h ../config/m.h ../config/s.h alloc.h misc.h \
@ -113,6 +119,10 @@ alloc.d.o: alloc.c alloc.h misc.h config.h ../config/m.h ../config/s.h \
stacks.h
array.d.o: array.c alloc.h misc.h config.h ../config/m.h ../config/s.h \
mlvalues.h fail.h memory.h gc.h major_gc.h freelist.h minor_gc.h
backtrace.d.o: backtrace.c config.h ../config/m.h ../config/s.h \
mlvalues.h misc.h alloc.h io.h instruct.h intext.h fix_code.h exec.h \
startup.h stacks.h memory.h gc.h major_gc.h freelist.h minor_gc.h \
sys.h backtrace.h
callback.d.o: callback.c callback.h mlvalues.h config.h ../config/m.h \
../config/s.h misc.h fail.h memory.h gc.h major_gc.h freelist.h \
minor_gc.h interp.h instruct.h fix_code.h stacks.h
@ -133,7 +143,7 @@ extern.d.o: extern.c alloc.h misc.h config.h ../config/m.h ../config/s.h \
major_gc.h freelist.h minor_gc.h reverse.h
fail.d.o: fail.c alloc.h misc.h config.h ../config/m.h ../config/s.h \
mlvalues.h fail.h io.h gc.h memory.h major_gc.h freelist.h minor_gc.h \
signals.h stacks.h
printexc.h signals.h stacks.h
finalise.d.o: finalise.c callback.h mlvalues.h config.h ../config/m.h \
../config/s.h misc.h fail.h roots.h memory.h gc.h major_gc.h \
freelist.h minor_gc.h signals.h
@ -156,9 +166,9 @@ intern.d.o: intern.c alloc.h misc.h config.h ../config/m.h ../config/s.h \
mlvalues.h custom.h fail.h gc.h intext.h io.h fix_code.h memory.h \
major_gc.h freelist.h minor_gc.h reverse.h
interp.d.o: interp.c alloc.h misc.h config.h ../config/m.h ../config/s.h \
mlvalues.h callback.h debugger.h fail.h fix_code.h instrtrace.h \
instruct.h interp.h major_gc.h freelist.h memory.h gc.h minor_gc.h \
prims.h signals.h stacks.h
mlvalues.h backtrace.h callback.h debugger.h fail.h fix_code.h \
instrtrace.h instruct.h interp.h major_gc.h freelist.h memory.h gc.h \
minor_gc.h prims.h signals.h stacks.h
ints.d.o: ints.c alloc.h misc.h config.h ../config/m.h ../config/s.h \
mlvalues.h custom.h fail.h intext.h io.h fix_code.h memory.h gc.h \
major_gc.h freelist.h minor_gc.h
@ -186,6 +196,7 @@ minor_gc.d.o: minor_gc.c config.h ../config/m.h ../config/s.h fail.h \
misc.h mlvalues.h finalise.h roots.h memory.h gc.h major_gc.h \
freelist.h minor_gc.h gc_ctrl.h signals.h
misc.d.o: misc.c config.h ../config/m.h ../config/s.h misc.h
mpwtool.d.o: mpwtool.c
obj.d.o: obj.c alloc.h misc.h config.h ../config/m.h ../config/s.h \
mlvalues.h fail.h gc.h major_gc.h freelist.h memory.h minor_gc.h \
prims.h
@ -193,8 +204,8 @@ parsing.d.o: parsing.c config.h ../config/m.h ../config/s.h mlvalues.h \
misc.h memory.h gc.h major_gc.h freelist.h minor_gc.h alloc.h
prims.d.o: prims.c mlvalues.h config.h ../config/m.h ../config/s.h \
misc.h prims.h
printexc.d.o: printexc.c fail.h misc.h config.h ../config/m.h \
../config/s.h mlvalues.h
printexc.d.o: printexc.c backtrace.h mlvalues.h config.h ../config/m.h \
../config/s.h misc.h debugger.h fail.h printexc.h
roots.d.o: roots.c finalise.h roots.h misc.h config.h ../config/m.h \
../config/s.h memory.h gc.h mlvalues.h major_gc.h freelist.h \
minor_gc.h stacks.h
@ -205,9 +216,10 @@ signals.d.o: signals.c alloc.h misc.h config.h ../config/m.h \
stacks.d.o: stacks.c config.h ../config/m.h ../config/s.h fail.h misc.h \
mlvalues.h stacks.h memory.h gc.h major_gc.h freelist.h minor_gc.h
startup.d.o: startup.c config.h ../config/m.h ../config/s.h alloc.h \
misc.h mlvalues.h callback.h custom.h debugger.h exec.h fail.h \
fix_code.h gc_ctrl.h interp.h intext.h io.h memory.h gc.h major_gc.h \
freelist.h minor_gc.h prims.h reverse.h signals.h stacks.h sys.h
misc.h mlvalues.h backtrace.h callback.h custom.h debugger.h exec.h \
fail.h fix_code.h gc_ctrl.h instrtrace.h interp.h intext.h io.h \
memory.h gc.h major_gc.h freelist.h minor_gc.h prims.h printexc.h \
reverse.h signals.h stacks.h sys.h startup.h
str.d.o: str.c alloc.h misc.h config.h ../config/m.h ../config/s.h \
mlvalues.h fail.h
sys.d.o: sys.c config.h ../config/m.h ../config/s.h alloc.h misc.h \

View File

@ -15,6 +15,7 @@
/* Stack backtrace for uncaught exceptions */
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include "config.h"
#ifdef HAS_UNISTD
@ -34,8 +35,8 @@
int backtrace_active = 0;
int backtrace_pos = 0;
code_t * backtrace_buffer = NULL;
#define BACKTRACE_BUFFER_SIZE 1024
static code_t backtrace_buffer[BACKTRACE_BUFFER_SIZE];
/* Location of fields in the Instruct.debug_event record */
enum { EV_POS = 0,
@ -51,6 +52,10 @@ void stash_backtrace(code_t pc, value * sp)
code_t end_code = start_code + code_size;
if (pc != NULL) pc = pc - 1;
if (backtrace_pos >= BACKTRACE_BUFFER_SIZE) return;
if (backtrace_buffer == NULL) {
backtrace_buffer = malloc(BACKTRACE_BUFFER_SIZE * sizeof(code_t));
if (backtrace_buffer == NULL) return;
}
backtrace_buffer[backtrace_pos++] = pc;
for (/*nothing*/; sp < trapsp; sp++) {
code_t p = (code_t) *sp;

View File

@ -5,6 +5,7 @@
extern int backtrace_active;
extern int backtrace_pos;
extern code_t * backtrace_buffer;
extern void stash_backtrace(code_t pc, value * sp);
extern void print_exception_backtrace(void);

View File

@ -21,6 +21,7 @@
#include "memory.h"
#include "misc.h"
#include "mlvalues.h"
#include "printexc.h"
#include "signals.h"
#include "stacks.h"

View File

@ -59,7 +59,6 @@ void raise_sys_error (value) Noreturn;
void raise_end_of_file (void) Noreturn;
void raise_zero_divide (void) Noreturn;
void raise_not_found (void) Noreturn;
void fatal_uncaught_exception (value) Noreturn;
void init_exceptions (void);
void array_bound_error (void) Noreturn;
void raise_sys_blocked_io (void) Noreturn;

View File

@ -25,6 +25,7 @@
#ifdef HAS_UI
#include "ui.h"
#endif
#include "printexc.h"
struct stringbuf {
char * ptr;

26
byterun/printexc.h Normal file
View File

@ -0,0 +1,26 @@
/***********************************************************************/
/* */
/* Objective Caml */
/* */
/* Xavier Leroy, projet Cristal, INRIA Rocquencourt */
/* */
/* Copyright 2001 Institut National de Recherche en Informatique et */
/* en Automatique. All rights reserved. This file is distributed */
/* under the terms of the GNU Library General Public License. */
/* */
/***********************************************************************/
/* $Id$ */
#ifndef _printexc_
#define _printexc_
#include "misc.h"
#include "mlvalues.h"
char * format_caml_exception (value);
void fatal_uncaught_exception (value) Noreturn;
#endif /* _printexc_ */

View File

@ -43,6 +43,7 @@
#include "misc.h"
#include "mlvalues.h"
#include "prims.h"
#include "printexc.h"
#include "reverse.h"
#include "signals.h"
#include "stacks.h"