[Haiku-commits] r31113 - in haiku/trunk: headers/private/kernel headers/private/system src/system/kernel src/system/kernel/vm src/system/libroot/posix/sys src/system/runtime_loader

axeld at BerliOS axeld at mail.berlios.de
Fri Jun 19 10:23:13 CEST 2009


Author: axeld
Date: 2009-06-19 10:23:11 +0200 (Fri, 19 Jun 2009)
New Revision: 31113
ViewCVS: http://svn.berlios.de/viewcvs/haiku?rev=31113&view=rev

Modified:
   haiku/trunk/headers/private/kernel/vm.h
   haiku/trunk/headers/private/system/syscalls.h
   haiku/trunk/src/system/kernel/elf.cpp
   haiku/trunk/src/system/kernel/vm/vm.cpp
   haiku/trunk/src/system/libroot/posix/sys/mman.cpp
   haiku/trunk/src/system/runtime_loader/images.cpp
Log:
* Added an "unmapAddressRange" argument to the file mapping syscall. This is
  the first part of making the runtime loader behave itself; it should already
  make Clockwerk run okay with any number of translators (even if not all of
  them will work yet).


Modified: haiku/trunk/headers/private/kernel/vm.h
===================================================================
--- haiku/trunk/headers/private/kernel/vm.h	2009-06-19 02:06:30 UTC (rev 31112)
+++ haiku/trunk/headers/private/kernel/vm.h	2009-06-19 08:23:11 UTC (rev 31113)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2002-2008, Axel Dörfler, axeld at pinc-software.de.
+ * Copyright 2002-2009, Axel Dörfler, axeld at pinc-software.de.
  * Distributed under the terms of the MIT License.
  *
  * Copyright 2001-2002, Travis Geiselbrecht. All rights reserved.
@@ -67,7 +67,7 @@
 			uint32 addressSpec, addr_t size, uint32 protection, addr_t phys_addr);
 area_id vm_map_file(team_id aid, const char *name, void **address,
 			uint32 addressSpec, addr_t size, uint32 protection, uint32 mapping,
-			int fd, off_t offset);
+			bool unmapAddressRange, int fd, off_t offset);
 struct VMCache *vm_area_get_locked_cache(struct vm_area *area);
 void vm_area_put_locked_cache(struct VMCache *cache);
 area_id vm_create_null_area(team_id team, const char *name, void **address,
@@ -87,7 +87,7 @@
 int32 vm_test_map_activation(struct vm_page *page, bool *_modified);
 void vm_clear_map_flags(struct vm_page *page, uint32 flags);
 void vm_remove_all_page_mappings(struct vm_page *page, uint32 *_flags);
-bool vm_unmap_page(struct vm_area* area, addr_t virtualAddress, 
+bool vm_unmap_page(struct vm_area* area, addr_t virtualAddress,
 	bool preserveModified);
 status_t vm_unmap_pages(struct vm_area *area, addr_t base, size_t length,
 			bool preserveModified);
@@ -121,7 +121,8 @@
 status_t _user_delete_area(area_id area);
 
 area_id _user_map_file(const char *uname, void **uaddress, int addressSpec,
-			size_t size, int protection, int mapping, int fd, off_t offset);
+			size_t size, int protection, int mapping, bool unmapAddressRange,
+			int fd, off_t offset);
 status_t _user_unmap_memory(void *address, size_t size);
 status_t _user_set_memory_protection(void* address, size_t size,
 			int protection);

Modified: haiku/trunk/headers/private/system/syscalls.h
===================================================================
--- haiku/trunk/headers/private/system/syscalls.h	2009-06-19 02:06:30 UTC (rev 31112)
+++ haiku/trunk/headers/private/system/syscalls.h	2009-06-19 08:23:11 UTC (rev 31113)
@@ -140,21 +140,27 @@
 extern status_t		_kern_suspend_thread(thread_id thread);
 extern status_t		_kern_resume_thread(thread_id thread);
 extern status_t		_kern_rename_thread(thread_id thread, const char *newName);
-extern status_t		_kern_set_thread_priority(thread_id thread, int32 newPriority);
+extern status_t		_kern_set_thread_priority(thread_id thread,
+						int32 newPriority);
 extern status_t		_kern_kill_thread(thread_id thread);
 extern void			_kern_exit_thread(status_t returnValue);
 extern void			_kern_thread_yield(void);
-extern status_t		_kern_wait_for_thread(thread_id thread, status_t *_returnCode);
+extern status_t		_kern_wait_for_thread(thread_id thread,
+						status_t *_returnCode);
 extern bool			_kern_has_data(thread_id thread);
-extern status_t		_kern_send_data(thread_id thread, int32 code, const void *buffer, size_t bufferSize);
-extern int32		_kern_receive_data(thread_id *_sender, void *buffer, size_t bufferSize);
+extern status_t		_kern_send_data(thread_id thread, int32 code,
+						const void *buffer, size_t bufferSize);
+extern int32		_kern_receive_data(thread_id *_sender, void *buffer,
+						size_t bufferSize);
 extern int64		_kern_restore_signal_frame();
 
 extern status_t		_kern_get_thread_info(thread_id id, thread_info *info);
-extern status_t		_kern_get_next_thread_info(team_id team, int32 *cookie, thread_info *info);
+extern status_t		_kern_get_next_thread_info(team_id team, int32 *cookie,
+						thread_info *info);
 extern status_t		_kern_get_team_info(team_id id, team_info *info);
 extern status_t		_kern_get_next_team_info(int32 *cookie, team_info *info);
-extern status_t		_kern_get_team_usage_info(team_id team, int32 who, team_usage_info *info, size_t size);
+extern status_t		_kern_get_team_usage_info(team_id team, int32 who,
+						team_usage_info *info, size_t size);
 
 extern status_t		_kern_block_thread(uint32 flags, bigtime_t timeout);
 extern status_t		_kern_unblock_thread(thread_id thread, status_t status);
@@ -189,8 +195,10 @@
 extern status_t		_kern_unregister_image(image_id id);
 extern void			_kern_image_relocated(image_id id);
 extern void			_kern_loading_app_failed(status_t error);
-extern status_t		_kern_get_image_info(image_id id, image_info *info, size_t size);
-extern status_t		_kern_get_next_image_info(team_id team, int32 *cookie, image_info *info, size_t size);
+extern status_t		_kern_get_image_info(image_id id, image_info *info,
+						size_t size);
+extern status_t		_kern_get_next_image_info(team_id team, int32 *cookie,
+						image_info *info, size_t size);
 extern status_t		_kern_read_kernel_image_symbols(image_id id,
 						struct Elf32_Sym* symbolTable, int32* _symbolCount,
 						char* stringTable, size_t* _stringTableSize,
@@ -198,19 +206,24 @@
 
 // VFS functions
 extern dev_t		_kern_mount(const char *path, const char *device,
-						const char *fs_name, uint32 flags, const char *args, size_t argsLength);
+						const char *fs_name, uint32 flags, const char *args,
+						size_t argsLength);
 extern status_t		_kern_unmount(const char *path, uint32 flags);
 extern status_t		_kern_read_fs_info(dev_t device, struct fs_info *info);
-extern status_t		_kern_write_fs_info(dev_t device, const struct fs_info *info, int mask);
+extern status_t		_kern_write_fs_info(dev_t device, const struct fs_info *info,
+						int mask);
 extern dev_t		_kern_next_device(int32 *_cookie);
 extern status_t		_kern_sync(void);
 extern status_t		_kern_entry_ref_to_path(dev_t device, ino_t inode,
 						const char *leaf, char *userPath, size_t pathLength);
 extern status_t		_kern_normalize_path(const char* userPath,
 						bool traverseLink, char* buffer);
-extern int			_kern_open_entry_ref(dev_t device, ino_t inode, const char *name, int openMode, int perms);
-extern int			_kern_open(int fd, const char *path, int openMode, int perms);
-extern int			_kern_open_dir_entry_ref(dev_t device, ino_t inode, const char *name);
+extern int			_kern_open_entry_ref(dev_t device, ino_t inode,
+						const char *name, int openMode, int perms);
+extern int			_kern_open(int fd, const char *path, int openMode,
+						int perms);
+extern int			_kern_open_dir_entry_ref(dev_t device, ino_t inode,
+						const char *name);
 extern int			_kern_open_dir(int fd, const char *path);
 extern int			_kern_open_parent_dir(int fd, char *name,
 						size_t nameLength);
@@ -218,7 +231,8 @@
 extern status_t		_kern_fsync(int fd);
 extern status_t		_kern_flock(int fd, int op);
 extern off_t		_kern_seek(int fd, off_t pos, int seekType);
-extern status_t		_kern_create_dir_entry_ref(dev_t device, ino_t inode, const char *name, int perms);
+extern status_t		_kern_create_dir_entry_ref(dev_t device, ino_t inode,
+						const char *name, int perms);
 extern status_t		_kern_create_dir(int fd, const char *path, int perms);
 extern status_t		_kern_remove_dir(int fd, const char *path);
 extern status_t		_kern_read_link(int fd, const char *path, char *buffer,
@@ -235,30 +249,39 @@
 extern ssize_t		_kern_select(int numfds, struct fd_set *readSet,
 						struct fd_set *writeSet, struct fd_set *errorSet,
 						bigtime_t timeout, const sigset_t *sigMask);
-extern ssize_t		_kern_poll(struct pollfd *fds, int numfds, bigtime_t timeout);
+extern ssize_t		_kern_poll(struct pollfd *fds, int numFDs,
+						bigtime_t timeout);
 extern int			_kern_open_attr_dir(int fd, const char *path);
-extern int			_kern_create_attr(int fd, const char *name, uint32 type, int openMode);
+extern int			_kern_create_attr(int fd, const char *name, uint32 type,
+						int openMode);
 extern int			_kern_open_attr(int fd, const char *name, int openMode);
 extern status_t		_kern_remove_attr(int fd, const char *name);
-extern status_t		_kern_rename_attr(int fromFile, const char *fromName, int toFile, const char *toName);
+extern status_t		_kern_rename_attr(int fromFile, const char *fromName,
+						int toFile, const char *toName);
 extern int			_kern_open_index_dir(dev_t device);
-extern status_t		_kern_create_index(dev_t device, const char *name, uint32 type, uint32 flags);
-extern status_t		_kern_read_index_stat(dev_t device, const char *name, struct stat *stat);
+extern status_t		_kern_create_index(dev_t device, const char *name,
+						uint32 type, uint32 flags);
+extern status_t		_kern_read_index_stat(dev_t device, const char *name,
+						struct stat *stat);
 extern status_t		_kern_remove_index(dev_t device, const char *name);
 extern status_t		_kern_getcwd(char *buffer, size_t size);
 extern status_t		_kern_setcwd(int fd, const char *path);
-extern int			_kern_open_query(dev_t device, const char *query, size_t queryLength,
-						uint32 flags, port_id port, int32 token);
+extern int			_kern_open_query(dev_t device, const char *query,
+						size_t queryLength, uint32 flags, port_id port,
+						int32 token);
 
 // file descriptor functions
-extern ssize_t		_kern_read(int fd, off_t pos, void *buffer, size_t bufferSize);
-extern ssize_t		_kern_readv(int fd, off_t pos, const struct iovec *vecs, size_t count);
-extern ssize_t		_kern_write(int fd, off_t pos, const void *buffer, size_t bufferSize);
+extern ssize_t		_kern_read(int fd, off_t pos, void *buffer,
+						size_t bufferSize);
+extern ssize_t		_kern_readv(int fd, off_t pos, const struct iovec *vecs,
+						size_t count);
+extern ssize_t		_kern_write(int fd, off_t pos, const void *buffer,
+						size_t bufferSize);
 extern ssize_t		_kern_writev(int fd, off_t pos, const struct iovec *vecs,
 						size_t count);
 extern status_t		_kern_ioctl(int fd, ulong cmd, void *data, size_t length);
-extern ssize_t		_kern_read_dir(int fd, struct dirent *buffer, size_t bufferSize,
-						uint32 maxCount);
+extern ssize_t		_kern_read_dir(int fd, struct dirent *buffer,
+						size_t bufferSize, uint32 maxCount);
 extern status_t		_kern_rewind_dir(int fd);
 extern status_t		_kern_read_stat(int fd, const char *path, bool traverseLink,
 						struct stat *stat, size_t statSize);
@@ -320,34 +343,43 @@
 
 // time functions
 extern status_t		_kern_set_real_time_clock(uint32 time);
-extern status_t		_kern_set_timezone(int32 timezoneOffset, bool daylightSavingTime);
-extern status_t		_kern_get_timezone(int32 *_timezoneOffset, bool *_daylightSavingTime);
-extern status_t		_kern_set_tzfilename(const char *filename, size_t length, bool isGMT);
-extern status_t		_kern_get_tzfilename(char *filename, size_t length, bool *_isGMT);
+extern status_t		_kern_set_timezone(int32 timezoneOffset,
+						bool daylightSavingTime);
+extern status_t		_kern_get_timezone(int32 *_timezoneOffset,
+						bool *_daylightSavingTime);
+extern status_t		_kern_set_tzfilename(const char *filename, size_t length,
+						bool isGMT);
+extern status_t		_kern_get_tzfilename(char *filename, size_t length,
+						bool *_isGMT);
 
 extern bigtime_t	_kern_system_time();
 extern status_t		_kern_snooze_etc(bigtime_t time, int timebase, int32 flags);
 
 // area functions
-extern area_id		_kern_create_area(const char *name, void **address, uint32 addressSpec,
-						size_t size, uint32 lock, uint32 protection);
+extern area_id		_kern_create_area(const char *name, void **address,
+						uint32 addressSpec, size_t size, uint32 lock,
+						uint32 protection);
 extern status_t		_kern_delete_area(area_id area);
 extern area_id		_kern_area_for(void *address);
 extern area_id		_kern_find_area(const char *name);
 extern status_t		_kern_get_area_info(area_id area, area_info *info);
-extern status_t		_kern_get_next_area_info(team_id team, int32 *cookie, area_info *info);
+extern status_t		_kern_get_next_area_info(team_id team, int32 *cookie,
+						area_info *info);
 extern status_t		_kern_resize_area(area_id area, size_t newSize);
-extern area_id		_kern_transfer_area(area_id area, void **_address, uint32 addressSpec,
-						team_id target);
-extern status_t		_kern_set_area_protection(area_id area, uint32 newProtection);
-extern area_id		_kern_clone_area(const char *name, void **_address, uint32 addressSpec,
-						uint32 protection, area_id sourceArea);
-extern status_t		_kern_reserve_heap_address_range(addr_t* _address, uint32 addressSpec,
-						addr_t size);
+extern area_id		_kern_transfer_area(area_id area, void **_address,
+						uint32 addressSpec, team_id target);
+extern status_t		_kern_set_area_protection(area_id area,
+						uint32 newProtection);
+extern area_id		_kern_clone_area(const char *name, void **_address,
+						uint32 addressSpec, uint32 protection,
+						area_id sourceArea);
+extern status_t		_kern_reserve_heap_address_range(addr_t* _address,
+						uint32 addressSpec, addr_t size);
 
 extern area_id		_kern_map_file(const char *name, void **address,
 						int addressSpec, size_t size, int protection,
-						int mapping, int fd, off_t offset);
+						int mapping, bool unmapAddressRange, int fd,
+						off_t offset);
 extern status_t		_kern_unmap_memory(void *address, size_t size);
 extern status_t		_kern_set_memory_protection(void *address, size_t size,
 						int protection);
@@ -361,14 +393,18 @@
 extern status_t		_kern_delete_port(port_id id);
 extern port_id		_kern_find_port(const char *port_name);
 extern status_t		_kern_get_port_info(port_id id, struct port_info *info);
-extern status_t	 	_kern_get_next_port_info(team_id team, int32 *cookie, struct port_info *info);
-extern ssize_t		_kern_port_buffer_size_etc(port_id port, uint32 flags, bigtime_t timeout);
+extern status_t	 	_kern_get_next_port_info(team_id team, int32 *cookie,
+						struct port_info *info);
+extern ssize_t		_kern_port_buffer_size_etc(port_id port, uint32 flags,
+						bigtime_t timeout);
 extern int32		_kern_port_count(port_id port);
-extern ssize_t		_kern_read_port_etc(port_id port, int32 *msgCode, void *msgBuffer,
-						size_t bufferSize, uint32 flags, bigtime_t timeout);
+extern ssize_t		_kern_read_port_etc(port_id port, int32 *msgCode,
+						void *msgBuffer, size_t bufferSize, uint32 flags,
+						bigtime_t timeout);
 extern status_t		_kern_set_port_owner(port_id port, team_id team);
-extern status_t		_kern_write_port_etc(port_id port, int32 msgCode, const void *msgBuffer,
-						size_t bufferSize, uint32 flags, bigtime_t timeout);
+extern status_t		_kern_write_port_etc(port_id port, int32 msgCode,
+						const void *msgBuffer, size_t bufferSize, uint32 flags,
+						bigtime_t timeout);
 extern status_t		_kern_writev_port_etc(port_id id, int32 msgCode,
 						const struct iovec *msgVecs, size_t vecCount,
 						size_t bufferSize, uint32 flags, bigtime_t timeout);
@@ -403,7 +439,8 @@
 /* atomic_* ops (needed for CPUs that don't support them directly) */
 #ifdef ATOMIC_FUNCS_ARE_SYSCALLS
 extern int32		_kern_atomic_set(vint32 *value, int32 newValue);
-extern int32		_kern_atomic_test_and_set(vint32 *value, int32 newValue, int32 testAgainst);
+extern int32		_kern_atomic_test_and_set(vint32 *value, int32 newValue,
+						int32 testAgainst);
 extern int32		_kern_atomic_add(vint32 *value, int32 addValue);
 extern int32		_kern_atomic_and(vint32 *value, int32 andValue);
 extern int32		_kern_atomic_or(vint32 *value, int32 orValue);
@@ -412,7 +449,8 @@
 
 #ifdef ATOMIC64_FUNCS_ARE_SYSCALLS
 extern int64		_kern_atomic_set64(vint64 *value, int64 newValue);
-extern int64		_kern_atomic_test_and_set64(vint64 *value, int64 newValue, int64 testAgainst);
+extern int64		_kern_atomic_test_and_set64(vint64 *value, int64 newValue,
+						int64 testAgainst);
 extern int64		_kern_atomic_add64(vint64 *value, int64 addValue);
 extern int64		_kern_atomic_and64(vint64 *value, int64 andValue);
 extern int64		_kern_atomic_or64(vint64 *value, int64 orValue);
@@ -438,7 +476,8 @@
 						sem_id counterSem);
 extern status_t		_kern_unregister_messaging_service();
 
-extern void			_kern_clear_caches(void *address, size_t length, uint32 flags);
+extern void			_kern_clear_caches(void *address, size_t length,
+						uint32 flags);
 extern bool			_kern_cpu_enabled(int32 cpu);
 extern status_t		_kern_set_cpu_enabled(int32 cpu, bool enabled);
 

Modified: haiku/trunk/src/system/kernel/elf.cpp
===================================================================
--- haiku/trunk/src/system/kernel/elf.cpp	2009-06-19 02:06:30 UTC (rev 31112)
+++ haiku/trunk/src/system/kernel/elf.cpp	2009-06-19 08:23:11 UTC (rev 31113)
@@ -1,6 +1,6 @@
 /*
  * Copyright 2009, Ingo Weinhold, ingo_weinhold at gmx.de.
- * Copyright 2002-2008, Axel Dörfler, axeld at pinc-software.de.
+ * Copyright 2002-2009, Axel Dörfler, axeld at pinc-software.de.
  * Distributed under the terms of the MIT License.
  *
  * Copyright 2001, Travis Geiselbrecht. All rights reserved.
@@ -1802,7 +1802,7 @@
 
 			id = vm_map_file(team->id, regionName, (void **)&regionAddress,
 				B_EXACT_ADDRESS, fileUpperBound,
-				B_READ_AREA | B_WRITE_AREA, REGION_PRIVATE_MAP,
+				B_READ_AREA | B_WRITE_AREA, REGION_PRIVATE_MAP, false,
 				fd, ROUNDOWN(programHeaders[i].p_offset, B_PAGE_SIZE));
 			if (id < B_OK) {
 				dprintf("error mapping file data: %s!\n", strerror(id));
@@ -1850,7 +1850,7 @@
 
 			id = vm_map_file(team->id, regionName, (void **)&regionAddress,
 				B_EXACT_ADDRESS, segmentSize,
-				B_READ_AREA | B_EXECUTE_AREA, REGION_PRIVATE_MAP,
+				B_READ_AREA | B_EXECUTE_AREA, REGION_PRIVATE_MAP, false,
 				fd, ROUNDOWN(programHeaders[i].p_offset, B_PAGE_SIZE));
 			if (id < B_OK) {
 				dprintf("error mapping file text: %s!\n", strerror(id));

Modified: haiku/trunk/src/system/kernel/vm/vm.cpp
===================================================================
--- haiku/trunk/src/system/kernel/vm/vm.cpp	2009-06-19 02:06:30 UTC (rev 31112)
+++ haiku/trunk/src/system/kernel/vm/vm.cpp	2009-06-19 08:23:11 UTC (rev 31113)
@@ -1,6 +1,6 @@
 /*
  * Copyright 2009, Ingo Weinhold, ingo_weinhold at gmx.de.
- * Copyright 2002-2008, Axel Dörfler, axeld at pinc-software.de.
+ * Copyright 2002-2009, Axel Dörfler, axeld at pinc-software.de.
  * Distributed under the terms of the MIT License.
  *
  * Copyright 2001-2002, Travis Geiselbrecht. All rights reserved.
@@ -2252,8 +2252,8 @@
 */
 static area_id
 _vm_map_file(team_id team, const char* name, void** _address,
-	uint32 addressSpec, size_t size, uint32 protection, uint32 mapping, int fd,
-	off_t offset, bool kernel)
+	uint32 addressSpec, size_t size, uint32 protection, uint32 mapping,
+	bool unmapAddressRange, int fd, off_t offset, bool kernel)
 {
 	// TODO: for binary files, we want to make sure that they get the
 	//	copy of a file at a given time, ie. later changes should not
@@ -2267,10 +2267,11 @@
 
 	if (mapping == REGION_NO_PRIVATE_MAP)
 		protection |= B_SHARED_AREA;
+	if (addressSpec != B_EXACT_ADDRESS)
+		unmapAddressRange = false;
 
 	if (fd < 0) {
-		uint32 flags = addressSpec == B_EXACT_ADDRESS
-			? CREATE_AREA_UNMAP_ADDRESS_RANGE : 0;
+		uint32 flags = unmapAddressRange ? CREATE_AREA_UNMAP_ADDRESS_RANGE : 0;
 		return vm_create_anonymous_area(team, name, _address, addressSpec, size,
 			B_NO_LOCK, protection, flags, kernel);
 	}
@@ -2345,7 +2346,7 @@
 	vm_area* area;
 	status = map_backing_store(locker.AddressSpace(), cache, _address,
 		offset, size, addressSpec, 0, protection, mapping, &area, name,
-		addressSpec == B_EXACT_ADDRESS, kernel);
+		unmapAddressRange, kernel);
 
 	if (status != B_OK || mapping == REGION_PRIVATE_MAP) {
 		// map_backing_store() cannot know we no longer need the ref
@@ -2374,13 +2375,14 @@
 
 area_id
 vm_map_file(team_id aid, const char* name, void** address, uint32 addressSpec,
-	addr_t size, uint32 protection, uint32 mapping, int fd, off_t offset)
+	addr_t size, uint32 protection, uint32 mapping, bool unmapAddressRange,
+	int fd, off_t offset)
 {
 	if (!arch_vm_supports_protection(protection))
 		return B_NOT_SUPPORTED;
 
 	return _vm_map_file(aid, name, address, addressSpec, size, protection,
-		mapping, fd, offset, true);
+		mapping, unmapAddressRange, fd, offset, true);
 }
 
 
@@ -6148,7 +6150,8 @@
 
 area_id
 _user_map_file(const char* userName, void** userAddress, int addressSpec,
-	size_t size, int protection, int mapping, int fd, off_t offset)
+	size_t size, int protection, int mapping, bool unmapAddressRange, int fd,
+	off_t offset)
 {
 	char name[B_OS_NAME_LENGTH];
 	void* address;
@@ -6173,7 +6176,8 @@
 		| (protection & B_WRITE_AREA ? B_KERNEL_WRITE_AREA : 0);
 
 	area = _vm_map_file(vm_current_user_address_space_id(), name, &address,
-		addressSpec, size, protection, mapping, fd, offset, false);
+		addressSpec, size, protection, mapping, unmapAddressRange, fd, offset,
+		false);
 	if (area < B_OK)
 		return area;
 

Modified: haiku/trunk/src/system/libroot/posix/sys/mman.cpp
===================================================================
--- haiku/trunk/src/system/libroot/posix/sys/mman.cpp	2009-06-19 02:06:30 UTC (rev 31112)
+++ haiku/trunk/src/system/libroot/posix/sys/mman.cpp	2009-06-19 08:23:11 UTC (rev 31113)
@@ -125,7 +125,7 @@
 
 	// ask the kernel to map
 	area_id area = _kern_map_file("mmap area", &address, addressSpec,
-		length, areaProtection, mapping, fd, offset);
+		length, areaProtection, mapping, true, fd, offset);
 	if (area < 0) {
 		errno = area;
 		return MAP_FAILED;

Modified: haiku/trunk/src/system/runtime_loader/images.cpp
===================================================================
--- haiku/trunk/src/system/runtime_loader/images.cpp	2009-06-19 02:06:30 UTC (rev 31112)
+++ haiku/trunk/src/system/runtime_loader/images.cpp	2009-06-19 08:23:11 UTC (rev 31113)
@@ -1,6 +1,6 @@
 /*
  * Copyright 2008-2009, Ingo Weinhold, ingo_weinhold at gmx.de.
- * Copyright 2003-2008, Axel Dörfler, axeld at pinc-software.de.
+ * Copyright 2003-2009, Axel Dörfler, axeld at pinc-software.de.
  * Distributed under the terms of the MIT License.
  *
  * Copyright 2002, Manuel J. Petit. All rights reserved.
@@ -306,7 +306,8 @@
 			image->regions[i].id = _kern_map_file(regionName,
 				(void**)&loadAddress, addressSpecifier,
 				image->regions[i].vmsize, B_READ_AREA | B_WRITE_AREA,
-				REGION_PRIVATE_MAP, fd, PAGE_BASE(image->regions[i].fdstart));
+				REGION_PRIVATE_MAP, false, fd,
+				PAGE_BASE(image->regions[i].fdstart));
 
 			if (image->regions[i].id < 0)
 				return image->regions[i].id;




More information about the Haiku-commits mailing list