-
Russ Cox authored
On Linux, overwriting an mmap'ed file causes all the MAP_PRIVATE pages to get refreshed with the new content, even ones that have been modified by the process that did the mmap. One specific instance of this is that after the dynamic linker has relocated a page from a .so, overwriting the .so will un-relocate it, making the next use of one of the no-longer-relocated addresses incorrect and probably crash the program. Linux must go out of its way to break programs in this way: the pages have already been copied on write, so they're not shared with the file system cache, and it trashes them anyway. The manual says the behavior when the file gets overwritten is "undefined". Removing before copy avoids the undefined behavior. R=iant CC=golang-dev, msolo https://golang.org/cl/2333045
f481afae