Patch by Robert Scheck for zarafa >= 7.0.8, which works around the insane written C/C++ code. I am not a C/C++ developer, but you only can use four macros for handling va_list at all: va_start, va_arg, va_copy and va_end. As a developer you should not assume that va_list is always internally typed as an integer because it is case on i?86 and x86_64 for example. Architectures like ARM handle va_list not as an integer and thus fail during compiling like this: Trace.cpp:129:16: error: invalid operands of types 'va_list {aka __va_list}' and 'int' to binary 'operator!=' Trace.cpp:142:16: error: invalid operands of types 'va_list {aka __va_list}' and 'int' to binary 'operator!=' As it is unfortunately not safe to assume that format does not contain attributes while va is empty this workaround is only applied on the affected ARM architecture for now. The only real solution is a clean rewrite of the code that should happen upstream. --- zarafa-7.0.8/common/Trace.cpp 2012-06-18 18:55:29.000000000 +0200 +++ zarafa-7.0.8/common/Trace.cpp.va_list 2012-06-20 01:20:06.000000000 +0200 @@ -126,7 +126,11 @@ len = pos + 3; +#if defined __ARM_EABI__ + if (format) { +#else if (format && va) { +#endif va_copy(va_lentest, va); len += _vsnprintf(NULL, 0, format, va_lentest); va_end(va_lentest); @@ -139,7 +143,11 @@ memcpy(buffer, debug, pos); +#if defined __ARM_EABI__ + if (format) +#else if (format && va) +#endif pos = _vsnprintf(buffer+pos, len-pos, format, va); if(pos == -1) {