}
}
}
- load, err := hostobjMachoPlatform(hostobj)
- if err != nil {
- Exitf("%v", err)
+ 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 load != nil {
- ml := newMachoLoad(ctxt.Arch, load.cmd.type_, uint32(len(load.cmd.data)))
- copy(ml.data, load.cmd.data)
- } else if ctxt.LinkMode == LinkInternal {
+ 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).
}
// hostobjMachoPlatform returns the first platform load command found
-// in the host objects, if any.
-func hostobjMachoPlatform(hostobj []Hostobj) (*MachoPlatformLoad, error) {
- for _, h := range hostobj {
- f, err := os.Open(h.file)
- if err != nil {
- return nil, fmt.Errorf("%s: failed to open host object: %v\n", h.file, err)
- }
- defer f.Close()
- sr := io.NewSectionReader(f, h.off, h.length)
- m, err := macho.NewFile(sr)
- if err != nil {
- // Not a valid Mach-O file.
- return nil, nil
- }
- load, err := peekMachoPlatform(m)
- if err != nil {
- return nil, err
- }
- if load != nil {
- return load, nil
- }
+// in the host object, if any.
+func hostobjMachoPlatform(h *Hostobj) (*MachoPlatformLoad, error) {
+ f, err := os.Open(h.file)
+ if err != nil {
+ return nil, fmt.Errorf("%s: failed to open host object: %v\n", h.file, err)
}
- return nil, nil
+ defer f.Close()
+ sr := io.NewSectionReader(f, h.off, h.length)
+ m, err := macho.NewFile(sr)
+ if err != nil {
+ // Not a valid Mach-O file.
+ return nil, nil
+ }
+ return peekMachoPlatform(m)
}
// peekMachoPlatform returns the first LC_VERSION_MIN_* or LC_BUILD_VERSION