type dyldInfoCmd … type linkEditDataCmd … type encryptionInfoCmd … type uuidCmd … // machoCombineDwarf merges dwarf info generated by dsymutil into a macho executable. // // With internal linking, DWARF is embedded into the executable, this lets us do the // same for external linking. // exef is the file of the executable with no DWARF. It must have enough room in the macho // header to add the DWARF sections. (Use ld's -headerpad option) // exem is the macho representation of exef. // dsym is the path to the macho file containing DWARF from dsymutil. // outexe is the path where the combined executable should be saved. func machoCombineDwarf(ctxt *Link, exef *os.File, exem *macho.File, dsym, outexe string) error { … } // machoCompressSections tries to compress the DWARF segments in dwarfm, // returning the updated sections and segment contents, nils if the sections // weren't compressed, or an error if there was a problem reading dwarfm. func machoCompressSections(ctxt *Link, dwarfm *macho.File) ([]*macho.Section, []byte, error) { … } // machoCompressSection compresses secBytes if it results in less data. func machoCompressSection(sectBytes []byte) (compressed bool, contents []byte, err error) { … } // machoUpdateSegment updates the load command for a moved segment. // Only the linkedit segment should move, and it should have 0 sections. func machoUpdateSegment(r imacho.LoadCmdUpdater, linkseg *macho.Segment, linkoffset uint64) error { … } func machoUpdateSections(r imacho.LoadCmdUpdater, seg *macho.Segment64, deltaOffset uint64, compressedSects []*macho.Section) error { … } // machoUpdateDwarfHeader updates the DWARF segment load command. func machoUpdateDwarfHeader(r *imacho.LoadCmdUpdater, compressedSects []*macho.Section, dwarfsize uint64, dwarfstart int64, realdwarf *macho.Segment) error { … } func machoUpdateLoadCommand(r imacho.LoadCmdUpdater, linkseg *macho.Segment, linkoffset uint64, cmd interface{ … }