if err != nil {
Exitf("%s: parsing Mach-O header failed: %v", os.Args[0], err)
}
- load, err := peekMachoPlatform(exem)
- if err != nil {
- Exitf("%s: failed to parse Mach-O load commands: %v", os.Args[0], err)
- }
// Only macOS supports unmapped segments such as our __DWARF segment.
- if load == nil || load.platform == PLATFORM_MACOS {
+ if machoPlatform == PLATFORM_MACOS {
if err := machoCombineDwarf(ctxt, exef, exem, dsym, combinedOutput); err != nil {
Exitf("%s: combining dwarf failed: %v", os.Args[0], err)
}
var load []MachoLoad
+var machoPlatform MachoPlatform
+
var seg [16]MachoSeg
var nseg int
return
}
+ // Copy platform load command.
+ for _, h := range hostobj {
+ load, err := hostobjMachoPlatform(&h)
+ if err != nil {
+ Exitf("%v", err)
+ }
+ if load != nil {
+ machoPlatform = load.platform
+ ml := newMachoLoad(ctxt.Arch, load.cmd.type_, uint32(len(load.cmd.data)))
+ copy(ml.data, load.cmd.data)
+ break
+ }
+ }
+ if machoPlatform == 0 {
+ machoPlatform = PLATFORM_MACOS
+ if ctxt.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 instead).
+ // 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.
+ 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
+ }
+ }
+
// empirically, string table must begin with " \x00".
s := ctxt.Syms.Lookup(".machosymstr", 0)
}
}
}
- foundLoad := false
- for _, h := range hostobj {
- load, err := hostobjMachoPlatform(&h)
- if err != nil {
- Exitf("%v", err)
- }
- if load != nil {
- ml := newMachoLoad(ctxt.Arch, load.cmd.type_, uint32(len(load.cmd.data)))
- copy(ml.data, load.cmd.data)
- foundLoad = true
- break
- }
- }
- if !foundLoad && ctxt.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 instead).
- // 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.
- 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
- }
a := machowrite(ctxt.Arch, ctxt.Out, ctxt.LinkMode)
if int32(a) > HEADR {