]> Cypherpunks repositories - gostls13.git/commitdiff
[release-branch.go1.12] cmd/link/internal/ld: bump macOS and macOS SDK version to...
authorElias Naur <mail@eliasnaur.com>
Wed, 8 May 2019 07:36:07 +0000 (09:36 +0200)
committerBrad Fitzpatrick <bradfitz@golang.org>
Wed, 8 May 2019 17:04:37 +0000 (17:04 +0000)
Satisfies the Apple Notary.

Fixes #30526

Change-Id: I91cf2d706a3ebe79bafdb759a0d32266ed6b9096
Reviewed-on: https://go-review.googlesource.com/c/go/+/175918
Run-TryBot: Elias Naur <mail@eliasnaur.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
Reviewed-on: https://go-review.googlesource.com/c/go/+/175919
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/cmd/link/internal/ld/macho.go
src/cmd/link/link_test.go

index b935814ff0a432a4232186139f646e7cd6e8ff77..fe6f0bcd9d1ee5e6949b4d098983fc87c6577da6 100644 (file)
@@ -662,9 +662,11 @@ func Asmbmacho(ctxt *Link) {
                // and we can assume OS X.
                //
                // See golang.org/issues/12941.
+               //
+               // The version must be at least 10.9; see golang.org/issues/30488.
                ml := newMachoLoad(ctxt.Arch, LC_VERSION_MIN_MACOSX, 2)
-               ml.data[0] = 10<<16 | 7<<8 | 0<<0 // OS X version 10.7.0
-               ml.data[1] = 10<<16 | 7<<8 | 0<<0 // SDK 10.7.0
+               ml.data[0] = 10<<16 | 9<<8 | 0<<0 // OS X version 10.9.0
+               ml.data[1] = 10<<16 | 9<<8 | 0<<0 // SDK 10.9.0
        }
 
        a := machowrite(ctxt.Arch, ctxt.Out, ctxt.LinkMode)
index e0aae0288491c5a3a87eb3bf8f6d2ee17b2dd15e..dbfae6caf7b8ce656a5b4e094e2c31669661fd98 100644 (file)
@@ -1,6 +1,7 @@
 package main
 
 import (
+       "debug/macho"
        "internal/testenv"
        "io/ioutil"
        "os"
@@ -171,3 +172,67 @@ main.x: relocation target main.zero not defined
                t.Fatalf("want:\n%sgot:\n%s", want, got)
        }
 }
+
+var testMacOSVersionSrc = `
+package main
+func main() { }
+`
+
+func TestMacOSVersion(t *testing.T) {
+       testenv.MustHaveGoBuild(t)
+
+       tmpdir, err := ioutil.TempDir("", "TestMacOSVersion")
+       if err != nil {
+               t.Fatal(err)
+       }
+       defer os.RemoveAll(tmpdir)
+
+       src := filepath.Join(tmpdir, "main.go")
+       err = ioutil.WriteFile(src, []byte(testMacOSVersionSrc), 0666)
+       if err != nil {
+               t.Fatal(err)
+       }
+
+       exe := filepath.Join(tmpdir, "main")
+       cmd := exec.Command(testenv.GoToolPath(t), "build", "-ldflags=-linkmode=internal", "-o", exe, src)
+       cmd.Env = append(os.Environ(),
+               "CGO_ENABLED=0",
+               "GOOS=darwin",
+               "GOARCH=amd64",
+       )
+       if out, err := cmd.CombinedOutput(); err != nil {
+               t.Fatalf("%v: %v:\n%s", cmd.Args, err, out)
+       }
+       exef, err := os.Open(exe)
+       if err != nil {
+               t.Fatal(err)
+       }
+       exem, err := macho.NewFile(exef)
+       if err != nil {
+               t.Fatal(err)
+       }
+       found := false
+       const LC_VERSION_MIN_MACOSX = 0x24
+       checkMin := func(ver uint32) {
+               major, minor := (ver>>16)&0xff, (ver>>8)&0xff
+               if major != 10 || minor < 9 {
+                       t.Errorf("LC_VERSION_MIN_MACOSX version %d.%d < 10.9", major, minor)
+               }
+       }
+       for _, cmd := range exem.Loads {
+               raw := cmd.Raw()
+               type_ := exem.ByteOrder.Uint32(raw)
+               if type_ != LC_VERSION_MIN_MACOSX {
+                       continue
+               }
+               osVer := exem.ByteOrder.Uint32(raw[8:])
+               checkMin(osVer)
+               sdkVer := exem.ByteOrder.Uint32(raw[12:])
+               checkMin(sdkVer)
+               found = true
+               break
+       }
+       if !found {
+               t.Errorf("no LC_VERSION_MIN_MACOSX load command found")
+       }
+}