[CRIU] [PATCH 4/4] x86/compat: provide optimized memcpy_x86

Kir Kolyshkin kir at virtuozzo.com
Tue Nov 29 18:45:08 PST 2016


On 11/22/2016 05:28 AM, Dmitry Safonov wrote:
> On 11/22/2016 04:26 PM, Pavel Emelyanov wrote:
>> On 11/22/2016 02:42 PM, Dmitry Safonov wrote:
>>> Implementation for PIE's builtin_memcpy located at
>>> criu/arch/x86/include/asm/string.h
>>>
>>> Signed-off-by: Dmitry Safonov <dsafonov at virtuozzo.com>
>>> ---
>>>  criu/arch/x86/compat/memcpy-compat.c | 25 +++++++++++++++++++++++++
>>>  1 file changed, 25 insertions(+)
>>>  create mode 100644 criu/arch/x86/compat/memcpy-compat.c
>>>
>>> diff --git a/criu/arch/x86/compat/memcpy-compat.c 
>>> b/criu/arch/x86/compat/memcpy-compat.c
>>> new file mode 100644
>>> index 000000000000..793c27dcaa7d
>>> --- /dev/null
>>> +++ b/criu/arch/x86/compat/memcpy-compat.c
>>
>> Another memcpy for pie? Shouldn't they all be in compel?
>
> Hmm, 64-bit memcpy lays here, AFAICS:
> criu/arch/x86/memcpy.S

Indeed.

>
> But anyway, skip this patch for a while - with 32-bit entry and 64-bit
> working parasite I will not need this - left the patch only for the
> purpose if we gonna support native 32-bit build.

So, why was that ever committed? Perhaps we need to revert it?

>
>>
>>> @@ -0,0 +1,25 @@
>>> +#include <stddef.h>
>>> +
>>> +/*
>>> + * This provides an optimized implementation of memcpy, and a 
>>> simplified
>>> + * implementation of memset and memmove. These are used here 
>>> because the
>>> + * standard kernel runtime versions are not yet available and we don't
>>> + * trust the gcc built-in implementations as they may do unexpected 
>>> things
>>> + * (e.g. FPU ops) in the minimal decompression stub execution 
>>> environment.
>>> + *
>>> + * From Linux kernel boot helpers: arch/x86/boot/compressed/string.c
>>> + */
>>> +
>>> +void *memcpy_x86(void *dest, const void *src, size_t n)
>>> +{
>>> +    int d0, d1, d2;
>>> +    asm volatile(
>>> +        "rep ; movsl\n\t"
>>> +        "movl %4,%%ecx\n\t"
>>> +        "rep ; movsb\n\t"
>>> +        : "=&c" (d0), "=&D" (d1), "=&S" (d2)
>>> +        : "0" (n >> 2), "g" (n & 3), "1" (dest), "2" (src)
>>> +        : "memory");
>>> +
>>> +    return dest;
>>> +}
>>>
>>
>
>



More information about the CRIU mailing list