const armag … const armagt … const armagb … const arNameOff … const arNameSize … const arDateOff … const arDateSize … const arUIDOff … const arUIDSize … const arGIDOff … const arGIDSize … const arModeOff … const arModeSize … const arSizeOff … const arSizeSize … const arFmagOff … const arFmagSize … const arHdrSize … const arfmag … // arExportData takes an archive file and returns a ReadSeeker for the // export data in that file. This assumes that there is only one // object in the archive containing export data, which is not quite // what gccgo does; gccgo concatenates together all the export data // for all the objects in the file. In practice that case does not arise. func arExportData(archive io.ReadSeeker) (io.ReadSeeker, error) { … } // standardArExportData returns export data form a standard archive. func standardArExportData(archive io.ReadSeeker) (io.ReadSeeker, error) { … } // elfFromAr tries to get export data from an archive member as an ELF file. // If there is no export data, this returns nil, nil. func elfFromAr(member *io.SectionReader) (io.ReadSeeker, error) { … } // readerAtFromSeeker turns an io.ReadSeeker into an io.ReaderAt. // This is only safe because there won't be any concurrent seeks // while this code is executing. func readerAtFromSeeker(rs io.ReadSeeker) io.ReaderAt { … } type seekerReadAt … func (sra seekerReadAt) ReadAt(p []byte, off int64) (int, error) { … }