11
11
#include " src/sys/mman/mincore.h"
12
12
#include " src/sys/mman/mmap.h"
13
13
#include " src/sys/mman/munmap.h"
14
+ #include " src/unistd/sysconf.h"
14
15
#include " test/UnitTest/ErrnoSetterMatcher.h"
15
16
#include " test/UnitTest/LibcTest.h"
16
17
#include " test/UnitTest/Test.h"
17
18
18
- #include < linux/param.h> // For EXEC_PAGESIZE
19
19
#include < sys/mman.h>
20
+ #include < unistd.h> // For sysconf.
20
21
21
22
using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Fails;
22
23
using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Succeeds;
@@ -29,66 +30,69 @@ TEST(LlvmLibcMincoreTest, UnMappedMemory) {
29
30
}
30
31
31
32
TEST (LlvmLibcMincoreTest, InvalidVec) {
32
- void *addr = LIBC_NAMESPACE::mmap (nullptr , 4 * EXEC_PAGESIZE, PROT_READ,
33
+ size_t page_size = static_cast <size_t >(LIBC_NAMESPACE::sysconf (_SC_PAGESIZE));
34
+ void *addr = LIBC_NAMESPACE::mmap (nullptr , 4 * page_size, PROT_READ,
33
35
MAP_ANONYMOUS | MAP_PRIVATE, -1 , 0 );
34
36
EXPECT_NE (addr, MAP_FAILED);
35
- EXPECT_EQ (reinterpret_cast <unsigned long >(addr) % EXEC_PAGESIZE , 0ul );
37
+ EXPECT_EQ (reinterpret_cast <unsigned long >(addr) % page_size , 0ul );
36
38
libc_errno = 0 ;
37
39
int res = LIBC_NAMESPACE::mincore (addr, 1 , nullptr );
38
40
EXPECT_THAT (res, Fails (EFAULT, -1 ));
39
- void *area =
40
- LIBC_NAMESPACE::mmap (nullptr , EXEC_PAGESIZE, PROT_READ | PROT_WRITE,
41
- MAP_ANONYMOUS | MAP_PRIVATE, -1 , 0 );
41
+ void *area = LIBC_NAMESPACE::mmap (nullptr , page_size, PROT_READ | PROT_WRITE,
42
+ MAP_ANONYMOUS | MAP_PRIVATE, -1 , 0 );
42
43
EXPECT_NE (area, MAP_FAILED);
43
- unsigned char *ptr = static_cast <unsigned char *>(area) + EXEC_PAGESIZE - 3 ;
44
- res = LIBC_NAMESPACE::mincore (addr, 4 * EXEC_PAGESIZE , ptr);
44
+ unsigned char *ptr = static_cast <unsigned char *>(area) + page_size - 3 ;
45
+ res = LIBC_NAMESPACE::mincore (addr, 4 * page_size , ptr);
45
46
EXPECT_THAT (res, Fails (EFAULT, -1 ));
46
- EXPECT_THAT (LIBC_NAMESPACE::munmap (addr, EXEC_PAGESIZE ), Succeeds ());
47
+ EXPECT_THAT (LIBC_NAMESPACE::munmap (addr, page_size ), Succeeds ());
47
48
EXPECT_THAT (LIBC_NAMESPACE::munmap (area, 2 ), Succeeds ());
48
49
}
49
50
50
51
TEST (LlvmLibcMincoreTest, UnalignedAddr) {
51
- void *addr = LIBC_NAMESPACE::mmap (nullptr , EXEC_PAGESIZE, PROT_READ,
52
+ size_t page_size = static_cast <size_t >(LIBC_NAMESPACE::sysconf (_SC_PAGESIZE));
53
+ void *addr = LIBC_NAMESPACE::mmap (nullptr , page_size, PROT_READ,
52
54
MAP_ANONYMOUS | MAP_PRIVATE, -1 , 0 );
53
55
EXPECT_NE (addr, MAP_FAILED);
54
- EXPECT_EQ (reinterpret_cast <unsigned long >(addr) % EXEC_PAGESIZE , 0ul );
56
+ EXPECT_EQ (reinterpret_cast <unsigned long >(addr) % page_size , 0ul );
55
57
libc_errno = 0 ;
56
58
int res = LIBC_NAMESPACE::mincore (static_cast <char *>(addr) + 1 , 1 , nullptr );
57
59
EXPECT_THAT (res, Fails (EINVAL, -1 ));
58
- EXPECT_THAT (LIBC_NAMESPACE::munmap (addr, EXEC_PAGESIZE ), Succeeds ());
60
+ EXPECT_THAT (LIBC_NAMESPACE::munmap (addr, page_size ), Succeeds ());
59
61
}
60
62
61
63
TEST (LlvmLibcMincoreTest, NoError) {
62
- void *addr = LIBC_NAMESPACE::mmap (nullptr , EXEC_PAGESIZE, PROT_READ,
64
+ size_t page_size = static_cast <size_t >(LIBC_NAMESPACE::sysconf (_SC_PAGESIZE));
65
+ void *addr = LIBC_NAMESPACE::mmap (nullptr , page_size, PROT_READ,
63
66
MAP_ANONYMOUS | MAP_PRIVATE, -1 , 0 );
64
67
EXPECT_NE (addr, MAP_FAILED);
65
- EXPECT_EQ (reinterpret_cast <unsigned long >(addr) % EXEC_PAGESIZE , 0ul );
68
+ EXPECT_EQ (reinterpret_cast <unsigned long >(addr) % page_size , 0ul );
66
69
unsigned char vec;
67
70
libc_errno = 0 ;
68
71
int res = LIBC_NAMESPACE::mincore (addr, 1 , &vec);
69
72
EXPECT_THAT (res, Succeeds ());
70
- EXPECT_THAT (LIBC_NAMESPACE::munmap (addr, EXEC_PAGESIZE ), Succeeds ());
73
+ EXPECT_THAT (LIBC_NAMESPACE::munmap (addr, page_size ), Succeeds ());
71
74
}
72
75
73
76
TEST (LlvmLibcMincoreTest, NegativeLength) {
74
- void *addr = LIBC_NAMESPACE::mmap (nullptr , EXEC_PAGESIZE, PROT_READ,
77
+ size_t page_size = static_cast <size_t >(LIBC_NAMESPACE::sysconf (_SC_PAGESIZE));
78
+ void *addr = LIBC_NAMESPACE::mmap (nullptr , page_size, PROT_READ,
75
79
MAP_ANONYMOUS | MAP_PRIVATE, -1 , 0 );
76
80
EXPECT_NE (addr, MAP_FAILED);
77
- EXPECT_EQ (reinterpret_cast <unsigned long >(addr) % EXEC_PAGESIZE , 0ul );
81
+ EXPECT_EQ (reinterpret_cast <unsigned long >(addr) % page_size , 0ul );
78
82
unsigned char vec;
79
83
libc_errno = 0 ;
80
84
int res = LIBC_NAMESPACE::mincore (addr, -1 , &vec);
81
85
EXPECT_THAT (res, Fails (ENOMEM, -1 ));
82
- EXPECT_THAT (LIBC_NAMESPACE::munmap (addr, EXEC_PAGESIZE ), Succeeds ());
86
+ EXPECT_THAT (LIBC_NAMESPACE::munmap (addr, page_size ), Succeeds ());
83
87
}
84
88
85
89
TEST (LlvmLibcMincoreTest, PageOut) {
86
90
unsigned char vec;
87
- void *addr =
88
- LIBC_NAMESPACE::mmap (nullptr , EXEC_PAGESIZE , PROT_READ | PROT_WRITE,
89
- MAP_ANONYMOUS | MAP_PRIVATE, -1 , 0 );
91
+ size_t page_size = static_cast < size_t >( LIBC_NAMESPACE::sysconf (_SC_PAGESIZE));
92
+ void *addr = LIBC_NAMESPACE::mmap (nullptr , page_size , PROT_READ | PROT_WRITE,
93
+ MAP_ANONYMOUS | MAP_PRIVATE, -1 , 0 );
90
94
EXPECT_NE (addr, MAP_FAILED);
91
- EXPECT_EQ (reinterpret_cast <unsigned long >(addr) % EXEC_PAGESIZE , 0ul );
95
+ EXPECT_EQ (reinterpret_cast <unsigned long >(addr) % page_size , 0ul );
92
96
93
97
// touch the page
94
98
{
@@ -102,14 +106,14 @@ TEST(LlvmLibcMincoreTest, PageOut) {
102
106
// page out the memory
103
107
{
104
108
libc_errno = 0 ;
105
- EXPECT_THAT (LIBC_NAMESPACE::madvise (addr, EXEC_PAGESIZE , MADV_DONTNEED),
109
+ EXPECT_THAT (LIBC_NAMESPACE::madvise (addr, page_size , MADV_DONTNEED),
106
110
Succeeds ());
107
111
108
112
libc_errno = 0 ;
109
- int res = LIBC_NAMESPACE::mincore (addr, EXEC_PAGESIZE , &vec);
113
+ int res = LIBC_NAMESPACE::mincore (addr, page_size , &vec);
110
114
EXPECT_EQ (vec & 1u , 0u );
111
115
EXPECT_THAT (res, Succeeds ());
112
116
}
113
117
114
- EXPECT_THAT (LIBC_NAMESPACE::munmap (addr, EXEC_PAGESIZE ), Succeeds ());
118
+ EXPECT_THAT (LIBC_NAMESPACE::munmap (addr, page_size ), Succeeds ());
115
119
}
0 commit comments