summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Maidanski <ivmai@mail.ru>2022-10-19 08:59:33 +0300
committerIvan Maidanski <ivmai@mail.ru>2022-11-14 21:52:21 +0300
commit9d02a747fb16779a92093fbda260fed201f0fd72 (patch)
tree93012010437f47ada65ae13155496240b28b980b
parent18b384c5c3548f8a960c2382c645aed55ab98874 (diff)
downloadbdwgc-9d02a747fb16779a92093fbda260fed201f0fd72.tar.gz
Abort with appropriate message if first call of mmap fails with EPERM
(fix of commit 1c62b365b) This is observed on Linux, at least. * os_dep.c [!OS2 && !PCR && !AMIGA && !USE_WINALLOC && !MACOS && !DOS4GW && !NINTENDO_SWITCH && !NONSTOP && !SN_TARGET_ORBIS && !SN_TARGET_PS3 && !SN_TARGET_PSP2 && !RTEMS && !__CC_ARM && MMAP_SUPPORTED && !MSWIN_XBOX1] (GC_unix_mmap_get_mem): Call ABORT() if allocation failed and GC_pages_executable and last_addr==HEAP_START and errno is EPERM.
-rw-r--r--os_dep.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/os_dep.c b/os_dep.c
index 346c7acf..3e9bbe19 100644
--- a/os_dep.c
+++ b/os_dep.c
@@ -2205,7 +2205,8 @@ void GC_register_data_segments(void)
# undef IGNORE_PAGES_EXECUTABLE
if (EXPECT(MAP_FAILED == result, FALSE)) {
- if (HEAP_START == last_addr && GC_pages_executable && EACCES == errno)
+ if (HEAP_START == last_addr && GC_pages_executable
+ && (EACCES == errno || EPERM == errno))
ABORT("Cannot allocate executable pages");
return NULL;
}