diff -urN ooo_SRC680_m212_src.orig/cppu/source/AffineBridge/AffineBridge.cxx ooo_SRC680_m212_src/cppu/source/AffineBridge/AffineBridge.cxx --- ooo_SRC680_m212_src.orig/cppu/source/AffineBridge/AffineBridge.cxx 2007-05-19 08:01:56.000000000 +0200 +++ ooo_SRC680_m212_src/cppu/source/AffineBridge/AffineBridge.cxx 2007-05-19 08:02:16.000000000 +0200 @@ -273,7 +273,11 @@ m_message = CB_FPOINTER; m_pCallee = pCallee; - m_param = param; +#ifdef __va_copy + __va_copy (m_param, param); +#else + m_param = param; +#endif m_innerCondition.set(); outerDispatch(1); @@ -306,7 +310,11 @@ m_message = CB_FPOINTER; m_pCallee = pCallee; - m_param = param; +#ifdef __va_copy + __va_copy (m_param, param); +#else + m_param = param; +#endif m_outerCondition.set(); innerDispatch(); diff -urN ooo_SRC680_m212_src.orig/cppu/source/uno/EnvStack.cxx ooo_SRC680_m212_src/cppu/source/uno/EnvStack.cxx --- ooo_SRC680_m212_src.orig/cppu/source/uno/EnvStack.cxx 2007-05-19 08:01:56.000000000 +0200 +++ ooo_SRC680_m212_src/cppu/source/uno/EnvStack.cxx 2007-05-19 08:02:16.000000000 +0200 @@ -228,16 +228,19 @@ extern "C" { static void s_pull(va_list param) { uno_EnvCallee * pCallee = va_arg(param, uno_EnvCallee *); - va_list * xparam = va_arg(param, va_list *); - - pCallee(*xparam); +#if defined(__GNUC__) && defined(X86_64) + typeof(param[0]) * xparam = va_arg(param, typeof(param[0]) *); +#else + va_list xparam = va_arg(param, va_list); +#endif + pCallee(xparam); }} static void s_callInto_v(uno_Environment * pEnv, uno_EnvCallee * pCallee, va_list param) { cppu::Enterable * pEnterable = reinterpret_cast(pEnv->pReserved); if (pEnterable) - pEnterable->callInto(s_pull, pCallee, ¶m); + pEnterable->callInto(s_pull, pCallee, param); else pCallee(param); @@ -278,9 +281,13 @@ uno_Environment * pCurrEnv = va_arg(param, uno_Environment *); uno_Environment * pTargetEnv = va_arg(param, uno_Environment *); uno_EnvCallee * pCallee = va_arg(param, uno_EnvCallee *); - va_list * xparam = va_arg(param, va_list *); +#if defined(__GNUC__) && defined(X86_64) + typeof(param[0]) * xparam = va_arg(param, typeof(param[0]) *); +#else + va_list xparam = va_arg(param, va_list); +#endif - s_environment_invoke_v(pCurrEnv, pTargetEnv, pCallee, *xparam); + s_environment_invoke_v(pCurrEnv, pTargetEnv, pCallee, xparam); }} static void s_environment_invoke_v(uno_Environment * pCurrEnv, uno_Environment * pTargetEnv, uno_EnvCallee * pCallee, va_list param) @@ -290,7 +297,7 @@ { case -1: s_setCurrent(pNextEnv); - s_callOut(pCurrEnv, s_environment_invoke_vv, pNextEnv, pTargetEnv, pCallee, ¶m); + s_callOut(pCurrEnv, s_environment_invoke_vv, pNextEnv, pTargetEnv, pCallee, param); s_setCurrent(pCurrEnv); break; @@ -304,7 +311,7 @@ case 1: s_setCurrent(pNextEnv); - s_callInto(pNextEnv, s_environment_invoke_vv, pNextEnv, pTargetEnv, pCallee, ¶m); + s_callInto(pNextEnv, s_environment_invoke_vv, pNextEnv, pTargetEnv, pCallee, param); s_setCurrent(pCurrEnv); break; } diff -urN ooo_SRC680_m212_src.orig/cppu/util/uno_purpenvhelpergcc3.map ooo_SRC680_m212_src/cppu/util/uno_purpenvhelpergcc3.map --- ooo_SRC680_m212_src.orig/cppu/util/uno_purpenvhelpergcc3.map 2007-05-19 08:01:56.000000000 +0200 +++ ooo_SRC680_m212_src/cppu/util/uno_purpenvhelpergcc3.map 2007-05-19 08:03:45.000000000 +0200 @@ -1,6 +1,6 @@ UDK_3_0_0 { global: - _ZN4cppu6helper7purpenv13createMappingEPP12_uno_MappingP16_uno_EnvironmentS6_PFvbPvS7_P33_typelib_TypeDescriptionReferenceP24_typelib_MethodParameterlPK24_typelib_TypeDescriptionS7_PS7_PP8_uno_AnyES7_; + _ZN4cppu6helper7purpenv13createMappingEPP12_uno_MappingP16_uno_EnvironmentS6_PFvbPvS7_P33_typelib_TypeDescriptionReferenceP24_typelib_MethodParameter?PK24_typelib_TypeDescriptionS7_PS7_PP8_uno_AnyES7_; _ZN4cppu6helper7purpenv29Environment_initWithEnterableEP16_uno_EnvironmentPNS_9EnterableE; local: