-/*
-** OSSP ex - Exception Handling (modified to fit into SimGrid)
-** Copyright (c) 2005 Martin Quinson
-** Copyright (c) 2002-2004 Ralf S. Engelschall <rse@engelschall.com>
-** Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/>
-** Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/>
-**
-** 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 <rse@engelschall.com> */
+/* Copyright (c) 2002-2004 The OSSP Project <http://www.ossp.org/> */
+/* Copyright (c) 2002-2004 Cable & Wireless <http://www.cw.com/> */
+/* 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 <stdio.h>
#include <stdlib.h>
e.remote=0;
xbt_ex_free(e);
#else
- fprintf(stderr,"No backtrace on this arch");
+ ERROR0("No backtrace on this arch");
#endif
}
FILE *maps;
char maps_buff[512];
- long int addr,offset;
+ long int addr,offset=0;
char *p,*p2;
char *subcmd;
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.
*/
/* 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]);
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");