summaryrefslogtreecommitdiff
path: root/bridges
diff options
context:
space:
mode:
authorTor Lillqvist <tml@iki.fi>2011-11-11 22:56:16 +0200
committerTor Lillqvist <tml@iki.fi>2011-11-11 22:59:40 +0200
commit7ff1c270456e220fb22ee0a6300e11765a6c1ca2 (patch)
tree3dc50635f7afb425d1e7e235d58c456d673fcd13 /bridges
parent6f68a2f98628d472d988fca62915e93cbfc06df4 (diff)
Add the ARM variant
Diffstat (limited to 'bridges')
-rw-r--r--bridges/source/cpp_uno/gcc3_ios_arm/share.hxx73
1 files changed, 72 insertions, 1 deletions
diff --git a/bridges/source/cpp_uno/gcc3_ios_arm/share.hxx b/bridges/source/cpp_uno/gcc3_ios_arm/share.hxx
index 8b105c0880b3..5c2d4ede9e81 100644
--- a/bridges/source/cpp_uno/gcc3_ios_arm/share.hxx
+++ b/bridges/source/cpp_uno/gcc3_ios_arm/share.hxx
@@ -32,10 +32,79 @@
#include <exception>
#include <cstddef>
+// As this code is used both for the simulatos (x86) and device (ARM),
+// this file is a combination of the share.hxx in ../gcc3_linux_intel
+// and in ../gcc3_linux_arm.
+
+#ifdef __arm
+
namespace CPPU_CURRENT_NAMESPACE
{
-bool isSimpleReturnType(typelib_TypeDescription * pTD, bool recursive = false);
+ void dummy_can_throw_anything( char const * );
+
+ // -- following decl from libstdc++-v3/libsupc++/unwind-cxx.h and unwind.h
+
+ struct __cxa_exception
+ {
+ ::std::type_info *exceptionType;
+ void (*exceptionDestructor)(void *);
+
+ ::std::unexpected_handler unexpectedHandler;
+ ::std::terminate_handler terminateHandler;
+
+ __cxa_exception *nextException;
+
+ int handlerCount;
+#ifdef __ARM_EABI__
+ __cxa_exception *nextPropagatingException;
+ int propagationCount;
+#else
+ int handlerSwitchValue;
+ const unsigned char *actionRecord;
+ const unsigned char *languageSpecificData;
+ void *catchTemp;
+ void *adjustedPtr;
+#endif
+ _Unwind_Exception unwindHeader;
+ };
+
+ extern "C" void *__cxa_allocate_exception(
+ std::size_t thrown_size ) throw();
+ extern "C" void __cxa_throw (
+ void *thrown_exception, std::type_info *tinfo,
+ void (*dest) (void *) ) __attribute__((noreturn));
+
+ struct __cxa_eh_globals
+ {
+ __cxa_exception *caughtExceptions;
+ unsigned int uncaughtExceptions;
+#ifdef __ARM_EABI__
+ __cxa_exception *propagatingExceptions;
+#endif
+ };
+ extern "C" __cxa_eh_globals *__cxa_get_globals () throw();
+
+ // -----
+
+ //====================================================================
+ void raiseException(
+ uno_Any * pUnoExc, uno_Mapping * pUno2Cpp );
+ //====================================================================
+ void fillUnoException(
+ __cxa_exception * header, uno_Any *, uno_Mapping * pCpp2Uno );
+}
+
+namespace arm
+{
+ enum armlimits { MAX_GPR_REGS = 4 };
+ bool return_in_hidden_param( typelib_TypeDescriptionReference *pTypeRef );
+}
+
+#else
+
+namespace CPPU_CURRENT_NAMESPACE
+{
void dummy_can_throw_anything( char const * );
@@ -90,6 +159,8 @@ void raiseException(
//==================================================================================================
void fillUnoException(
__cxa_exception * header, uno_Any *, uno_Mapping * pCpp2Uno );
+
+ bool isSimpleReturnType(typelib_TypeDescription * pTD, bool recursive = false);
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */