catch up to recent bridge also fixes following issues
for amd64
http://www.openoffice.org/issues/show_bug.cgi?id=98781
http://www.openoffice.org/issues/show_bug.cgi?id=82690
http://www.freebsd.org/cgi/query-pr.cgi?pr=127946

We also need #define USE_DOUBLE_MMAP for FreeBSD as well.
It's very hard to maintain without it, and performance loss is
negligible. See also
http://www.openoffice.org/issues/show_bug.cgi?id=97320
. Note that i386 also requires the patch for
"bridges/inc/bridges/cpp_uno/shared/vtablefactory.hxx"
.

--- bridges/source/cpp_uno/gcc3_freebsd_x86-64/abi.cxx	2009-06-13 15:39:58.000000000 +0900
+++ bridges/source/cpp_uno/gcc3_freebsd_x86-64/abi.cxx	2009-06-13 15:41:26.000000000 +0900
@@ -353,6 +353,8 @@
             case X86_64_SSEDF_CLASS:
                 *pStructAlign++ = *reinterpret_cast<sal_uInt64 *>( *pSSE++ );
                 break;
+            default:
+                break;
         }
 }
 
--- bridges/source/cpp_uno/gcc3_freebsd_x86-64/cpp2uno.cxx	2009-06-13 15:39:58.000000000 +0900
+++ bridges/source/cpp_uno/gcc3_freebsd_x86-64/cpp2uno.cxx	2009-06-13 15:41:26.000000000 +0900
@@ -77,8 +77,8 @@
 	void ** gpreg, void ** fpreg, void ** ovrflw,
 	sal_uInt64 * pRegisterReturn /* space for register return */ )
 {
-	int nr_gpr = 0; //number of gpr registers used 
-	int nr_fpr = 0; //number of fpr regsiters used
+	unsigned int nr_gpr = 0; //number of gpr registers used
+	unsigned int nr_fpr = 0; //number of fpr registers used
        
 	// return
 	typelib_TypeDescription * pReturnTypeDescr = 0;
@@ -489,13 +489,12 @@
 //==================================================================================================
 
 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 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;
@@ -509,14 +508,14 @@
 				reinterpret_cast<typelib_InterfaceAttributeTypeDescription *>( pTD );
 
 			// get method
-			(s++)->fn = code;
+			(s++)->fn = code + writetoexecdiff;
 			code = codeSnippet( code, nFunctionOffset++, nVtableOffset,
 								x86_64::return_in_hidden_param( pAttrTD->pAttributeTypeRef ) );
 
 			if ( ! pAttrTD->bReadOnly )
 			{
 				// set method
-				(s++)->fn = code;
+				(s++)->fn = code + writetoexecdiff;
 				code = codeSnippet( code, nFunctionOffset++, nVtableOffset, false );
 			}
 		}
@@ -525,7 +524,7 @@
 			typelib_InterfaceMethodTypeDescription *pMethodTD =
 				reinterpret_cast<typelib_InterfaceMethodTypeDescription *>( pTD );
 			
-			(s++)->fn = code;
+			(s++)->fn = code + writetoexecdiff;
 			code = codeSnippet( code, nFunctionOffset++, nVtableOffset,
 								x86_64::return_in_hidden_param( pMethodTD->pReturnTypeRef ) );
 		}

--- bridges/source/cpp_uno/gcc3_freebsd_x86-64/uno2cpp.cxx	2009-06-13 15:39:58.000000000 +0900
+++ bridges/source/cpp_uno/gcc3_freebsd_x86-64/uno2cpp.cxx	2009-06-13 15:41:27.000000000 +0900
@@ -68,13 +68,13 @@
     // Let's figure out what is really going on here
     {
         fprintf( stderr, "= callVirtualMethod() =\nGPR's (%d): ", nGPR );
-        for ( int i = 0; i < nGPR; ++i )
+        for ( unsigned int i = 0; i < nGPR; ++i )
             fprintf( stderr, "0x%lx, ", pGPR[i] );
         fprintf( stderr, "\nFPR's (%d): ", nFPR );
-        for ( int i = 0; i < nFPR; ++i )
+        for ( unsigned int i = 0; i < nFPR; ++i )
             fprintf( stderr, "%f, ", pFPR[i] );
         fprintf( stderr, "\nStack (%d): ", nStack );
-        for ( int i = 0; i < nStack; ++i )
+        for ( unsigned int i = 0; i < nStack; ++i )
             fprintf( stderr, "0x%lx, ", pStack[i] );
         fprintf( stderr, "\n" );
     }
@@ -323,6 +323,8 @@
 			case typelib_TypeClass_DOUBLE:
 				INSERT_FLOAT_DOUBLE( pCppArgs[nPos], nFPR, pFPR, pStack );
 				break;
+			default:
+				break;
 			}
 
 			// no longer needed
@@ -435,16 +437,19 @@
 	// is my surrogate
 	bridges::cpp_uno::shared::UnoInterfaceProxy * pThis
 		= static_cast< bridges::cpp_uno::shared::UnoInterfaceProxy * >(pUnoI);
+#if OSL_DEBUG_LEVEL > 0
 	typelib_InterfaceTypeDescription * pTypeDescr = pThis->pTypeDescr;
+#endif
 	
 	switch (pMemberDescr->eTypeClass)
 	{
 	case typelib_TypeClass_INTERFACE_ATTRIBUTE:
 	{
+#if OSL_DEBUG_LEVEL > 0
 		// determine vtable call index
 		sal_Int32 nMemberPos = ((typelib_InterfaceMemberTypeDescription *)pMemberDescr)->nPosition;
 		OSL_ENSURE( nMemberPos < pTypeDescr->nAllMembers, "### member pos out of range!" );
-		
+#endif
 		VtableSlot aVtableSlot(
 				getVtableSlot(
 					reinterpret_cast<
@@ -489,10 +494,11 @@
 	}
 	case typelib_TypeClass_INTERFACE_METHOD:
 	{
+#if OSL_DEBUG_LEVEL > 0
 		// determine vtable call index
 		sal_Int32 nMemberPos = ((typelib_InterfaceMemberTypeDescription *)pMemberDescr)->nPosition;
 		OSL_ENSURE( nMemberPos < pTypeDescr->nAllMembers, "### member pos out of range!" );
-		
+#endif
 		VtableSlot aVtableSlot(
 				getVtableSlot(
 					reinterpret_cast<
--- bridges/source/cpp_uno/gcc3_freebsd_x86-64/except.cxx	2009-06-13 15:39:58.000000000 +0900
+++ bridges/source/cpp_uno/gcc3_freebsd_x86-64/except.cxx	2009-06-13 15:42:43.000000000 +0900
@@ -32,6 +32,7 @@
 #include "precompiled_bridges.hxx"
 
 #include <stdio.h>
+#include <string.h>
 #include <dlfcn.h>
 #include <cxxabi.h>
 #include <hash_map>
@@ -121,7 +121,7 @@
 };
 //__________________________________________________________________________________________________
 RTTI::RTTI() SAL_THROW( () )
-#if __FreeBSD_version < 602103
+#if __FreeBSD_version < 702104 /* #i22253# */
     : m_hApp( dlopen( 0, RTLD_NOW | RTLD_GLOBAL ) )
 #else
     : m_hApp( dlopen( 0, RTLD_LAZY ) )
@@ -160,7 +160,7 @@
         buf.append( 'E' );
         
         OString symName( buf.makeStringAndClear() );
-#if __FreeBSD_version < 602103  /* #i22253# */
+#if __FreeBSD_version < 702104 /* #i22253# */
         rtti = (type_info *)dlsym( RTLD_DEFAULT, symName.getStr() );
 #else
         rtti = (type_info *)dlsym( m_hApp, symName.getStr() );
@@ -175,8 +175,8 @@
         else
         {
             // try to lookup the symbol in the generated rtti map
-            t_rtti_map::const_iterator iFind( m_generatedRttis.find( unoName ) );
-            if (iFind == m_generatedRttis.end())
+            t_rtti_map::const_iterator iFind2( m_generatedRttis.find( unoName ) );
+            if (iFind2 == m_generatedRttis.end())
             {
                 // we must generate it !
                 // symbol and rtti-name is nearly identical,
@@ -205,7 +205,7 @@
             }
             else // taking already generated rtti
             {
-                rtti = iFind->second;
+                rtti = iFind2->second;
             }
         }
     }

--- bridges/inc/bridges/cpp_uno/shared/vtablefactory.hxx~	2009-06-13 16:41:45.000000000 +0900
+++ bridges/inc/bridges/cpp_uno/shared/vtablefactory.hxx	2009-06-13 16:42:24.000000000 +0900
@@ -40,7 +40,7 @@
 #include <hash_map>
 
 /*See: http://people.redhat.com/drepper/selinux-mem.html*/
-#ifdef LINUX
+#if defined (LINUX) || defined (FREEBSD)
 #define USE_DOUBLE_MMAP
 #endif
 
