1*2504e5b9SRitesh Harjani // SPDX-License-Identifier: GPL-2.0
2*2504e5b9SRitesh Harjani #include <malloc.h>
3*2504e5b9SRitesh Harjani #include <stdlib.h>
4*2504e5b9SRitesh Harjani #include <string.h>
5*2504e5b9SRitesh Harjani #include <assert.h>
6*2504e5b9SRitesh Harjani #include "utils.h"
7*2504e5b9SRitesh Harjani
8*2504e5b9SRitesh Harjani void *TEST_MEMMOVE(const void *s1, const void *s2, size_t n);
9*2504e5b9SRitesh Harjani
10*2504e5b9SRitesh Harjani #define BUF_LEN 65536
11*2504e5b9SRitesh Harjani #define MAX_OFFSET 512
12*2504e5b9SRitesh Harjani
max(size_t a,size_t b)13*2504e5b9SRitesh Harjani size_t max(size_t a, size_t b)
14*2504e5b9SRitesh Harjani {
15*2504e5b9SRitesh Harjani if (a >= b)
16*2504e5b9SRitesh Harjani return a;
17*2504e5b9SRitesh Harjani return b;
18*2504e5b9SRitesh Harjani }
19*2504e5b9SRitesh Harjani
testcase_run(void)20*2504e5b9SRitesh Harjani static int testcase_run(void)
21*2504e5b9SRitesh Harjani {
22*2504e5b9SRitesh Harjani size_t i, src_off, dst_off, len;
23*2504e5b9SRitesh Harjani
24*2504e5b9SRitesh Harjani char *usermap = memalign(BUF_LEN, BUF_LEN);
25*2504e5b9SRitesh Harjani char *kernelmap = memalign(BUF_LEN, BUF_LEN);
26*2504e5b9SRitesh Harjani
27*2504e5b9SRitesh Harjani assert(usermap != NULL);
28*2504e5b9SRitesh Harjani assert(kernelmap != NULL);
29*2504e5b9SRitesh Harjani
30*2504e5b9SRitesh Harjani memset(usermap, 0, BUF_LEN);
31*2504e5b9SRitesh Harjani memset(kernelmap, 0, BUF_LEN);
32*2504e5b9SRitesh Harjani
33*2504e5b9SRitesh Harjani for (i = 0; i < BUF_LEN; i++) {
34*2504e5b9SRitesh Harjani usermap[i] = i & 0xff;
35*2504e5b9SRitesh Harjani kernelmap[i] = i & 0xff;
36*2504e5b9SRitesh Harjani }
37*2504e5b9SRitesh Harjani
38*2504e5b9SRitesh Harjani for (src_off = 0; src_off < MAX_OFFSET; src_off++) {
39*2504e5b9SRitesh Harjani for (dst_off = 0; dst_off < MAX_OFFSET; dst_off++) {
40*2504e5b9SRitesh Harjani for (len = 1; len < MAX_OFFSET - max(src_off, dst_off); len++) {
41*2504e5b9SRitesh Harjani
42*2504e5b9SRitesh Harjani memmove(usermap + dst_off, usermap + src_off, len);
43*2504e5b9SRitesh Harjani TEST_MEMMOVE(kernelmap + dst_off, kernelmap + src_off, len);
44*2504e5b9SRitesh Harjani if (memcmp(usermap, kernelmap, MAX_OFFSET) != 0) {
45*2504e5b9SRitesh Harjani printf("memmove failed at %ld %ld %ld\n",
46*2504e5b9SRitesh Harjani src_off, dst_off, len);
47*2504e5b9SRitesh Harjani abort();
48*2504e5b9SRitesh Harjani }
49*2504e5b9SRitesh Harjani }
50*2504e5b9SRitesh Harjani }
51*2504e5b9SRitesh Harjani }
52*2504e5b9SRitesh Harjani return 0;
53*2504e5b9SRitesh Harjani }
54*2504e5b9SRitesh Harjani
main(void)55*2504e5b9SRitesh Harjani int main(void)
56*2504e5b9SRitesh Harjani {
57*2504e5b9SRitesh Harjani return test_harness(testcase_run, "memmove");
58*2504e5b9SRitesh Harjani }
59