This is an automated email from the ASF dual-hosted git repository.
jim pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/openoffice.git
The following commit(s) were added to refs/heads/trunk by this push:
new db691b7 some macOS improvements, mostly around Xcode issues
db691b7 is described below
commit db691b7644418a115ed5b0c980af8fc48fab71f6
Author: Jim Jagielski <[email protected]>
AuthorDate: Tue Feb 2 16:47:53 2021 -0500
some macOS improvements, mostly around Xcode issues
(cherry picked from commit a3aaa3158e09f64f0267f18c91a7408b3967df1c)
---
.../source/cpp_uno/s5abi_macosx_x86-64/except.cxx | 25 +++++++++++++++-------
.../source/cpp_uno/s5abi_macosx_x86-64/share.hxx | 25 ++++++----------------
2 files changed, 24 insertions(+), 26 deletions(-)
diff --git a/main/bridges/source/cpp_uno/s5abi_macosx_x86-64/except.cxx
b/main/bridges/source/cpp_uno/s5abi_macosx_x86-64/except.cxx
index d26186b..1a424ed 100644
--- a/main/bridges/source/cpp_uno/s5abi_macosx_x86-64/except.cxx
+++ b/main/bridges/source/cpp_uno/s5abi_macosx_x86-64/except.cxx
@@ -179,6 +179,7 @@ type_info * RTTI::getRTTI( typelib_CompoundTypeDescription
*pTypeDescr ) SAL_THR
const OString aCUnoName = OUStringToOString( unoName,
RTL_TEXTENCODING_UTF8);
OSL_TRACE( "TypeInfo for \"%s\" not found and cannot be
generated.\n", aCUnoName.getStr());
#endif
+#ifndef AOO_BYPASS_RTTI
if (pTypeDescr->pBaseTypeDescription)
{
// ensure availability of base
@@ -192,7 +193,9 @@ type_info * RTTI::getRTTI( typelib_CompoundTypeDescription
*pTypeDescr ) SAL_THR
// this class has no base class
rtti = new __class_type_info( strdup( rttiName ) );
}
-
+#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?!" );
}
@@ -214,6 +217,15 @@ type_info * RTTI::getRTTI( typelib_CompoundTypeDescription
*pTypeDescr ) SAL_THR
static void deleteException( void * pExc )
{
__cxa_exception const * header = static_cast<__cxa_exception const
*>(pExc) - 1;
+ /* More __cxa_exception mumbo-jumbo. See share.hxx and fillUnoException()
below */
+ if (header->exceptionDestructor != &deleteException)
+ {
+ header = reinterpret_cast<__cxa_exception const
*>(reinterpret_cast<char const *>(header) - 8);
+ }
+ if( !header->exceptionType)
+ {
+ return; // NOTE: leak for now
+ }
typelib_TypeDescription * pTD = 0;
OUString unoName( toUNOname( header->exceptionType->name() ) );
::typelib_typedescription_getByName( &pTD, unoName.pData );
@@ -308,15 +320,12 @@ void fillUnoException( __cxa_exception * header, uno_Any
* pUnoExc, uno_Mapping
* on an earlier version (eg, community builds). In this situation the
* reserved ptr doesn't exist in the struct returned and so the offsets
* that header uses are wrong. This assumes that reserved isn't used
- * and that referenceCount is always >0 in the cases we handle
+ * and that referenceCount is always >0 in the cases we handle.
+ * See share.hxx for the definition of __cxa_exception
*/
+ if (*reinterpret_cast<void **>(header) == 0)
{
- // Does this look like the newer struct __cxa_exception?
- // That is, is the 1st element NULL (*reserved)?
- if (*reinterpret_cast<void **>(header) == 0) {
- // Yes. So we move up a slot to offset
- header = reinterpret_cast<__cxa_exception *>(reinterpret_cast<void
**>(header) + 1);
- }
+ header = reinterpret_cast<__cxa_exception *>(reinterpret_cast<char
*>(header) + 8);
}
typelib_TypeDescription * pExcTypeDescr = 0;
diff --git a/main/bridges/source/cpp_uno/s5abi_macosx_x86-64/share.hxx
b/main/bridges/source/cpp_uno/s5abi_macosx_x86-64/share.hxx
index 0db0174..cc10ae8 100644
--- a/main/bridges/source/cpp_uno/s5abi_macosx_x86-64/share.hxx
+++ b/main/bridges/source/cpp_uno/s5abi_macosx_x86-64/share.hxx
@@ -47,36 +47,25 @@ struct _Unwind_Exception
struct __cxa_exception
{
-#if __LP64__
- // From LLVM 10 - Added reserved member at top of struct. Who the hell
does that?
- // https://reviews.llvm.org/rG674ec1eb16678b8addc02a4b0534ab383d22fa77
- // Sure would be nice to be able to test for CCNUMVER >= 1000000000
- // and COM == CLANG here.
- // void *reserved;
- // ----- from libcxxabi/src/cxa_exception.hpp
- // This is a new field to support C++ 0x exception_ptr.
- // For binary compatibility it is at the start of this
- // struct which is prepended to the object thrown in
- // __cxa_allocate_exception.
- size_t referenceCount;
+ /* From LLVM 10 - Added reserved member at top of struct. Who the hell
does that?
+ https://reviews.llvm.org/rG674ec1eb16678b8addc02a4b0534ab383d22fa77
+ NOTE: Apple clang version != real LLVM version. Don't be fooled!
+ */
+#if 0
+ void *reserved;
#endif
-
+ size_t referenceCount;
::std::type_info *exceptionType;
void (*exceptionDestructor)(void *);
-
::std::unexpected_handler unexpectedHandler;
::std::terminate_handler terminateHandler;
-
__cxa_exception *nextException;
-
int handlerCount;
-
int handlerSwitchValue;
const unsigned char *actionRecord;
const unsigned char *languageSpecificData;
void *catchTemp;
void *adjustedPtr;
-
_Unwind_Exception unwindHeader;
};