Hi .. I mailed with Kevin B. Hendricks this weekend and we tried to find out, why the OpenOffice.org binaries did not work under a normal Debian-System. Kevin build his OpenOffice.org with gcc-3.1 and glibc2.2.5 and binutils2.12.90.0.7, but we got a SIGKILL after the splash screen comes. Beside Jack Howorth he found out, that this code on the bottom is breaking the functionality of OpenOffice.org on Debian for PowerPC and SuSE ... We are working on it, but we are not really sure, where the bug comes from. If Kevin builds the libcppuhelper3.so lib (which location is in /usr/lib/openoffice/program) with -O0, then OpenOffice.org starts and works (up to choosing a connection for the external adressdatabase, then you got a SIGKILL) It seems also, that the libc6 is broken on PowerPC. I send Ben Collins a patch and I think he will apply this to the next glibc-package. You can have a look to "my" libc6 here: http://bourbaki.math.uni-kiel.de/~jpalic/debian/pool/main/l/libc6/ I have to check out, what are the differences be between Kevins toolchain and ours. Haggai, you tried to build OOo with gcc-3.1 on Intel and got a similar SIGKILL as we on PowerPC. I wonder, if the build of libcppuhelper3.so with -O0 instead of -O2 will work for you, too. Below the mail from Kevin B. Hendrick about the PowerPC issue .... regards Jan ----- Forwarded message from "Kevin B. Hendricks" <kevin.hendricks@sympatico.ca> ----- Reply-To: dev@openoffice.org From: "Kevin B. Hendricks" <kevin.hendricks@sympatico.ca> To: dev@udk.openoffice.org, dev@openoffice.org Date: Fri, 5 Jul 2002 23:50:55 -0400 X-Mailer: KMail [version 1.4] Subject: [dev] question on cppuhelper throwException and double TYPELIB_DANGER_RELEASE Hi, In cppuhelper/source/exc_thrower.cxx is the routine cppu::throwException(). I have a backtrace showing we are actually invoking TYPELIB_DANGER_RELEASE(pComp) twice. That macro does *not* check if pComp exists before invoking its release method. This is results in a jump into the weeds that is generating a SIGILL on Debian ppc Linux machines. So I have some questions. 1. can xThrower->throwException(rExc) actually return? TYPELIB_DANGER_RELEASE( pComp ); xThrower->throwException( rExc ); 2. if so, then why are we not checking if pComp still exists (or if it has already been released) before we call TYPELIB_DANGER_RELEASE( pComp ); the second time. 3. If not, could this be a race in that xThrower->throwException may actually return briefly until the excetion that is thrown is actually caught. If it should not ever return perhaps we should put an infinite loop there to prevent a race. Here is the full routine. void SAL_CALL throwException( const Any & rExc ) SAL_THROW( (Exception) ) { if (rExc.getValueTypeClass() == TypeClass_EXCEPTION) { OUString aExceptionName( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.uno.Exception") ); typelib_TypeDescription * pComp = 0; TYPELIB_DANGER_GET( &pComp, rExc.getValueTypeRef() ); // must be derived from com.sun.star.uno.Exception for ( typelib_CompoundTypeDescription * pTD = (typelib_CompoundTypeDescription *)pComp; pTD; pTD = pTD->pBaseTypeDescription ) { if (aExceptionName == rtl::OUString(((typelib_TypeDescription *)pTD)->pTypeName)) { Mapping aUno2Cpp( OUString( RTL_CONSTASCII_USTRINGPARAM(UNO_LB_UNO) ), OUString( RTL_CONSTASCII_USTRINGPARAM(CPPU_CURRENT_LANGUAGE_BINDING_NAME) ) ); OSL_ENSURE( aUno2Cpp.is(), "### cannot get uno to cpp mapping!" ); if (aUno2Cpp.is()) { uno_Interface * pUnoI = new ExceptionThrower(); (*pUnoI->acquire)( pUnoI ); Reference< XThrower > xThrower; aUno2Cpp.mapInterface( reinterpret_cast< void ** >( &xThrower ), pUnoI, ::cppu::getCppuType( (const Reference< XThrower > *)0 ) ); (*pUnoI->release)( pUnoI ); if (xThrower.is()) { TYPELIB_DANGER_RELEASE( pComp ); xThrower->throwException( rExc ); } } break; } } TYPELIB_DANGER_RELEASE( pComp ); } throw RuntimeException( OUString( RTL_CONSTASCII_USTRINGPARAM("failed throwing exception generically!") ), Reference< XInterface >() ); } Any guidance would be greatly appreciated. Thanks, Kevin --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscribe@openoffice.org For additional commands, e-mail: dev-help@openoffice.org ----- End forwarded message ----- -- .''`. Jan-Hendrik Palic | : :' : ** Debian GNU/ Linux ** | ** OpenOffice.org ** ,.. ,.. `. `' http://www.debian.org | http://www.openoffice.org ,: ..` ` `- jan.palic@linux-debian.de | ' ` `
Attachment:
pgpjzl_A2fvSR.pgp
Description: PGP signature