[dev.link] cmd/link: fix mmapping OutBuf on windows

We got the permissions wrong on the mmapped region.

Change-Id: Ica6372fd9d9a787ab20a763e5785fb9fb34ff623
Reviewed-on: https://go-review.googlesource.com/c/go/+/226366
Run-TryBot: Jeremy Faller <jeremy@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
This commit is contained in:
Jeremy Faller 2020-03-30 10:45:26 -04:00
parent 1cb582fe02
commit 4ec5e7c50f
2 changed files with 31 additions and 1 deletions

View file

@ -0,0 +1,30 @@
// Copyright 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package ld
import (
"os"
"runtime"
"testing"
)
// TestMMap ensures that we can actually mmap on every supported platform.
func TestMMap(t *testing.T) {
switch runtime.GOOS {
default:
t.Skip("unsupported OS")
case "darwin", "dragonfly", "freebsd", "linux", "openbsd", "windows":
}
filename := "foo.out"
ob := NewOutBuf(nil)
if err := ob.Open(filename); err != nil {
t.Errorf("error opening file: %v", err)
}
defer os.RemoveAll(filename)
defer ob.Close()
if err := ob.Mmap(1 << 20); err != nil {
t.Errorf("error mmapping file %v", err)
}
}

View file

@ -17,7 +17,7 @@ func (out *OutBuf) Mmap(filesize uint64) error {
}
low, high := uint32(filesize), uint32(filesize>>32)
fmap, err := syscall.CreateFileMapping(syscall.Handle(out.f.Fd()), nil, syscall.PAGE_READONLY, high, low, nil)
fmap, err := syscall.CreateFileMapping(syscall.Handle(out.f.Fd()), nil, syscall.PAGE_READWRITE, high, low, nil)
if err != nil {
return err
}