Hi,
I sure hope someone can help as I am at my wits end here.
I am finding that exceptions which should be caught are instead
triggering an abort() when they are called from code which is
dynamically loaded into ROOT, either explicitly with gSystem->Load()
(or via building a special root.exe which is otherwise the same but
uses "-l" to link the library in). Details and example are below.
I have tested it with a fairly recent CVS build but also the binary
tar file: root_v3.03.07.Linux.RH7.2.gcc2953.tar.gz.
The problem is occuring on Debian system which uses GCC version:
bviren@minos:bviren> gcc -v
Reading specs from /usr/lib/gcc-lib/i386-linux/2.95.4/specs
gcc version 2.95.4 20011002 (Debian prerelease)
I *think* this is just GCC 2.95.3 + some bug fixes by the Debian
maintainers. Other collaborators on other systems don't see it.
Also, I don't reproduce it under 3.1.
As a test I have a simple struct with one method that will throw an
exception:
---------------------------
//tlib.cxx
#include "tlib.h"
void tlib::doit() {
throw "something";
}
// end tlib.cxx
---------------------------
// tlib.h
#ifndef TLIB_H
#define TLIB_H
struct tlib {
void doit();
};
#endif // TLIB_H
---------------------------
// LinkDef.h
#ifdef __CINT__
#pragma link off all globals;
#pragma link off all classes;
#pragma link off all functions;
#pragma link C++ struct tlib;
#endif
---------------------------
// main.cc for testing w/out ROOT
#include <iostream>
#include "tlib.h"
int main() {
try {
tlib t;
t.doit();
}
catch (const char* msg) {
cerr << "Exception!: " << msg << endl << flush;
}
}
---------------------------
To build I do:
---------------------------
g++-2.95 -march=i686 -Wall -g -I. -I$ROOTSYS/include -fPIC -c tlib.cxx -otlib.o
rootcint -f tlibCint.cc -c -I. -I$ROOTSYS/include tlib.h LinkDef.h
g++-2.95 -march=i686 -Wall -g -I. -I$ROOTSYS/include -fPIC -c tlibCint.cc -o tlibCint.o
g++-2.95 -shared -o libtlib.so tlib.o tlibCint.o
gcc-2.95 -shared -o libtlib-noroot.so tlib.o
g++-2.95 -march=i686 -Wall -g -I. -L. -o tlib-noroot main.cc -ltlib-noroot -rdynamic
---------------------------
And, finally to test it I do:
---------------------------
bviren@minos:jnk> ./tlib-noroot
Exception!: something
bviren@minos:jnk> root.exe
*******************************************
* *
* W E L C O M E to R O O T *
* *
* Version 3.03/07 18 July 2002 *
* *
* You are welcome to visit our Web site *
* http://root.cern.ch *
* *
*******************************************
FreeType Engine v1.x used to render TrueType fonts.
Compiled for linux with thread support.
CINT/ROOT C/C++ Interpreter version 5.15.50, July 7 2002
Type ? for help. Commands must be C++ statements.
Enclose multiple statements between { }.
PAWish style
root [0] gSystem->Load("libtlib"); tlib t; t.doit()
Aborted
---------------------------
Doing this again while running in GDB 5.2 gives a stack trace which
looks like:
---------------------------
0x40cb3741 in kill () from /lib/libc.so.6
(gdb) where
#0 0x40cb3741 in kill () from /lib/libc.so.6
#1 0x40c5de5e in pthread_kill () from /lib/libpthread.so.0
#2 0x40c5e339 in raise () from /lib/libpthread.so.0
#3 0x40cb4b81 in abort () from /lib/libc.so.6
#4 0x403643cb in __default_terminate () at ../../gcc/gcc/libgcc2.c:-1
#5 0x403643ec in __terminate () from /home/bviren/root/lib/libCore.so
#6 0x40364d24 in throw_helper (eh=0x404c34c4, pc=0x40575fe1,
my_udata=0xbffe6f9c, offset_p=0xbffe6f98)
from /home/bviren/root/lib/libCore.so
#7 0x40364edc in __throw () from /home/bviren/root/lib/libCore.so
#8 0x40f068fd in tlib::doit (this=0x87636a8) at tlib.cxx:4
#9 0x40f06b59 in G__tlib_doit_0_0 (result7=0xbfff39f0, funcname=0x0,
libp=0xbfff058c, hash=0) at tlibCint.cc:93
#10 0x40575fe2 in G__call_cppfunc () from /home/bviren/root/lib/libCint.so
#11 0x4056563b in G__interpret_func () from /home/bviren/root/lib/libCint.so
#12 0x4054c95d in G__getfunction () from /home/bviren/root/lib/libCint.so
#13 0x405d6b56 in G__getstructmem () from /home/bviren/root/lib/libCint.so
#14 0x405cfea0 in G__getvariable () from /home/bviren/root/lib/libCint.so
#15 0x40544cbf in G__getitem () from /home/bviren/root/lib/libCint.so
#16 0x40543593 in G__getexpr () from /home/bviren/root/lib/libCint.so
#17 0x4058c951 in G__exec_function () from /home/bviren/root/lib/libCint.so
#18 0x405938eb in G__exec_statement () from /home/bviren/root/lib/libCint.so
#19 0x4052ae92 in G__exec_tempfile () from /home/bviren/root/lib/libCint.so
#20 0x4059baa7 in G__process_cmd () from /home/bviren/root/lib/libCint.so
#21 0x4015da3e in TCint::ProcessLine () from /home/bviren/root/lib/libCore.so
#22 0x400f4aa1 in TApplication::ProcessLine ()
from /home/bviren/root/lib/libCore.so
#23 0x40c1d5bb in TRint::HandleTermInput ()
from /home/bviren/root/lib/libRint.so
#24 0x40c1c71d in TTermInputHandler::Notify ()
from /home/bviren/root/lib/libRint.so
#25 0x40c35d54 in TTermInputHandler::ReadNotify ()
from /home/bviren/root/lib/libRint.so
#26 0x40196c0a in TUnixSystem::CheckDescriptors ()
from /home/bviren/root/lib/libCore.so
#27 0x4019633b in TUnixSystem::DispatchOneEvent ()
from /home/bviren/root/lib/libCore.so
#28 0x40139399 in TSystem::InnerLoop () from /home/bviren/root/lib/libCore.so
#29 0x40139309 in TSystem::Run () from /home/bviren/root/lib/libCore.so
#30 0x400f54c6 in TApplication::Run () from /home/bviren/root/lib/libCore.so
#31 0x40c1d070 in TRint::Run () from /home/bviren/root/lib/libRint.so
#32 0x080487b7 in main ()
#33 0x40ca314f in __libc_start_main () from /lib/libc.so.6
---------------------------
Please, Obi-wan (or any-wan), you are my only hope!
-Brett.
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:51:03 MET