Skip site navigation (1)Skip section navigation (2)
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>