mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-06-28 07:18:30 +00:00
Simplify memory manager
This commit is contained in:
parent
5a9a08d1cf
commit
01587de761
40 changed files with 451 additions and 311 deletions
|
@ -46,7 +46,7 @@ void SetUpOnce(void) {
|
|||
exit(0);
|
||||
}
|
||||
testlib_enable_tmp_setup_teardown();
|
||||
pagesize = (size_t)getauxval(AT_PAGESZ);
|
||||
pagesize = (size_t)getpagesize();
|
||||
// ASSERT_SYS(0, 0, pledge("stdio rpath wpath cpath", 0));
|
||||
}
|
||||
|
||||
|
|
|
@ -65,8 +65,8 @@ TEST(madvise, subPages) {
|
|||
ASSERT_NE(MAP_FAILED, (p = mmap(0, __granularity(), PROT_READ | PROT_WRITE,
|
||||
MAP_PRIVATE | MAP_ANONYMOUS, -1, 0)));
|
||||
ASSERT_SYS(0, 0,
|
||||
madvise(p + getauxval(AT_PAGESZ),
|
||||
__granularity() - getauxval(AT_PAGESZ), MADV_WILLNEED));
|
||||
madvise(p + getpagesize(), __granularity() - getpagesize(),
|
||||
MADV_WILLNEED));
|
||||
ASSERT_SYS(0, 0, munmap(p, __granularity()));
|
||||
}
|
||||
|
||||
|
|
|
@ -136,8 +136,8 @@ TEST(setrlimit, testMemoryLimit) {
|
|||
ASSERT_NE(-1, (wstatus = xspawn(0)));
|
||||
if (wstatus == -2) {
|
||||
ASSERT_EQ(0, SetKernelEnforcedMemoryLimit(MEM));
|
||||
for (gotsome = false, i = 0; i < (MEM * 2) / getauxval(AT_PAGESZ); ++i) {
|
||||
p = mmap(0, getauxval(AT_PAGESZ), PROT_READ | PROT_WRITE,
|
||||
for (gotsome = false, i = 0; i < (MEM * 2) / __granularity(); ++i) {
|
||||
p = mmap(0, __granularity(), PROT_READ | PROT_WRITE,
|
||||
MAP_ANONYMOUS | MAP_PRIVATE | MAP_POPULATE, -1, 0);
|
||||
if (p != MAP_FAILED) {
|
||||
gotsome = true;
|
||||
|
@ -149,7 +149,7 @@ TEST(setrlimit, testMemoryLimit) {
|
|||
ASSERT_EQ(ENOMEM, errno);
|
||||
_Exit(0);
|
||||
}
|
||||
rngset(p, getauxval(AT_PAGESZ), _rand64, -1);
|
||||
rngset(p, __granularity(), _rand64, -1);
|
||||
}
|
||||
_Exit(1);
|
||||
}
|
||||
|
@ -162,24 +162,18 @@ TEST(setrlimit, testMemoryLimit) {
|
|||
TEST(setrlimit, testVirtualMemoryLimit) {
|
||||
char *p;
|
||||
int i, wstatus;
|
||||
if (IsXnu())
|
||||
return; /* doesn't work on darwin */
|
||||
if (IsOpenbsd())
|
||||
return; /* unavailable on openbsd */
|
||||
if (IsWindows())
|
||||
return; /* of course it doesn't work on windows */
|
||||
ASSERT_NE(-1, (wstatus = xspawn(0)));
|
||||
if (wstatus == -2) {
|
||||
ASSERT_EQ(0, setrlimit(RLIMIT_AS, &(struct rlimit){MEM, MEM}));
|
||||
for (i = 0; i < (MEM * 2) / getauxval(AT_PAGESZ); ++i) {
|
||||
p = sys_mmap(0, getauxval(AT_PAGESZ), PROT_READ | PROT_WRITE,
|
||||
for (i = 0; i < (MEM * 2) / __granularity(); ++i) {
|
||||
p = sys_mmap(0, __granularity(), PROT_READ | PROT_WRITE,
|
||||
MAP_ANONYMOUS | MAP_PRIVATE | MAP_POPULATE, -1, 0)
|
||||
.addr;
|
||||
if (p == MAP_FAILED) {
|
||||
ASSERT_EQ(ENOMEM, errno);
|
||||
_Exit(0);
|
||||
}
|
||||
rngset(p, getauxval(AT_PAGESZ), _rand64, -1);
|
||||
rngset(p, __granularity(), _rand64, -1);
|
||||
}
|
||||
_Exit(1);
|
||||
}
|
||||
|
@ -205,15 +199,15 @@ TEST(setrlimit, testDataMemoryLimit) {
|
|||
ASSERT_NE(-1, (wstatus = xspawn(0)));
|
||||
if (wstatus == -2) {
|
||||
ASSERT_EQ(0, setrlimit(RLIMIT_DATA, &(struct rlimit){MEM, MEM}));
|
||||
for (i = 0; i < (MEM * 2) / getauxval(AT_PAGESZ); ++i) {
|
||||
p = sys_mmap(0, getauxval(AT_PAGESZ), PROT_READ | PROT_WRITE,
|
||||
for (i = 0; i < (MEM * 2) / __granularity(); ++i) {
|
||||
p = sys_mmap(0, __granularity(), PROT_READ | PROT_WRITE,
|
||||
MAP_ANONYMOUS | MAP_PRIVATE | MAP_POPULATE, -1, 0)
|
||||
.addr;
|
||||
if (p == MAP_FAILED) {
|
||||
ASSERT_EQ(ENOMEM, errno);
|
||||
_Exit(0);
|
||||
}
|
||||
rngset(p, getauxval(AT_PAGESZ), _rand64, -1);
|
||||
rngset(p, __granularity(), _rand64, -1);
|
||||
}
|
||||
_Exit(1);
|
||||
}
|
||||
|
|
|
@ -75,7 +75,7 @@ TEST(sigbus, test) {
|
|||
|
||||
// map two pages of the file into memory
|
||||
char *map;
|
||||
long pagesz = getauxval(AT_PAGESZ);
|
||||
long pagesz = getpagesize();
|
||||
ASSERT_NE(MAP_FAILED,
|
||||
(map = mmap(0, pagesz * 2, PROT_READ, MAP_PRIVATE, 3, 0)));
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue