[CRIU] [PATCH] string.h: fix memset over-optimization with clang

Cyrill Gorcunov gorcunov at gmail.com
Fri Jan 27 09:18:35 PST 2017


On Fri, Jan 27, 2017 at 08:01:08AM -0800, Kir Kolyshkin wrote:
> We found a weird case of parasite code dying of SIGSEGV when clang
> is used as a compiler (see [1] for more details).
> 
> Apparently, it was caused by clang optimizing our builtin_memset()
> by inserting a call to memset(). It is a valid compiler optimization,
> aside from the fact that in our code memset() is defined as a weak
> alias to builtin_memset(), which of course lead to infinite recursion
> and stack growth.
> 
> This might be a bug in compiler, but there are ways to avoid it:
> 
> 1. Rewrite builtin_memset() in asm (note it needs to be done
>    for every architecture supported).
> 2. Disable compiler optimizations for this code (say, by using -O0).
> 3. Declare the pointer inside builtin_memcpy() as volatile.
> 
> The last approach looks more appealing -- mostly for being simple.
> 
> [1] https://github.com/xemul/criu/issues/279
> 
> Cc: Andrei Vagin <avagin at virtuozzo.com>
> Cc: Dmitry Safonov <dsafonov at virtuozzo.com>
> Cc: Cyrill Gorcunov <gorcunov at openvz.org>
> Signed-off-by: Kir Kolyshkin <kir at openvz.org>
Acked-by: Cyrill Gorcunov <gorcunov at openvz.org>



More information about the CRIU mailing list