sysdeps/managarm: Impl. anon_allocate via supercalls
@@ -12,19 +12,16 @@ namespace mlibc {
int sys_anon_allocate(size_t size, void **pointer) {
// This implementation is inherently signal-safe.
- __ensure((size % 0x1000) == 0);
-
- HelHandle memory;
- HEL_CHECK(helAllocateMemory(size, 0, nullptr, &memory));
- HEL_CHECK(helMapMemory(memory, kHelNullHandle, nullptr, 0, size,
- kHelMapProtRead | kHelMapProtWrite | kHelMapCopyOnWriteAtFork, pointer));
- HEL_CHECK(helCloseDescriptor(memory));
+ __ensure(!(size & 0xFFF));
+ HelWord out;
+ HEL_CHECK(helSyscall1_1(kHelCallSuper + 10, size, &out));
+ *pointer = reinterpret_cast<void *>(out);
return 0;
}
int sys_anon_free(void *pointer, size_t size) {
// This implementation is inherently signal-safe.
- HEL_CHECK(helUnmapMemory(kHelNullHandle, pointer, size));
+ HEL_CHECK(helSyscall2(kHelCallSuper + 11, (HelWord)pointer, size));
return 0;
}
