Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0
0002 #include <malloc.h>
0003 #include <stdlib.h>
0004 #include <string.h>
0005 #include <assert.h>
0006 #include "utils.h"
0007 
0008 void *TEST_MEMMOVE(const void *s1, const void *s2, size_t n);
0009 
0010 #define BUF_LEN 65536
0011 #define MAX_OFFSET 512
0012 
0013 size_t max(size_t a, size_t b)
0014 {
0015     if (a >= b)
0016         return a;
0017     return b;
0018 }
0019 
0020 static int testcase_run(void)
0021 {
0022     size_t i, src_off, dst_off, len;
0023 
0024     char *usermap = memalign(BUF_LEN, BUF_LEN);
0025     char *kernelmap = memalign(BUF_LEN, BUF_LEN);
0026 
0027     assert(usermap != NULL);
0028     assert(kernelmap != NULL);
0029 
0030     memset(usermap, 0, BUF_LEN);
0031     memset(kernelmap, 0, BUF_LEN);
0032 
0033     for (i = 0; i < BUF_LEN; i++) {
0034         usermap[i] = i & 0xff;
0035         kernelmap[i] = i & 0xff;
0036     }
0037 
0038     for (src_off = 0; src_off < MAX_OFFSET; src_off++) {
0039         for (dst_off = 0; dst_off < MAX_OFFSET; dst_off++) {
0040             for (len = 1; len < MAX_OFFSET - max(src_off, dst_off); len++) {
0041 
0042                 memmove(usermap + dst_off, usermap + src_off, len);
0043                 TEST_MEMMOVE(kernelmap + dst_off, kernelmap + src_off, len);
0044                 if (memcmp(usermap, kernelmap, MAX_OFFSET) != 0) {
0045                     printf("memmove failed at %ld %ld %ld\n",
0046                             src_off, dst_off, len);
0047                     abort();
0048                 }
0049             }
0050         }
0051     }
0052     return 0;
0053 }
0054 
0055 int main(void)
0056 {
0057     return test_harness(testcase_run, "memmove");
0058 }