]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/link: fix mode parameter to fallocate on Linux
authorSteven Hartland <steven.hartland@multiplay.co.uk>
Fri, 8 May 2020 12:09:00 +0000 (12:09 +0000)
committerCherry Zhang <cherryyz@google.com>
Mon, 11 May 2020 14:21:36 +0000 (14:21 +0000)
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>
src/cmd/link/internal/ld/outbuf_linux.go
src/cmd/link/internal/ld/outbuf_mmap.go

index 93e621a70f937ac3fbe62adf5944e86c25222991..bd9a0c6761c563ed520dd7f9835d5b06ca629ae6 100644 (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))
 }
index e6ee041abbc92a82553d4a71f2e4faf055c38df9..e2e50cc84f0dd89d37e72105647b2d27250a25d8 100644 (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