[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