...and similarly for __cxa_allocate_exception and __cxa_throw
Change-Id: I87ae299aac97180f0587c553d85b051decca155c
This commit is contained in:
@@ -250,7 +250,7 @@ void raiseException( uno_Any * pUnoExc, uno_Mapping * pUno2Cpp )
|
|||||||
Reference< XInterface >() );
|
Reference< XInterface >() );
|
||||||
}
|
}
|
||||||
|
|
||||||
pCppExc = __cxa_allocate_exception( pTypeDescr->nSize );
|
pCppExc = __cxxabiv1::__cxa_allocate_exception( pTypeDescr->nSize );
|
||||||
::uno_copyAndConvertData( pCppExc, pUnoExc->pData, pTypeDescr, pUno2Cpp );
|
::uno_copyAndConvertData( pCppExc, pUnoExc->pData, pTypeDescr, pUno2Cpp );
|
||||||
|
|
||||||
// destruct uno exception
|
// destruct uno exception
|
||||||
@@ -269,7 +269,7 @@ void raiseException( uno_Any * pUnoExc, uno_Mapping * pUno2Cpp )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
__cxa_throw( pCppExc, rtti, deleteException );
|
__cxxabiv1::__cxa_throw( pCppExc, rtti, deleteException );
|
||||||
}
|
}
|
||||||
|
|
||||||
//==================================================================================================
|
//==================================================================================================
|
||||||
|
@@ -80,28 +80,31 @@ struct __cxa_eh_globals
|
|||||||
// Therefore, provide a declaration here for old GCC (libstdc++, really) version
|
// Therefore, provide a declaration here for old GCC (libstdc++, really) version
|
||||||
// that returns a void pointer, and in the code calling it always cast to the
|
// that returns a void pointer, and in the code calling it always cast to the
|
||||||
// above fake definition of CPPU_CURRENT_NAMESPACE::__cxa_eh_globals (which
|
// above fake definition of CPPU_CURRENT_NAMESPACE::__cxa_eh_globals (which
|
||||||
// hopefully keeps matching the real definition in libstdc++):
|
// hopefully keeps matching the real definition in libstdc++); similarly for
|
||||||
|
// __cxa_allocate_exception and __cxa_throw, though they do not have the
|
||||||
|
// additional problem of an incompletely declared return type:
|
||||||
|
|
||||||
#if !HAVE_GCC_CXXABI_H_CXA_GET_GLOBALS
|
#if !HAVE_GCC_CXXABI_H_CXA_GET_GLOBALS
|
||||||
namespace __cxxabiv1 { extern "C" void * __cxa_get_globals () throw(); }
|
namespace __cxxabiv1 { extern "C" void * __cxa_get_globals() throw(); }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !HAVE_GCC_CXXABI_H_CXA_ALLOCATE_EXCEPTION
|
||||||
|
namespace __cxxabiv1 {
|
||||||
|
extern "C" void * __cxa_allocate_exception(std::size_t thrown_size) throw();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !HAVE_GCC_CXXABI_H_CXA_THROW
|
||||||
|
namespace __cxxabiv1 {
|
||||||
|
extern "C" void __cxa_throw(
|
||||||
|
void * thrown_exception, void * tinfo, void (* dest)(void *))
|
||||||
|
__attribute__((noreturn));
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
namespace CPPU_CURRENT_NAMESPACE
|
namespace CPPU_CURRENT_NAMESPACE
|
||||||
{
|
{
|
||||||
|
|
||||||
// The following are in cxxabi.h since GCC 4.7 (they are wrapped in
|
|
||||||
// CPPU_CURRENT_NAMESPACE here as different GCC versions have slightly different
|
|
||||||
// declarations for them, e.g., with or without throw() specification, so would
|
|
||||||
// complain about redeclarations of these somewhat implicitly declared
|
|
||||||
// functions):
|
|
||||||
#if __GNUC__ == 4 && __GNUC_MINOR__ <= 6
|
|
||||||
extern "C" void *__cxa_allocate_exception(
|
|
||||||
std::size_t thrown_size ) throw();
|
|
||||||
extern "C" void __cxa_throw (
|
|
||||||
void *thrown_exception, void *tinfo, void (*dest) (void *) ) __attribute__((noreturn));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// -----
|
|
||||||
|
|
||||||
//==================================================================================================
|
//==================================================================================================
|
||||||
void raiseException(
|
void raiseException(
|
||||||
uno_Any * pUnoExc, uno_Mapping * pUno2Cpp );
|
uno_Any * pUnoExc, uno_Mapping * pUno2Cpp );
|
||||||
|
@@ -10,7 +10,9 @@
|
|||||||
#ifndef CONFIG_GCC_H
|
#ifndef CONFIG_GCC_H
|
||||||
#define CONFIG_GCC_H
|
#define CONFIG_GCC_H
|
||||||
|
|
||||||
|
#define HAVE_GCC_CXXABI_H_CXA_ALLOCATE_EXCEPTION 0
|
||||||
#define HAVE_GCC_CXXABI_H_CXA_GET_GLOBALS 0
|
#define HAVE_GCC_CXXABI_H_CXA_GET_GLOBALS 0
|
||||||
|
#define HAVE_GCC_CXXABI_H_CXA_THROW 0
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
22
configure.ac
22
configure.ac
@@ -5572,6 +5572,17 @@ if test "$GCC" = "yes"; then
|
|||||||
], [AC_MSG_RESULT([no])])
|
], [AC_MSG_RESULT([no])])
|
||||||
CFLAGS=$save_CFLAGS
|
CFLAGS=$save_CFLAGS
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([whether $CXX declares __cxa_allocate_exception in cxxabi.h])
|
||||||
|
AC_LANG_PUSH([C++])
|
||||||
|
AC_COMPILE_IFELSE([AC_LANG_SOURCE([
|
||||||
|
#include <cxxabi.h>
|
||||||
|
void * f() { return __cxxabiv1::__cxa_allocate_exception(0); }
|
||||||
|
])], [
|
||||||
|
AC_DEFINE([HAVE_GCC_CXXABI_H_CXA_ALLOCATE_EXCEPTION],[1])
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
], [AC_MSG_RESULT([no])])
|
||||||
|
AC_LANG_POP([C++])
|
||||||
|
|
||||||
AC_MSG_CHECKING([whether $CXX declares __cxa_get_globals in cxxabi.h])
|
AC_MSG_CHECKING([whether $CXX declares __cxa_get_globals in cxxabi.h])
|
||||||
AC_LANG_PUSH([C++])
|
AC_LANG_PUSH([C++])
|
||||||
AC_COMPILE_IFELSE([AC_LANG_SOURCE([
|
AC_COMPILE_IFELSE([AC_LANG_SOURCE([
|
||||||
@@ -5582,6 +5593,17 @@ if test "$GCC" = "yes"; then
|
|||||||
AC_MSG_RESULT([yes])
|
AC_MSG_RESULT([yes])
|
||||||
], [AC_MSG_RESULT([no])])
|
], [AC_MSG_RESULT([no])])
|
||||||
AC_LANG_POP([C++])
|
AC_LANG_POP([C++])
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([whether $CXX declares __cxa_throw in cxxabi.h])
|
||||||
|
AC_LANG_PUSH([C++])
|
||||||
|
AC_COMPILE_IFELSE([AC_LANG_SOURCE([
|
||||||
|
#include <cxxabi.h>
|
||||||
|
void f() { __cxxabiv1::__cxa_throw(0, 0, 0); }
|
||||||
|
])], [
|
||||||
|
AC_DEFINE([HAVE_GCC_CXXABI_H_CXA_THROW],[1])
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
], [AC_MSG_RESULT([no])])
|
||||||
|
AC_LANG_POP([C++])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
AC_SUBST(HAVE_GCC_NO_LONG_DOUBLE)
|
AC_SUBST(HAVE_GCC_NO_LONG_DOUBLE)
|
||||||
|
Reference in New Issue
Block a user