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>