svn commit: r225699 - head/libexec/rtld-elf
Konstantin Belousov
kib at FreeBSD.org
Tue Sep 20 21:49:55 UTC 2011
Author: kib
Date: Tue Sep 20 21:49:54 2011
New Revision: 225699
URL: http://svn.freebsd.org/changeset/base/225699
Log:
Restore the writing of the .bss sections of the dsos (not the main
executable) after r190885. The whole region for the dso is mmaped with
MAP_NOCORE flag, doing only mprotect(2) over .bss prevented it from
writing .bss to core files.
Revert the optimization of using mprotect(2) to establish .bss, overlap
the section with mmap(2).
Reported by: attilio
Reviewed by: attilio, emaste
Approved by: re (bz)
MFC after: 2 weeks
Modified:
head/libexec/rtld-elf/map_object.c
Modified: head/libexec/rtld-elf/map_object.c
==============================================================================
--- head/libexec/rtld-elf/map_object.c Tue Sep 20 20:27:26 2011 (r225698)
+++ head/libexec/rtld-elf/map_object.c Tue Sep 20 21:49:54 2011 (r225699)
@@ -215,8 +215,9 @@ map_object(int fd, const char *path, con
bss_vlimit = round_page(segs[i]->p_vaddr + segs[i]->p_memsz);
bss_addr = mapbase + (bss_vaddr - base_vaddr);
if (bss_vlimit > bss_vaddr) { /* There is something to do */
- if (mprotect(bss_addr, bss_vlimit - bss_vaddr, data_prot) == -1) {
- _rtld_error("%s: mprotect of bss failed: %s", path,
+ if (mmap(bss_addr, bss_vlimit - bss_vaddr, data_prot,
+ data_flags | MAP_ANON, -1, 0) == (caddr_t)-1) {
+ _rtld_error("%s: mmap of bss failed: %s", path,
strerror(errno));
return NULL;
}
More information about the svn-src-head
mailing list