X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/0c243283948ee9c9f3599b5a51005f9df8af53c5..149eacb246aabe7926f62376466d558a102e7c24:/src/xbt/ex.c diff --git a/src/xbt/ex.c b/src/xbt/ex.c index c7c216190c..f5a7969b52 100644 --- a/src/xbt/ex.c +++ b/src/xbt/ex.c @@ -1,33 +1,15 @@ -/* -** OSSP ex - Exception Handling (modified to fit into SimGrid) -** Copyright (c) 2005 Martin Quinson -** Copyright (c) 2002-2004 Ralf S. Engelschall -** Copyright (c) 2002-2004 The OSSP Project -** Copyright (c) 2002-2004 Cable & Wireless -** -** This file is part of OSSP ex, an exception handling library -** which can be found at http://www.ossp.org/pkg/lib/ex/. -** -** Permission to use, copy, modify, and distribute this software for -** any purpose with or without fee is hereby granted, provided that -** the above copyright notice and this permission notice appear in all -** copies. -** -** THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED -** WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -** MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -** IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR -** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF -** USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -** OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -** OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -** SUCH DAMAGE. -** -** ex.c: exception handling (compiler part) -*/ +/* $Id$ */ + +/* ex - Exception Handling (modified to fit into SimGrid from OSSP version) */ + +/* Copyright (c) 2005-2006 Martin Quinson */ +/* Copyright (c) 2002-2004 Ralf S. Engelschall */ +/* Copyright (c) 2002-2004 The OSSP Project */ +/* Copyright (c) 2002-2004 Cable & Wireless */ +/* All rights reserved. */ + +/* This program is free software; you can redistribute it and/or modify it + * under the terms of the license (GNU LGPL) which comes with this package. */ #include #include @@ -66,7 +48,7 @@ void xbt_backtrace_display(void) { e.remote=0; xbt_ex_free(e); #else - fprintf(stderr,"No backtrace on this arch"); + ERROR0("No backtrace on this arch"); #endif } @@ -127,7 +109,7 @@ void xbt_ex_setup_backtrace(xbt_ex_t *e) { FILE *maps; char maps_buff[512]; - long int addr,offset; + long int addr,offset=0; char *p,*p2; char *subcmd; @@ -165,12 +147,15 @@ void xbt_ex_setup_backtrace(xbt_ex_t *e) { DEBUG4("%#lx %s [%#lx-%#lx]", addr, found? "in":"out of",first,last); } - if (!found) - CRITICAL0("Problem while reading the maps file"); - fclose(maps); free(maps_name); + if (!found) { + WARN0("Problem while reading the maps file"); + e->bt_strings[i] = bprintf("** In ?? (%s)", backtrace[i]); + continue; + } + /* Ok, Found the offset of the maps line containing the searched symbol. We now need to substract this from the address we got from backtrace. */ @@ -205,7 +190,7 @@ void xbt_ex_setup_backtrace(xbt_ex_t *e) { /* check whether the trick worked */ if (strcmp("??",line_func)) { - e->bt_strings[i] = bprintf("** In %s() in %s (dynamic symbol)", line_func,line_pos); + e->bt_strings[i] = bprintf("** In %s() at %s (dynamic symbol)", line_func,line_pos); } else { /* damn, nothing to do here. Let's print the raw address */ e->bt_strings[i] = bprintf("** In ?? (%s)", backtrace[i]); @@ -227,10 +212,11 @@ void xbt_ex_display(xbt_ex_t *e) { if (e->remote) bprintf(" on host %s(%ld)",e->host,e->pid); + CRITICAL1("%s",e->msg); fprintf(stderr, "** SimGrid: UNCAUGHT EXCEPTION received on %s(%ld): category: %s; value: %d\n" "** %s\n" - "** Thrown by %s()%s", + "** Thrown by %s()%s\n", gras_os_myname(),gras_os_getpid(), xbt_ex_catname(e->category), e->value, e->msg, e->procname,thrower?thrower:" in this process");