diff options
author | Elias Naur <mail@eliasnaur.com> | 2019-05-08 09:36:07 +0200 |
---|---|---|
committer | Brad Fitzpatrick <bradfitz@golang.org> | 2019-05-08 17:04:37 +0000 |
commit | cdb776529ea7a4beac4c8a4d6a9ce149045bd6b5 (patch) | |
tree | 681f229222e4fd5436e2bfb8c8a09269ca5dea41 | |
parent | 3a1b4e75f8b6c1b57db73bccf7ca871bf1a97ca9 (diff) | |
download | go-cdb776529ea7a4beac4c8a4d6a9ce149045bd6b5.tar.gz go-cdb776529ea7a4beac4c8a4d6a9ce149045bd6b5.zip |
[release-branch.go1.12] cmd/link/internal/ld: bump macOS and macOS SDK version to 10.9
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>
-rw-r--r-- | src/cmd/link/internal/ld/macho.go | 6 | ||||
-rw-r--r-- | src/cmd/link/link_test.go | 65 |
2 files changed, 69 insertions, 2 deletions
diff --git a/src/cmd/link/internal/ld/macho.go b/src/cmd/link/internal/ld/macho.go index b935814ff0..fe6f0bcd9d 100644 --- a/src/cmd/link/internal/ld/macho.go +++ b/src/cmd/link/internal/ld/macho.go @@ -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) diff --git a/src/cmd/link/link_test.go b/src/cmd/link/link_test.go index e0aae02884..dbfae6caf7 100644 --- a/src/cmd/link/link_test.go +++ b/src/cmd/link/link_test.go @@ -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") + } +} |