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