• Russ Cox's avatar
    Make.pkg: remove .so before installing new one · f481afae
    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
Make.pkg 4.53 KB