1
0
mirror of https://github.com/golang/go synced 2024-11-22 01:04:40 -07:00

Make.pkg: remove .so before installing new one

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
This commit is contained in:
Russ Cox 2010-10-01 16:02:18 -04:00
parent d4e6df98f4
commit f481afae53

View File

@ -153,6 +153,7 @@ $(CGOTARG).so: $(GCC_OFILES) $(CGO_DEPS)
$(pkgdir)/$(CGOTARG).so: $(CGOTARG).so
@test -d $(QUOTED_GOROOT)/pkg && mkdir -p $(pkgdir)
rm -f "$@"
cp $(CGOTARG).so "$@"
ifneq ($(CGOFILES),)