Author: hdu
Date: Thu Mar 27 15:42:55 2014
New Revision: 1582360
URL: http://svn.apache.org/r1582360
Log:
#i124421# disable generated type_info for the OSX64 uno bridge
When the dynamic loading of the type_info symbols failed the UNO bridge
synthesized type_info objects itself. The synthesized ones trigger the
crash observed so we disable their generation and handle the result
gracefully.
Merged from trunk revision 1582359.
Modified:
openoffice/branches/AOO410/ (props changed)
openoffice/branches/AOO410/main/ (props changed)
openoffice/branches/AOO410/main/bridges/source/cpp_uno/s5abi_macosx_x86-64/except.cxx
openoffice/branches/AOO410/main/bridges/source/cpp_uno/s5abi_macosx_x86-64/share.hxx
Propchange: openoffice/branches/AOO410/
------------------------------------------------------------------------------
Merged /openoffice/trunk:r1582359
Propchange: openoffice/branches/AOO410/main/
------------------------------------------------------------------------------
Merged /openoffice/trunk/main:r1582359
Modified:
openoffice/branches/AOO410/main/bridges/source/cpp_uno/s5abi_macosx_x86-64/except.cxx
URL:
http://svn.apache.org/viewvc/openoffice/branches/AOO410/main/bridges/source/cpp_uno/s5abi_macosx_x86-64/except.cxx?rev=1582360&r1=1582359&r2=1582360&view=diff
==============================================================================
---
openoffice/branches/AOO410/main/bridges/source/cpp_uno/s5abi_macosx_x86-64/except.cxx
(original)
+++
openoffice/branches/AOO410/main/bridges/source/cpp_uno/s5abi_macosx_x86-64/except.cxx
Thu Mar 27 15:42:55 2014
@@ -39,6 +39,7 @@
#include <rtl/ustrbuf.hxx>
#include <osl/diagnose.h>
#include <osl/mutex.hxx>
+#include <tools/debug.hxx>
#include <com/sun/star/uno/genfunc.hxx>
#include "com/sun/star/uno/RuntimeException.hpp"
@@ -174,9 +175,15 @@ type_info * RTTI::getRTTI( typelib_Compo
// symbol and rtti-name is nearly identical,
// the symbol is prefixed with _ZTI
char const * rttiName = symName.getStr() +4;
-#if OSL_DEBUG_LEVEL > 1
+#if OSL_DEBUG_LEVEL >= 1
fprintf( stderr,"generated rtti for %s\n", rttiName );
+ const OString aCUnoName = OUStringToOString( unoName,
RTL_TEXTENCODING_UTF8);
+ DBG_WARNING1( "TypeInfo for \"%s\" not found and cannot be
generated.\n", aCUnoName.getStr());
#endif
+#if 0 // TODO: enable it again when the generated class_type_infos always work.
+ // Forcing the toolchain to create authentic typeinfos is much better
though
+ // than the sick concept of reverse-engineering the platform's toolchain
+ // and generating the missing type_infos.
if (pTypeDescr->pBaseTypeDescription)
{
// ensure availability of base
@@ -190,10 +197,12 @@ type_info * RTTI::getRTTI( typelib_Compo
// this class has no base class
rtti = new __class_type_info( strdup( rttiName ) );
}
-
- pair< t_rtti_map::iterator, bool > insertion(
- m_generatedRttis.insert( t_rtti_map::value_type( unoName,
rtti ) ) );
- OSL_ENSURE( insertion.second, "### inserting new generated
rtti failed?!" );
+#else
+ rtti = NULL;
+#endif
+
+ bool bOK = m_generatedRttis.insert( t_rtti_map::value_type(
unoName, rtti )).second;
+ OSL_ENSURE( bOK, "### inserting new generated rtti failed?!" );
}
else // taking already generated rtti
{
@@ -213,6 +222,8 @@ type_info * RTTI::getRTTI( typelib_Compo
static void deleteException( void * pExc )
{
__cxa_exception const * header = ((__cxa_exception const *)pExc - 1);
+ if( !header->exceptionType) // TODO: remove this when getRTTI() always
returns non-NULL
+ return; // NOTE: leak for now
typelib_TypeDescription * pTD = 0;
OUString unoName( toUNOname( header->exceptionType->name() ) );
::typelib_typedescription_getByName( &pTD, unoName.pData );
Modified:
openoffice/branches/AOO410/main/bridges/source/cpp_uno/s5abi_macosx_x86-64/share.hxx
URL:
http://svn.apache.org/viewvc/openoffice/branches/AOO410/main/bridges/source/cpp_uno/s5abi_macosx_x86-64/share.hxx?rev=1582360&r1=1582359&r2=1582360&view=diff
==============================================================================
---
openoffice/branches/AOO410/main/bridges/source/cpp_uno/s5abi_macosx_x86-64/share.hxx
(original)
+++
openoffice/branches/AOO410/main/bridges/source/cpp_uno/s5abi_macosx_x86-64/share.hxx
Thu Mar 27 15:42:55 2014
@@ -85,6 +85,8 @@ extern "C" __cxa_eh_globals *__cxa_get_g
// -----
+#if 0 // #i124421# disabled because its use in except.cxx is disabled
+
// on OSX 64bit the class_type_info classes are specified
// in http://refspecs.linuxbase.org/cxxabi-1.86.html#rtti but
// these details are not generally available in a public header
@@ -106,6 +108,8 @@ public:
{}
};
+#endif
+
//==================================================================================================
void raiseException(
uno_Any * pUnoExc, uno_Mapping * pUno2Cpp );