59 lines
1.2 KiB
C
59 lines
1.2 KiB
C
|
// SPDX-License-Identifier: GPL-2.0
|
||
|
#include <malloc.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <string.h>
|
||
|
#include <assert.h>
|
||
|
#include "utils.h"
|
||
|
|
||
|
void *TEST_MEMMOVE(const void *s1, const void *s2, size_t n);
|
||
|
|
||
|
#define BUF_LEN 65536
|
||
|
#define MAX_OFFSET 512
|
||
|
|
||
|
size_t max(size_t a, size_t b)
|
||
|
{
|
||
|
if (a >= b)
|
||
|
return a;
|
||
|
return b;
|
||
|
}
|
||
|
|
||
|
static int testcase_run(void)
|
||
|
{
|
||
|
size_t i, src_off, dst_off, len;
|
||
|
|
||
|
char *usermap = memalign(BUF_LEN, BUF_LEN);
|
||
|
char *kernelmap = memalign(BUF_LEN, BUF_LEN);
|
||
|
|
||
|
assert(usermap != NULL);
|
||
|
assert(kernelmap != NULL);
|
||
|
|
||
|
memset(usermap, 0, BUF_LEN);
|
||
|
memset(kernelmap, 0, BUF_LEN);
|
||
|
|
||
|
for (i = 0; i < BUF_LEN; i++) {
|
||
|
usermap[i] = i & 0xff;
|
||
|
kernelmap[i] = i & 0xff;
|
||
|
}
|
||
|
|
||
|
for (src_off = 0; src_off < MAX_OFFSET; src_off++) {
|
||
|
for (dst_off = 0; dst_off < MAX_OFFSET; dst_off++) {
|
||
|
for (len = 1; len < MAX_OFFSET - max(src_off, dst_off); len++) {
|
||
|
|
||
|
memmove(usermap + dst_off, usermap + src_off, len);
|
||
|
TEST_MEMMOVE(kernelmap + dst_off, kernelmap + src_off, len);
|
||
|
if (memcmp(usermap, kernelmap, MAX_OFFSET) != 0) {
|
||
|
printf("memmove failed at %ld %ld %ld\n",
|
||
|
src_off, dst_off, len);
|
||
|
abort();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
int main(void)
|
||
|
{
|
||
|
return test_harness(testcase_run, "memmove");
|
||
|
}
|