diff options
author | Sergey Bugaev <bugaevc@gmail.com> | 2023-04-24 00:55:26 +0300 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2023-04-24 22:48:35 +0200 |
commit | c02b26455b3c9d33c8a94e56eed1958d7f751b72 (patch) | |
tree | cef6d7d11c961ab5ff7e300009b23501c23d818a /sysdeps/mach | |
parent | 35b7bf2fe003d6dbd5726cdf69f3c5d8179590e5 (diff) | |
download | glibc-c02b26455b3c9d33c8a94e56eed1958d7f751b72.tar.gz glibc-c02b26455b3c9d33c8a94e56eed1958d7f751b72.tar.xz glibc-c02b26455b3c9d33c8a94e56eed1958d7f751b72.zip |
hurd: Implement prefer_map_32bit_exec tunable
This makes the prefer_map_32bit_exec tunable no longer Linux-specific. Signed-off-by: Sergey Bugaev <bugaevc@gmail.com> Message-Id: <20230423215526.346009-4-bugaevc@gmail.com>
Diffstat (limited to 'sysdeps/mach')
-rw-r--r-- | sysdeps/mach/hurd/dl-sysdep.c | 5 | ||||
-rw-r--r-- | sysdeps/mach/hurd/mmap.c | 6 |
2 files changed, 11 insertions, 0 deletions
diff --git a/sysdeps/mach/hurd/dl-sysdep.c b/sysdeps/mach/hurd/dl-sysdep.c index 25a1277461..79ebb0ceb1 100644 --- a/sysdeps/mach/hurd/dl-sysdep.c +++ b/sysdeps/mach/hurd/dl-sysdep.c @@ -462,6 +462,11 @@ __mmap (void *addr, size_t len, int prot, int flags, int fd, off_t offset) if (prot & PROT_EXEC) vmprot |= VM_PROT_EXECUTE; +#ifdef __LP64__ + if ((addr == NULL) && (prot & PROT_EXEC) + && HAS_ARCH_FEATURE (Prefer_MAP_32BIT_EXEC)) + flags |= MAP_32BIT; +#endif mask = (flags & MAP_32BIT) ? ~(vm_address_t) 0x7FFFFFFF : 0; if (flags & MAP_ANON) diff --git a/sysdeps/mach/hurd/mmap.c b/sysdeps/mach/hurd/mmap.c index 790eb23886..5aa7008393 100644 --- a/sysdeps/mach/hurd/mmap.c +++ b/sysdeps/mach/hurd/mmap.c @@ -18,6 +18,7 @@ #include <sys/types.h> #include <sys/mman.h> #include <errno.h> +#include <ldsodefs.h> #include <hurd.h> #include <hurd/fd.h> @@ -55,6 +56,11 @@ __mmap (void *addr, size_t len, int prot, int flags, int fd, off_t offset) copy = ! (flags & MAP_SHARED); +#ifdef __LP64__ + if ((addr == NULL) && (prot & PROT_EXEC) + && HAS_ARCH_FEATURE (Prefer_MAP_32BIT_EXEC)) + flags |= MAP_32BIT; +#endif mask = (flags & MAP_32BIT) ? ~(vm_address_t) 0x7FFFFFFF : 0; switch (flags & MAP_TYPE) |