pie: provide own memcpy for x86
When compiling criu with clang, I discovered compilation fails like this: GEN criu/pie/restorer-blob.h restorer_blob: Error (compel/src/lib/handle-elf-host.c:328): Unexpected undefined symbol: `memcpy'. External symbol in PIE? This happens because clang emits a call to memcpy for struct initialization (specifically, struct vdso_symtable in vdso_proxify()). Naturally, as pie is complied without libc there is no memcpy() so "compel piegen" rightfully complains. There are a number of possible solutions to that: 1. Write our own vdso_init_symtable() function instead of using = 2. Use some compiler flags that disables using memcpy 3. Provide own version of memcpy Now, (1) looks ugly, (2) I was not able to find such flags. Another argument in favor of (3) is we already have implementation of builtin_memcpy() optimized for x86. The only problem is it is not named memcpy(). Using assembler file (.S) we can have a function with two names (entry points). For a similar issue in ppc, see commits 0570dd81 and 1ad78171. Ultimately, we should get rid of builtin_mem* names and just use memcpy(), memcmp() etc, which in case of non-libc linked objects are to be provided by us. Cc: Laurent Dufour <ldufour@linux.vnet.ibm.com> Cc: Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:Kir Kolyshkin <kir@openvz.org> Acked-by:
Cyrill Gorcunov <gorcunov@openvz.org> Acked-by:
Laurent Dufour <ldufour@linux.vnet.ibm.com> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> (cherry picked from commit 214e28089e832d30e381b3780862d3309df17fb8) Signed-off-by:
Kir Kolyshkin <kir@openvz.org> Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com>
Showing
criu/arch/x86/memcpy.S
0 → 100644
Please
register
or
sign in
to comment