summary refs log tree commit diff
path: root/sysdeps/mach/hurd/mmap.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2004-06-01 18:53:04 +0000
committerUlrich Drepper <drepper@redhat.com>2004-06-01 18:53:04 +0000
commitfbf86ddab2cd53c0a63173c1eb8b39c2b970fb8d (patch)
tree233df1d9ff53bdaa0453c2e3f5d8f5aea4f0f90b /sysdeps/mach/hurd/mmap.c
parent016deb4c4fb9c52abe842bfc468af2ea38691dbc (diff)
downloadglibc-fbf86ddab2cd53c0a63173c1eb8b39c2b970fb8d.tar.gz
glibc-fbf86ddab2cd53c0a63173c1eb8b39c2b970fb8d.tar.xz
glibc-fbf86ddab2cd53c0a63173c1eb8b39c2b970fb8d.zip
Update.
2004-05-10  Jakub Jelinek  <jakub@redhat.com>

	* sysdeps/posix/sysconf.c (__sysconf) <cases _SC_REALTIME_SIGNALS,
	_SC_PRIORITY_SCHEDULING, _SC_TIMERS, _SC_ASYNCHRONOUS_IO,
	_SC_PRIORITIZED_IO, _SC_SYNCHRONIZED_IO, _SC_FSYNC, _SC_MAPPED_FILES,
	_SC_MEMLOCK, _SC_MEMLOCK_RANGE, _SC_MEMORY_PROTECTION,
	_SC_MESSAGE_PASSING, _SC_SEMAPHORES, _SC_SHARED_MEMORY_OBJECTS,
	_SC_THREADS, _SC_THREAD_SAFE_FUNCTIONS, _SC_THREAD_ATTR_STACKADDR,
	_SC_THREAD_ATTR_STACKSIZE, _SC_THREAD_PRIORITY_SCHEDULING,
	_SC_THREAD_PRIO_INHERIT, _SC_THREAD_PRIO_PROTECT,
	_SC_THREAD_PROCESS_SHARED>: Return _POSIX_* value instead of 1.
	* sysdeps/unix/sysv/linux/sysconf.c (__sysconf)
	<case _SC_MONOTONIC_CLOCK>: Return _POSIX_VERSION instead of 1.

2004-05-07  Jeroen Dekkers  <jeroen@dekkers.cx>

	* sysdeps/mach/hurd/i386/Makefile (CFLAGS-init-first.c): Add
	-momit-leaf-frame-pointer.

	* inet/test-ifaddrs.c (addr_string): Surround AF_PACKET case with
	#ifdef AF_PACKET.

	* sysdeps/mach/hurd/getcwd.c
	(_hurd_canonicalize_directory_name_intern): Only realloc when
	size is <= 0.

	* sysdeps/mach/hurd/mmap.c (__mmap): Fail when addr or offset
	isn't page aligned.

	* sysdeps/mach/hurd/spawni.c (EXPAND_DTABLE): Set dtablesize to
	new size.

	* sysdeps/mach/hurd/Versions (GLIBC_PRIVATE): Add __libc_read,
	__libc_write and __libc_lseek64.
Diffstat (limited to 'sysdeps/mach/hurd/mmap.c')
-rw-r--r--sysdeps/mach/hurd/mmap.c24
1 files changed, 5 insertions, 19 deletions
diff --git a/sysdeps/mach/hurd/mmap.c b/sysdeps/mach/hurd/mmap.c
index 85bde529b9..1d1460cead 100644
--- a/sysdeps/mach/hurd/mmap.c
+++ b/sysdeps/mach/hurd/mmap.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1994,1995,1996,1997,1999,2002,2003
+/* Copyright (C) 1994,1995,1996,1997,1999,2002,2003,2004
 	Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -39,10 +39,13 @@ __mmap (__ptr_t addr, size_t len, int prot, int flags, int fd, off_t offset)
   vm_prot_t vmprot;
   memory_object_t memobj;
   vm_address_t mapaddr;
-  vm_size_t pageoff;
 
   mapaddr = (vm_address_t) addr;
 
+  /* ADDR and OFFSET must be page-aligned.  */
+  if ((mapaddr & (vm_page_size - 1)) || (offset & (vm_page_size - 1)))
+    return (__ptr_t) (long int) __hurd_fail (EINVAL);
+
   if ((flags & (MAP_TYPE|MAP_INHERIT)) == MAP_ANON
       && prot == (PROT_READ|PROT_WRITE)) /* cf VM_PROT_DEFAULT */
     {
@@ -62,20 +65,6 @@ __mmap (__ptr_t addr, size_t len, int prot, int flags, int fd, off_t offset)
       return err ? (__ptr_t) (long int) __hurd_fail (err) : (__ptr_t) mapaddr;
     }
 
-  pageoff = offset & (vm_page_size - 1);
-  offset &= ~(vm_page_size - 1);
-
-  if (flags & MAP_FIXED)
-    {
-      /* A specific address is requested.  It need not be page-aligned;
-	 it just needs to be congruent with the object offset.  */
-      if ((mapaddr & (vm_page_size - 1)) != pageoff)
-	return (__ptr_t) (long int) __hurd_fail (EINVAL);
-      else
-	/* We will add back PAGEOFF after mapping.  */
-	mapaddr -= pageoff;
-    }
-
   vmprot = VM_PROT_NONE;
   if (prot & PROT_READ)
     vmprot |= VM_PROT_READ;
@@ -173,9 +162,6 @@ __mmap (__ptr_t addr, size_t len, int prot, int flags, int fd, off_t offset)
   if (err)
     return (__ptr_t) (long int) __hurd_fail (err);
 
-  /* Adjust the mapping address for the offset-within-page.  */
-  mapaddr += pageoff;
-
   return (__ptr_t) mapaddr;
 }