1135549Sdes// SPDX-License-Identifier: GPL-2.0 2135549Sdes#include <malloc.h> 3135549Sdes#include <stdlib.h> 4135739Sru#include <string.h> 5135739Sru#include <assert.h> 6135549Sdes#include "utils.h" 7135549Sdes 8135549Sdesvoid *TEST_MEMMOVE(const void *s1, const void *s2, size_t n); 9135549Sdes 10135549Sdes#define BUF_LEN 65536 11135549Sdes#define MAX_OFFSET 512 12135549Sdes 13135549Sdessize_t max(size_t a, size_t b) 14135549Sdes{ 15135549Sdes if (a >= b) 16135549Sdes return a; 17148389Sdes return b; 18148389Sdes} 19135549Sdes 20135549Sdesstatic int testcase_run(void) 21{ 22 size_t i, src_off, dst_off, len; 23 24 char *usermap = memalign(BUF_LEN, BUF_LEN); 25 char *kernelmap = memalign(BUF_LEN, BUF_LEN); 26 27 assert(usermap != NULL); 28 assert(kernelmap != NULL); 29 30 memset(usermap, 0, BUF_LEN); 31 memset(kernelmap, 0, BUF_LEN); 32 33 for (i = 0; i < BUF_LEN; i++) { 34 usermap[i] = i & 0xff; 35 kernelmap[i] = i & 0xff; 36 } 37 38 for (src_off = 0; src_off < MAX_OFFSET; src_off++) { 39 for (dst_off = 0; dst_off < MAX_OFFSET; dst_off++) { 40 for (len = 1; len < MAX_OFFSET - max(src_off, dst_off); len++) { 41 42 memmove(usermap + dst_off, usermap + src_off, len); 43 TEST_MEMMOVE(kernelmap + dst_off, kernelmap + src_off, len); 44 if (memcmp(usermap, kernelmap, MAX_OFFSET) != 0) { 45 printf("memmove failed at %ld %ld %ld\n", 46 src_off, dst_off, len); 47 abort(); 48 } 49 } 50 } 51 } 52 return 0; 53} 54 55int main(void) 56{ 57 return test_harness(testcase_run, "memmove"); 58} 59