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.
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)
OUString( RTL_CONSTASCII_ USTRINGPARAM( "no rtti for type ") ) +
*reinterpret_ cast< OUString const * >( &pUnoExc- >pType- >pTypeName ),
Reference< XInterface >() );
{
throw RuntimeException(
}
}
__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.