editors/openoffice-3 fails on i386 while it builds on amd64
Pedro Giffuni
pfg at FreeBSD.org
Fri May 11 16:28:56 UTC 2012
Hello;
The problem seems to be caused by an incomplete update to
the bridge code. The attached patch (for the files directory)
should fix it.
I will go ahead and commit it upstream since it can't be more
broken than it currently is but I am not using i386 so some
success report would be good :).
Pedro.
-------------- next part --------------
Index: bridges/source/cpp_uno/gcc3_freebsd_intel/cpp2uno.cxx
===================================================================
--- bridges/source/cpp_uno/gcc3_freebsd_intel/cpp2uno.cxx (revision 1337224)
+++ bridges/source/cpp_uno/gcc3_freebsd_intel/cpp2uno.cxx (working copy)
@@ -355,7 +355,7 @@
int const codeSnippetSize = 16;
unsigned char * codeSnippet(
- unsigned char * code, sal_Int32 functionIndex, sal_Int32 vtableOffset,
+ unsigned char * code, sal_PtrDiff writetoexecdiff, sal_Int32 functionIndex, sal_Int32 vtableOffset,
typelib_TypeClass returnTypeClass)
{
if (!bridges::cpp_uno::shared::isSimpleType(returnTypeClass)) {
@@ -401,7 +401,7 @@
// jmp privateSnippetExecutor:
*p++ = 0xE9;
*reinterpret_cast< sal_Int32 * >(p)
- = ((unsigned char *) exec) - p - sizeof (sal_Int32);
+ = ((unsigned char *) exec) - p - sizeof (sal_Int32) - writetoexecdiff;
p += sizeof (sal_Int32);
OSL_ASSERT(p - code <= codeSnippetSize);
return code + codeSnippetSize;
@@ -434,7 +434,7 @@
}
unsigned char * bridges::cpp_uno::shared::VtableFactory::addLocalFunctions(
- Slot ** slots, unsigned char * code,
+ Slot ** slots, unsigned char * code, sal_PtrDiff writetoexecdiff,
typelib_InterfaceTypeDescription const * type, sal_Int32 functionOffset,
sal_Int32 functionCount, sal_Int32 vtableOffset)
{
@@ -447,9 +447,9 @@
switch (member->eTypeClass) {
case typelib_TypeClass_INTERFACE_ATTRIBUTE:
// Getter:
- (s++)->fn = code;
+ (s++)->fn = code + writetoexecdiff;
code = codeSnippet(
- code, functionOffset++, vtableOffset,
+ code, writetoexecdiff, functionOffset++, vtableOffset,
reinterpret_cast< typelib_InterfaceAttributeTypeDescription * >(
member)->pAttributeTypeRef->eTypeClass);
// Setter:
@@ -457,17 +457,17 @@
typelib_InterfaceAttributeTypeDescription * >(
member)->bReadOnly)
{
- (s++)->fn = code;
+ (s++)->fn = code + writetoexecdiff;
code = codeSnippet(
- code, functionOffset++, vtableOffset,
+ code, writetoexecdiff, functionOffset++, vtableOffset,
typelib_TypeClass_VOID);
}
break;
case typelib_TypeClass_INTERFACE_METHOD:
- (s++)->fn = code;
+ (s++)->fn = code + writetoexecdiff;
code = codeSnippet(
- code, functionOffset++, vtableOffset,
+ code, writetoexecdiff, functionOffset++, vtableOffset,
reinterpret_cast< typelib_InterfaceMethodTypeDescription * >(
member)->pReturnTypeRef->eTypeClass);
break;
More information about the freebsd-office
mailing list