Clear the NOCORE flag on any text mappings that the RTLD modifies due to
authorMatthew Dillon <dillon@dragonflybsd.org>
Thu, 18 Nov 2004 10:01:47 +0000 (10:01 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Thu, 18 Nov 2004 10:01:47 +0000 (10:01 +0000)
commit4b89341ebf587a8ef2e9349b54e7973f30bd757a
tree0b6f07578d4201298ac1b88511c24690b4dac4c0
parentef1537e779e0aa0b2467190238887530b929dd87
Clear the NOCORE flag on any text mappings that the RTLD modifies due to
text relocations or compacted BSS areas.  Otherwise the checkpt code will
not write out the modified areas.

Also note that if you mmap() a file MAP_PRIVATE, then modify portions of it
so the mapping is changed from OBJT_VNODE to OBJT_DEFAULT->OBJT_VNODE,
the current ELF coredump code will *NOT* write out a file handle record for
the backing vnode.  This means that the entire vm_map_entry containing
the modified portions must be marked as COREable if it was previously mapped
NOCORE.

In the case of the RTLD code the text area is mapped read-only.  The text
area is temporarily remapped read-write for the relocation pass and so
the whole area is still represented by a single vm_map_entry and thus the
whole area must be marked COREable.  For the BSS fixup only the last page
is remapped read-write and so it gets its own private vm_map_entry and
thus only the last page must be marked COREable.

The DEFAULT->VNODE backing issue is actually a bug in the elf coredump code,
but even if it were fixed core dump sizes would not get much smaller because
relocations tend to be all over the map.

Checkpt-Nonworking-Bug-Reported-by: Michael Neumann <mneumann@ntecs.de>
libexec/rtld-elf/map_object.c
libexec/rtld-elf/rtld.c