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
- Previous message: File msn-pecan-0.1.0-rc3.tar.bz2 uploaded to lookaside cache by madko
- Next message: rpms/kernel/F-11 futex-handle-user-space-corruption-gracefully.patch, NONE, 1.1 patch-2.6.32.8.bz2.sign, NONE, 1.1 .cvsignore, 1.1069, 1.1070 kernel.spec, 1.1814, 1.1815 sources, 1.1031, 1.1032 upstream, 1.942, 1.943 patch-2.6.32.7.bz2.sign, 1.1, NONE patch-2.6.32.8-rc2.bz2.sign, 1.1, NONE
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
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
- Previous message: File msn-pecan-0.1.0-rc3.tar.bz2 uploaded to lookaside cache by madko
- Next message: rpms/kernel/F-11 futex-handle-user-space-corruption-gracefully.patch, NONE, 1.1 patch-2.6.32.8.bz2.sign, NONE, 1.1 .cvsignore, 1.1069, 1.1070 kernel.spec, 1.1814, 1.1815 sources, 1.1031, 1.1032 upstream, 1.942, 1.943 patch-2.6.32.7.bz2.sign, 1.1, NONE patch-2.6.32.8-rc2.bz2.sign, 1.1, NONE
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the scm-commits
mailing list