Comment 57 for bug 417009

Revision history for this message
Michael Casadevall (mcasadevall) wrote :

After an intense round of debugging, toolchain bisecting, and other crazy things, I've finally managed to pinpoint the exact location of the crash to bridges/source/cpp_uno/gcc3_linux_arm/except.cxx:284

The code in question is the following:

        if (! rtti)
        {
            throw RuntimeException(
                OUString( RTL_CONSTASCII_USTRINGPARAM("no rtti for type ") ) +
                *reinterpret_cast< OUString const * >( &pUnoExc->pType->pTypeName ),
                Reference< XInterface >() );
        }
        }

 __cxa_throw( pCppExc, rtti, deleteException );
    }

On jaunty built versions of the library, when the code hits the __cxa_throw, it would call into the deleteException method in the same class, and continue on its merry way. On karmic and lucid, when the code hits __cxa_throw, it causes __cxa_throw to abort with a std:termiate call. Looking at the ARM C++ EABI, the only way __cxa_throw will call terminate is if there's been a failure in the phase2 unwinding of the stack. Its possible that something is being unwound that shouldn't be, or via verus, but I haven't managed to get a clear stack trace before the __cxa_throw to see the condition of the stack, and due to the nature of UNO, its quite possible that stack trace I may generate may not match what's being unwound by __cxa_throw.

I'm attempting to do a full build of OOo with debug symbols on lucid to debug this, and will post back with my results as I get them.