diff -urN cppu.orig/source/AffineBridge/AffineBridge.cxx cppu/source/AffineBridge/AffineBridge.cxx --- cppu.orig/source/AffineBridge/AffineBridge.cxx 2007-05-20 10:55:50.000000000 +0200 +++ cppu/source/AffineBridge/AffineBridge.cxx 2007-05-20 10:57:23.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 cppu.orig/source/uno/EnvStack.cxx cppu/source/uno/EnvStack.cxx --- cppu.orig/source/uno/EnvStack.cxx 2007-05-20 10:55:50.000000000 +0200 +++ cppu/source/uno/EnvStack.cxx 2007-05-20 11:14:02.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 cppu.orig/util/uno_purpenvhelpergcc3.map cppu/util/uno_purpenvhelpergcc3.map --- cppu.orig/util/uno_purpenvhelpergcc3.map 2007-05-20 10:55:51.000000000 +0200 +++ cppu/util/uno_purpenvhelpergcc3.map 2007-05-20 11:03:52.000000000 +0200 @@ -1,6 +1,7 @@ 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_MethodParameteriPK24_typelib_TypeDescriptionS7_PS7_PP8_uno_AnyES7_; _ZN4cppu6helper7purpenv29Environment_initWithEnterableEP16_uno_EnvironmentPNS_9EnterableE; local: