Date: Fri, 11 Oct 2002 15:08:31 +0200 (CEST) From: Martin Blapp <mb@imp.ch> To: <dev@porting.openoffice.org> Cc: <kevin.hendricks@sympatico.ca>, <openoffice@freebsd.org>, <kan@freebsd.org>, <jdp@freebsd.org> Subject: Re: [porting-dev] FreeBSD: Uncatched exception problem Message-ID: <20021011145055.N15308-100000@levais.imp.ch> In-Reply-To: <20021010182724.14cdb1b3.ak03@gte.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Kevin,
The place where you were looking at is from a different place !
John, I'm sending this to you too, since I begin to suspect another
rtld problem ...
If I enter three slashes, file:///x I see the 2 places ...
(gdb) bt
#0 0x28c31d5b in kill () from /usr/lib/libc.so.5
#1 0x28c90a44 in abort () from /usr/lib/libc.so.5
#2 0x28ba8c8f in __cxxabiv1::__terminate(void (*)()) (
handler=0x28c909d8 <abort>)
at /usr/src/contrib/libstdc++/libsupc++/eh_terminate.cc:47
#3 0x28ba8cd0 in __cxxabiv1::__unexpected(void (*)()) (handler=0x8127c30)
at /usr/src/contrib/libstdc++/libsupc++/eh_terminate.cc:57
#4 0x28ba8c04 in __cxa_rethrow ()
at /usr/src/contrib/libstdc++/libsupc++/eh_throw.cc:77
#5 0x2aac2bf2 in
SfxFrameLoader::detect(com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>&)
(this=0x29a57860, lDescriptor=@0xbfbfea00)
at
/usr/ports/editors/openoffice/work/oo_1.0.1_src/sfx2/source/view/frmload.cxx:769
#6 0x2bc1d839 in
framework::TypeDetection::queryTypeByDescriptor(com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>&,
unsigned char) (
this=0x2bc5f710, seqDescriptor=@0xbfbfea00, bDeep=1 '\001')
at Reference.h:260
But that doesn't matter anything, since the problem seems to be
the same ...
The throw() gets called, but try and catch are never reached ...
frmload.cxx [1] check for errorcode
frmload.cxx [2] Set the exception type to exPacked()
frmload.cxx [3] We have a error, throw()
I set a breakpoint in __cxa_begin_catch
Breakpoint 1, __cxa_begin_catch (exc_obj_in=0x8127b30)
at /usr/src/contrib/libstdc++/libsupc++/eh_catch.cc:41
41 = reinterpret_cast <_Unwind_Exception *>(exc_obj_in);
(gdb) list
36
37 extern "C" void *
38 __cxa_begin_catch (void *exc_obj_in)
39 {
40 _Unwind_Exception *exceptionObject
41 = reinterpret_cast <_Unwind_Exception *>(exc_obj_in);
42
43 // ??? Foreign exceptions can't be stacked here, and there doesn't
44 // appear to be any place to store for __cxa_end_catch to destroy.
45
(gdb) p *header
$2 = {exceptionType = 0x7c128, exceptionDestructor = 0x2808f800,
unexpectedHandler = 0x28079298 <_rtld_bind_start>,
terminateHandler = 0x285f9e9c <rtl_ustr_indexOfChar_WithLength>, nextException
= 0x287a135e,
handlerCount = 679089006, handlerSwitchValue = 679089022, actionRecord =
0x287a138e "h ",
languageSpecificData = 0x287a139e "h(", catchTemp = 0x287a13ae, adjustedPtr =
0x287a13be,
unwindHeader = {exception_class = 2905809121774801886,
exception_cleanup = 0x287d0e8c
<utl::UcbLockBytes::setStream_Impl(com::sun::star::uno::Reference<com::sun::star::io::XStream>
const&)>, private_1 = 679089166, private_2 = 677300520}}
Hmm, it this again a rtld problem ? What goes wrong here ?
(gdb) n
47 __cxa_eh_globals *globals = __cxa_get_globals ();
(gdb) p *globals
$6 = {caughtExceptions = 0xbfbfdd68, uncaughtExceptions = 679280801}
(gdb) n
0x28b7894c in _init () from /usr/lib/libstdc++.so.4
(gdb) n
Single stepping until exit from function _init,
which has no line number information.
Second time ExAbort is caught and we fail, wheee. And of course this
catch works :P
__cxa_begin_catch (exc_obj_in=0x8127b30) at
/usr/src/contrib/libstdc++/libsupc++/eh_catch.cc:48
48 __cxa_exception *prev = globals->caughtExceptions;
(gdb) n
49 int count = header->handlerCount;
(gdb) p count
$7 = 134889840
(gdb) n
51 if (count < 0)
(gdb) n
55 count += 1;
(gdb) n
56 header->handlerCount = count;
(gdb) n
58 globals->uncaughtExceptions -= 1;
(gdb) n
59 if (header != prev)
(gdb) p *header
$8 = {exceptionType = 0x287eac74,
exceptionDestructor = 0x288676c4
<com::sun::star::ucb::CommandFailedException::~CommandFailedException()>,
unexpectedHandler = 0x28ba8cae <std::terminate()>, terminateHandler = 0x28c909d8
<abort>,
nextException = 0x0, handlerCount = 1, handlerSwitchValue = 4,
actionRecord = 0x287f57c5 "\004}\005}",
languageSpecificData = 0x287f576c "ÿ\233q\001LQ\005\224\001\vê\001\005ñ\001",
catchTemp = 0x287d0008,
adjustedPtr = 0x8127b50, unwindHeader = {exception_class =
5138137972254386944,
exception_cleanup = 0x28ba8b00 <__gxx_exception_cleanup>, private_1 = 0,
private_2 = 679280586}}
(gdb) p prev
$9 = (__cxa_exception *) 0x0
Martin
Martin Blapp, <mb@imp.ch> <mbr@FreeBSD.org>
------------------------------------------------------------------
ImproWare AG, UNIXSP & ISP, Zurlindenstrasse 29, 4133 Pratteln, CH
Phone: +41 061 826 93 00: +41 61 826 93 01
PGP: <finger -l mbr@freebsd.org>
PGP Fingerprint: B434 53FC C87C FE7B 0A18 B84C 8686 EF22 D300 551E
------------------------------------------------------------------
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-openoffice" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20021011145055.N15308-100000>
