Mixed ABI application exception crash

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

I have been developing a thunk layer (thanks Eljay ;) to enable our
application (which has to be compiled with gcc-3.x) to make use of Oracle's
OCCI database access library (compiled using gcc-2.95). I have managed to
get almosteverything to work nicely. Any exceptions raised by the OCCI
library will cause an abort (see the stacktrace below). 

<snip>

creating environment
creating connection pool

Program received signal SIGABRT, Aborted.
[Switching to Thread 1024 (LWP 6098)]
0x401c4df1 in kill () from /lib/libc.so.6
(gdb) ba
#0  0x401c4df1 in kill () from /lib/libc.so.6
#1  0x401c4bd8 in raise () from /lib/libc.so.6
#2  0x401c64d9 in abort () from /lib/libc.so.6
#3  0x40cd7a8b in __default_terminate () from
/usr/lib/libstdc++-libc6.2-2.so.3
#4  0x40cd7aac in __terminate () from /usr/lib/libstdc++-libc6.2-2.so.3
#5  0x40cd86be in __throw () from /usr/lib/libstdc++-libc6.2-2.so.3
#6  0x40c1d76b in oracle::occi::ConnectionPoolImpl::ConnectionPoolImpl ()
   from /opt/oracle/product/9.2.0/lib/libocci.so
#7  0x40c1b8d1 in oracle::occi::EnvironmentImpl::createConnectionPool ()
   from /opt/oracle/product/9.2.0/lib/libocci.so
#8  0x4003343e in cmgwds_occit_environment_createConnectionPool
(thunk=0x804cfa0,
    poolUserName=0x805728c "ngroenewald", poolPassword=0x805702c
"ngroenewaldd",
    connectString=0x805700c "severn.zajbpe36", minConn=1, maxConn=5,
incrConn=1,
    pool=@0xbfffdda4) at thunk/Environment.cpp:155
#9  0x40038ccd in
cmg::occithunk::Environment::createConnectionPool(std::string const&,
std::string const&, std::string const&, unsigned, unsigned, unsigned) (
    this=0x804cfc0, poolUserName=@0xbfffe020, poolPassword=@0xbfffe040,
    connectString=@0xbfffe060, minConn=1, maxConn=5, incrConn=1)
    at facade/Environment.cpp:124
#10 0x08049277 in main ()
#11 0x401b34a2 in __libc_start_main () from /lib/libc.so.6
(gdb) quit

</snip>

To investigate this further I created my own test library compiled with
gcc-2.95 which I thunked with a library which is also compiled with gcc-2.95
(but with all functions having C linkage). The test application connects to
this thunk via yet another library which is compiled with gcc-3.2. I am
still unable to make exceptions work but my symptons are different (see
stacktrace below).

<snip>

GNU gdb 5.2.1
Copyright 2002 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain
conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i586-suse-linux"...
(gdb) run
Starting program: /home/ngroenewald/tmp/except/footest
invoking bar()

Program received signal SIGSEGV, Segmentation fault.
0x400ae9f2 in __dynamic_cast () from /usr/lib/libstdc++.so.5
(gdb) ba
#0  0x400ae9f2 in __dynamic_cast () from /usr/lib/libstdc++.so.5
#1  0x4024b870 in __throw_type_match_rtti () from
/usr/lib/libstdc++-libc6.2-2.so.3
#2  0x40249e09 in __check_eh_spec () from /usr/lib/libstdc++-libc6.2-2.so.3
#3  0x400d7a7a in real::foo::bar () from ./libfoo.so
#4  0x08048a9c in thunk_foo_bar ()
#5  0x08048bc7 in facade::foo::bar() ()
#6  0x08048bf8 in main ()
#7  0x4011e4a2 in __libc_start_main () from /lib/libc.so.6
(gdb)

</snip>

I tried turning off RTTI (starting to graps at straws here) and then get a
crash in strcmp() in libc.so. I read somewhere that when RTTI is turned off,
the matching to catch clauses is done via embedded string symbols - looks
like a manifestation of the same problem regarding the exception info (to me
at least). All this on a Suse 8.0 UL 1 machine. I get the same behaviour
with the thunk test scenario on SuSe 8.2 using gcc-3.3.

I would really appreciate some insight and/or ideas how I could get around
this as the library makes extensive use of exceptions. 

Regards,

Nic Groenewald
C++ Developer
________________________________________

LogicaCMG Wireless Data Solutions (Africa) (Pty) Limited

Physical Address: Block B
The Wedgewood Office Park
3 Muswell Road South
Bryanston 
South Africa

Postal Address: PO Box 71704 
Bryanston 2021
South Africa

T:  +27 (0)11 463 8515 Ext. 291
F:  +27 (0)11 463 2596
M: +27 (0)84 449 3205
E:  nic.groenewald@xxxxxxxxxxxxx
www.logicacmg.com

[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux