• Kir Kolyshkin's avatar
    pie: provide own memcpy for x86 · ba7ee44b
    Kir Kolyshkin authored
    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: 's avatarKir Kolyshkin <kir@openvz.org>
    Acked-by: 's avatarCyrill Gorcunov <gorcunov@openvz.org>
    Acked-by: 's avatarLaurent Dufour <ldufour@linux.vnet.ibm.com>
    Signed-off-by: 's avatarPavel Emelyanov <xemul@virtuozzo.com>
    (cherry picked from commit 214e28089e832d30e381b3780862d3309df17fb8)
    Signed-off-by: 's avatarKir Kolyshkin <kir@openvz.org>
    Signed-off-by: 's avatarPavel Emelyanov <xemul@virtuozzo.com>
    ba7ee44b
Name
Last commit
Last update
Documentation Loading commit data...
contrib Loading commit data...
coredump Loading commit data...
crit Loading commit data...
criu Loading commit data...
images Loading commit data...
include/common Loading commit data...
lib Loading commit data...
scripts Loading commit data...
test Loading commit data...
.gitignore Loading commit data...
.mailmap Loading commit data...
.travis.yml Loading commit data...
COPYING Loading commit data...
CREDITS Loading commit data...
INSTALL.md Loading commit data...
Makefile Loading commit data...
Makefile.install Loading commit data...
Makefile.versions Loading commit data...
README.md Loading commit data...