From: Russ Cox Date: Wed, 13 Jan 2016 14:59:16 +0000 (-0500) Subject: cmd/link: add LC_VERSION_MIN_MACOSX to linkmode=internal OS X binaries X-Git-Tag: go1.6beta2~7 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=4a0eee2faa3c54dd267c76fe8d8c332cb6badc80;p=gostls13.git cmd/link: add LC_VERSION_MIN_MACOSX to linkmode=internal OS X binaries 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 --- diff --git a/src/cmd/link/internal/ld/macho.go b/src/cmd/link/internal/ld/macho.go index af93361000..1c7f3a0d82 100644 --- a/src/cmd/link/internal/ld/macho.go +++ b/src/cmd/link/internal/ld/macho.go @@ -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)