]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/link: add LC_VERSION_MIN_MACOSX to linkmode=internal OS X binaries
authorRuss Cox <rsc@golang.org>
Wed, 13 Jan 2016 14:59:16 +0000 (09:59 -0500)
committerRuss Cox <rsc@golang.org>
Wed, 13 Jan 2016 19:06:40 +0000 (19:06 +0000)
This makes lldb willing to debug them.
The minimum version is hard-coded at OS X 10.7,
because that is the minimum that Go requires.
For more control over the version, users can
use linkmode=external and pass the relevant flags to the host linker.

Fixes #12941.

Change-Id: I20027be8aa034d07dd2a3326828f75170afe905f
Reviewed-on: https://go-review.googlesource.com/18588
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/cmd/link/internal/ld/macho.go

index af933610008103e72a75b754d3458f371107a53c..1c7f3a0d824cd93f35e7e9b7456854c5105f4467 100644 (file)
@@ -566,6 +566,25 @@ func Asmbmacho() {
                }
        }
 
+       if Linkmode == LinkInternal {
+               // For lldb, must say LC_VERSION_MIN_MACOSX or else
+               // it won't know that this Mach-O binary is from OS X
+               // (could be iOS or WatchOS intead).
+               // Go on iOS uses linkmode=external, and linkmode=external
+               // adds this itself. So we only need this code for linkmode=internal
+               // and we can assume OS X.
+               //
+               // See golang.org/issues/12941.
+               const (
+                       LC_VERSION_MIN_MACOSX   = 0x24
+                       LC_VERSION_MIN_IPHONEOS = 0x25
+                       LC_VERSION_MIN_WATCHOS  = 0x30
+               )
+               ml := newMachoLoad(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
+       }
+
        // TODO: dwarf headers go in ms too
        if Debug['s'] == 0 {
                dwarfaddmachoheaders(ms)