cmd/link: fix mode parameter to fallocate on Linux

Fix the mode parameter to fallocate on Linux which is the operation mode
and not the file mode as with os.OpenFile.

Also handle syscall.EINTR.

Fixes #38950

Change-Id: Ieed20d9ab5c8a49be51c9f9a42b7263f394a5261
Reviewed-on: https://go-review.googlesource.com/c/go/+/232805
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Reviewed-by: Jeremy Faller <jeremy@golang.org>
This commit is contained in:
Steven Hartland 2020-05-08 12:09:00 +00:00 committed by Cherry Zhang
parent 57e32c4fbd
commit d40b0a1494
2 changed files with 7 additions and 3 deletions

View File

@ -7,5 +7,5 @@ package ld
import "syscall"
func (out *OutBuf) fallocate(size uint64) error {
return syscall.Fallocate(int(out.f.Fd()), outbufMode, 0, int64(size))
return syscall.Fallocate(int(out.f.Fd()), 0, 0, int64(size))
}

View File

@ -10,8 +10,12 @@ import (
"syscall"
)
func (out *OutBuf) Mmap(filesize uint64) error {
err := out.fallocate(filesize)
func (out *OutBuf) Mmap(filesize uint64) (err error) {
for {
if err = out.fallocate(filesize); err != syscall.EINTR {
break
}
}
if err != nil {
// Some file systems do not support fallocate. We ignore that error as linking
// can still take place, but you might SIGBUS when you write to the mmapped