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