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>