mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/link: avoid writing to read-only memory in addstrdata
When the linker's -X flag is used, it will overwrite the symbol's content (sym.P) in addstrdata. The symbol's content may be in read-only memory, in which case overwriting it will fault. Do copy-on-write to fix this. Change-Id: I34d583f44c30d187042757e19a14c1ef7d3e613c Reviewed-on: https://go-review.googlesource.com/c/go/+/173937 Run-TryBot: Cherry Zhang <cherryyz@google.com> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Reviewed-by: Than McIntosh <thanm@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
41d1bf0efc
commit
93fcebaf31
2 changed files with 32 additions and 0 deletions
|
|
@ -229,3 +229,31 @@ func TestBuildFortvOS(t *testing.T) {
|
|||
t.Fatalf("%v: %v:\n%s", link.Args, err, out)
|
||||
}
|
||||
}
|
||||
|
||||
var testXFlagSrc = `
|
||||
package main
|
||||
var X = "hello"
|
||||
var Z = [99999]int{99998:12345} // make it large enough to be mmaped
|
||||
func main() { println(X) }
|
||||
`
|
||||
|
||||
func TestXFlag(t *testing.T) {
|
||||
testenv.MustHaveGoBuild(t)
|
||||
|
||||
tmpdir, err := ioutil.TempDir("", "TestXFlag")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer os.RemoveAll(tmpdir)
|
||||
|
||||
src := filepath.Join(tmpdir, "main.go")
|
||||
err = ioutil.WriteFile(src, []byte(testXFlagSrc), 0666)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
cmd := exec.Command(testenv.GoToolPath(t), "build", "-ldflags=-X=main.X=meow", "-o", filepath.Join(tmpdir, "main"), src)
|
||||
if out, err := cmd.CombinedOutput(); err != nil {
|
||||
t.Errorf("%v: %v:\n%s", cmd.Args, err, out)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue