rpms/openoffice.org/devel workspace.x86_64_bridgefix.patch, NONE, 1.1 openoffice.org.spec, 1.2143, 1.2144

Caolan McNamara caolanm at fedoraproject.org
Tue Feb 9 13:40:16 UTC 2010


Author: caolanm

Update of /cvs/pkgs/rpms/openoffice.org/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv22603

Modified Files:
	openoffice.org.spec 
Added Files:
	workspace.x86_64_bridgefix.patch 
Log Message:
backport workspace.x86_64_bridgefix.patch

workspace.x86_64_bridgefix.patch:
 cpp_uno/gcc3_linux_x86-64/abi.cxx     |   10 +++-----
 cpp_uno/gcc3_linux_x86-64/abi.hxx     |    2 -
 cpp_uno/gcc3_linux_x86-64/call.s      |    3 ++
 cpp_uno/gcc3_linux_x86-64/cpp2uno.cxx |   38 ++++++++--------------------------
 cpp_uno/gcc3_linux_x86-64/uno2cpp.cxx |   25 ++++++++++++++--------
 remote/urp/urp_reader.cxx             |    4 +--
 6 files changed, 35 insertions(+), 47 deletions(-)

--- NEW FILE workspace.x86_64_bridgefix.patch ---
Index: bridges/source/cpp_uno/gcc3_linux_x86-64/abi.hxx
===================================================================
--- bridges/source/cpp_uno/gcc3_linux_x86-64/abi.hxx	(revision 277985)
+++ bridges/source/cpp_uno/gcc3_linux_x86-64/abi.hxx	(revision 277986)
@@ -63,7 +63,7 @@
 */
 bool return_in_hidden_param( typelib_TypeDescriptionReference *pTypeRef );
 
-void fill_struct( typelib_TypeDescriptionReference *pTypeRef, void * const *pGPR, void * const *pSSE, void *pStruct );
+void fill_struct( typelib_TypeDescriptionReference *pTypeRef, const sal_uInt64* pGPR, const double* pSSE, void *pStruct );
 
 } // namespace x86_64
 
Index: bridges/source/cpp_uno/gcc3_linux_x86-64/cpp2uno.cxx
===================================================================
--- bridges/source/cpp_uno/gcc3_linux_x86-64/cpp2uno.cxx	(revision 277985)
+++ bridges/source/cpp_uno/gcc3_linux_x86-64/cpp2uno.cxx	(revision 277986)
@@ -121,13 +121,14 @@
 	for ( sal_Int32 nPos = 0; nPos < nParams; ++nPos )
 	{
 		const typelib_MethodParameter & rParam = pParams[nPos];
-		typelib_TypeDescription * pParamTypeDescr = 0;
-		TYPELIB_DANGER_GET( &pParamTypeDescr, rParam.pTypeRef );
 
 		int nUsedGPR = 0;
 		int nUsedSSE = 0;
-		bool bFitsRegisters = x86_64::examine_argument( rParam.pTypeRef, false, nUsedGPR, nUsedSSE );
-		if ( !rParam.bOut && bridges::cpp_uno::shared::isSimpleType( pParamTypeDescr ) ) // value
+#if OSL_DEBUG_LEVEL > 0
+		bool bFitsRegisters =
+#endif
+			x86_64::examine_argument( rParam.pTypeRef, false, nUsedGPR, nUsedSSE );
+		if ( !rParam.bOut && bridges::cpp_uno::shared::isSimpleType( rParam.pTypeRef ) ) // value
 		{
 			// Simple types must fit exactly one register on x86_64
 			OSL_ASSERT( bFitsRegisters && ( ( nUsedSSE == 1 && nUsedGPR == 0 ) || ( nUsedSSE == 0 && nUsedGPR == 1 ) ) );
@@ -152,35 +153,14 @@
 				else
 					pCppArgs[nPos] = pUnoArgs[nPos] = ovrflw++;
 			}
-
-			// no longer needed
-			TYPELIB_DANGER_RELEASE( pParamTypeDescr );
 		}
 		else // struct <= 16 bytes || ptr to complex value || ref
 		{
-			void *pCppStack;
-			char pTmpStruct[16];
+			typelib_TypeDescription * pParamTypeDescr = 0;
+			TYPELIB_DANGER_GET( &pParamTypeDescr, rParam.pTypeRef );
 
-			if ( bFitsRegisters && !rParam.bOut &&
-				 ( pParamTypeDescr->eTypeClass == typelib_TypeClass_STRUCT ||
-				   pParamTypeDescr->eTypeClass == typelib_TypeClass_EXCEPTION ) )
-			{
-				if ( ( nr_gpr + nUsedGPR <= x86_64::MAX_GPR_REGS ) && ( nr_fpr + nUsedSSE <= x86_64::MAX_SSE_REGS ) )
-				{
-					x86_64::fill_struct( rParam.pTypeRef, gpreg, fpreg, pTmpStruct );
-#if OSL_DEBUG_LEVEL > 1
-					fprintf( stderr, "nUsedGPR == %d, nUsedSSE == %d, pTmpStruct[0] == 0x%x, pTmpStruct[1] == 0x%x, **gpreg == 0x%lx\n",
-							nUsedGPR, nUsedSSE, pTmpStruct[0], pTmpStruct[1], *(sal_uInt64*)*gpreg );
-#endif
-
-					pCppArgs[nPos] = pCppStack = reinterpret_cast<void *>( pTmpStruct );
-					gpreg += nUsedGPR;
-					fpreg += nUsedSSE;
-				}
-				else
-					pCppArgs[nPos] = pCppStack = *ovrflw++;
-			}
-			else if ( nr_gpr < x86_64::MAX_GPR_REGS )
+			void *pCppStack;
+			if ( nr_gpr < x86_64::MAX_GPR_REGS )
 			{ 
 				pCppArgs[nPos] = pCppStack = *gpreg++;
 				nr_gpr++;
Index: bridges/source/cpp_uno/gcc3_linux_x86-64/uno2cpp.cxx
===================================================================
--- bridges/source/cpp_uno/gcc3_linux_x86-64/uno2cpp.cxx	(revision 277985)
+++ bridges/source/cpp_uno/gcc3_linux_x86-64/uno2cpp.cxx	(revision 277986)
@@ -53,13 +53,13 @@
 
 //==================================================================================================
 static void callVirtualMethod(void * pThis, sal_uInt32 nVtableIndex,
-                              void * pRegisterReturn, typelib_TypeDescription * pReturnTypeDescr, bool bSimpleReturn,
+                              void * pRegisterReturn, typelib_TypeDescriptionReference * pReturnTypeRef, bool bSimpleReturn,
                               sal_uInt64 *pStack, sal_uInt32 nStack,
                               sal_uInt64 *pGPR, sal_uInt32 nGPR,
                               double *pFPR, sal_uInt32 nFPR) __attribute__((noinline));
 
 static void callVirtualMethod(void * pThis, sal_uInt32 nVtableIndex,
-                              void * pRegisterReturn, typelib_TypeDescription * pReturnTypeDescr, bool bSimpleReturn,
+                              void * pRegisterReturn, typelib_TypeDescriptionReference * pReturnTypeRef, bool bSimpleReturn,
                               sal_uInt64 *pStack, sal_uInt32 nStack,
                               sal_uInt64 *pGPR, sal_uInt32 nGPR,
                               double *pFPR, sal_uInt32 nFPR)
@@ -113,6 +113,7 @@
     sal_uInt64 rax;
     sal_uInt64 rdx;
     double xmm0;
+    double xmm1;
 
     asm volatile (
         
@@ -147,13 +148,14 @@
         "movq   %%rax, %4\n\t"
         "movq   %%rdx, %5\n\t"
         "movsd %%xmm0, %6\n\t"
+        "movsd %%xmm1, %7\n\t"
         :
         : "m" ( pMethod ), "m" ( pGPR ), "m" ( pFPR ), "m" ( nFPR ),
-          "m" ( rax ), "m" ( rdx ), "m" ( xmm0 )
+          "m" ( rax ), "m" ( rdx ), "m" ( xmm0 ), "m" ( xmm1 )
         : "rax", "rdi", "rsi", "rdx", "rcx", "r8", "r9", "r11"
     );
 
-    switch (pReturnTypeDescr->eTypeClass)
+    switch (pReturnTypeRef->eTypeClass)
     {
     case typelib_TypeClass_HYPER:
     case typelib_TypeClass_UNSIGNED_HYPER:
@@ -179,12 +181,17 @@
         break;
     default:
         {
-            sal_Int32 const nRetSize = pReturnTypeDescr->nSize;
+            sal_Int32 const nRetSize = pReturnTypeRef->pType->nSize;
             if (bSimpleReturn && nRetSize <= 16 && nRetSize > 0)
             {
-                if (nRetSize > 8)
-                    static_cast<sal_uInt64 *>(pRegisterReturn)[1] = rdx;
-                static_cast<sal_uInt64 *>(pRegisterReturn)[0] = rax;
+                sal_uInt64 longs[2];
+                longs[0] = rax;
+                longs[1] = rdx;
+
+                double doubles[2];
+                doubles[0] = xmm0;
+                doubles[1] = xmm1;
+                x86_64::fill_struct( pReturnTypeRef, &longs[0], &doubles[0], pRegisterReturn);
             }
             break;
         }
@@ -367,7 +374,7 @@
 	{
 		callVirtualMethod(
 			pAdjustedThisPtr, aVtableSlot.index,
-			pCppReturn, pReturnTypeDescr, bSimpleReturn,
+			pCppReturn, pReturnTypeRef, bSimpleReturn,
 			pStackStart, ( pStack - pStackStart ),
 			pGPR, nGPR,
 			pFPR, nFPR );
Index: bridges/source/cpp_uno/gcc3_linux_x86-64/abi.cxx
===================================================================
--- bridges/source/cpp_uno/gcc3_linux_x86-64/abi.cxx	(revision 277985)
+++ bridges/source/cpp_uno/gcc3_linux_x86-64/abi.cxx	(revision 277986)
@@ -229,6 +229,7 @@
                 for ( sal_Int32 nMember = 0; nMember < pStruct->nMembers; ++nMember )
                 {
                     typelib_TypeDescriptionReference *pTypeInStruct = pStruct->ppTypeRefs[ nMember ];
+                    rByteOffset = pStruct->pMemberOffsets[ nMember ];
 
                     int num = classify_argument( pTypeInStruct, subclasses, rByteOffset );
 
@@ -243,9 +244,6 @@
                         int pos = rByteOffset / 8;
                         classes[i + pos] = merge_classes( subclasses[i], classes[i + pos] );
                     }
-
-                    if ( pTypeInStruct->eTypeClass != typelib_TypeClass_STRUCT )
-                        rByteOffset = pStruct->pMemberOffsets[ nMember ];
                 }
 
                 TYPELIB_DANGER_RELEASE( pTypeDescr );
@@ -332,7 +330,7 @@
     return examine_argument( pTypeRef, true, g, s ) == 0;
 }
 
-void x86_64::fill_struct( typelib_TypeDescriptionReference *pTypeRef, void * const *pGPR, void * const *pSSE, void *pStruct )
+void x86_64::fill_struct( typelib_TypeDescriptionReference *pTypeRef, const sal_uInt64 *pGPR, const double *pSSE, void *pStruct )
 {
     enum x86_64_reg_class classes[MAX_CLASSES];
     int offset = 0;
@@ -346,12 +344,12 @@
         {
             case X86_64_INTEGER_CLASS:
             case X86_64_INTEGERSI_CLASS:
-                *pStructAlign++ = *reinterpret_cast<sal_uInt64 *>( *pGPR++ );
+                *pStructAlign++ = *pGPR++;
                 break;
             case X86_64_SSE_CLASS:
             case X86_64_SSESF_CLASS:
             case X86_64_SSEDF_CLASS:
-                *pStructAlign++ = *reinterpret_cast<sal_uInt64 *>( *pSSE++ );
+                *pStructAlign++ = *reinterpret_cast<const sal_uInt64 *>( pSSE++ );
                 break;
             default:
                 break;
Index: bridges/source/cpp_uno/gcc3_linux_x86-64/call.s
===================================================================
--- bridges/source/cpp_uno/gcc3_linux_x86-64/call.s	(revision 277985)
+++ bridges/source/cpp_uno/gcc3_linux_x86-64/call.s	(revision 277986)
@@ -43,6 +43,9 @@
 	je	.Lfloat
 
 	movq	-144(%rbp), %rax		# Return value (int case)
+	movq	-136(%rbp), %rdx		# Return value (int case)
+	movq	-144(%rbp), %xmm0		# Return value (int case)
+	movq	-136(%rbp), %xmm1		# Return value (int case)
 	jmp	.Lfinish
 .Lfloat:
 	movlpd	-144(%rbp), %xmm0		# Return value (float/double case)
Index: bridges/source/remote/urp/urp_reader.cxx
===================================================================
--- bridges/source/remote/urp/urp_reader.cxx	(revision 277985)
+++ bridges/source/remote/urp/urp_reader.cxx	(revision 277986)
@@ -372,8 +372,8 @@
 				}
 				pFlags->bSynchronous = ( HDRFLAG_SYNCHRONOUS & moreFlags );
 				pFlags->bMustReply = ( HDRFLAG_MUSTREPLY & moreFlags );
-				OSL_ENSURE( pFlags->bSynchronous && pFlags->bMustReply ||
-							! pFlags->bSynchronous && !pFlags->bMustReply,
+				OSL_ENSURE( (pFlags->bSynchronous && pFlags->bMustReply) ||
+							(!pFlags->bSynchronous && !pFlags->bMustReply),
 							"urp-bridge : customized calls currently not supported !");
 			}
 


Index: openoffice.org.spec
===================================================================
RCS file: /cvs/pkgs/rpms/openoffice.org/devel/openoffice.org.spec,v
retrieving revision 1.2143
retrieving revision 1.2144
diff -u -p -r1.2143 -r1.2144
--- openoffice.org.spec	9 Feb 2010 12:44:37 -0000	1.2143
+++ openoffice.org.spec	9 Feb 2010 13:40:16 -0000	1.2144
@@ -136,6 +136,7 @@ Patch60: openoffice.org-3.3.0.ooo108637.
 Patch61: openoffice.org-3.2.0.ooo108846.sfx2.qstartfixes.patch
 Patch62: openoffice.org-3.2.0.ooo108976.svx.safestyledelete.patch
 Patch63: openoffice.org-3.2.0.ooo109009.sc.tooltipcrash.patch
+Patch64: workspace.x86_64_bridgefix.patch
 
 %{!?python_sitearch: %global python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")}
 %define instdir %{_libdir}
@@ -1699,6 +1700,7 @@ cp -p %{SOURCE5} external/unowinreg/unow
 %patch61 -p1 -b .ooo108846.sfx2.qstartfixes.patch
 %patch62 -p0 -b .ooo108976.svx.safestyledelete.patch
 %patch63 -p0 -b .ooo109009.sc.tooltipcrash.patch
+%patch64 -p0 -b .workspace.x86_64_bridgefix.patch
 
 %build
 echo build start time is `date`, diskspace: `df -h . | tail -n 1`
@@ -4183,8 +4185,9 @@ fi
 %endif
 
 %changelog
-* Sat Feb 06 2010 Caolán McNamara <caolanm at redhat.com> - 1:3.2.0-12.4
+* Tue Feb 09 2010 Caolán McNamara <caolanm at redhat.com> - 1:3.2.0-12.4
 - Resolves: rhbz#445588 improve same name substitution
+- backport workspace.x86_64_bridgefix.patch
 
 * Sat Feb 06 2010 Caolán McNamara <caolanm at redhat.com> - 1:3.2.0-12.3
 - Resolves: rhbz#561989 openoffice.org-3.2.0.ooo109009.sc.tooltipcrash.patch



More information about the scm-commits mailing list