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