ooo-build r11711 - in trunk: . patches/src680
- From: rengelhard svn gnome org
- To: svn-commits-list gnome org
- Subject: ooo-build r11711 - in trunk: . patches/src680
- Date: Tue, 26 Feb 2008 18:35:23 +0000 (GMT)
Author: rengelhard
Date: Tue Feb 26 18:35:23 2008
New Revision: 11711
URL: http://svn.gnome.org/viewvc/ooo-build?rev=11711&view=rev
Log:
2008-02-26 Rene Engelhard <rene debian org>
* patches/src680/cws-ia64port01.diff: update
Modified:
trunk/ChangeLog
trunk/patches/src680/cws-ia64port01.diff
Modified: trunk/patches/src680/cws-ia64port01.diff
==============================================================================
--- trunk/patches/src680/cws-ia64port01.diff (original)
+++ trunk/patches/src680/cws-ia64port01.diff Tue Feb 26 18:35:23 2008
@@ -71,8 +71,8 @@
RCS file: solenv/inc/unxlnga.mk
diff -N solenv/inc/unxlnga.mk
--- /dev/null 1 Jan 1970 00:00:00 -0000
-+++ solenv/inc/unxlnga.mk 4 Jan 2008 18:52:35 -0000 1.1.2.1
-@@ -0,0 +1,230 @@
++++ solenv/inc/unxlnga.mk 26 Feb 2008 16:23:14 -0000 1.1.2.2
+@@ -0,0 +1,232 @@
+#*************************************************************************
+#
+# OpenOffice.org - a multi-platform office productivity suite
@@ -238,6 +238,8 @@
+LINKFLAGSRUNPATH_UREBIN=-Wl,-rpath,\''$$ORIGIN/../lib:$$ORIGIN'\'
+ #TODO: drop $ORIGIN once no URE executable is also shipped in OOo
+LINKFLAGSRUNPATH_OOO=-Wl,-rpath,\''$$ORIGIN:$$ORIGIN/../ure-link/lib'\'
++LINKFLAGSRUNPATH_BRAND=-Wl,-rpath,\''$$ORIGIN:$$ORIGIN/../basis-link/program:$$ORIGIN/../basis-link/ure-link/lib'\'
++LINKFLAGSRUNPATH_OXT=
+LINKFLAGS=-Wl,-z,combreloc $(LINKFLAGSDEFS)
+
+# linker flags for linking applications
@@ -318,11 +320,161 @@
cvs diff: Diffing solenv/src
cvs diff: Diffing solenv/unxmacxp
cvs diff: Diffing solenv/unxmacxp/inc
+cvs diff: Diffing tools
+cvs diff: Diffing tools/bootstrp
+cvs diff: Diffing tools/bootstrp/addexes
+cvs diff: Diffing tools/bootstrp/addexes2
+cvs diff: Diffing tools/inc
+cvs diff: Diffing tools/inc/bootstrp
+cvs diff: Diffing tools/inc/pch
+cvs diff: Diffing tools/inc/tools
+Index: tools/inc/tools/solar.h
+===================================================================
+RCS file: /cvs/util/tools/inc/tools/solar.h,v
+retrieving revision 1.5
+retrieving revision 1.5.44.2
+diff -u -u -p -b -w -B -r1.5 -r1.5.44.2
+--- tools/inc/tools/solar.h 2 Nov 2007 13:00:07 -0000 1.5
++++ tools/inc/tools/solar.h 21 Feb 2008 13:32:27 -0000 1.5.44.2
+@@ -388,6 +388,12 @@ template<typename T> inline T Abs(T a) {
+ #define __DLLEXTENSION "ls.so"
+ #elif defined LINUX && defined __x86_64__
+ #define __DLLEXTENSION "lx.so"
++#elif defined LINUX && defined MIPS
++ #define __DLLEXTENSION "lm.so"
++#elif defined LINUX && defined IA64
++ #define __DLLEXTENSION "la.so"
++#elif defined LINUX
++ #error unknown plattform
+ #elif defined FREEBSD && defined X86
+ #define __DLLEXTENSION "fi.so"
+ #elif defined FREEBSD && defined X86_64
+cvs diff: Diffing tools/prj
+cvs diff: Diffing tools/source
+cvs diff: Diffing tools/source/communi
+cvs diff: Diffing tools/source/datetime
+cvs diff: Diffing tools/source/debug
+cvs diff: Diffing tools/source/fsys
+cvs diff: Diffing tools/source/generic
+cvs diff: Diffing tools/source/inet
+cvs diff: Diffing tools/source/memtools
+cvs diff: Diffing tools/source/misc
+cvs diff: Diffing tools/source/rc
+cvs diff: Diffing tools/source/ref
+cvs diff: Diffing tools/source/solar
+cvs diff: Diffing tools/source/stream
+cvs diff: Diffing tools/source/string
+cvs diff: Diffing tools/source/testtoolloader
+cvs diff: Diffing tools/source/zcodec
+cvs diff: Diffing tools/test
+cvs diff: Diffing tools/unx
+cvs diff: Diffing tools/unx/source
+cvs diff: Diffing tools/unx/source/dll
+cvs diff: Diffing tools/util
+cvs diff: Diffing tools/util/defs
+cvs diff: Diffing tools/win
+cvs diff: Diffing tools/win/inc
+cvs diff: Diffing tools/win/source
+cvs diff: Diffing tools/win/source/dll
+cvs diff: Diffing tools/win/source/fastfsys
+cvs diff: Diffing tools/workben
cvs diff: Diffing bridges
cvs diff: Diffing bridges/inc
cvs diff: Diffing bridges/inc/bridges
cvs diff: Diffing bridges/inc/bridges/cpp_uno
cvs diff: Diffing bridges/inc/bridges/cpp_uno/shared
+Index: bridges/inc/bridges/cpp_uno/shared/cppinterfaceproxy.hxx
+===================================================================
+RCS file: /cvs/udk/bridges/inc/bridges/cpp_uno/shared/cppinterfaceproxy.hxx,v
+retrieving revision 1.4
+retrieving revision 1.4.104.1
+diff -u -u -p -b -w -B -r1.4 -r1.4.104.1
+--- bridges/inc/bridges/cpp_uno/shared/cppinterfaceproxy.hxx 19 Jun 2006 23:38:14 -0000 1.4
++++ bridges/inc/bridges/cpp_uno/shared/cppinterfaceproxy.hxx 18 Feb 2008 10:40:36 -0000 1.4.104.1
+@@ -42,6 +42,7 @@
+ #include "typelib/typedescription.h"
+ #include "uno/dispatcher.h"
+ #include "uno/environment.h"
++#include "bridges/cpp_uno/shared/vtablefactory.hxx"
+
+ namespace com { namespace sun { namespace star { namespace uno {
+ class XInterface;
+@@ -102,7 +103,7 @@ private:
+ typelib_InterfaceTypeDescription * pTypeDescr;
+ rtl::OUString oid;
+
+- void ** vtables[1];
++ VtableFactory::Slot * vtables[1];
+
+ friend void SAL_CALL freeCppInterfaceProxy(
+ uno_ExtEnvironment * pEnv, void * pInterface);
+Index: bridges/inc/bridges/cpp_uno/shared/vtablefactory.hxx
+===================================================================
+RCS file: /cvs/udk/bridges/inc/bridges/cpp_uno/shared/vtablefactory.hxx,v
+retrieving revision 1.5
+retrieving revision 1.5.116.1
+diff -u -u -p -b -w -B -r1.5 -r1.5.116.1
+--- bridges/inc/bridges/cpp_uno/shared/vtablefactory.hxx 2 May 2006 11:59:11 -0000 1.5
++++ bridges/inc/bridges/cpp_uno/shared/vtablefactory.hxx 18 Feb 2008 10:40:36 -0000 1.5.116.1
+@@ -50,6 +50,12 @@ namespace bridges { namespace cpp_uno {
+ */
+ class VtableFactory {
+ public:
++ // This structure is not defined in the generic part, but instead has to be
++ // defined individually for each CPP--UNO bridge:
++ /** A vtable slot.
++ */
++ struct Slot;
++
+ /** A raw vtable block.
+ */
+ struct Block {
+@@ -99,7 +105,7 @@ public:
+ // defined individually for each CPP--UNO bridge:
+ /** Given a pointer to a block, turn it into a vtable pointer.
+ */
+- static void ** mapBlockToVtable(void * block);
++ static Slot * mapBlockToVtable(void * block);
+
+ private:
+ class GuardedBlocks;
+@@ -133,11 +139,10 @@ private:
+ /** Initialize a raw vtable block.
+
+ @param block the start address of the raw vtable block
+- @return a pointer to the first virtual function slot (minus any
+- platform-specific ones, like a pointer to a destructor) within the given
+- block
++ @param slotCount the number of slots
++ @return a pointer past the last vtable slot
+ */
+- static void ** initializeBlock(void * block);
++ static Slot * initializeBlock(void * block, sal_Int32 slotCount);
+
+ // This function is not defined in the generic part, but instead has to be
+ // defined individually for each CPP--UNO bridge:
+@@ -145,8 +150,10 @@ private:
+ functions of a given interface type (and generate any necessary code
+ snippets for them).
+
+- @param slots points to the first vtable slot to be filled with the
+- first virtual function local to the given type
++ @param slots on input, points past the vtable slot to be filled with
++ the last virtual function local to the given type; on output, points to
++ the vtable slot filled with the first virtual function local to the
++ given type
+ @param code points to the start of the area where code snippets can be
+ generated
+ @param type the interface type description for which to generate vtable
+@@ -162,7 +169,7 @@ private:
+ @return a pointer to the remaining code snippet area
+ */
+ static unsigned char * addLocalFunctions(
+- void ** slots, unsigned char * code,
++ Slot ** slots, unsigned char * code,
+ typelib_InterfaceTypeDescription const * type, sal_Int32 functionOffset,
+ sal_Int32 functionCount, sal_Int32 vtableOffset);
+
cvs diff: Diffing bridges/inc/bridges/remote
cvs diff: Diffing bridges/inc/pch
cvs diff: Diffing bridges/prj
@@ -345,10 +497,429 @@
cvs diff: Diffing bridges/source
cvs diff: Diffing bridges/source/cpp_uno
cvs diff: Diffing bridges/source/cpp_uno/cc50_solaris_intel
+Index: bridges/source/cpp_uno/cc50_solaris_intel/cpp2uno.cxx
+===================================================================
+RCS file: /cvs/udk/bridges/source/cpp_uno/cc50_solaris_intel/cpp2uno.cxx,v
+retrieving revision 1.15
+retrieving revision 1.15.82.1
+diff -u -u -p -b -w -B -r1.15 -r1.15.82.1
+--- bridges/source/cpp_uno/cc50_solaris_intel/cpp2uno.cxx 16 Sep 2006 15:43:28 -0000 1.15
++++ bridges/source/cpp_uno/cc50_solaris_intel/cpp2uno.cxx 18 Feb 2008 11:14:12 -0000 1.15.82.1
+@@ -460,30 +460,37 @@ unsigned char * codeSnippet(
+
+ }
+
+-void ** bridges::cpp_uno::shared::VtableFactory::mapBlockToVtable(void * block)
+-{
+- return static_cast< void ** >(block) + 1;
++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) + 1;
+ }
+
+ sal_Size bridges::cpp_uno::shared::VtableFactory::getBlockSize(
+ sal_Int32 slotCount)
+ {
+- return (slotCount + 3) * sizeof (void *) + slotCount * codeSnippetSize;
++ return (slotCount + 3) * sizeof (Slot) + slotCount * codeSnippetSize;
+ }
+
+-void ** bridges::cpp_uno::shared::VtableFactory::initializeBlock(void * block) {
+- void ** slots = mapBlockToVtable(block) + 2;
+- slots[-3] = 0; // RTTI
+- slots[-2] = 0; // null
+- slots[-1] = 0; // destructor
+- return slots;
++bridges::cpp_uno::shared::VtableFactory::Slot *
++bridges::cpp_uno::shared::VtableFactory::initializeBlock(
++ void * block, sal_Int32 slotCount)
++{
++ Slot * slots = mapBlockToVtable(block) + 2;
++ slots[-3].fn = 0; // RTTI
++ slots[-2].fn = 0; // null
++ slots[-1].fn = 0; // destructor
++ return slots + slotCount;
+ }
+
+ unsigned char * bridges::cpp_uno::shared::VtableFactory::addLocalFunctions(
+- void ** slots, unsigned char * code,
++ Slot ** slots, unsigned char * code,
+ typelib_InterfaceTypeDescription const * type, sal_Int32 functionOffset,
+- sal_Int32, sal_Int32 vtableOffset)
++ 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]);
+@@ -491,7 +498,7 @@ unsigned char * bridges::cpp_uno::shared
+ switch (member->eTypeClass) {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ // Getter:
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ reinterpret_cast< typelib_InterfaceAttributeTypeDescription * >(
+@@ -501,13 +508,13 @@ unsigned char * bridges::cpp_uno::shared
+ typelib_InterfaceAttributeTypeDescription * >(
+ member)->bReadOnly)
+ {
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(code, functionOffset++, vtableOffset, 0);
+ }
+ break;
+
+ case typelib_TypeClass_INTERFACE_METHOD:
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ reinterpret_cast< typelib_InterfaceMethodTypeDescription * >(
cvs diff: Diffing bridges/source/cpp_uno/cc50_solaris_sparc
+Index: bridges/source/cpp_uno/cc50_solaris_sparc/cpp2uno.cxx
+===================================================================
+RCS file: /cvs/udk/bridges/source/cpp_uno/cc50_solaris_sparc/cpp2uno.cxx,v
+retrieving revision 1.23
+retrieving revision 1.23.42.1
+diff -u -u -p -b -w -B -r1.23 -r1.23.42.1
+--- bridges/source/cpp_uno/cc50_solaris_sparc/cpp2uno.cxx 14 Mar 2007 08:25:27 -0000 1.23
++++ bridges/source/cpp_uno/cc50_solaris_sparc/cpp2uno.cxx 18 Feb 2008 11:14:13 -0000 1.23.42.1
+@@ -456,30 +456,38 @@ unsigned char * codeSnippet(
+
+ }
+
+-void ** bridges::cpp_uno::shared::VtableFactory::mapBlockToVtable(void * block)
++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< void ** >(block) + 1;
++ return static_cast< Slot * >(block) + 1;
+ }
+
+ sal_Size bridges::cpp_uno::shared::VtableFactory::getBlockSize(
+ sal_Int32 slotCount)
+ {
+- return (slotCount + 3) * sizeof (void *) + slotCount * codeSnippetSize;
++ return (slotCount + 3) * sizeof (Slot) + slotCount * codeSnippetSize;
+ }
+
+-void ** bridges::cpp_uno::shared::VtableFactory::initializeBlock(void * block) {
+- void ** slots = mapBlockToVtable(block) + 2;
+- slots[-3] = 0; // RTTI
+- slots[-2] = 0; // null
+- slots[-1] = 0; // destructor
+- return slots;
++bridges::cpp_uno::shared::VtableFactory::Slot *
++bridges::cpp_uno::shared::VtableFactory::initializeBlock(
++ void * block, sal_Int32 slotCount)
++{
++ Slot * slots = mapBlockToVtable(block) + 2;
++ slots[-3].fn = 0; // RTTI
++ slots[-2].fn = 0; // null
++ slots[-1].fn = 0; // destructor
++ return slots + slotCount;
+ }
+
+ unsigned char * bridges::cpp_uno::shared::VtableFactory::addLocalFunctions(
+- void ** slots, unsigned char * code,
++ Slot ** slots, unsigned char * code,
+ typelib_InterfaceTypeDescription const * type, sal_Int32 functionOffset,
+- sal_Int32, sal_Int32 vtableOffset)
++ 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]);
+@@ -487,7 +495,7 @@ unsigned char * bridges::cpp_uno::shared
+ switch (member->eTypeClass) {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ // Getter:
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ bridges::cpp_uno::shared::isSimpleType(
+@@ -499,13 +507,13 @@ unsigned char * bridges::cpp_uno::shared
+ typelib_InterfaceAttributeTypeDescription * >(
+ member)->bReadOnly)
+ {
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(code, functionOffset++, vtableOffset, true);
+ }
+ break;
+
+ case typelib_TypeClass_INTERFACE_METHOD:
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ bridges::cpp_uno::shared::isSimpleType(
cvs diff: Diffing bridges/source/cpp_uno/gcc3_freebsd_intel
+Index: bridges/source/cpp_uno/gcc3_freebsd_intel/cpp2uno.cxx
+===================================================================
+RCS file: /cvs/udk/bridges/source/cpp_uno/gcc3_freebsd_intel/cpp2uno.cxx,v
+retrieving revision 1.10
+retrieving revision 1.10.32.1
+diff -u -u -p -b -w -B -r1.10 -r1.10.32.1
+--- bridges/source/cpp_uno/gcc3_freebsd_intel/cpp2uno.cxx 5 Jul 2007 08:59:35 -0000 1.10
++++ bridges/source/cpp_uno/gcc3_freebsd_intel/cpp2uno.cxx 18 Feb 2008 10:47:02 -0000 1.10.32.1
+@@ -421,29 +421,37 @@ unsigned char * codeSnippet(
+
+ }
+
+-void ** bridges::cpp_uno::shared::VtableFactory::mapBlockToVtable(void * block)
++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< void ** >(block) + 2;
++ return static_cast< Slot * >(block) + 2;
+ }
+
+ sal_Size bridges::cpp_uno::shared::VtableFactory::getBlockSize(
+ sal_Int32 slotCount)
+ {
+- return (slotCount + 2) * sizeof (void *) + slotCount * codeSnippetSize;
++ return (slotCount + 2) * sizeof (Slot) + slotCount * codeSnippetSize;
+ }
+
+-void ** bridges::cpp_uno::shared::VtableFactory::initializeBlock(void * block) {
+- void ** slots = mapBlockToVtable(block);
+- slots[-2] = 0;
+- slots[-1] = 0;
+- return slots;
++bridges::cpp_uno::shared::VtableFactory::Slot *
++bridges::cpp_uno::shared::VtableFactory::initializeBlock(
++ void * block, sal_Int32 slotCount)
++{
++ Slot * slots = mapBlockToVtable(block);
++ slots[-2].fn = 0;
++ slots[-1].fn = 0;
++ return slots + slotCount;
+ }
+
+ unsigned char * bridges::cpp_uno::shared::VtableFactory::addLocalFunctions(
+- void ** slots, unsigned char * code,
++ Slot ** slots, unsigned char * code,
+ typelib_InterfaceTypeDescription const * type, sal_Int32 functionOffset,
+- sal_Int32 /*functionCount*/, sal_Int32 vtableOffset)
++ 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]);
+@@ -451,7 +459,7 @@ unsigned char * bridges::cpp_uno::shared
+ switch (member->eTypeClass) {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ // Getter:
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ reinterpret_cast< typelib_InterfaceAttributeTypeDescription * >(
+@@ -461,7 +469,7 @@ unsigned char * bridges::cpp_uno::shared
+ typelib_InterfaceAttributeTypeDescription * >(
+ member)->bReadOnly)
+ {
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ typelib_TypeClass_VOID);
+@@ -469,7 +477,7 @@ unsigned char * bridges::cpp_uno::shared
+ break;
+
+ case typelib_TypeClass_INTERFACE_METHOD:
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ reinterpret_cast< typelib_InterfaceMethodTypeDescription * >(
cvs diff: Diffing bridges/source/cpp_uno/gcc3_freebsd_x86-64
+Index: bridges/source/cpp_uno/gcc3_freebsd_x86-64/cpp2uno.cxx
+===================================================================
+RCS file: /cvs/udk/bridges/source/cpp_uno/gcc3_freebsd_x86-64/cpp2uno.cxx,v
+retrieving revision 1.3
+retrieving revision 1.3.82.1
+diff -u -u -p -b -w -B -r1.3 -r1.3.82.1
+--- bridges/source/cpp_uno/gcc3_freebsd_x86-64/cpp2uno.cxx 16 Sep 2006 15:46:37 -0000 1.3
++++ bridges/source/cpp_uno/gcc3_freebsd_x86-64/cpp2uno.cxx 18 Feb 2008 10:47:02 -0000 1.3.82.1
+@@ -465,35 +465,42 @@ unsigned char * codeSnippet( unsigned ch
+ }
+
+ //==================================================================================================
+-void ** bridges::cpp_uno::shared::VtableFactory::mapBlockToVtable( void * block )
++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<void **>( block ) + 2;
++ return static_cast< Slot * >(block) + 2;
+ }
+
+ //==================================================================================================
+ sal_Size bridges::cpp_uno::shared::VtableFactory::getBlockSize(
+ sal_Int32 slotCount)
+ {
+- return ( slotCount + 2 ) * sizeof( void * ) + slotCount * codeSnippetSize;
++ return (slotCount + 2) * sizeof (Slot) + slotCount * codeSnippetSize;
+ }
+
+ //==================================================================================================
+-void ** bridges::cpp_uno::shared::VtableFactory::initializeBlock( void * block )
+-{
+- void ** slots = mapBlockToVtable( block );
+- slots[-2] = 0;
+- slots[-1] = 0;
+-
+- return slots;
++bridges::cpp_uno::shared::VtableFactory::Slot *
++bridges::cpp_uno::shared::VtableFactory::initializeBlock(
++ void * block, sal_Int32 slotCount)
++{
++ Slot * slots = mapBlockToVtable(block);
++ slots[-2].fn = 0;
++ slots[-1].fn = 0;
++ return slots + slotCount;
+ }
+
+ //==================================================================================================
+
+ unsigned char * bridges::cpp_uno::shared::VtableFactory::addLocalFunctions(
+- void ** slots, unsigned char * code,
++ Slot ** slots, unsigned char * code,
+ typelib_InterfaceTypeDescription const * type, sal_Int32 nFunctionOffset,
+ sal_Int32 functionCount, sal_Int32 nVtableOffset )
+ {
++ (*slots) -= functionCount;
++ Slot * s = *slots;
++
+ for ( sal_Int32 nPos = 0; nPos < type->nMembers; ++nPos )
+ {
+ typelib_TypeDescription * pTD = 0;
+@@ -507,14 +514,14 @@ unsigned char * bridges::cpp_uno::shared
+ reinterpret_cast<typelib_InterfaceAttributeTypeDescription *>( pTD );
+
+ // get method
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet( code, nFunctionOffset++, nVtableOffset,
+ x86_64::return_in_hidden_param( pAttrTD->pAttributeTypeRef ) );
+
+ if ( ! pAttrTD->bReadOnly )
+ {
+ // set method
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet( code, nFunctionOffset++, nVtableOffset, false );
+ }
+ }
+@@ -523,7 +530,7 @@ unsigned char * bridges::cpp_uno::shared
+ typelib_InterfaceMethodTypeDescription *pMethodTD =
+ reinterpret_cast<typelib_InterfaceMethodTypeDescription *>( pTD );
+
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet( code, nFunctionOffset++, nVtableOffset,
+ x86_64::return_in_hidden_param( pMethodTD->pReturnTypeRef ) );
+ }
cvs diff: Diffing bridges/source/cpp_uno/gcc3_linux_arm
+Index: bridges/source/cpp_uno/gcc3_linux_arm/cpp2uno.cxx
+===================================================================
+RCS file: /cvs/udk/bridges/source/cpp_uno/gcc3_linux_arm/cpp2uno.cxx,v
+retrieving revision 1.3
+retrieving revision 1.3.6.1
+diff -u -u -p -b -w -B -r1.3 -r1.3.6.1
+--- bridges/source/cpp_uno/gcc3_linux_arm/cpp2uno.cxx 12 Dec 2007 15:34:25 -0000 1.3
++++ bridges/source/cpp_uno/gcc3_linux_arm/cpp2uno.cxx 18 Feb 2008 10:40:36 -0000 1.3.6.1
+@@ -447,29 +447,37 @@ namespace
+ }
+ }
+
+-void ** bridges::cpp_uno::shared::VtableFactory::mapBlockToVtable(void * block)
++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< void ** >(block) + 2;
++ return static_cast< Slot * >(block) + 2;
+ }
+
+ sal_Size bridges::cpp_uno::shared::VtableFactory::getBlockSize(
+ sal_Int32 slotCount)
+ {
+- return (slotCount + 2) * sizeof (void *) + slotCount * codeSnippetSize;
++ return (slotCount + 2) * sizeof (Slot) + slotCount * codeSnippetSize;
+ }
+
+-void ** bridges::cpp_uno::shared::VtableFactory::initializeBlock(void * block) {
+- void ** slots = mapBlockToVtable(block);
+- slots[-2] = 0;
+- slots[-1] = 0;
+- return slots;
++bridges::cpp_uno::shared::VtableFactory::Slot *
++bridges::cpp_uno::shared::VtableFactory::initializeBlock(
++ void * block, sal_Int32 slotCount)
++{
++ Slot * slots = mapBlockToVtable(block);
++ slots[-2].fn = 0;
++ slots[-1].fn = 0;
++ return slots + slotCount;
+ }
+
+ unsigned char * bridges::cpp_uno::shared::VtableFactory::addLocalFunctions(
+- void ** slots, unsigned char * code,
++ Slot ** slots, unsigned char * code,
+ typelib_InterfaceTypeDescription const * type, sal_Int32 functionOffset,
+- sal_Int32 /*functionCount*/, sal_Int32 vtableOffset)
++ sal_Int32 functionCount, sal_Int32 vtableOffset)
+ {
++ (*slots) -= functionCount;
++ Slot * s = *slots;
+ for (sal_Int32 i = 0; i < type->nMembers; ++i)
+ {
+ typelib_TypeDescription * member = 0;
+@@ -479,7 +487,7 @@ unsigned char * bridges::cpp_uno::shared
+ {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ // Getter:
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ bridges::cpp_uno::shared::isSimpleType(
+@@ -491,14 +499,14 @@ unsigned char * bridges::cpp_uno::shared
+ typelib_InterfaceAttributeTypeDescription * >(
+ member)->bReadOnly)
+ {
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset, true);
+ }
+ break;
+ case typelib_TypeClass_INTERFACE_METHOD:
+ {
+- *slots++ = code;
++ (s++)->fn = code;
+
+ typelib_InterfaceMethodTypeDescription *pMethodTD =
+ reinterpret_cast<
cvs diff: Diffing bridges/source/cpp_uno/gcc3_linux_ia64
Index: bridges/source/cpp_uno/gcc3_linux_ia64/call.s
===================================================================
@@ -382,8 +953,8 @@
RCS file: bridges/source/cpp_uno/gcc3_linux_ia64/cpp2uno.cxx
diff -N bridges/source/cpp_uno/gcc3_linux_ia64/cpp2uno.cxx
--- /dev/null 1 Jan 1970 00:00:00 -0000
-+++ bridges/source/cpp_uno/gcc3_linux_ia64/cpp2uno.cxx 15 Feb 2008 17:36:55 -0000 1.1.2.2
-@@ -0,0 +1,691 @@
++++ bridges/source/cpp_uno/gcc3_linux_ia64/cpp2uno.cxx 18 Feb 2008 10:40:37 -0000 1.1.2.3
+@@ -0,0 +1,692 @@
+/*************************************************************************
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
@@ -966,7 +1537,7 @@
+{
+const int codeSnippetSize = 40;
+
-+ia64::function_desc codeSnippet( unsigned char * code, sal_Int32 nFunctionIndex, sal_Int32 nVtableOffset,
++bridges::cpp_uno::shared::VtableFactory::Slot codeSnippet( unsigned char * code, sal_Int32 nFunctionIndex, sal_Int32 nVtableOffset,
+ bool bHasHiddenParam )
+{
+#ifdef CMC_DEBUG
@@ -982,14 +1553,14 @@
+
+ long *raw = (long *)code;
+
-+ ia64::function_desc* destination = (ia64::function_desc*)cpp_vtable_call;
++ bridges::cpp_uno::shared::VtableFactory::Slot* destination = (bridges::cpp_uno::shared::VtableFactory::Slot*)cpp_vtable_call;
+
+ raw[0] = (long)&privateSnippetExecutor;
+ raw[1] = (long)&raw[2];
+ raw[2] = nOffsetAndIndex;
+ raw[3] = destination->gp_value;
+
-+ return *(ia64::function_desc*)(code);
++ return *(bridges::cpp_uno::shared::VtableFactory::Slot*)(code);
+}
+}
+
@@ -997,33 +1568,34 @@
+{
+}
+
-+void ** bridges::cpp_uno::shared::VtableFactory::mapBlockToVtable(void * block)
++bridges::cpp_uno::shared::VtableFactory::Slot * bridges::cpp_uno::shared::VtableFactory::mapBlockToVtable(void * block)
+{
-+ ia64::function_desc *pRet = static_cast< ia64::function_desc* >(block) + 2;
-+ return reinterpret_cast< void** >(pRet);
++ return static_cast< Slot * >(block) + 2;
+}
+
++
+sal_Size bridges::cpp_uno::shared::VtableFactory::getBlockSize(
+ sal_Int32 slotCount)
+{
-+ return (slotCount + 2) * sizeof (ia64::function_desc) + slotCount * codeSnippetSize;
++ return (slotCount + 2) * sizeof (Slot) + slotCount * codeSnippetSize;
+}
+
-+void** bridges::cpp_uno::shared::VtableFactory::initializeBlock(void * block)
++bridges::cpp_uno::shared::VtableFactory::Slot* bridges::cpp_uno::shared::VtableFactory::initializeBlock(void * block, sal_Int32 slotCount)
+{
-+ ia64::function_desc * slots = reinterpret_cast< ia64::function_desc* >(mapBlockToVtable(block));
-+ ia64::function_desc foo = {0,0};
++ Slot * slots = mapBlockToVtable(block);
++ Slot foo = {0,0};
+ slots[-2] = foo;
+ slots[-1] = foo;
-+ return reinterpret_cast< void** >(slots);
++ return slots + slotCount;
+}
+
+unsigned char * bridges::cpp_uno::shared::VtableFactory::addLocalFunctions(
-+ void ** in_slots, unsigned char * code,
++ Slot ** in_slots, unsigned char * code,
+ typelib_InterfaceTypeDescription const * type, sal_Int32 functionOffset,
-+ sal_Int32 /*functionCount*/, sal_Int32 vtableOffset)
++ sal_Int32 functionCount, sal_Int32 vtableOffset)
+{
-+ ia64::function_desc *slots = reinterpret_cast< ia64::function_desc* >(in_slots);
++ (*in_slots) -= functionCount;
++ Slot * slots = *in_slots;
+#ifdef CMC_DEBUG
+ fprintf(stderr, "in addLocalFunctions functionOffset is %x\n",functionOffset);
+ fprintf(stderr, "in addLocalFunctions vtableOffset is %x\n",vtableOffset);
@@ -1479,8 +2051,8 @@
RCS file: bridges/source/cpp_uno/gcc3_linux_ia64/share.hxx
diff -N bridges/source/cpp_uno/gcc3_linux_ia64/share.hxx
--- /dev/null 1 Jan 1970 00:00:00 -0000
-+++ bridges/source/cpp_uno/gcc3_linux_ia64/share.hxx 15 Feb 2008 17:36:56 -0000 1.1.2.2
-@@ -0,0 +1,129 @@
++++ bridges/source/cpp_uno/gcc3_linux_ia64/share.hxx 18 Feb 2008 10:40:37 -0000 1.1.2.3
+@@ -0,0 +1,138 @@
+/*************************************************************************
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
@@ -1521,6 +2093,7 @@
+#include <typeinfo>
+#include <exception>
+#include <cstddef>
++#include "bridges/cpp_uno/shared/vtablefactory.hxx"
+
+namespace CPPU_CURRENT_NAMESPACE
+{
@@ -1585,18 +2158,6 @@
+{
+ enum ia64limits { MAX_GPR_REGS = 8, MAX_SSE_REGS = 8, MAX_REG_SLOTS = 8 };
+
-+ /*
-+ http://www.swag.uwaterloo.ca/asx/ABI.html
-+ On Itanium, function pointers are pairs: the function address followed
-+ by the global pointer value that should be used when calling the
-+ function (code address, gp value)
-+ */
-+ struct function_desc
-+ {
-+ sal_uInt64 code_address;
-+ sal_uInt64 gp_value;
-+ };
-+
+ bool return_in_hidden_param( typelib_TypeDescriptionReference *pTypeRef );
+ bool return_via_r8_buffer( typelib_TypeDescriptionReference *pTypeRef );
+
@@ -1609,6 +2170,26 @@
+ };
+}
+
++namespace bridges
++{
++ namespace cpp_uno
++ {
++ namespace shared
++ {
++ /*
++ http://www.swag.uwaterloo.ca/asx/ABI.html
++ On Itanium, function pointers are pairs: the function address followed
++ by the global pointer value that should be used when calling the
++ function (code address, gp value)
++ */
++ struct VtableFactory::Slot
++ {
++ sal_uInt64 code_address;
++ sal_uInt64 gp_value;
++ };
++ }
++ }
++}
+/* vi:set tabstop=4 shiftwidth=4 expandtab: */
Index: bridges/source/cpp_uno/gcc3_linux_ia64/uno2cpp.cxx
===================================================================
@@ -2291,17 +2872,270 @@
+} } }
+/* vi:set tabstop=4 shiftwidth=4 expandtab: */
cvs diff: Diffing bridges/source/cpp_uno/gcc3_linux_intel
+Index: bridges/source/cpp_uno/gcc3_linux_intel/cpp2uno.cxx
+===================================================================
+RCS file: /cvs/udk/bridges/source/cpp_uno/gcc3_linux_intel/cpp2uno.cxx,v
+retrieving revision 1.12
+retrieving revision 1.12.82.1
+diff -u -u -p -b -w -B -r1.12 -r1.12.82.1
+--- bridges/source/cpp_uno/gcc3_linux_intel/cpp2uno.cxx 16 Sep 2006 15:47:26 -0000 1.12
++++ bridges/source/cpp_uno/gcc3_linux_intel/cpp2uno.cxx 18 Feb 2008 10:40:37 -0000 1.12.82.1
+@@ -421,29 +421,36 @@ unsigned char * codeSnippet(
+
+ }
+
+-void ** bridges::cpp_uno::shared::VtableFactory::mapBlockToVtable(void * block)
+-{
+- return static_cast< void ** >(block) + 2;
++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;
+ }
+
+ sal_Size bridges::cpp_uno::shared::VtableFactory::getBlockSize(
+ sal_Int32 slotCount)
+ {
+- return (slotCount + 2) * sizeof (void *) + slotCount * codeSnippetSize;
++ return (slotCount + 2) * sizeof (Slot) + slotCount * codeSnippetSize;
+ }
+
+-void ** bridges::cpp_uno::shared::VtableFactory::initializeBlock(void * block) {
+- void ** slots = mapBlockToVtable(block);
+- slots[-2] = 0;
+- slots[-1] = 0;
+- return slots;
++bridges::cpp_uno::shared::VtableFactory::Slot *
++bridges::cpp_uno::shared::VtableFactory::initializeBlock(
++ void * block, sal_Int32 slotCount)
++{
++ Slot * slots = mapBlockToVtable(block);
++ slots[-2].fn = 0;
++ slots[-1].fn = 0;
++ return slots + slotCount;
+ }
+
+ unsigned char * bridges::cpp_uno::shared::VtableFactory::addLocalFunctions(
+- void ** slots, unsigned char * code,
++ Slot ** slots, unsigned char * code,
+ typelib_InterfaceTypeDescription const * type, sal_Int32 functionOffset,
+- sal_Int32 /*functionCount*/, sal_Int32 vtableOffset)
++ 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]);
+@@ -451,7 +458,7 @@ unsigned char * bridges::cpp_uno::shared
+ switch (member->eTypeClass) {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ // Getter:
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ reinterpret_cast< typelib_InterfaceAttributeTypeDescription * >(
+@@ -461,7 +468,7 @@ unsigned char * bridges::cpp_uno::shared
+ typelib_InterfaceAttributeTypeDescription * >(
+ member)->bReadOnly)
+ {
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ typelib_TypeClass_VOID);
+@@ -469,7 +476,7 @@ unsigned char * bridges::cpp_uno::shared
+ break;
+
+ case typelib_TypeClass_INTERFACE_METHOD:
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ reinterpret_cast< typelib_InterfaceMethodTypeDescription * >(
cvs diff: Diffing bridges/source/cpp_uno/gcc3_linux_mips
+Index: bridges/source/cpp_uno/gcc3_linux_mips/cpp2uno.cxx
+===================================================================
+RCS file: /cvs/udk/bridges/source/cpp_uno/gcc3_linux_mips/cpp2uno.cxx,v
+retrieving revision 1.3
+retrieving revision 1.3.8.1
+diff -u -u -p -b -w -B -r1.3 -r1.3.8.1
+--- bridges/source/cpp_uno/gcc3_linux_mips/cpp2uno.cxx 22 Nov 2007 16:47:04 -0000 1.3
++++ bridges/source/cpp_uno/gcc3_linux_mips/cpp2uno.cxx 18 Feb 2008 10:40:37 -0000 1.3.8.1
+@@ -726,37 +726,38 @@ void bridges::cpp_uno::shared::VtableFac
+ sysmips(FLUSH_CACHE,0,0,0);
+ }
+
++struct bridges::cpp_uno::shared::VtableFactory::Slot { void * fn; };
+
+-
+-void ** bridges::cpp_uno::shared::VtableFactory::mapBlockToVtable(void * block)
++bridges::cpp_uno::shared::VtableFactory::Slot *
++bridges::cpp_uno::shared::VtableFactory::mapBlockToVtable(void * block)
+ {
+- return reinterpret_cast< void ** >(block) + 2;
++ return static_cast< Slot * >(block) + 2;
+ }
+
+
+ sal_Size bridges::cpp_uno::shared::VtableFactory::getBlockSize(
+ sal_Int32 slotCount)
+ {
+- return (slotCount + 2) * sizeof (void *) + slotCount * codeSnippetSize;
++ return (slotCount + 2) * sizeof (Slot) + slotCount * codeSnippetSize;
+ }
+
+-void ** bridges::cpp_uno::shared::VtableFactory::initializeBlock(void * block) {
+- void ** slots = mapBlockToVtable(block);
+- slots[-2] = 0; //null
+- slots[-1] = 0; //destructor
+- return slots;
++bridges::cpp_uno::shared::VtableFactory::Slot *
++bridges::cpp_uno::shared::VtableFactory::initializeBlock(
++ void * block, sal_Int32 slotCount)
++{
++ Slot * slots = mapBlockToVtable(block);
++ slots[-2].fn = 0; //null
++ slots[-1].fn = 0; //destructor
++ return slots + slotCount;
+ }
+
+ unsigned char * bridges::cpp_uno::shared::VtableFactory::addLocalFunctions(
+- void ** slots, unsigned char * code,
++ Slot ** slots, unsigned char * code,
+ typelib_InterfaceTypeDescription const * type, sal_Int32 functionOffset,
+- sal_Int32
+-#ifdef BRDEBUG
+- functionCount
+-#endif
+- , sal_Int32 vtableOffset)
++ sal_Int32 functionCount, sal_Int32 vtableOffset)
+ {
+-
++ (*slots) -= functionCount;
++ Slot * s = *slots;
+ #ifdef BRDEBUG
+ fprintf(stderr, "in addLocalFunctions functionOffset is %d\n",functionOffset);
+ fprintf(stderr, "in addLocalFunctions vtableOffset is %d\n",vtableOffset);
+@@ -771,7 +772,7 @@ unsigned char * bridges::cpp_uno::shared
+ switch (member->eTypeClass) {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ // Getter:
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ bridges::cpp_uno::shared::isSimpleType(
+@@ -784,13 +785,13 @@ unsigned char * bridges::cpp_uno::shared
+ typelib_InterfaceAttributeTypeDescription * >(
+ member)->bReadOnly)
+ {
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(code, functionOffset++, vtableOffset, true);
+ }
+ break;
+
+ case typelib_TypeClass_INTERFACE_METHOD:
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ bridges::cpp_uno::shared::isSimpleType(
cvs diff: Diffing bridges/source/cpp_uno/gcc3_linux_powerpc
+Index: bridges/source/cpp_uno/gcc3_linux_powerpc/cpp2uno.cxx
+===================================================================
+RCS file: /cvs/udk/bridges/source/cpp_uno/gcc3_linux_powerpc/cpp2uno.cxx,v
+retrieving revision 1.10
+retrieving revision 1.10.4.1
+diff -u -u -p -b -w -B -r1.10 -r1.10.4.1
+--- bridges/source/cpp_uno/gcc3_linux_powerpc/cpp2uno.cxx 4 Feb 2008 13:43:38 -0000 1.10
++++ bridges/source/cpp_uno/gcc3_linux_powerpc/cpp2uno.cxx 18 Feb 2008 10:40:37 -0000 1.10.4.1
+@@ -660,32 +660,37 @@ void bridges::cpp_uno::shared::VtableFac
+ __asm__ volatile ( "sync;" "isync;" : : : "memory");
+ }
+
++struct bridges::cpp_uno::shared::VtableFactory::Slot { void * fn; };
+
+-
+-void ** bridges::cpp_uno::shared::VtableFactory::mapBlockToVtable(void * block)
++bridges::cpp_uno::shared::VtableFactory::Slot *
++bridges::cpp_uno::shared::VtableFactory::mapBlockToVtable(void * block)
+ {
+- return static_cast< void ** >(block) + 2;
++ return static_cast< Slot * >(block) + 2;
+ }
+
+ sal_Size bridges::cpp_uno::shared::VtableFactory::getBlockSize(
+ sal_Int32 slotCount)
+ {
+- return (slotCount + 2) * sizeof (void *) + slotCount * codeSnippetSize;
++ return (slotCount + 2) * sizeof (Slot) + slotCount * codeSnippetSize;
+ }
+
+-void ** bridges::cpp_uno::shared::VtableFactory::initializeBlock(void * block) {
+- void ** slots = mapBlockToVtable(block);
+- slots[-2] = 0;
+- slots[-1] = 0;
+- return slots;
++bridges::cpp_uno::shared::VtableFactory::Slot *
++bridges::cpp_uno::shared::VtableFactory::initializeBlock(
++ void * block, sal_Int32 slotCount)
++{
++ Slot * slots = mapBlockToVtable(block);
++ slots[-2].fn = 0;
++ slots[-1].fn = 0;
++ return slots + slotCount;
+ }
+
+ unsigned char * bridges::cpp_uno::shared::VtableFactory::addLocalFunctions(
+- void ** slots, unsigned char * code,
++ Slot ** slots, unsigned char * code,
+ typelib_InterfaceTypeDescription const * type, sal_Int32 functionOffset,
+ sal_Int32 functionCount, sal_Int32 vtableOffset)
+ {
+-
++ (*slots) -= functionCount;
++ Slot * s = *slots;
+ // fprintf(stderr, "in addLocalFunctions functionOffset is %x\n",functionOffset);
+ // fprintf(stderr, "in addLocalFunctions vtableOffset is %x\n",vtableOffset);
+ // fflush(stderr);
+@@ -697,7 +702,7 @@ unsigned char * bridges::cpp_uno::shared
+ switch (member->eTypeClass) {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ // Getter:
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ bridges::cpp_uno::shared::isSimpleType(
+@@ -710,13 +715,13 @@ unsigned char * bridges::cpp_uno::shared
+ typelib_InterfaceAttributeTypeDescription * >(
+ member)->bReadOnly)
+ {
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(code, functionOffset++, vtableOffset, true);
+ }
+ break;
+
+ case typelib_TypeClass_INTERFACE_METHOD:
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ bridges::cpp_uno::shared::isSimpleType(
cvs diff: Diffing bridges/source/cpp_uno/gcc3_linux_powerpc64
Index: bridges/source/cpp_uno/gcc3_linux_powerpc64/cpp2uno.cxx
===================================================================
RCS file: /cvs/udk/bridges/source/cpp_uno/gcc3_linux_powerpc64/cpp2uno.cxx,v
retrieving revision 1.2
-retrieving revision 1.2.32.1
-diff -u -u -p -b -w -B -r1.2 -r1.2.32.1
+retrieving revision 1.2.32.2
+diff -u -u -p -b -w -B -r1.2 -r1.2.32.2
--- bridges/source/cpp_uno/gcc3_linux_powerpc64/cpp2uno.cxx 18 Jun 2007 16:34:57 -0000 1.2
-+++ bridges/source/cpp_uno/gcc3_linux_powerpc64/cpp2uno.cxx 4 Jan 2008 19:09:57 -0000 1.2.32.1
++++ bridges/source/cpp_uno/gcc3_linux_powerpc64/cpp2uno.cxx 18 Feb 2008 10:40:37 -0000 1.2.32.2
@@ -135,7 +135,7 @@ static typelib_TypeClass cpp2uno_call(
{
case typelib_TypeClass_FLOAT:
@@ -2367,6 +3201,79 @@
__asm__ __volatile__ (
"std 3, 0(%0)\t\n"
+@@ -645,31 +645,37 @@ void bridges::cpp_uno::shared::VtableFac
+ __asm__ volatile ( "sync;" "isync;" : : : "memory");
+ }
+
++struct bridges::cpp_uno::shared::VtableFactory::Slot { void * fn; };
+
+-
+-void ** bridges::cpp_uno::shared::VtableFactory::mapBlockToVtable(void * block)
++bridges::cpp_uno::shared::VtableFactory::Slot *
++bridges::cpp_uno::shared::VtableFactory::mapBlockToVtable(void * block)
+ {
+- return static_cast< void ** >(block) + 2;
++ return static_cast< Slot * >(block) + 2;
+ }
+
+ sal_Size bridges::cpp_uno::shared::VtableFactory::getBlockSize(
+ sal_Int32 slotCount)
+ {
+- return (slotCount + 2) * sizeof (void *) + slotCount * codeSnippetSize;
++ return (slotCount + 2) * sizeof (Slot) + slotCount * codeSnippetSize;
+ }
+
+-void ** bridges::cpp_uno::shared::VtableFactory::initializeBlock(void * block) {
+- void ** slots = mapBlockToVtable(block);
+- slots[-2] = 0;
+- slots[-1] = 0;
+- return slots;
++bridges::cpp_uno::shared::VtableFactory::Slot *
++bridges::cpp_uno::shared::VtableFactory::initializeBlock(
++ void * block, sal_Int32 slotCount)
++{
++ Slot * slots = mapBlockToVtable(block);
++ slots[-2].fn = 0;
++ slots[-1].fn = 0;
++ return slots + slotCount;
+ }
+
+ unsigned char * bridges::cpp_uno::shared::VtableFactory::addLocalFunctions(
+- void ** slots, unsigned char * code,
++ Slot ** slots, unsigned char * code,
+ typelib_InterfaceTypeDescription const * type, sal_Int32 functionOffset,
+ sal_Int32 functionCount, sal_Int32 vtableOffset)
+ {
++ (*slots) -= functionCount;
++ Slot * s = *slots;
+ #ifdef CMC_DEBUG
+ fprintf(stderr, "in addLocalFunctions functionOffset is %x\n",functionOffset);
+ fprintf(stderr, "in addLocalFunctions vtableOffset is %x\n",vtableOffset);
+@@ -682,7 +688,7 @@ unsigned char * bridges::cpp_uno::shared
+ switch (member->eTypeClass) {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ // Getter:
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ bridges::cpp_uno::shared::isSimpleType(
+@@ -695,13 +701,13 @@ unsigned char * bridges::cpp_uno::shared
+ typelib_InterfaceAttributeTypeDescription * >(
+ member)->bReadOnly)
+ {
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(code, functionOffset++, vtableOffset, true);
+ }
+ break;
+
+ case typelib_TypeClass_INTERFACE_METHOD:
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ bridges::cpp_uno::shared::isSimpleType(
Index: bridges/source/cpp_uno/gcc3_linux_powerpc64/except.cxx
===================================================================
RCS file: /cvs/udk/bridges/source/cpp_uno/gcc3_linux_powerpc64/except.cxx,v
@@ -2434,66 +3341,770 @@
switch (eTypeClass)
cvs diff: Diffing bridges/source/cpp_uno/gcc3_linux_s390
cvs diff: Diffing bridges/source/cpp_uno/gcc3_linux_sparc
+Index: bridges/source/cpp_uno/gcc3_linux_sparc/cpp2uno.cxx
+===================================================================
+RCS file: /cvs/udk/bridges/source/cpp_uno/gcc3_linux_sparc/cpp2uno.cxx,v
+retrieving revision 1.12
+retrieving revision 1.12.66.1
+diff -u -u -p -b -w -B -r1.12 -r1.12.66.1
+--- bridges/source/cpp_uno/gcc3_linux_sparc/cpp2uno.cxx 22 Nov 2006 11:07:20 -0000 1.12
++++ bridges/source/cpp_uno/gcc3_linux_sparc/cpp2uno.cxx 18 Feb 2008 10:40:38 -0000 1.12.66.1
+@@ -493,29 +493,37 @@ unsigned char * codeSnippet(
+
+ } //end of namespace
+
+-void ** bridges::cpp_uno::shared::VtableFactory::mapBlockToVtable(void * block)
++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< void ** >(block) + 2;
++ return static_cast< Slot * >(block) + 2;
+ }
+
+ sal_Size bridges::cpp_uno::shared::VtableFactory::getBlockSize(
+ sal_Int32 slotCount)
+ {
+- return (slotCount + 2) * sizeof (void *) + slotCount * codeSnippetSize;
++ return (slotCount + 2) * sizeof (Slot) + slotCount * codeSnippetSize;
+ }
+
+-void ** bridges::cpp_uno::shared::VtableFactory::initializeBlock(void * block) {
+- void ** slots = mapBlockToVtable(block);
+- slots[-2] = 0; //null
+- slots[-1] = 0; //destructor
+- return slots;
++bridges::cpp_uno::shared::VtableFactory::Slot *
++bridges::cpp_uno::shared::VtableFactory::initializeBlock(
++ void * block, sal_Int32 slotCount)
++{
++ Slot * slots = mapBlockToVtable(block);
++ slots[-2].fn = 0; //null
++ slots[-1].fn = 0; //destructor
++ return slots + slotCount;
+ }
+
+ unsigned char * bridges::cpp_uno::shared::VtableFactory::addLocalFunctions(
+- void ** slots, unsigned char * code,
++ Slot ** slots, unsigned char * code,
+ typelib_InterfaceTypeDescription const * type, sal_Int32 functionOffset,
+- sal_Int32 /* functionCount */, sal_Int32 vTableOffset)
++ 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]);
+@@ -523,7 +531,7 @@ unsigned char * bridges::cpp_uno::shared
+ switch (member->eTypeClass) {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ // Getter:
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(
+ code, functionOffset++, vTableOffset,
+ bridges::cpp_uno::shared::isSimpleType(
+@@ -535,13 +543,13 @@ unsigned char * bridges::cpp_uno::shared
+ typelib_InterfaceAttributeTypeDescription * >(
+ member)->bReadOnly)
+ {
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(code, functionOffset++, vTableOffset, true);
+ }
+ break;
+
+ case typelib_TypeClass_INTERFACE_METHOD:
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(
+ code, functionOffset++, vTableOffset,
+ bridges::cpp_uno::shared::isSimpleType(
cvs diff: Diffing bridges/source/cpp_uno/gcc3_linux_x86-64
+Index: bridges/source/cpp_uno/gcc3_linux_x86-64/cpp2uno.cxx
+===================================================================
+RCS file: /cvs/udk/bridges/source/cpp_uno/gcc3_linux_x86-64/cpp2uno.cxx,v
+retrieving revision 1.7
+retrieving revision 1.7.8.1
+diff -u -u -p -b -w -B -r1.7 -r1.7.8.1
+--- bridges/source/cpp_uno/gcc3_linux_x86-64/cpp2uno.cxx 13 Nov 2007 14:18:07 -0000 1.7
++++ bridges/source/cpp_uno/gcc3_linux_x86-64/cpp2uno.cxx 18 Feb 2008 10:40:38 -0000 1.7.8.1
+@@ -465,35 +465,41 @@ unsigned char * codeSnippet( unsigned ch
+ }
+
+ //==================================================================================================
+-void ** bridges::cpp_uno::shared::VtableFactory::mapBlockToVtable( void * block )
++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<void **>( block ) + 2;
++ return static_cast< Slot * >(block) + 2;
+ }
+
+ //==================================================================================================
+ sal_Size bridges::cpp_uno::shared::VtableFactory::getBlockSize(
+ sal_Int32 slotCount)
+ {
+- return ( slotCount + 2 ) * sizeof( void * ) + slotCount * codeSnippetSize;
++ return (slotCount + 2) * sizeof (Slot) + slotCount * codeSnippetSize;
+ }
+
+ //==================================================================================================
+-void ** bridges::cpp_uno::shared::VtableFactory::initializeBlock( void * block )
+-{
+- void ** slots = mapBlockToVtable( block );
+- slots[-2] = 0;
+- slots[-1] = 0;
+-
+- return slots;
++bridges::cpp_uno::shared::VtableFactory::Slot *
++bridges::cpp_uno::shared::VtableFactory::initializeBlock(
++ void * block, sal_Int32 slotCount)
++{
++ Slot * slots = mapBlockToVtable(block);
++ slots[-2].fn = 0;
++ slots[-1].fn = 0;
++ return slots + slotCount;
+ }
+
+ //==================================================================================================
+
+ unsigned char * bridges::cpp_uno::shared::VtableFactory::addLocalFunctions(
+- void ** slots, unsigned char * code,
++ Slot ** slots, unsigned char * code,
+ typelib_InterfaceTypeDescription const * type, sal_Int32 nFunctionOffset,
+- sal_Int32 /* functionCount */, sal_Int32 nVtableOffset )
++ sal_Int32 functionCount, sal_Int32 nVtableOffset )
+ {
++ (*slots) -= functionCount;
++ Slot * s = *slots;
+ for ( sal_Int32 nPos = 0; nPos < type->nMembers; ++nPos )
+ {
+ typelib_TypeDescription * pTD = 0;
+@@ -507,14 +513,14 @@ unsigned char * bridges::cpp_uno::shared
+ reinterpret_cast<typelib_InterfaceAttributeTypeDescription *>( pTD );
+
+ // get method
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet( code, nFunctionOffset++, nVtableOffset,
+ x86_64::return_in_hidden_param( pAttrTD->pAttributeTypeRef ) );
+
+ if ( ! pAttrTD->bReadOnly )
+ {
+ // set method
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet( code, nFunctionOffset++, nVtableOffset, false );
+ }
+ }
+@@ -523,7 +529,7 @@ unsigned char * bridges::cpp_uno::shared
+ typelib_InterfaceMethodTypeDescription *pMethodTD =
+ reinterpret_cast<typelib_InterfaceMethodTypeDescription *>( pTD );
+
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet( code, nFunctionOffset++, nVtableOffset,
+ x86_64::return_in_hidden_param( pMethodTD->pReturnTypeRef ) );
+ }
cvs diff: Diffing bridges/source/cpp_uno/gcc3_macosx_intel
+Index: bridges/source/cpp_uno/gcc3_macosx_intel/cpp2uno.cxx
+===================================================================
+RCS file: /cvs/udk/bridges/source/cpp_uno/gcc3_macosx_intel/cpp2uno.cxx,v
+retrieving revision 1.5
+retrieving revision 1.5.82.1
+diff -u -u -p -b -w -B -r1.5 -r1.5.82.1
+--- bridges/source/cpp_uno/gcc3_macosx_intel/cpp2uno.cxx 16 Sep 2006 15:51:08 -0000 1.5
++++ bridges/source/cpp_uno/gcc3_macosx_intel/cpp2uno.cxx 18 Feb 2008 11:01:40 -0000 1.5.82.1
+@@ -450,29 +450,37 @@ unsigned char * codeSnippet(
+
+ }
+
+-void ** bridges::cpp_uno::shared::VtableFactory::mapBlockToVtable(void * block)
++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< void ** >(block) + 2;
++ return static_cast< Slot * >(block) + 2;
+ }
+
+ sal_Size bridges::cpp_uno::shared::VtableFactory::getBlockSize(
+ sal_Int32 slotCount)
+ {
+- return (slotCount + 2) * sizeof (void *) + slotCount * codeSnippetSize;
++ return (slotCount + 2) * sizeof (Slot) + slotCount * codeSnippetSize;
+ }
+
+-void ** bridges::cpp_uno::shared::VtableFactory::initializeBlock(void * block) {
+- void ** slots = mapBlockToVtable(block);
+- slots[-2] = 0;
+- slots[-1] = 0;
+- return slots;
++bridges::cpp_uno::shared::VtableFactory::Slot *
++bridges::cpp_uno::shared::VtableFactory::initializeBlock(
++ void * block, sal_Int32 slotCount)
++{
++ Slot * slots = mapBlockToVtable(block);
++ slots[-2].fn = 0;
++ slots[-1].fn = 0;
++ return slots + slotCount;
+ }
+
+ unsigned char * bridges::cpp_uno::shared::VtableFactory::addLocalFunctions(
+- void ** slots, unsigned char * code,
++ Slot ** slots, unsigned char * code,
+ typelib_InterfaceTypeDescription const * type, sal_Int32 functionOffset,
+- sal_Int32 /*functionCount*/, sal_Int32 vtableOffset)
++ 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]);
+@@ -480,7 +488,7 @@ unsigned char * bridges::cpp_uno::shared
+ switch (member->eTypeClass) {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ // Getter:
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ reinterpret_cast< typelib_InterfaceAttributeTypeDescription * >(
+@@ -490,7 +498,7 @@ unsigned char * bridges::cpp_uno::shared
+ typelib_InterfaceAttributeTypeDescription * >(
+ member)->bReadOnly)
+ {
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ 0 /* indicates VOID */);
+@@ -498,7 +506,7 @@ unsigned char * bridges::cpp_uno::shared
+ break;
+
+ case typelib_TypeClass_INTERFACE_METHOD:
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ reinterpret_cast< typelib_InterfaceMethodTypeDescription * >(
cvs diff: Diffing bridges/source/cpp_uno/gcc3_macosx_powerpc
+Index: bridges/source/cpp_uno/gcc3_macosx_powerpc/cpp2uno.cxx
+===================================================================
+RCS file: /cvs/udk/bridges/source/cpp_uno/gcc3_macosx_powerpc/cpp2uno.cxx,v
+retrieving revision 1.9
+retrieving revision 1.9.54.1
+diff -u -u -p -b -w -B -r1.9 -r1.9.54.1
+--- bridges/source/cpp_uno/gcc3_macosx_powerpc/cpp2uno.cxx 18 Jan 2007 14:15:28 -0000 1.9
++++ bridges/source/cpp_uno/gcc3_macosx_powerpc/cpp2uno.cxx 18 Feb 2008 11:01:40 -0000 1.9.54.1
+@@ -655,30 +655,37 @@ void bridges::cpp_uno::shared::VtableFac
+ __asm__ volatile ( "sync;" "isync;" : : : "memory");
+ }
+
++struct bridges::cpp_uno::shared::VtableFactory::Slot { void * fn; };
+
+-void ** bridges::cpp_uno::shared::VtableFactory::mapBlockToVtable(void * block)
++bridges::cpp_uno::shared::VtableFactory::Slot *
++bridges::cpp_uno::shared::VtableFactory::mapBlockToVtable(void * block)
+ {
+- return static_cast< void ** >(block) + 2;
++ return static_cast< Slot * >(block) + 2;
+ }
+
+ sal_Size bridges::cpp_uno::shared::VtableFactory::getBlockSize(
+ sal_Int32 slotCount)
+ {
+- return (slotCount + 2) * sizeof (void *) + slotCount * codeSnippetSize;
++ return (slotCount + 2) * sizeof (Slot) + slotCount * codeSnippetSize;
+ }
+
+-void ** bridges::cpp_uno::shared::VtableFactory::initializeBlock(void * block) {
+- void ** slots = mapBlockToVtable(block);
+- slots[-2] = 0;
+- slots[-1] = 0;
+- return slots;
++bridges::cpp_uno::shared::VtableFactory::Slot *
++bridges::cpp_uno::shared::VtableFactory::initializeBlock(
++ void * block, sal_Int32 slotCount)
++{
++ Slot * slots = mapBlockToVtable(block);
++ slots[-2].fn = 0;
++ slots[-1].fn = 0;
++ return slots + slotCount;
+ }
+
+ unsigned char * bridges::cpp_uno::shared::VtableFactory::addLocalFunctions(
+- void ** slots, unsigned char * code,
++ Slot ** slots, unsigned char * code,
+ typelib_InterfaceTypeDescription const * type, sal_Int32 functionOffset,
+- sal_Int32 /* functionCount */, sal_Int32 vtableOffset)
++ sal_Int32 functionCount, sal_Int32 vtableOffset)
+ {
++ (*slots) -= functionCount;
++ Slot * s = *slots;
+
+ // fprintf(stderr, "in addLocalFunctions functionOffset is %x\n",functionOffset);
+ // fprintf(stderr, "in addLocalFunctions vtableOffset is %x\n",vtableOffset);
+@@ -691,7 +698,7 @@ unsigned char * bridges::cpp_uno::shared
+ switch (member->eTypeClass) {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ // Getter:
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ bridges::cpp_uno::shared::isSimpleType(
+@@ -704,13 +711,13 @@ unsigned char * bridges::cpp_uno::shared
+ typelib_InterfaceAttributeTypeDescription * >(
+ member)->bReadOnly)
+ {
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(code, functionOffset++, vtableOffset, true);
+ }
+ break;
+
+ case typelib_TypeClass_INTERFACE_METHOD:
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ bridges::cpp_uno::shared::isSimpleType(
cvs diff: Diffing bridges/source/cpp_uno/gcc3_netbsd_intel
cvs diff: Diffing bridges/source/cpp_uno/gcc3_os2_intel
+Index: bridges/source/cpp_uno/gcc3_os2_intel/cpp2uno.cxx
+===================================================================
+RCS file: /cvs/udk/bridges/source/cpp_uno/gcc3_os2_intel/cpp2uno.cxx,v
+retrieving revision 1.3
+retrieving revision 1.3.20.1
+diff -u -u -p -b -w -B -r1.3 -r1.3.20.1
+--- bridges/source/cpp_uno/gcc3_os2_intel/cpp2uno.cxx 25 Sep 2007 09:33:55 -0000 1.3
++++ bridges/source/cpp_uno/gcc3_os2_intel/cpp2uno.cxx 18 Feb 2008 11:07:00 -0000 1.3.20.1
+@@ -453,29 +453,37 @@ unsigned char * codeSnippet(
+
+ }
+
+-void ** bridges::cpp_uno::shared::VtableFactory::mapBlockToVtable(void * block)
++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< void ** >(block) + 2;
++ return static_cast< Slot * >(block) + 2;
+ }
+
+ sal_Size bridges::cpp_uno::shared::VtableFactory::getBlockSize(
+ sal_Int32 slotCount)
+ {
+- return (slotCount + 2) * sizeof (void *) + slotCount * codeSnippetSize;
++ return (slotCount + 2) * sizeof (Slot) + slotCount * codeSnippetSize;
+ }
+
+-void ** bridges::cpp_uno::shared::VtableFactory::initializeBlock(void * block) {
+- void ** slots = mapBlockToVtable(block);
+- slots[-2] = 0;
+- slots[-1] = 0;
+- return slots;
++bridges::cpp_uno::shared::VtableFactory::Slot *
++bridges::cpp_uno::shared::VtableFactory::initializeBlock(
++ void * block, sal_Int32 slotCount)
++{
++ Slot * slots = mapBlockToVtable(block);
++ slots[-2].fn = 0;
++ slots[-1].fn = 0;
++ return slots + slotCount;
+ }
+
+ unsigned char * bridges::cpp_uno::shared::VtableFactory::addLocalFunctions(
+- void ** slots, unsigned char * code,
++ 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]);
+@@ -483,7 +491,7 @@ unsigned char * bridges::cpp_uno::shared
+ switch (member->eTypeClass) {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ // Getter:
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ bridges::cpp_uno::shared::isSimpleType(
+@@ -495,13 +503,13 @@ unsigned char * bridges::cpp_uno::shared
+ typelib_InterfaceAttributeTypeDescription * >(
+ member)->bReadOnly)
+ {
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(code, functionOffset++, vtableOffset, true);
+ }
+ break;
+
+ case typelib_TypeClass_INTERFACE_METHOD:
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ bridges::cpp_uno::shared::isSimpleType(
cvs diff: Diffing bridges/source/cpp_uno/gcc3_os2_intel/defs
cvs diff: Diffing bridges/source/cpp_uno/gcc3_solaris_intel
+Index: bridges/source/cpp_uno/gcc3_solaris_intel/cpp2uno.cxx
+===================================================================
+RCS file: /cvs/udk/bridges/source/cpp_uno/gcc3_solaris_intel/cpp2uno.cxx,v
+retrieving revision 1.6
+retrieving revision 1.6.82.1
+diff -u -u -p -b -w -B -r1.6 -r1.6.82.1
+--- bridges/source/cpp_uno/gcc3_solaris_intel/cpp2uno.cxx 16 Sep 2006 15:53:13 -0000 1.6
++++ bridges/source/cpp_uno/gcc3_solaris_intel/cpp2uno.cxx 18 Feb 2008 11:05:04 -0000 1.6.82.1
+@@ -452,29 +452,37 @@ unsigned char * codeSnippet(
+
+ }
+
+-void ** bridges::cpp_uno::shared::VtableFactory::mapBlockToVtable(void * block)
++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< void ** >(block) + 2;
++ return static_cast< Slot * >(block) + 2;
+ }
+
+ sal_Size bridges::cpp_uno::shared::VtableFactory::getBlockSize(
+ sal_Int32 slotCount)
+ {
+- return (slotCount + 2) * sizeof (void *) + slotCount * codeSnippetSize;
++ return (slotCount + 2) * sizeof (Slot) + slotCount * codeSnippetSize;
+ }
+
+-void ** bridges::cpp_uno::shared::VtableFactory::initializeBlock(void * block) {
+- void ** slots = mapBlockToVtable(block);
+- slots[-2] = 0;
+- slots[-1] = 0;
+- return slots;
++bridges::cpp_uno::shared::VtableFactory::Slot *
++bridges::cpp_uno::shared::VtableFactory::initializeBlock(
++ void * block, sal_Int32 slotCount)
++{
++ Slot * slots = mapBlockToVtable(block);
++ slots[-2].fn = 0;
++ slots[-1].fn = 0;
++ return slots + slotCount;
+ }
+
+ unsigned char * bridges::cpp_uno::shared::VtableFactory::addLocalFunctions(
+- void ** slots, unsigned char * code,
++ 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]);
+@@ -482,7 +490,7 @@ unsigned char * bridges::cpp_uno::shared
+ switch (member->eTypeClass) {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ // Getter:
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ bridges::cpp_uno::shared::isSimpleType(
+@@ -494,13 +502,13 @@ unsigned char * bridges::cpp_uno::shared
+ typelib_InterfaceAttributeTypeDescription * >(
+ member)->bReadOnly)
+ {
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(code, functionOffset++, vtableOffset, true);
+ }
+ break;
+
+ case typelib_TypeClass_INTERFACE_METHOD:
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ bridges::cpp_uno::shared::isSimpleType(
cvs diff: Diffing bridges/source/cpp_uno/gcc3_solaris_sparc
+Index: bridges/source/cpp_uno/gcc3_solaris_sparc/cpp2uno.cxx
+===================================================================
+RCS file: /cvs/udk/bridges/source/cpp_uno/gcc3_solaris_sparc/cpp2uno.cxx,v
+retrieving revision 1.6
+retrieving revision 1.6.82.1
+diff -u -u -p -b -w -B -r1.6 -r1.6.82.1
+--- bridges/source/cpp_uno/gcc3_solaris_sparc/cpp2uno.cxx 16 Sep 2006 15:53:57 -0000 1.6
++++ bridges/source/cpp_uno/gcc3_solaris_sparc/cpp2uno.cxx 18 Feb 2008 11:05:04 -0000 1.6.82.1
+@@ -491,29 +491,37 @@ unsigned char * codeSnippet(
+
+ } //end of namespace
+
+-void ** bridges::cpp_uno::shared::VtableFactory::mapBlockToVtable(void * block)
++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< void ** >(block) + 2;
++ return static_cast< Slot * >(block) + 2;
+ }
+
+ sal_Size bridges::cpp_uno::shared::VtableFactory::getBlockSize(
+ sal_Int32 slotCount)
+ {
+- return (slotCount + 2) * sizeof (void *) + slotCount * codeSnippetSize;
++ return (slotCount + 2) * sizeof (Slot) + slotCount * codeSnippetSize;
+ }
+
+-void ** bridges::cpp_uno::shared::VtableFactory::initializeBlock(void * block) {
+- void ** slots = mapBlockToVtable(block);
+- slots[-2] = 0; //null
+- slots[-1] = 0; //destructor
+- return slots;
++bridges::cpp_uno::shared::VtableFactory::Slot *
++bridges::cpp_uno::shared::VtableFactory::initializeBlock(
++ void * block, sal_Int32 slotCount)
++{
++ Slot * slots = mapBlockToVtable(block);
++ slots[-2].fn = 0; //null
++ slots[-1].fn = 0; //destructor
++ return slots + slotCount;
+ }
+
+ unsigned char * bridges::cpp_uno::shared::VtableFactory::addLocalFunctions(
+- void ** slots, unsigned char * code,
++ 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]);
+@@ -521,7 +529,7 @@ unsigned char * bridges::cpp_uno::shared
+ switch (member->eTypeClass) {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ // Getter:
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(
+ code, functionOffset++, vTableOffset,
+ bridges::cpp_uno::shared::isSimpleType(
+@@ -533,13 +541,13 @@ unsigned char * bridges::cpp_uno::shared
+ typelib_InterfaceAttributeTypeDescription * >(
+ member)->bReadOnly)
+ {
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(code, functionOffset++, vTableOffset, true);
+ }
+ break;
+
+ case typelib_TypeClass_INTERFACE_METHOD:
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(
+ code, functionOffset++, vTableOffset,
+ bridges::cpp_uno::shared::isSimpleType(
cvs diff: Diffing bridges/source/cpp_uno/mingw_intel
+Index: bridges/source/cpp_uno/mingw_intel/cpp2uno.cxx
+===================================================================
+RCS file: /cvs/udk/bridges/source/cpp_uno/mingw_intel/cpp2uno.cxx,v
+retrieving revision 1.3
+retrieving revision 1.3.34.1
+diff -u -u -p -b -w -B -r1.3 -r1.3.34.1
+--- bridges/source/cpp_uno/mingw_intel/cpp2uno.cxx 25 May 2007 10:53:46 -0000 1.3
++++ bridges/source/cpp_uno/mingw_intel/cpp2uno.cxx 18 Feb 2008 11:16:17 -0000 1.3.34.1
+@@ -422,29 +422,37 @@ unsigned char * codeSnippet(
+
+ }
+
+-void ** bridges::cpp_uno::shared::VtableFactory::mapBlockToVtable(void * block)
++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< void ** >(block) + 2;
++ return static_cast< Slot * >(block) + 2;
+ }
+
+ sal_Size bridges::cpp_uno::shared::VtableFactory::getBlockSize(
+ sal_Int32 slotCount)
+ {
+- return (slotCount + 2) * sizeof (void *) + slotCount * codeSnippetSize;
++ return (slotCount + 2) * sizeof (Slot) + slotCount * codeSnippetSize;
+ }
+
+-void ** bridges::cpp_uno::shared::VtableFactory::initializeBlock(void * block) {
+- void ** slots = mapBlockToVtable(block);
+- slots[-2] = 0;
+- slots[-1] = 0;
+- return slots;
++bridges::cpp_uno::shared::VtableFactory::Slot *
++bridges::cpp_uno::shared::VtableFactory::initializeBlock(
++ void * block, sal_Int32 slotCount)
++{
++ Slot * slots = mapBlockToVtable(block);
++ slots[-2].fn = 0;
++ slots[-1].fn = 0;
++ return slots + slotCount;
+ }
+
+ unsigned char * bridges::cpp_uno::shared::VtableFactory::addLocalFunctions(
+- void ** slots, unsigned char * code,
++ Slot ** slots, unsigned char * code,
+ typelib_InterfaceTypeDescription const * type, sal_Int32 functionOffset,
+- sal_Int32 /*functionCount*/, sal_Int32 vtableOffset)
++ 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]);
+@@ -452,7 +460,7 @@ unsigned char * bridges::cpp_uno::shared
+ switch (member->eTypeClass) {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ // Getter:
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ reinterpret_cast< typelib_InterfaceAttributeTypeDescription * >(
+@@ -462,7 +470,7 @@ unsigned char * bridges::cpp_uno::shared
+ typelib_InterfaceAttributeTypeDescription * >(
+ member)->bReadOnly)
+ {
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ typelib_TypeClass_VOID);
+@@ -470,7 +478,7 @@ unsigned char * bridges::cpp_uno::shared
+ break;
+
+ case typelib_TypeClass_INTERFACE_METHOD:
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ reinterpret_cast< typelib_InterfaceMethodTypeDescription * >(
cvs diff: Diffing bridges/source/cpp_uno/msvc_win32_intel
+Index: bridges/source/cpp_uno/msvc_win32_intel/cpp2uno.cxx
+===================================================================
+RCS file: /cvs/udk/bridges/source/cpp_uno/msvc_win32_intel/cpp2uno.cxx,v
+retrieving revision 1.17
+retrieving revision 1.17.82.1
+diff -u -u -p -b -w -B -r1.17 -r1.17.82.1
+--- bridges/source/cpp_uno/msvc_win32_intel/cpp2uno.cxx 16 Sep 2006 15:54:51 -0000 1.17
++++ bridges/source/cpp_uno/msvc_win32_intel/cpp2uno.cxx 18 Feb 2008 11:20:25 -0000 1.17.82.1
+@@ -442,18 +442,23 @@ unsigned char * codeSnippet(
+
+ }
+
+-void ** bridges::cpp_uno::shared::VtableFactory::mapBlockToVtable(void * block)
++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< void ** >(block) + 1;
++ return static_cast< Slot * >(block) + 1;
+ }
+
+ sal_Size bridges::cpp_uno::shared::VtableFactory::getBlockSize(
+ sal_Int32 slotCount)
+ {
+- return (slotCount + 1) * sizeof (void *) + slotCount * codeSnippetSize;
++ return (slotCount + 1) * sizeof (Slot) + slotCount * codeSnippetSize;
+ }
+
+-void ** bridges::cpp_uno::shared::VtableFactory::initializeBlock(void * block) {
++bridges::cpp_uno::shared::VtableFactory::Slot *
++bridges::cpp_uno::shared::VtableFactory::initializeBlock(
++ void * block, sal_Int32 slotCount)
+ struct Rtti {
+ sal_Int32 n0, n1, n2;
+ type_info * rtti;
+@@ -466,18 +471,20 @@ void ** bridges::cpp_uno::shared::Vtable
+ };
+ static Rtti rtti;
+
+- void ** slots = mapBlockToVtable(block);
+- slots[-1] = &rtti;
+- return slots;
++ Slot * slots = mapBlockToVtable(block);
++ slots[-1].fn = &rtti;
++ return slots + slotCount;
+ }
+
+ unsigned char * bridges::cpp_uno::shared::VtableFactory::addLocalFunctions(
+- void ** slots, unsigned char * code,
++ Slot ** slots, unsigned char * code,
+ typelib_InterfaceTypeDescription const *, sal_Int32 functionOffset,
+ sal_Int32 functionCount, sal_Int32 vtableOffset)
+ {
++ (*slots) -= functionCount;
++ Slot * s = *slots;
+ for (sal_Int32 i = 0; i < functionCount; ++i) {
+- *slots++ = code;
++ (s++)->fn = code;
+ code = codeSnippet(code, functionOffset++, vtableOffset);
+ }
+ return code;
cvs diff: Diffing bridges/source/cpp_uno/shared
Index: bridges/source/cpp_uno/shared/vtablefactory.cxx
===================================================================
RCS file: /cvs/udk/bridges/source/cpp_uno/shared/vtablefactory.cxx,v
retrieving revision 1.9
-retrieving revision 1.9.22.1
-diff -u -u -p -b -w -B -r1.9 -r1.9.22.1
+retrieving revision 1.9.22.2
+diff -u -u -p -b -w -B -r1.9 -r1.9.22.2
--- bridges/source/cpp_uno/shared/vtablefactory.cxx 20 Sep 2007 15:30:12 -0000 1.9
-+++ bridges/source/cpp_uno/shared/vtablefactory.cxx 4 Jan 2008 19:09:58 -0000 1.9.22.1
-@@ -252,6 +252,16 @@ void VtableFactory::freeBlock(Block cons
- rtl_arena_free(m_arena, block.start, block.size);
- }
-
-+#ifndef IA64
-+ typedef void* function_desc;
-+#else
-+ struct function_desc
-+ {
-+ sal_uInt64 code_address;
-+ sal_uInt64 gp_value;
-+ };
-+#endif
-+
- void VtableFactory::createVtables(
- GuardedBlocks & blocks, BaseOffset const & baseOffset,
- typelib_InterfaceTypeDescription * type, bool includePrimary) const
-@@ -266,11 +276,12 @@ void VtableFactory::createVtables(
++++ bridges/source/cpp_uno/shared/vtablefactory.cxx 18 Feb 2008 10:40:38 -0000 1.9.22.2
+@@ -266,21 +266,19 @@ void VtableFactory::createVtables(
throw std::bad_alloc();
}
try {
- void ** slots = initializeBlock(block.start) + slotCount;
-+ function_desc *slots = (function_desc*)initializeBlock(block.start);
-+ slots+=slotCount;
++ Slot * slots = initializeBlock(block.start, slotCount);
unsigned char * codeBegin =
reinterpret_cast< unsigned char * >(slots);
unsigned char * code = codeBegin;
- sal_Int32 vtableOffset = blocks.size() * sizeof (void **);
-+ sal_Int32 vtableOffset = blocks.size() * sizeof (function_desc*);
++ sal_Int32 vtableOffset = blocks.size() * sizeof (Slot *);
for (typelib_InterfaceTypeDescription const * type2 = type;
type2 != 0; type2 = type2->pBaseTypeDescription)
{
-@@ -278,7 +289,7 @@ void VtableFactory::createVtables(
- = bridges::cpp_uno::shared::getLocalFunctions(type2);
- slots -= functionCount;
+- sal_Int32 functionCount
+- = bridges::cpp_uno::shared::getLocalFunctions(type2);
+- slots -= functionCount;
code = addLocalFunctions(
- slots, code, type2,
-+ (void**)slots, code, type2,
++ &slots, code, type2,
baseOffset.getFunctionOffset(type2->aBase.pTypeName),
- functionCount, vtableOffset);
+- functionCount, vtableOffset);
++ bridges::cpp_uno::shared::getLocalFunctions(type2),
++ vtableOffset);
}
+ flushCode(codeBegin, code);
+ blocks.push_back(block);
cvs diff: Diffing bridges/source/jni_uno
cvs diff: Diffing bridges/source/jni_uno/java
cvs diff: Diffing bridges/source/jni_uno/java/com
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]