1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
|
/* COVERAGE: mbind migrate_pages move_pages */
#define _GNU_SOURCE
#include <unistd.h>
#include <sys/syscall.h>
#include <sys/mman.h>
#include <linux/mempolicy.h>
#include <sys/types.h>
#define TEST_PAGES 2
#ifdef __NR_mbind
int __mbind(void *start, unsigned long len, int mode,
unsigned long *nmask, unsigned long maxnode, unsigned flags) {
return syscall(__NR_mbind, start, len, mode, nmask, maxnode, flags);
}
#endif
#ifdef __NR_migrate_pages
long __migrate_pages(pid_t pid, unsigned long maxnode,
const unsigned long *old_nodes,
const unsigned long *new_nodes) {
return syscall(__NR_migrate_pages, pid, maxnode, old_nodes, new_nodes);
}
#endif
#ifdef __NR_move_pages
long __move_pages(pid_t pid, unsigned long nr_pages, const void **pages,
const int *nodes, int *status, int flags) {
return syscall(__NR_move_pages, pid, nr_pages, pages, nodes, status, flags);
}
#endif
int main()
{
unsigned long *p;
unsigned long len = 100;
const unsigned long node0 = 1;
const void *pages[TEST_PAGES] = { 0 };
int status[TEST_PAGES];
// ---- normal operation --------------
#ifdef __NR_mbind
p = mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
__mbind(p, len, MPOL_DEFAULT, NULL, 0, 0);
//staptest// [[[[mbind (XXXX, 100, MPOL_DEFAULT, 0x0, 0, 0x0)!!!!ni_syscall ()]]]] = NNNN
#endif
#ifdef __NR_move_pages
__move_pages(0, TEST_PAGES, pages, NULL, status, 0);
//staptest// [[[[move_pages (0, 2, XXXX, 0x0, XXXX, 0x0) = 0!!!!ni_syscall () = NNNN (ENOSYS)]]]]
#endif
#ifdef __NR_migrate_pages
__migrate_pages(0, 2, &node0, &node0);
//staptest// [[[[migrate_pages (0, 2, XXXX, XXXX) = 0!!!!ni_syscall () = NNNN (ENOSYS)]]]]
#endif
// ---- ugly calls --------------------
#ifdef __NR_mbind
__mbind((void *)-1, 0, 0, NULL, 0, 0);
//staptest// [[[[mbind (0x[f]+, 0, MPOL_DEFAULT, 0x0, 0, 0x0)!!!!ni_syscall () = NNNN (ENOSYS)]]]]
__mbind(NULL, -1, 0, NULL, 0, 0);
#if __WORDSIZE == 64
//staptest// [[[[mbind (0x0, 18446744073709551615, MPOL_DEFAULT, 0x0, 0, 0x0)!!!!ni_syscall () = NNNN (ENOSYS)]]]]
#else
//staptest// [[[[mbind (0x0, 4294967295, MPOL_DEFAULT, 0x0, 0, 0x0)!!!!ni_syscall () = NNNN (ENOSYS)]]]]
#endif
__mbind(NULL, 0, -1, NULL, 0, 0);
//staptest// [[[[mbind (0x0, 0, 0x[f]+, 0x0, 0, 0x0)!!!!ni_syscall () = NNNN (ENOSYS)]]]]
__mbind(NULL, 0, 0, (unsigned long *)-1, 0, 0);
//staptest// [[[[mbind (0x0, 0, MPOL_DEFAULT, 0x[f]+, 0, 0x0)!!!!ni_syscall () = NNNN (ENOSYS)]]]]
__mbind(NULL, 0, 0, NULL, -1, 0);
#if __WORDSIZE == 64
//staptest// [[[[mbind (0x0, 0, MPOL_DEFAULT, 0x0, 18446744073709551615, 0x0)!!!!ni_syscall () = NNNN (ENOSYS)]]]]
#else
//staptest// [[[[mbind (0x0, 0, MPOL_DEFAULT, 0x0, 4294967295, 0x0)!!!!ni_syscall () = NNNN (ENOSYS)]]]]
#endif
__mbind(NULL, 0, 0, NULL, 0, -1);
//staptest// [[[[mbind (0x0, 0, MPOL_DEFAULT, 0x0, 0, MPOL_F_NODE|MPOL_F_ADDR[[[[!!!!|MPOL_F_MEMS_ALLOWED]]]]|XXXX)!!!!ni_syscall () = NNNN (ENOSYS)]]]]
#ifdef MPOL_F_STATIC_NODES
__mbind(NULL, 0, MPOL_F_STATIC_NODES|MPOL_PREFERRED, NULL, 0, 0);
//staptest// [[[[mbind (0x0, 0, MPOL_F_STATIC_NODES|MPOL_PREFERRED, 0x0, 0, 0x0)!!!!ni_syscall () = NNNN (ENOSYS)]]]]
#endif
__mbind(NULL, 0, 0, NULL, 0, MPOL_F_ADDR);
//staptest// [[[[mbind (0x0, 0, MPOL_DEFAULT, 0x0, 0, MPOL_F_ADDR)!!!!ni_syscall () = NNNN (ENOSYS)]]]]
#endif
#ifdef __NR_move_pages
__move_pages(-1, 0, NULL, NULL, NULL, 0);
//staptest// [[[[move_pages (-1, 0, 0x0, 0x0, 0x0, 0x0)!!!!ni_syscall () = NNNN (ENOSYS)]]]]
__move_pages(0, -1, NULL, NULL, NULL, 0);
#if __WORDSIZE == 64
//staptest// [[[[move_pages (0, 18446744073709551615, 0x0, 0x0, 0x0, 0x0)!!!!ni_syscall () = NNNN (ENOSYS)]]]]
#else
//staptest// [[[[move_pages (0, 4294967295, 0x0, 0x0, 0x0, 0x0)!!!!ni_syscall () = NNNN (ENOSYS)]]]]
#endif
__move_pages(0, 0, (const void **)-1, NULL, NULL, 0);
//staptest// [[[[move_pages (0, 0, 0x[f]+, 0x0, 0x0, 0x0)!!!!ni_syscall () = NNNN (ENOSYS)]]]]
__move_pages(0, 0, NULL, (const int *)-1, NULL, 0);
//staptest// [[[[move_pages (0, 0, 0x0, 0x[f]+, 0x0, 0x0)!!!!ni_syscall () = NNNN (ENOSYS)]]]]
__move_pages(0, 0, NULL, NULL, (int *)-1, 0);
//staptest// [[[[move_pages (0, 0, 0x0, 0x0, 0x[f]+, 0x0)!!!!ni_syscall () = NNNN (ENOSYS)]]]]
__move_pages(0, 0, NULL, NULL, NULL, -1);
//staptest// [[[[move_pages (0, 0, 0x0, 0x0, 0x0, MPOL_F_NODE|MPOL_F_ADDR[[[[!!!!|MPOL_F_MEMS_ALLOWED]]]]|XXXX)!!!!ni_syscall () = NNNN (ENOSYS)]]]]
__move_pages(0, 0, NULL, NULL, NULL, MPOL_F_ADDR);
//staptest// [[[[move_pages (0, 0, 0x0, 0x0, 0x0, MPOL_F_ADDR)!!!!ni_syscall () = NNNN (ENOSYS)]]]]
#endif
#ifdef __NR_migrate_pages
__migrate_pages(-1, 0, NULL, NULL);
//staptest// [[[[migrate_pages (-1, 0, 0x0, 0x0)!!!!ni_syscall () = NNNN (ENOSYS)]]]]
__migrate_pages(0, -1, NULL, NULL);
#if __WORDSIZE == 64
//staptest// [[[[migrate_pages (0, 18446744073709551615, 0x0, 0x0)!!!!ni_syscall () = NNNN (ENOSYS)]]]]
#else
//staptest// [[[[migrate_pages (0, 4294967295, 0x0, 0x0)!!!!ni_syscall () = NNNN (ENOSYS)]]]]
#endif
__migrate_pages(0, 0, (const unsigned long *)-1, NULL);
//staptest// [[[[migrate_pages (0, 0, 0x[f]+, 0x0)!!!!ni_syscall () = NNNN (ENOSYS)]]]]
__migrate_pages(0, 0, NULL, (const unsigned long *)-1);
//staptest// [[[[migrate_pages (0, 0, 0x0, 0x[f]+)!!!!ni_syscall () = NNNN (ENOSYS)]]]]
#endif
return 0;
}
|