summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bridges/CustomTarget_gcc3_ios.mk (renamed from bridges/CustomTarget_gcc3_ios_arm.mk)12
-rw-r--r--bridges/Library_cpp_uno.mk14
-rw-r--r--bridges/Module_bridges.mk2
-rw-r--r--bridges/source/cpp_uno/gcc3_ios/cpp2uno-arm64.cxx (renamed from bridges/source/cpp_uno/gcc3_ios_arm/cpp2uno-arm64.cxx)0
-rw-r--r--bridges/source/cpp_uno/gcc3_ios/cpp2uno-i386.cxx (renamed from bridges/source/cpp_uno/gcc3_ios_arm/cpp2uno-i386.cxx)0
-rw-r--r--bridges/source/cpp_uno/gcc3_ios/cpp2uno.cxx (renamed from bridges/source/cpp_uno/gcc3_ios_arm/cpp2uno.cxx)0
-rw-r--r--bridges/source/cpp_uno/gcc3_ios/except.cxx (renamed from bridges/source/cpp_uno/gcc3_ios_arm/except.cxx)0
-rwxr-xr-xbridges/source/cpp_uno/gcc3_ios/generate-snippets.pl (renamed from bridges/source/cpp_uno/gcc3_ios_arm/generate-snippets.pl)0
-rw-r--r--bridges/source/cpp_uno/gcc3_ios/helper.s (renamed from bridges/source/cpp_uno/gcc3_ios_arm/helper.s)0
-rw-r--r--bridges/source/cpp_uno/gcc3_ios/rtti.h (renamed from bridges/source/cpp_uno/gcc3_ios_arm/rtti.h)0
-rw-r--r--bridges/source/cpp_uno/gcc3_ios/share.hxx (renamed from bridges/source/cpp_uno/gcc3_ios_arm/share.hxx)4
-rw-r--r--bridges/source/cpp_uno/gcc3_ios/uno2cpp-arm64.cxx (renamed from bridges/source/cpp_uno/gcc3_ios_arm/uno2cpp-arm64.cxx)0
-rw-r--r--bridges/source/cpp_uno/gcc3_ios/uno2cpp-i386.cxx (renamed from bridges/source/cpp_uno/gcc3_ios_arm/uno2cpp-i386.cxx)0
-rw-r--r--bridges/source/cpp_uno/gcc3_ios/uno2cpp.cxx (renamed from bridges/source/cpp_uno/gcc3_ios_arm/uno2cpp.cxx)0
-rw-r--r--bridges/source/cpp_uno/gcc3_ios/unwind-cxx.h (renamed from bridges/source/cpp_uno/gcc3_ios_arm/unwind-cxx.h)0
-rw-r--r--bridges/source/cpp_uno/gcc3_ios_arm/cpp2uno-arm.cxx576
-rw-r--r--bridges/source/cpp_uno/gcc3_ios_arm/uno2cpp-arm.cxx687
-rw-r--r--configure.ac27
-rw-r--r--solenv/gbuild/platform/iOS_ARM_GCC.mk22
-rw-r--r--solenv/gbuild/platform/iOS_I386_GCC.mk22
20 files changed, 17 insertions, 1349 deletions
diff --git a/bridges/CustomTarget_gcc3_ios_arm.mk b/bridges/CustomTarget_gcc3_ios.mk
index 4d1796db42e3..a39c919c4a40 100644
--- a/bridges/CustomTarget_gcc3_ios_arm.mk
+++ b/bridges/CustomTarget_gcc3_ios.mk
@@ -7,14 +7,14 @@
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
-$(eval $(call gb_CustomTarget_CustomTarget,bridges/source/cpp_uno/gcc3_ios_arm))
+$(eval $(call gb_CustomTarget_CustomTarget,bridges/source/cpp_uno/gcc3_ios))
-$(call gb_CustomTarget_get_target,bridges/source/cpp_uno/gcc3_ios_arm) : \
- $(call gb_CustomTarget_get_workdir,bridges/source/cpp_uno/gcc3_ios_arm)/codesnippets.S
+$(call gb_CustomTarget_get_target,bridges/source/cpp_uno/gcc3_ios) : \
+ $(call gb_CustomTarget_get_workdir,bridges/source/cpp_uno/gcc3_ios)/codesnippets.S
-$(call gb_CustomTarget_get_workdir,bridges/source/cpp_uno/gcc3_ios_arm)/codesnippets.S : \
- $(SRCDIR)/bridges/source/cpp_uno/gcc3_ios_arm/generate-snippets.pl \
- | $(call gb_CustomTarget_get_workdir,bridges/source/cpp_uno/gcc3_ios_arm)/.dir
+$(call gb_CustomTarget_get_workdir,bridges/source/cpp_uno/gcc3_ios)/codesnippets.S : \
+ $(SRCDIR)/bridges/source/cpp_uno/gcc3_ios/generate-snippets.pl \
+ | $(call gb_CustomTarget_get_workdir,bridges/source/cpp_uno/gcc3_ios)/.dir
$(PERL) $< > $@
# vim: set noet sw=4 ts=4:
diff --git a/bridges/Library_cpp_uno.mk b/bridges/Library_cpp_uno.mk
index 086cb6f566a8..993342baea58 100644
--- a/bridges/Library_cpp_uno.mk
+++ b/bridges/Library_cpp_uno.mk
@@ -10,18 +10,8 @@
$(eval $(call gb_Library_Library,$(gb_CPPU_ENV)_uno))
ifeq ($(OS),IOS)
-bridges_SELECTED_BRIDGE := gcc3_ios_arm
-bridge_noopt_objects := cpp2uno except uno2cpp
-# HACK
-#$(call gb_LinkTarget_get_target,$(call gb_Library_get_linktarget,gcc3_uno)) : \
-# $(call gb_CustomTarget_get_workdir,bridges/source/cpp_uno/gcc3_linux_arm)/armhelper.objectlist
-#$(call gb_LinkTarget_get_target,$(call gb_Library_get_linktarget,gcc3_uno)) : \
-# EXTRAOBJECTLISTS += $(call gb_CustomTarget_get_workdir,bridges/source/cpp_uno/gcc3_linux_arm)/armhelper.objectlist
-
-#$(eval $(call gb_Library_use_sdk_api,gcc3_uno))
-#bridge_asm_objects := helper
-#bridge_exception_objects := cpp2uno cpp2uno-arm cpp2uno-arm64 cpp2uno-i386 except uno2cpp uno2cpp-arm uno2cpp-arm64 uno2cpp-i386
-#$(eval $(call gb_Library_use_custom_headers,gcc3_uno,bridges/source/cpp_uno/gcc3_ios_arm))
+bridges_SELECTED_BRIDGE := gcc3_ios
+bridge_noopt_objects := cpp2uno cpp2uno-arm64 cpp2uno-i386 except uno2cpp uno2cpp-arm64 uno2cpp-i386
else ifeq ($(CPUNAME),ARM)
diff --git a/bridges/Module_bridges.mk b/bridges/Module_bridges.mk
index 534efda6936b..f19e485e7257 100644
--- a/bridges/Module_bridges.mk
+++ b/bridges/Module_bridges.mk
@@ -18,7 +18,7 @@ $(eval $(call gb_Module_add_targets,bridges,\
) \
$(if $(filter ARM,$(CPUNAME)),\
$(if $(filter IOS,$(OS)),\
- CustomTarget_gcc3_ios_arm) \
+ CustomTarget_gcc3_ios) \
$(if $(filter ANDROID LINUX,$(OS)),\
CustomTarget_gcc3_linux_arm) \
) \
diff --git a/bridges/source/cpp_uno/gcc3_ios_arm/cpp2uno-arm64.cxx b/bridges/source/cpp_uno/gcc3_ios/cpp2uno-arm64.cxx
index 64ac9ed38b2b..64ac9ed38b2b 100644
--- a/bridges/source/cpp_uno/gcc3_ios_arm/cpp2uno-arm64.cxx
+++ b/bridges/source/cpp_uno/gcc3_ios/cpp2uno-arm64.cxx
diff --git a/bridges/source/cpp_uno/gcc3_ios_arm/cpp2uno-i386.cxx b/bridges/source/cpp_uno/gcc3_ios/cpp2uno-i386.cxx
index 6a3689ca6c33..6a3689ca6c33 100644
--- a/bridges/source/cpp_uno/gcc3_ios_arm/cpp2uno-i386.cxx
+++ b/bridges/source/cpp_uno/gcc3_ios/cpp2uno-i386.cxx
diff --git a/bridges/source/cpp_uno/gcc3_ios_arm/cpp2uno.cxx b/bridges/source/cpp_uno/gcc3_ios/cpp2uno.cxx
index 46726a8b30ba..46726a8b30ba 100644
--- a/bridges/source/cpp_uno/gcc3_ios_arm/cpp2uno.cxx
+++ b/bridges/source/cpp_uno/gcc3_ios/cpp2uno.cxx
diff --git a/bridges/source/cpp_uno/gcc3_ios_arm/except.cxx b/bridges/source/cpp_uno/gcc3_ios/except.cxx
index 1d1eeccd97ae..1d1eeccd97ae 100644
--- a/bridges/source/cpp_uno/gcc3_ios_arm/except.cxx
+++ b/bridges/source/cpp_uno/gcc3_ios/except.cxx
diff --git a/bridges/source/cpp_uno/gcc3_ios_arm/generate-snippets.pl b/bridges/source/cpp_uno/gcc3_ios/generate-snippets.pl
index a8548836fef3..a8548836fef3 100755
--- a/bridges/source/cpp_uno/gcc3_ios_arm/generate-snippets.pl
+++ b/bridges/source/cpp_uno/gcc3_ios/generate-snippets.pl
diff --git a/bridges/source/cpp_uno/gcc3_ios_arm/helper.s b/bridges/source/cpp_uno/gcc3_ios/helper.s
index 7461cbccc4e7..7461cbccc4e7 100644
--- a/bridges/source/cpp_uno/gcc3_ios_arm/helper.s
+++ b/bridges/source/cpp_uno/gcc3_ios/helper.s
diff --git a/bridges/source/cpp_uno/gcc3_ios_arm/rtti.h b/bridges/source/cpp_uno/gcc3_ios/rtti.h
index fd8ef3715082..fd8ef3715082 100644
--- a/bridges/source/cpp_uno/gcc3_ios_arm/rtti.h
+++ b/bridges/source/cpp_uno/gcc3_ios/rtti.h
diff --git a/bridges/source/cpp_uno/gcc3_ios_arm/share.hxx b/bridges/source/cpp_uno/gcc3_ios/share.hxx
index fec1f350fe5e..589f4ba7a174 100644
--- a/bridges/source/cpp_uno/gcc3_ios_arm/share.hxx
+++ b/bridges/source/cpp_uno/gcc3_ios/share.hxx
@@ -16,8 +16,8 @@
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
-#ifndef INCLUDED_BRIDGES_SOURCE_CPP_UNO_GCC3_IOS_ARM_SHARE_HXX
-#define INCLUDED_BRIDGES_SOURCE_CPP_UNO_GCC3_IOS_ARM_SHARE_HXX
+#ifndef INCLUDED_BRIDGES_SOURCE_CPP_UNO_GCC3_IOS_SHARE_HXX
+#define INCLUDED_BRIDGES_SOURCE_CPP_UNO_GCC3_IOS_SHARE_HXX
#include "uno/mapping.h"
diff --git a/bridges/source/cpp_uno/gcc3_ios_arm/uno2cpp-arm64.cxx b/bridges/source/cpp_uno/gcc3_ios/uno2cpp-arm64.cxx
index 7915fa7a9513..7915fa7a9513 100644
--- a/bridges/source/cpp_uno/gcc3_ios_arm/uno2cpp-arm64.cxx
+++ b/bridges/source/cpp_uno/gcc3_ios/uno2cpp-arm64.cxx
diff --git a/bridges/source/cpp_uno/gcc3_ios_arm/uno2cpp-i386.cxx b/bridges/source/cpp_uno/gcc3_ios/uno2cpp-i386.cxx
index 6b53831fd565..6b53831fd565 100644
--- a/bridges/source/cpp_uno/gcc3_ios_arm/uno2cpp-i386.cxx
+++ b/bridges/source/cpp_uno/gcc3_ios/uno2cpp-i386.cxx
diff --git a/bridges/source/cpp_uno/gcc3_ios_arm/uno2cpp.cxx b/bridges/source/cpp_uno/gcc3_ios/uno2cpp.cxx
index 17bd59583737..17bd59583737 100644
--- a/bridges/source/cpp_uno/gcc3_ios_arm/uno2cpp.cxx
+++ b/bridges/source/cpp_uno/gcc3_ios/uno2cpp.cxx
diff --git a/bridges/source/cpp_uno/gcc3_ios_arm/unwind-cxx.h b/bridges/source/cpp_uno/gcc3_ios/unwind-cxx.h
index 2ffa69e70257..2ffa69e70257 100644
--- a/bridges/source/cpp_uno/gcc3_ios_arm/unwind-cxx.h
+++ b/bridges/source/cpp_uno/gcc3_ios/unwind-cxx.h
diff --git a/bridges/source/cpp_uno/gcc3_ios_arm/cpp2uno-arm.cxx b/bridges/source/cpp_uno/gcc3_ios_arm/cpp2uno-arm.cxx
deleted file mode 100644
index 0a8a7bd04bbf..000000000000
--- a/bridges/source/cpp_uno/gcc3_ios_arm/cpp2uno-arm.cxx
+++ /dev/null
@@ -1,576 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#ifdef __arm
-
-// For iOS devices (ARM). Basically a copy of
-// ../gcc3_linux_arm/cpp2uno.cxx with some cleanups and necessary
-// changes: No dynamic code generation as that is prohibited for apps
-// in the App Store. Instead we use a set of pre-generated snippets.
-
-// No attempts at factoring out the large amounts of more or less
-// common code in this and cpp2uno-i386.cxx have been done. Which is
-// sad. But then the whole bridges/source/cpp_uno is full of
-// copy/paste. So I continue in that tradition...
-
-// Note that for iOS, neither __ARM_EABI__ or __ARM_PCS_VFP are
-// defined. The ifdefs for those have been left in place to keep this
-// file as close to ../gcc3_linux_arm/cpp2uno.cxx as possible, to make
-// future unification easier.
-
-#include <com/sun/star/uno/RuntimeException.hpp>
-#include <sal/log.hxx>
-#include <uno/data.h>
-#include <typelib/typedescription.hxx>
-
-#include "bridge.hxx"
-#include "cppinterfaceproxy.hxx"
-#include "types.hxx"
-#include "vtablefactory.hxx"
-
-#include "share.hxx"
-
-extern "C" {
- extern int nFunIndexes, nVtableOffsets;
- extern int codeSnippets[];
-}
-
-using namespace ::com::sun::star::uno;
-
-namespace
-{
-
- static typelib_TypeClass cpp2uno_call(
- bridges::cpp_uno::shared::CppInterfaceProxy* pThis,
- const typelib_TypeDescription * pMemberTypeDescr,
- typelib_TypeDescriptionReference * pReturnTypeRef,
- sal_Int32 nParams, typelib_MethodParameter * pParams,
- void ** pCallStack,
- sal_Int64 * pRegisterReturn /* space for register return */ )
- {
- // pCallStack: ret, [return ptr], this, params
- char * pTopStack = (char *)(pCallStack + 0);
- char * pCppStack = pTopStack;
-
-#ifdef __ARM_PCS_VFP
- int dc = 0;
- char * pFloatArgs = (char *)(pCppStack - 64);
-#endif
- // return
- typelib_TypeDescription * pReturnTypeDescr = 0;
- if (pReturnTypeRef)
- TYPELIB_DANGER_GET( &pReturnTypeDescr, pReturnTypeRef );
-
- void * pUnoReturn = 0;
- // complex return ptr: if != 0 && != pUnoReturn, reconversion need
- void * pCppReturn = 0;
-
- if (pReturnTypeDescr)
- {
- if (!arm::return_in_hidden_param(pReturnTypeRef))
- pUnoReturn = pRegisterReturn; // direct way for simple types
- else // complex return via ptr (pCppReturn)
- {
- pCppReturn = *(void **)pCppStack;
- pCppStack += sizeof(void *);
-
- pUnoReturn = (bridges::cpp_uno::shared::relatesToInterfaceType(
- pReturnTypeDescr )
- ? alloca( pReturnTypeDescr->nSize )
- : pCppReturn); // direct way
- }
- }
- // pop this
- pCppStack += sizeof( void* );
-
- // stack space
- static_assert( sizeof(void *) == sizeof(sal_Int32),
- "### unexpected size!" );
- // parameters
- void ** pUnoArgs = (void **)alloca( 4 * sizeof(void *) * nParams );
- void ** pCppArgs = pUnoArgs + nParams;
- // indices of values this have to be converted (interface conversion
- // cpp<=>uno)
- sal_Int32 * pTempIndices = (sal_Int32 *)(pUnoArgs + (2 * nParams));
- // type descriptions for reconversions
- typelib_TypeDescription ** ppTempParamTypeDescr =
- (typelib_TypeDescription **)(pUnoArgs + (3 * nParams));
-
- sal_Int32 nTempIndices = 0;
-
- for ( sal_Int32 nPos = 0; nPos < nParams; ++nPos )
- {
- const typelib_MethodParameter & rParam = pParams[nPos];
- typelib_TypeDescription * pParamTypeDescr = 0;
- TYPELIB_DANGER_GET( &pParamTypeDescr, rParam.pTypeRef );
-
- if (!rParam.bOut &&
- bridges::cpp_uno::shared::isSimpleType( pParamTypeDescr ))
- {
-#ifdef __ARM_EABI__
- switch (pParamTypeDescr->eTypeClass)
- {
- case typelib_TypeClass_HYPER:
- case typelib_TypeClass_UNSIGNED_HYPER:
-#ifndef __ARM_PCS_VFP
- case typelib_TypeClass_DOUBLE:
-#endif
- if ((pCppStack - pTopStack) % 8) pCppStack+=sizeof(sal_Int32); //align to 8
- break;
- default:
- break;
- }
-#endif
-
-// For armhf we get the floating point arguments from a different area of the stack
-#ifdef __ARM_PCS_VFP
- if (pParamTypeDescr->eTypeClass == typelib_TypeClass_FLOAT)
- {
- pCppArgs[nPos] = pUnoArgs[nPos] = pFloatArgs;
- pFloatArgs += sizeof(float);
- } else
- if (pParamTypeDescr->eTypeClass == typelib_TypeClass_DOUBLE)
- {
- if ((pFloatArgs - pTopStack) % 8) pFloatArgs+=sizeof(float); //align to 8
- pCppArgs[nPos] = pUnoArgs[nPos] = pFloatArgs;
- pFloatArgs += sizeof(double);
- if (++dc == arm::MAX_FPR_REGS) {
- if (pCppStack - pTopStack < 16)
- pCppStack = pTopStack + 16;
- pFloatArgs = pCppStack;
- }
- } else
-#endif
- pCppArgs[nPos] = pUnoArgs[nPos] = pCppStack;
-
- switch (pParamTypeDescr->eTypeClass)
- {
- case typelib_TypeClass_HYPER:
- case typelib_TypeClass_UNSIGNED_HYPER:
-#ifndef __ARM_PCS_VFP
- case typelib_TypeClass_DOUBLE:
-#endif
- pCppStack += sizeof(sal_Int32); // extra long
- break;
- default:
- break;
- }
- // no longer needed
- TYPELIB_DANGER_RELEASE( pParamTypeDescr );
- }
- else // ptr to complex value | ref
- {
- pCppArgs[nPos] = *(void **)pCppStack;
-
- if (! rParam.bIn) // is pure out
- {
- // uno out is unconstructed mem!
- pUnoArgs[nPos] = alloca( pParamTypeDescr->nSize );
- pTempIndices[nTempIndices] = nPos;
- // will be released at reconversion
- ppTempParamTypeDescr[nTempIndices++] = pParamTypeDescr;
- }
- // is in/inout
- else if (bridges::cpp_uno::shared::relatesToInterfaceType(
- pParamTypeDescr ))
- {
- uno_copyAndConvertData( pUnoArgs[nPos] =
- alloca( pParamTypeDescr->nSize ),
- *(void **)pCppStack, pParamTypeDescr,
- pThis->getBridge()->getCpp2Uno() );
- pTempIndices[nTempIndices] = nPos; // has to be reconverted
- // will be released at reconversion
- ppTempParamTypeDescr[nTempIndices++] = pParamTypeDescr;
- }
- else // direct way
- {
- pUnoArgs[nPos] = *(void **)pCppStack;
- // no longer needed
- TYPELIB_DANGER_RELEASE( pParamTypeDescr );
- }
- }
-#ifdef __ARM_PCS_VFP
- // use the stack for output parameters or non floating point values
- if (rParam.bOut ||
- ((pParamTypeDescr->eTypeClass != typelib_TypeClass_DOUBLE)
- && (pParamTypeDescr->eTypeClass != typelib_TypeClass_FLOAT))
- )
-#endif
- pCppStack += sizeof(sal_Int32); // standard parameter length
- }
-
- // ExceptionHolder
- uno_Any aUnoExc; // Any will be constructed by callee
- uno_Any * pUnoExc = &aUnoExc;
-
- // invoke uno dispatch call
- (*pThis->getUnoI()->pDispatcher)(
- pThis->getUnoI(), pMemberTypeDescr, pUnoReturn, pUnoArgs, &pUnoExc );
-
- // in case an exception occurred...
- if (pUnoExc)
- {
- // destruct temporary in/inout params
- for ( ; nTempIndices--; )
- {
- sal_Int32 nIndex = pTempIndices[nTempIndices];
-
- if (pParams[nIndex].bIn) // is in/inout => was constructed
- uno_destructData( pUnoArgs[nIndex],
- ppTempParamTypeDescr[nTempIndices], 0 );
- TYPELIB_DANGER_RELEASE( ppTempParamTypeDescr[nTempIndices] );
- }
- if (pReturnTypeDescr)
- TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
-
- CPPU_CURRENT_NAMESPACE::raiseException( &aUnoExc,
- pThis->getBridge()->getUno2Cpp() ); // has to destruct the any
- // is here for dummy
- return typelib_TypeClass_VOID;
- }
- else // else no exception occurred...
- {
- // temporary params
- for ( ; nTempIndices--; )
- {
- sal_Int32 nIndex = pTempIndices[nTempIndices];
- typelib_TypeDescription * pParamTypeDescr =
- ppTempParamTypeDescr[nTempIndices];
-
- if (pParams[nIndex].bOut) // inout/out
- {
- // convert and assign
- uno_destructData( pCppArgs[nIndex], pParamTypeDescr,
- cpp_release );
- uno_copyAndConvertData( pCppArgs[nIndex], pUnoArgs[nIndex],
- pParamTypeDescr, pThis->getBridge()->getUno2Cpp() );
- }
- // destroy temp uno param
- uno_destructData( pUnoArgs[nIndex], pParamTypeDescr, 0 );
-
- TYPELIB_DANGER_RELEASE( pParamTypeDescr );
- }
- // return
- if (pCppReturn) // has complex return
- {
- if (pUnoReturn != pCppReturn) // needs reconversion
- {
- uno_copyAndConvertData( pCppReturn, pUnoReturn,
- pReturnTypeDescr, pThis->getBridge()->getUno2Cpp() );
- // destroy temp uno return
- uno_destructData( pUnoReturn, pReturnTypeDescr, 0 );
- }
- // complex return ptr is set to eax
- *(void **)pRegisterReturn = pCppReturn;
- }
- if (pReturnTypeDescr)
- {
- typelib_TypeClass eRet =
- (typelib_TypeClass)pReturnTypeDescr->eTypeClass;
- TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
- return eRet;
- }
- else
- return typelib_TypeClass_VOID;
- }
- }
-
-
- static typelib_TypeClass cpp_mediate(
- sal_Int32 nFunctionIndex, sal_Int32 nVtableOffset,
- void ** pCallStack,
- sal_Int64 * pRegisterReturn /* space for register return */ )
- {
- static_assert( sizeof(sal_Int32)==sizeof(void *), "### unexpected!" );
-
- // pCallStack: [ret *], this, params
- // _this_ ptr is patched cppu_XInterfaceProxy object
- void *pThis;
- if( nFunctionIndex & 0x80000000 )
- {
- nFunctionIndex &= 0x7fffffff;
- pThis = pCallStack[1];
- }
- else
- {
- pThis = pCallStack[0];
- }
-
- pThis = static_cast< char * >(pThis) - nVtableOffset;
- bridges::cpp_uno::shared::CppInterfaceProxy * pCppI =
- bridges::cpp_uno::shared::CppInterfaceProxy::castInterfaceToProxy(
- pThis);
-
- typelib_InterfaceTypeDescription * pTypeDescr = pCppI->getTypeDescr();
-
- assert( nFunctionIndex < pTypeDescr->nMapFunctionIndexToMemberIndex &&
- "### illegal vtable index!" );
- if (nFunctionIndex >= pTypeDescr->nMapFunctionIndexToMemberIndex)
- {
- throw RuntimeException( "illegal vtable index!", (XInterface *)pCppI );
- }
-
- // determine called method
- assert( nFunctionIndex < pTypeDescr->nMapFunctionIndexToMemberIndex &&
- "### illegal vtable index!" );
- sal_Int32 nMemberPos =
- pTypeDescr->pMapFunctionIndexToMemberIndex[nFunctionIndex];
- assert( nMemberPos < pTypeDescr->nAllMembers &&
- "### illegal member index!" );
-
- TypeDescription aMemberDescr( pTypeDescr->ppAllMembers[nMemberPos] );
-
- typelib_TypeClass eRet;
- switch (aMemberDescr.get()->eTypeClass)
- {
- case typelib_TypeClass_INTERFACE_ATTRIBUTE:
- {
- if (pTypeDescr->pMapMemberIndexToFunctionIndex[nMemberPos] ==
- nFunctionIndex)
- {
- // is GET method
- eRet = cpp2uno_call(
- pCppI, aMemberDescr.get(),
- ((typelib_InterfaceAttributeTypeDescription *)aMemberDescr.get())->pAttributeTypeRef,
- 0, 0, // no params
- pCallStack, pRegisterReturn );
- }
- else
- {
- // is SET method
- typelib_MethodParameter aParam;
- aParam.pTypeRef =
- ((typelib_InterfaceAttributeTypeDescription *)aMemberDescr.get())->pAttributeTypeRef;
- aParam.bIn = sal_True;
- aParam.bOut = sal_False;
-
- eRet = cpp2uno_call(
- pCppI, aMemberDescr.get(),
- 0, // indicates void return
- 1, &aParam,
- pCallStack, pRegisterReturn );
- }
- break;
- }
- case typelib_TypeClass_INTERFACE_METHOD:
- {
- // is METHOD
- switch (nFunctionIndex)
- {
- case 1: // acquire()
- pCppI->acquireProxy(); // non virtual call!
- eRet = typelib_TypeClass_VOID;
- break;
- case 2: // release()
- pCppI->releaseProxy(); // non virtual call!
- eRet = typelib_TypeClass_VOID;
- break;
- case 0: // queryInterface() opt
- {
- typelib_TypeDescription * pTD = 0;
- TYPELIB_DANGER_GET(&pTD,
- reinterpret_cast<Type *>(pCallStack[2])->getTypeLibType());
- if (pTD)
- {
- XInterface * pInterface = 0;
- (*pCppI->getBridge()->getCppEnv()->getRegisteredInterface)(
- pCppI->getBridge()->getCppEnv(),
- (void **)&pInterface, pCppI->getOid().pData,
- (typelib_InterfaceTypeDescription *)pTD );
-
- if (pInterface)
- {
- ::uno_any_construct(
- reinterpret_cast< uno_Any * >( pCallStack[0] ),
- &pInterface, pTD, cpp_acquire );
- pInterface->release();
- TYPELIB_DANGER_RELEASE( pTD );
- *(void **)pRegisterReturn = pCallStack[0];
- eRet = typelib_TypeClass_ANY;
- break;
- }
- TYPELIB_DANGER_RELEASE( pTD );
- }
- } // else perform queryInterface()
- SAL_FALLTHROUGH;
- default:
- eRet = cpp2uno_call(
- pCppI, aMemberDescr.get(),
- ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->pReturnTypeRef,
- ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->nParams,
- ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->pParams,
- pCallStack, pRegisterReturn );
- }
- break;
- }
- default:
- {
- throw RuntimeException( "no member description found!", (XInterface *)pCppI );
- }
- }
-
- return eRet;
- }
-}
-
-/**
- * is called on incoming vtable calls
- * (called by asm snippets)
- */
-
-extern "C" sal_Int64 cpp_vtable_call( long *pFunctionAndOffset,
- void **pCallStack )
-{
- sal_Int64 nRegReturn;
- typelib_TypeClass aType = cpp_mediate( pFunctionAndOffset[0], pFunctionAndOffset[1], pCallStack,
- &nRegReturn );
-
- switch( aType )
- {
- case typelib_TypeClass_BOOLEAN:
- case typelib_TypeClass_BYTE:
- nRegReturn = (unsigned long)(*(unsigned char *)&nRegReturn);
- break;
- case typelib_TypeClass_CHAR:
- case typelib_TypeClass_UNSIGNED_SHORT:
- case typelib_TypeClass_SHORT:
- nRegReturn = (unsigned long)(*(unsigned short *)&nRegReturn);
- break;
- case typelib_TypeClass_ENUM:
- case typelib_TypeClass_UNSIGNED_LONG:
- case typelib_TypeClass_LONG:
- nRegReturn = (unsigned long)(*(unsigned int *)&nRegReturn);
- break;
- case typelib_TypeClass_VOID:
- default:
- break;
- }
-
- return nRegReturn;
-}
-
-namespace
-{
- unsigned char *codeSnippet(const typelib_InterfaceTypeDescription *type,
- const typelib_TypeDescription *member,
- sal_Int32 functionIndex,
- sal_Int32 vtableOffset,
- bool bHasHiddenParam)
- {
- assert(functionIndex < nFunIndexes);
- if (!(functionIndex < nFunIndexes))
- return NULL;
-
- assert(vtableOffset < nVtableOffsets);
- if (!(vtableOffset < nVtableOffsets))
- return NULL;
-
- // The codeSnippets table is indexed by functionIndex,
- // vtableOffset, and the has-hidden-param flag
-
- int index = functionIndex*nVtableOffsets*2 + vtableOffset*2 + bHasHiddenParam;
- unsigned char *result = ((unsigned char *) &codeSnippets) + codeSnippets[index];
-
- SAL_INFO( "bridges.ios", "codeSnippet(" << OUString(type->aBase.pTypeName) << "::" << OUString(member->pTypeName) << "): [" << functionIndex << "," << vtableOffset << "," << (int)bHasHiddenParam << "]=" << (void *) result << " (" << std::hex << ((int*)result)[0] << "," << ((int*)result)[1] << "," << ((int*)result)[2] << "," << ((int*)result)[3] << ")");
-
- return result;
- }
-}
-
-struct bridges::cpp_uno::shared::VtableFactory::Slot { void * fn; };
-
-bridges::cpp_uno::shared::VtableFactory::Slot *
-bridges::cpp_uno::shared::VtableFactory::mapBlockToVtable(void * block)
-{
- return static_cast< Slot * >(block) + 2;
-}
-
-std::size_t bridges::cpp_uno::shared::VtableFactory::getBlockSize(
- sal_Int32 slotCount)
-{
- return (slotCount + 2) * sizeof (Slot);
-}
-
-bridges::cpp_uno::shared::VtableFactory::Slot *
-bridges::cpp_uno::shared::VtableFactory::initializeBlock(
- void * block, sal_Int32 slotCount, sal_Int32,
- typelib_InterfaceTypeDescription *)
-{
- Slot * slots = mapBlockToVtable(block);
- slots[-2].fn = 0;
- slots[-1].fn = 0;
- return slots + slotCount;
-}
-
-unsigned char * bridges::cpp_uno::shared::VtableFactory::addLocalFunctions(
- Slot ** slots, unsigned char * code,
- typelib_InterfaceTypeDescription const * type, sal_Int32 functionOffset,
- sal_Int32 functionCount, sal_Int32 vtableOffset)
-{
- (*slots) -= functionCount;
- Slot * s = *slots;
- for (sal_Int32 i = 0; i < type->nMembers; ++i)
- {
- typelib_TypeDescription * member = 0;
- TYPELIB_DANGER_GET(&member, type->ppMembers[i]);
- assert(member != 0);
- switch (member->eTypeClass)
- {
- case typelib_TypeClass_INTERFACE_ATTRIBUTE:
- {
- typelib_InterfaceAttributeTypeDescription *pAttrTD =
- reinterpret_cast<typelib_InterfaceAttributeTypeDescription *>( member );
-
- // Getter:
- (s++)->fn = codeSnippet(type, member,
- functionOffset++, vtableOffset,
- arm::return_in_hidden_param( pAttrTD->pAttributeTypeRef ));
-
- // Setter:
- if (!pAttrTD->bReadOnly)
- {
- (s++)->fn = codeSnippet(type, member,
- functionOffset++, vtableOffset,
- false);
- }
- break;
- }
- case typelib_TypeClass_INTERFACE_METHOD:
- {
- typelib_InterfaceMethodTypeDescription *pMethodTD =
- reinterpret_cast<
- typelib_InterfaceMethodTypeDescription * >(member);
-
- (s++)->fn = codeSnippet(type, member,
- functionOffset++, vtableOffset,
- arm::return_in_hidden_param(pMethodTD->pReturnTypeRef));
- break;
- }
- default:
- assert(false);
- break;
- }
- TYPELIB_DANGER_RELEASE(member);
- }
- return code;
-}
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/bridges/source/cpp_uno/gcc3_ios_arm/uno2cpp-arm.cxx b/bridges/source/cpp_uno/gcc3_ios_arm/uno2cpp-arm.cxx
deleted file mode 100644
index b11e4bdd1cce..000000000000
--- a/bridges/source/cpp_uno/gcc3_ios_arm/uno2cpp-arm.cxx
+++ /dev/null
@@ -1,687 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#ifdef __arm
-
-// For iOS devices (ARM). Basically a copy of
-// ../gcc3_linux_arm/cpp2uno.cxx with some cleanups and necessary
-// changes.
-
-// Note that for iOS, none of __ARM_EABI__, __ARM_ARCH_4T__ or
-// __ARM_PCS_VFP are defined. The ifdefs for those have been left in
-// place to keep this file as close to ../gcc3_linux_arm/uno2cpp.cxx
-// as possible, to make future unification easier.
-
-#include <com/sun/star/uno/RuntimeException.hpp>
-#include <sal/log.hxx>
-
-#include "bridge.hxx"
-#include "types.hxx"
-#include "unointerfaceproxy.hxx"
-#include "vtables.hxx"
-
-#include "share.hxx"
-
-using namespace ::com::sun::star::uno;
-
-namespace arm
-{
- bool is_complex_struct(const typelib_TypeDescription * type)
- {
- const typelib_CompoundTypeDescription * p
- = reinterpret_cast< const typelib_CompoundTypeDescription * >(type);
- for (sal_Int32 i = 0; i < p->nMembers; ++i)
- {
- if (p->ppTypeRefs[i]->eTypeClass == typelib_TypeClass_STRUCT ||
- p->ppTypeRefs[i]->eTypeClass == typelib_TypeClass_EXCEPTION)
- {
- typelib_TypeDescription * t = 0;
- TYPELIB_DANGER_GET(&t, p->ppTypeRefs[i]);
- bool b = is_complex_struct(t);
- TYPELIB_DANGER_RELEASE(t);
- if (b) {
- return true;
- }
- }
- else if (!bridges::cpp_uno::shared::isSimpleType(p->ppTypeRefs[i]->eTypeClass))
- return true;
- }
- if (p->pBaseTypeDescription != 0)
- return is_complex_struct(&p->pBaseTypeDescription->aBase);
- return false;
- }
-
-#ifdef __ARM_PCS_VFP
- bool is_float_only_struct(const typelib_TypeDescription * type)
- {
- const typelib_CompoundTypeDescription * p
- = reinterpret_cast< const typelib_CompoundTypeDescription * >(type);
- for (sal_Int32 i = 0; i < p->nMembers; ++i)
- {
- if (p->ppTypeRefs[i]->eTypeClass != typelib_TypeClass_FLOAT &&
- p->ppTypeRefs[i]->eTypeClass != typelib_TypeClass_DOUBLE)
- return false;
- }
- return true;
- }
-#endif
- bool return_in_hidden_param( typelib_TypeDescriptionReference *pTypeRef )
- {
- if (bridges::cpp_uno::shared::isSimpleType(pTypeRef))
- return false;
- else if (pTypeRef->eTypeClass == typelib_TypeClass_STRUCT || pTypeRef->eTypeClass == typelib_TypeClass_EXCEPTION)
- {
- typelib_TypeDescription * pTypeDescr = 0;
- TYPELIB_DANGER_GET( &pTypeDescr, pTypeRef );
-
- //A Composite Type not larger than 4 bytes is returned in r0
- bool bRet = pTypeDescr->nSize > 4 || is_complex_struct(pTypeDescr);
-
-#ifdef __ARM_PCS_VFP
- // In the VFP ABI, structs with only float/double values that fit in
- // 16 bytes are returned in registers
- if( pTypeDescr->nSize <= 16 && is_float_only_struct(pTypeDescr))
- bRet = false;
-#endif
-
- TYPELIB_DANGER_RELEASE( pTypeDescr );
- return bRet;
- }
- return true;
- }
-}
-
-void MapReturn(sal_uInt32 r0, sal_uInt32 r1, typelib_TypeDescriptionReference * pReturnType, sal_uInt32* pRegisterReturn)
-{
- switch( pReturnType->eTypeClass )
- {
- case typelib_TypeClass_HYPER:
- case typelib_TypeClass_UNSIGNED_HYPER:
- pRegisterReturn[1] = r1;
- SAL_FALLTHROUGH;
- case typelib_TypeClass_LONG:
- case typelib_TypeClass_UNSIGNED_LONG:
- case typelib_TypeClass_ENUM:
- case typelib_TypeClass_CHAR:
- case typelib_TypeClass_SHORT:
- case typelib_TypeClass_UNSIGNED_SHORT:
- case typelib_TypeClass_BOOLEAN:
- case typelib_TypeClass_BYTE:
- pRegisterReturn[0] = r0;
- break;
- case typelib_TypeClass_FLOAT:
-#if !defined(__ARM_PCS_VFP) && (defined(__ARM_EABI__) || defined(__SOFTFP__) || defined(IOS))
- pRegisterReturn[0] = r0;
-#else
- register float fret asm("s0");
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wuninitialized"
- *(float*)pRegisterReturn = fret;
-#pragma GCC diagnostic pop
-#endif
- break;
- case typelib_TypeClass_DOUBLE:
-#if !defined(__ARM_PCS_VFP) && (defined(__ARM_EABI__) || defined(__SOFTFP__) || defined(IOS))
- pRegisterReturn[1] = r1;
- pRegisterReturn[0] = r0;
-#else
- register double dret asm("d0");
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wuninitialized"
- *(double*)pRegisterReturn = dret;
-#pragma GCC diagnostic pop
-#endif
- break;
- case typelib_TypeClass_STRUCT:
- case typelib_TypeClass_EXCEPTION:
- {
- if (!arm::return_in_hidden_param(pReturnType))
- pRegisterReturn[0] = r0;
- break;
- }
- default:
- break;
- }
-}
-
-namespace
-{
-
-void callVirtualMethod(
- void * pThis,
- sal_Int32 nVtableIndex,
- void * pRegisterReturn,
- typelib_TypeDescriptionReference * pReturnType,
- sal_uInt32 *pStack,
- sal_uInt32 nStack,
- sal_uInt32 *pGPR,
- sal_uInt32 nGPR,
- double *pFPR) __attribute__((noinline));
-
-void callVirtualMethod(
- void * pThis,
- sal_Int32 nVtableIndex,
- void * pRegisterReturn,
- typelib_TypeDescriptionReference * pReturnType,
- sal_uInt32 *pStack,
- sal_uInt32 nStack,
- sal_uInt32 *pGPR,
- sal_uInt32 nGPR,
- double *pFPR)
-{
- // never called
- if (! pThis)
- CPPU_CURRENT_NAMESPACE::dummy_can_throw_anything("xxx"); // address something
-
- if ( nStack )
- {
- // 8-bytes aligned
- sal_uInt32 nStackBytes = ( ( nStack + 1 ) >> 1 ) * 8;
- sal_uInt32 *stack = (sal_uInt32 *) __builtin_alloca( nStackBytes );
- memcpy( stack, pStack, nStackBytes );
- }
-
- // Should not happen, but...
- if ( nGPR > arm::MAX_GPR_REGS )
- nGPR = arm::MAX_GPR_REGS;
-
- sal_uInt32 pMethod = *((sal_uInt32*)pThis);
- pMethod += 4 * nVtableIndex;
- pMethod = *((sal_uInt32 *)pMethod);
-
- //Return registers
- sal_uInt32 r0;
- sal_uInt32 r1;
-
- __asm__ __volatile__ (
- //Fill in general purpose register arguments
- "ldr r4, %[pgpr]\n\t"
- "ldmia r4, {r0-r3}\n\t"
-
-#ifdef __ARM_PCS_VFP
- //Fill in VFP register arguments as double precision values
- "ldr r4, %[pfpr]\n\t"
- "vldmia r4, {d0-d7}\n\t"
-#endif
- //Make the call
- "ldr r5, %[pmethod]\n\t"
-#ifndef __ARM_ARCH_4T__
- "blx r5\n\t"
-#else
- "mov lr, pc ; bx r5\n\t"
-#endif
-
- //Fill in return values
- "mov %[r0], r0\n\t"
- "mov %[r1], r1\n\t"
- : [r0]"=r" (r0), [r1]"=r" (r1)
- : [pmethod]"m" (pMethod), [pgpr]"m" (pGPR), [pfpr]"m" (pFPR)
- : "r0", "r1", "r2", "r3", "r4", "r5");
-
- MapReturn(r0, r1, pReturnType, (sal_uInt32*)pRegisterReturn);
-}
-}
-
-#define INSERT_INT32( pSV, nr, pGPR, pDS ) \
- if ( nr < arm::MAX_GPR_REGS ) \
- pGPR[nr++] = *reinterpret_cast<sal_uInt32 *>( pSV ); \
- else \
- *pDS++ = *reinterpret_cast<sal_uInt32 *>( pSV );
-
-#ifdef __ARM_EABI__
-#define INSERT_INT64( pSV, nr, pGPR, pDS, pStart ) \
- if ( (nr < arm::MAX_GPR_REGS) && (nr % 2) ) \
- { \
- ++nr; \
- } \
- if ( nr < arm::MAX_GPR_REGS ) \
- { \
- pGPR[nr++] = *reinterpret_cast<sal_uInt32 *>( pSV ); \
- pGPR[nr++] = *(reinterpret_cast<sal_uInt32 *>( pSV ) + 1); \
- } \
- else \
- { \
- if ( (pDS - pStart) % 2) \
- { \
- ++pDS; \
- } \
- *pDS++ = reinterpret_cast<sal_uInt32 *>( pSV )[0]; \
- *pDS++ = reinterpret_cast<sal_uInt32 *>( pSV )[1]; \
- }
-#else
-#define INSERT_INT64( pSV, nr, pGPR, pDS, pStart ) \
- INSERT_INT32( pSV, nr, pGPR, pDS ) \
- INSERT_INT32( ((sal_uInt32*)pSV)+1, nr, pGPR, pDS )
-#endif
-
-#ifdef __ARM_PCS_VFP
-// Since single and double arguments share the same register bank the filling of the
-// registers is not always linear. Single values go to the first available single register,
-// while doubles need to have an 8 byte alignment, so only go into double registers starting
-// at every other single register. For ex a float, double, float sequence will fill registers
-// s0, d1, and s1, actually corresponding to the linear order s0,s1, d1.
-//
-// These use the single/double register array and counters and ignore the pGPR argument
-// nSR and nDR are the number of single and double precision registers that are no longer
-// available
-#define INSERT_FLOAT( pSV, nr, pGPR, pDS ) \
- if (nSR % 2 == 0) {\
- nSR = 2*nDR; \
- }\
- if ( nSR < arm::MAX_FPR_REGS*2 ) {\
- pSPR[nSR++] = *reinterpret_cast<float *>( pSV ); \
- if ((nSR % 2 == 1) && (nSR > 2*nDR)) {\
- nDR++; \
- }\
- }\
- else \
- {\
- *pDS++ = *reinterpret_cast<float *>( pSV );\
- }
-#define INSERT_DOUBLE( pSV, nr, pGPR, pDS, pStart ) \
- if ( nDR < arm::MAX_FPR_REGS ) { \
- pFPR[nDR++] = *reinterpret_cast<double *>( pSV ); \
- }\
- else\
- {\
- if ( (pDS - pStart) % 2) \
- { \
- ++pDS; \
- } \
- *(double *)pDS = *reinterpret_cast<double *>( pSV );\
- pDS += 2;\
- }
-#else
-#define INSERT_FLOAT( pSV, nr, pFPR, pDS ) \
- INSERT_INT32( pSV, nr, pGPR, pDS )
-
-#define INSERT_DOUBLE( pSV, nr, pFPR, pDS, pStart ) \
- INSERT_INT64( pSV, nr, pGPR, pDS, pStart )
-#endif
-
-#define INSERT_INT16( pSV, nr, pGPR, pDS ) \
- if ( nr < arm::MAX_GPR_REGS ) \
- pGPR[nr++] = *reinterpret_cast<sal_uInt16 *>( pSV ); \
- else \
- *pDS++ = *reinterpret_cast<sal_uInt16 *>( pSV );
-
-#define INSERT_INT8( pSV, nr, pGPR, pDS ) \
- if ( nr < arm::MAX_GPR_REGS ) \
- pGPR[nr++] = *reinterpret_cast<sal_uInt8 *>( pSV ); \
- else \
- *pDS++ = *reinterpret_cast<sal_uInt8 *>( pSV );
-
-namespace {
-
-static void cpp_call(
- bridges::cpp_uno::shared::UnoInterfaceProxy * pThis,
- bridges::cpp_uno::shared::VtableSlot aVtableSlot,
- typelib_TypeDescriptionReference * pReturnTypeRef,
- sal_Int32 nParams, typelib_MethodParameter * pParams,
- void * pUnoReturn, void * pUnoArgs[], uno_Any ** ppUnoExc )
-{
- // max space for: [complex ret ptr], values|ptr ...
- sal_uInt32 * pStack = (sal_uInt32 *)__builtin_alloca(
- sizeof(sal_Int32) + ((nParams+2) * sizeof(sal_Int64)) );
- sal_uInt32 * pStackStart = pStack;
-
- sal_uInt32 pGPR[arm::MAX_GPR_REGS];
- sal_uInt32 nGPR = 0;
-
- // storage and counters for single and double precision VFP registers
- double pFPR[arm::MAX_FPR_REGS];
-#ifdef __ARM_PCS_VFP
- sal_uInt32 nDR = 0;
- float *pSPR = reinterpret_cast< float *>(&pFPR);
- sal_uInt32 nSR = 0;
-#endif
-
- // return
- typelib_TypeDescription * pReturnTypeDescr = 0;
- TYPELIB_DANGER_GET( &pReturnTypeDescr, pReturnTypeRef );
- assert(pReturnTypeDescr);
-
- void * pCppReturn = 0; // if != 0 && != pUnoReturn, needs reconversion
-
- if (pReturnTypeDescr)
- {
- bool bSimpleReturn = !arm::return_in_hidden_param( pReturnTypeRef );
-
- if (bSimpleReturn)
- pCppReturn = pUnoReturn; // direct way for simple types
- else
- {
- // complex return via ptr
- pCppReturn = (bridges::cpp_uno::shared::relatesToInterfaceType( pReturnTypeDescr )
- ? __builtin_alloca( pReturnTypeDescr->nSize )
- : pUnoReturn); // direct way
-
- INSERT_INT32( &pCppReturn, nGPR, pGPR, pStack );
- }
- }
- // push this
- void * pAdjustedThisPtr = reinterpret_cast< void ** >(pThis->getCppI())
- + aVtableSlot.offset;
- INSERT_INT32( &pAdjustedThisPtr, nGPR, pGPR, pStack );
-
- // stack space
- static_assert(sizeof(void *) == sizeof(sal_Int32), "### unexpected size!");
- // args
- void ** pCppArgs = (void **)alloca( 3 * sizeof(void *) * nParams );
- // indices of values this have to be converted (interface conversion cpp<=>uno)
- sal_Int32 * pTempIndices = (sal_Int32 *)(pCppArgs + nParams);
- // type descriptions for reconversions
- typelib_TypeDescription ** ppTempParamTypeDescr = (typelib_TypeDescription **)(pCppArgs + (2 * nParams));
-
- sal_Int32 nTempIndices = 0;
-
- for ( sal_Int32 nPos = 0; nPos < nParams; ++nPos )
- {
- const typelib_MethodParameter & rParam = pParams[nPos];
- typelib_TypeDescription * pParamTypeDescr = 0;
- TYPELIB_DANGER_GET( &pParamTypeDescr, rParam.pTypeRef );
-
- if (!rParam.bOut && bridges::cpp_uno::shared::isSimpleType( pParamTypeDescr ))
- {
-// uno_copyAndConvertData( pCppArgs[nPos] = pStack, pUnoArgs[nPos],
- uno_copyAndConvertData( pCppArgs[nPos] = alloca(8), pUnoArgs[nPos],
- pParamTypeDescr, pThis->getBridge()->getUno2Cpp() );
-
- switch (pParamTypeDescr->eTypeClass)
- {
- case typelib_TypeClass_HYPER:
- case typelib_TypeClass_UNSIGNED_HYPER:
-
- SAL_INFO( "bridges.ios", "hyper is " << pCppArgs[nPos] );
-
- INSERT_INT64( pCppArgs[nPos], nGPR, pGPR, pStack, pStackStart );
- break;
- case typelib_TypeClass_LONG:
- case typelib_TypeClass_UNSIGNED_LONG:
- case typelib_TypeClass_ENUM:
-
- SAL_INFO( "bridges.ios", "long is " << pCppArgs[nPos] );
-
- INSERT_INT32( pCppArgs[nPos], nGPR, pGPR, pStack );
- break;
- case typelib_TypeClass_SHORT:
- case typelib_TypeClass_CHAR:
- case typelib_TypeClass_UNSIGNED_SHORT:
- INSERT_INT16( pCppArgs[nPos], nGPR, pGPR, pStack );
- break;
- case typelib_TypeClass_BOOLEAN:
- case typelib_TypeClass_BYTE:
- INSERT_INT8( pCppArgs[nPos], nGPR, pGPR, pStack );
- break;
- case typelib_TypeClass_FLOAT:
- INSERT_FLOAT( pCppArgs[nPos], nGPR, pGPR, pStack );
- break;
- case typelib_TypeClass_DOUBLE:
- INSERT_DOUBLE( pCppArgs[nPos], nGPR, pGPR, pStack, pStackStart );
- break;
- default:
- break;
- }
- // no longer needed
- TYPELIB_DANGER_RELEASE( pParamTypeDescr );
- }
- else // ptr to complex value | ref
- {
- if (! rParam.bIn) // is pure out
- {
- // cpp out is constructed mem, uno out is not!
- uno_constructData(
- pCppArgs[nPos] = alloca( pParamTypeDescr->nSize ),
- pParamTypeDescr );
- pTempIndices[nTempIndices] = nPos; // default constructed for cpp call
- // will be released at reconversion
- ppTempParamTypeDescr[nTempIndices++] = pParamTypeDescr;
- }
- // is in/inout
- else if (bridges::cpp_uno::shared::relatesToInterfaceType( pParamTypeDescr ))
- {
- uno_copyAndConvertData(
- pCppArgs[nPos] = alloca( pParamTypeDescr->nSize ),
- pUnoArgs[nPos], pParamTypeDescr, pThis->getBridge()->getUno2Cpp() );
-
- pTempIndices[nTempIndices] = nPos; // has to be reconverted
- // will be released at reconversion
- ppTempParamTypeDescr[nTempIndices++] = pParamTypeDescr;
- }
- else // direct way
- {
- pCppArgs[nPos] = pUnoArgs[nPos];
- // no longer needed
- TYPELIB_DANGER_RELEASE( pParamTypeDescr );
- }
- INSERT_INT32( &(pCppArgs[nPos]), nGPR, pGPR, pStack );
- }
- }
-
- try
- {
- callVirtualMethod(
- pAdjustedThisPtr, aVtableSlot.index,
- pCppReturn, pReturnTypeRef,
- pStackStart,
- (pStack - pStackStart),
- pGPR, nGPR,
- pFPR);
-
- // NO exception occurred...
- *ppUnoExc = 0;
-
- // reconvert temporary params
- for ( ; nTempIndices--; )
- {
- sal_Int32 nIndex = pTempIndices[nTempIndices];
- typelib_TypeDescription * pParamTypeDescr = ppTempParamTypeDescr[nTempIndices];
-
- if (pParams[nIndex].bIn)
- {
- if (pParams[nIndex].bOut) // inout
- {
- uno_destructData( pUnoArgs[nIndex], pParamTypeDescr, 0 ); // destroy uno value
- uno_copyAndConvertData( pUnoArgs[nIndex], pCppArgs[nIndex], pParamTypeDescr,
- pThis->getBridge()->getCpp2Uno() );
- }
- }
- else // pure out
- {
- uno_copyAndConvertData( pUnoArgs[nIndex], pCppArgs[nIndex], pParamTypeDescr,
- pThis->getBridge()->getCpp2Uno() );
- }
- // destroy temp cpp param => cpp: every param was constructed
- uno_destructData( pCppArgs[nIndex], pParamTypeDescr, cpp_release );
-
- TYPELIB_DANGER_RELEASE( pParamTypeDescr );
- }
- // return value
- if (pCppReturn && pUnoReturn != pCppReturn)
- {
- uno_copyAndConvertData( pUnoReturn, pCppReturn, pReturnTypeDescr,
- pThis->getBridge()->getCpp2Uno() );
- uno_destructData( pCppReturn, pReturnTypeDescr, cpp_release );
- }
- }
- catch (...)
- {
-// __asm__ __volatile__ ("sub sp, sp, #2048\n");
-
- // fill uno exception
- CPPU_CURRENT_NAMESPACE::fillUnoException( abi::__cxa_get_globals()->caughtExceptions, *ppUnoExc, pThis->getBridge()->getCpp2Uno() );
-
- // temporary params
- for ( ; nTempIndices--; )
- {
- sal_Int32 nIndex = pTempIndices[nTempIndices];
- // destroy temp cpp param => cpp: every param was constructed
- uno_destructData( pCppArgs[nIndex], ppTempParamTypeDescr[nTempIndices], cpp_release );
- TYPELIB_DANGER_RELEASE( ppTempParamTypeDescr[nTempIndices] );
- }
-
- // return type
- if (pReturnTypeDescr)
- TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
- }
-}
-}
-
-namespace bridges { namespace cpp_uno { namespace shared {
-
-void unoInterfaceProxyDispatch(
- uno_Interface * pUnoI, const typelib_TypeDescription * pMemberDescr,
- void * pReturn, void * pArgs[], uno_Any ** ppException )
-{
- // is my surrogate
- bridges::cpp_uno::shared::UnoInterfaceProxy * pThis
- = static_cast< bridges::cpp_uno::shared::UnoInterfaceProxy * >(pUnoI);
-#if OSL_DEBUG_LEVEL > 0
- typelib_InterfaceTypeDescription * pTypeDescr = pThis->pTypeDescr;
-#endif
-
- switch (pMemberDescr->eTypeClass)
- {
- case typelib_TypeClass_INTERFACE_ATTRIBUTE:
- {
-#if OSL_DEBUG_LEVEL > 0
- // determine vtable call index
- sal_Int32 nMemberPos = ((typelib_InterfaceMemberTypeDescription *)pMemberDescr)->nPosition;
- assert(nMemberPos < pTypeDescr->nAllMembers && "### member pos out of range!");
-#endif
-
- VtableSlot aVtableSlot(
- getVtableSlot(
- reinterpret_cast<typelib_InterfaceAttributeTypeDescription const *>
- (pMemberDescr)));
-
- if (pReturn)
- {
- // dependent dispatch
- cpp_call(
- pThis, aVtableSlot,
- ((typelib_InterfaceAttributeTypeDescription *)pMemberDescr)->pAttributeTypeRef,
- 0, 0, // no params
- pReturn, pArgs, ppException );
- }
- else
- {
- // is SET
- typelib_MethodParameter aParam;
- aParam.pTypeRef =
- ((typelib_InterfaceAttributeTypeDescription *)pMemberDescr)->pAttributeTypeRef;
- aParam.bIn = sal_True;
- aParam.bOut = sal_False;
-
- typelib_TypeDescriptionReference * pReturnTypeRef = 0;
- OUString aVoidName("void");
- typelib_typedescriptionreference_new(
- &pReturnTypeRef, typelib_TypeClass_VOID, aVoidName.pData );
-
- // dependent dispatch
- aVtableSlot.index += 1;
- cpp_call(
- pThis, aVtableSlot, // get, then set method
- pReturnTypeRef,
- 1, &aParam,
- pReturn, pArgs, ppException );
-
- typelib_typedescriptionreference_release( pReturnTypeRef );
- }
-
- break;
- }
- case typelib_TypeClass_INTERFACE_METHOD:
- {
-#if OSL_DEBUG_LEVEL > 0
- // determine vtable call index
- sal_Int32 nMemberPos = ((typelib_InterfaceMemberTypeDescription *)pMemberDescr)->nPosition;
- assert(nMemberPos < pTypeDescr->nAllMembers && "### member pos out of range!");
-#endif
-
- VtableSlot aVtableSlot(
- getVtableSlot(
- reinterpret_cast<typelib_InterfaceMethodTypeDescription const *>
- (pMemberDescr)));
-
- switch (aVtableSlot.index)
- {
- // standard calls
- case 1: // acquire uno interface
- (*pUnoI->acquire)( pUnoI );
- *ppException = 0;
- break;
- case 2: // release uno interface
- (*pUnoI->release)( pUnoI );
- *ppException = 0;
- break;
- case 0: // queryInterface() opt
- {
- typelib_TypeDescription * pTD = 0;
- TYPELIB_DANGER_GET( &pTD, reinterpret_cast< Type * >( pArgs[0] )->getTypeLibType() );
- if (pTD)
- {
- uno_Interface * pInterface = 0;
- (*pThis->getBridge()->getUnoEnv()->getRegisteredInterface)(
- pThis->getBridge()->getUnoEnv(),
- (void **)&pInterface, pThis->oid.pData, (typelib_InterfaceTypeDescription *)pTD );
-
- if (pInterface)
- {
- ::uno_any_construct(
- reinterpret_cast< uno_Any * >( pReturn ),
- &pInterface, pTD, 0 );
- (*pInterface->release)( pInterface );
- TYPELIB_DANGER_RELEASE( pTD );
- *ppException = 0;
- break;
- }
- TYPELIB_DANGER_RELEASE( pTD );
- }
- } // else perform queryInterface()
- SAL_FALLTHROUGH;
- default:
- // dependent dispatch
- cpp_call(
- pThis, aVtableSlot,
- ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->pReturnTypeRef,
- ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->nParams,
- ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->pParams,
- pReturn, pArgs, ppException );
- }
- break;
- }
- default:
- {
- ::com::sun::star::uno::RuntimeException aExc(
- "illegal member type description!",
- ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >() );
-
- Type const & rExcType = cppu::UnoType<decltype(aExc)>::get();
- // binary identical null reference
- ::uno_type_any_construct( *ppException, &aExc, rExcType.getTypeLibType(), 0 );
- }
- }
-}
-
-} } }
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/configure.ac b/configure.ac
index b4932349a165..08a30cdd0352 100644
--- a/configure.ac
+++ b/configure.ac
@@ -620,7 +620,7 @@ darwin*) # Mac OS X or iOS
test_freetype=no
test_fontconfig=no
test_dbus=no
- if test "$host_cpu" = "arm" -o "$host_cpu" = "arm64"; then
+ if test "$host_cpu" = "arm64"; then
_os=iOS
test_gtk=no
test_cups=no
@@ -2391,8 +2391,9 @@ if test -z "$enable_database_connectivity"; then
# --disable-database-connectivity is unfinished work in progress
# and the iOS test app doesn't link if we actually try to use it.
# if test $_os != iOS -a $_os != Android; then
+ if test $_os != iOS; then
enable_database_connectivity=yes
- # fi
+ fi
fi
if test "$enable_database_connectivity" = yes; then
@@ -3066,7 +3067,7 @@ if test "$_os" = "WINNT"; then
fi
fi
if test "$_os" = "iOS"; then
- if test "$host_cpu" = "arm" -o "$host_cpu" = "arm64" ; then
+ if test "$host_cpu" = "arm64" ; then
cross_compiling="yes"
fi
fi
@@ -3936,16 +3937,7 @@ darwin*)
case "$host_cpu" in
arm)
- OS=IOS
- if test "$enable_ios_simulator" = "yes"; then
- CPUNAME=I386
- RTL_ARCH=x86
- PLATFORMID=macosx_x86
- else
- RTL_ARCH=ARM_EABI
- CPUNAME=ARM
- PLATFORMID=ios_arm
- fi
+ AC_MSG_ERROR([Can't build 32-bit code for iOS])
;;
arm64)
OS=IOS
@@ -5577,14 +5569,7 @@ dnl ===================================================================
if test "$_os" != "WINNT"; then
if test "$_os" == "iOS"; then
-if test "$host_cpu" == "arm"; then
- ac_cv_sizeof_long=4
- ac_cv_sizeof_short=2
- ac_cv_sizeof_int=4
- ac_cv_sizeof_long_long=8
- ac_cv_sizeof_double=8
- ac_cv_sizeof_voidp=4
-else
+if test "$host_cpu" == "arm64"; then
ac_cv_sizeof_long=8
ac_cv_sizeof_short=2
ac_cv_sizeof_int=4
diff --git a/solenv/gbuild/platform/iOS_ARM_GCC.mk b/solenv/gbuild/platform/iOS_ARM_GCC.mk
deleted file mode 100644
index 602afac2001f..000000000000
--- a/solenv/gbuild/platform/iOS_ARM_GCC.mk
+++ /dev/null
@@ -1,22 +0,0 @@
-# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
-#
-# This file is part of the LibreOffice project.
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-#
-# This file incorporates work covered by the following license notice:
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed
-# with this work for additional information regarding copyright
-# ownership. The ASF licenses this file to you under the Apache
-# License, Version 2.0 (the "License"); you may not use this file
-# except in compliance with the License. You may obtain a copy of
-# the License at http://www.apache.org/licenses/LICENSE-2.0 .
-#
-
-gb_CPUDEFS := -DARM32
-
-include $(GBUILDDIR)/platform/iOS.mk
diff --git a/solenv/gbuild/platform/iOS_I386_GCC.mk b/solenv/gbuild/platform/iOS_I386_GCC.mk
deleted file mode 100644
index cae311cd45dd..000000000000
--- a/solenv/gbuild/platform/iOS_I386_GCC.mk
+++ /dev/null
@@ -1,22 +0,0 @@
-# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
-#
-# This file is part of the LibreOffice project.
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-#
-# This file incorporates work covered by the following license notice:
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed
-# with this work for additional information regarding copyright
-# ownership. The ASF licenses this file to you under the Apache
-# License, Version 2.0 (the "License"); you may not use this file
-# except in compliance with the License. You may obtain a copy of
-# the License at http://www.apache.org/licenses/LICENSE-2.0 .
-#
-
-gb_CPUDEFS := -DI386
-
-include $(GBUILDDIR)/platform/iOS.mk