diff options
author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2015-02-07 22:22:40 +0100 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2015-02-07 22:22:40 +0100 |
commit | e86c5b6459e9803118cd4708e0ff024a27bf33f8 (patch) | |
tree | 641364f58d588e02341e9b772a02c1c113afac0e | |
parent | c187253fc222ed05de710d94b5bcaf02c3ef37c5 (diff) | |
download | glibc-e86c5b6459e9803118cd4708e0ff024a27bf33f8.tar.gz glibc-e86c5b6459e9803118cd4708e0ff024a27bf33f8.tar.xz glibc-e86c5b6459e9803118cd4708e0ff024a27bf33f8.zip |
hurd: support mmap with PROT_NONE
-rw-r--r-- | ChangeLog | 1 | ||||
-rw-r--r-- | sysdeps/mach/hurd/mmap.c | 11 |
2 files changed, 10 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog index 4ba04cdd86..3c19596338 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,7 @@ * hurd/hurd/signal.h (_hurd_critical_section_lock): Don't unlock sigstate. + * sysdeps/mach/hurd/mmap.c (__mmap): Also handle PROT_NONE case. 2015-02-07 Samuel Thibault <samuel.thibault@ens-lyon.org> diff --git a/sysdeps/mach/hurd/mmap.c b/sysdeps/mach/hurd/mmap.c index ca34045012..393008f2fe 100644 --- a/sysdeps/mach/hurd/mmap.c +++ b/sysdeps/mach/hurd/mmap.c @@ -97,6 +97,13 @@ __mmap (__ptr_t addr, size_t len, int prot, int flags, int fd, off_t offset) } switch (prot & (PROT_READ|PROT_WRITE)) { + /* Although it apparently doesn't make sense to map a file with + protection set to PROT_NONE, it is actually sometimes done. + In particular, that's how localedef reserves some space for + the locale archive file, the rationale being that some + implementations take into account whether the mapping is + anonymous or not when selecting addresses. */ + case PROT_NONE: case PROT_READ: memobj = robj; if (wobj != MACH_PORT_NULL) @@ -126,8 +133,8 @@ __mmap (__ptr_t addr, size_t len, int prot, int flags, int fd, off_t offset) return (__ptr_t) (long int) __hurd_fail (EACCES); } break; - default: /* impossible */ - return 0; + default: + __builtin_unreachable (); } break; /* XXX handle MAP_NOEXTEND */ |