PERFORCE change 156629 for review

Robert Watson rwatson at FreeBSD.org
Sat Jan 24 16:50:23 PST 2009


http://perforce.freebsd.org/chv.cgi?CH=156629

Change 156629 by rwatson at rwatson_freebsd_capabilities on 2009/01/25 00:49:32

	When mapping an object that requires a specific virtual address,
	use MAP_FIXED in case an earlier object has already been mapped
	at a fixed address and disturbs mmap's heuristics for placing
	objects automatically.

Affected files ...

.. //depot/projects/trustedbsd/capabilities/src/libexec/rtld-elf/map_object.c#2 edit

Differences ...

==== //depot/projects/trustedbsd/capabilities/src/libexec/rtld-elf/map_object.c#2 (text+ko) ====

@@ -83,6 +83,7 @@
     Elf_Addr bss_vaddr;
     Elf_Addr bss_vlimit;
     caddr_t bss_addr;
+    int mmap_flags;
 
     hdr = get_elf_header(fd, path);
     if (hdr == NULL)
@@ -153,8 +154,11 @@
     mapsize = base_vlimit - base_vaddr;
     base_addr = hdr->e_type == ET_EXEC ? (caddr_t) base_vaddr : NULL;
 
+    mmap_flags = convert_flags(segs[0]->p_flags);
+    if (base_addr != NULL)
+	mmap_flags |= MAP_FIXED;
     mapbase = mmap(base_addr, mapsize, convert_prot(segs[0]->p_flags),
-      convert_flags(segs[0]->p_flags), fd, base_offset);
+      mmap_flags, fd, base_offset);
     if (mapbase == (caddr_t) -1) {
 	_rtld_error("%s: mmap of entire address space failed: %s",
 	  path, strerror(errno));


More information about the p4-projects mailing list