Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 25 Jan 2009 00:50:22 GMT
From:      Robert Watson <rwatson@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 156629 for review
Message-ID:  <200901250050.n0P0oMnj019362@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=156629

Change 156629 by rwatson@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));



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200901250050.n0P0oMnj019362>