Commit f481afae authored by Russ Cox's avatar Russ Cox

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
parent d4e6df98
...@@ -153,6 +153,7 @@ $(CGOTARG).so: $(GCC_OFILES) $(CGO_DEPS) ...@@ -153,6 +153,7 @@ $(CGOTARG).so: $(GCC_OFILES) $(CGO_DEPS)
$(pkgdir)/$(CGOTARG).so: $(CGOTARG).so $(pkgdir)/$(CGOTARG).so: $(CGOTARG).so
@test -d $(QUOTED_GOROOT)/pkg && mkdir -p $(pkgdir) @test -d $(QUOTED_GOROOT)/pkg && mkdir -p $(pkgdir)
rm -f "$@"
cp $(CGOTARG).so "$@" cp $(CGOTARG).so "$@"
ifneq ($(CGOFILES),) ifneq ($(CGOFILES),)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment