// Inferno libmach/bootexec.h // http://code.google.com/p/inferno-os/source/browse/utils/libmach/bootexec.h // // Copyright © 1994-1999 Lucent Technologies Inc. // Power PC support Copyright © 1995-2004 C H Forsyth (forsyth@terzarima.net). // Portions Copyright © 1997-1999 Vita Nuova Limited. // Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com). // Revisions Copyright © 2000-2004 Lucent Technologies Inc. and others. // Portions Copyright © 2009 The Go Authors. All rights reserved. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. struct coffsect { char name[8]; uint32 phys; uint32 virt; uint32 size; uint32 fptr; uint32 fptrreloc; uint32 fptrlineno; uint32 nrelocnlineno; uint32 flags; }; /* * proprietary exec headers, needed to bootstrap various machines */ struct mipsexec { short mmagic; /* (0x160) mips magic number */ short nscns; /* (unused) number of sections */ int32 timdat; /* (unused) time & date stamp */ int32 symptr; /* offset to symbol table */ int32 nsyms; /* size of symbol table */ short opthdr; /* (0x38) sizeof(optional hdr) */ short pcszs; /* flags */ short amagic; /* see above */ short vstamp; /* version stamp */ int32 tsize; /* text size in bytes */ int32 dsize; /* initialized data */ int32 bsize; /* uninitialized data */ int32 mentry; /* entry pt. */ int32 text_start; /* base of text used for this file */ int32 data_start; /* base of data used for this file */ int32 bss_start; /* base of bss used for this file */ int32 gprmask; /* general purpose register mask */ union{ int32 cprmask[4]; /* co-processor register masks */ int32 pcsize; }; int32 gp_value; /* the gp value used for this object */ }; struct mips4kexec { struct mipsexec h; struct coffsect itexts; struct coffsect idatas; struct coffsect ibsss; }; struct sparcexec { short sjunk; /* dynamic bit and version number */ short smagic; /* 0407 */ uint32 stext; uint32 sdata; uint32 sbss; uint32 ssyms; uint32 sentry; uint32 strsize; uint32 sdrsize; }; struct nextexec { /* UNUSED struct nexthdr{ uint32 nmagic; uint32 ncputype; uint32 ncpusubtype; uint32 nfiletype; uint32 ncmds; uint32 nsizeofcmds; uint32 nflags; }; struct nextcmd{ uint32 cmd; uint32 cmdsize; uchar segname[16]; uint32 vmaddr; uint32 vmsize; uint32 fileoff; uint32 filesize; uint32 maxprot; uint32 initprot; uint32 nsects; uint32 flags; }textc; struct nextsect{ char sectname[16]; char segname[16]; uint32 addr; uint32 size; uint32 offset; uint32 align; uint32 reloff; uint32 nreloc; uint32 flags; uint32 reserved1; uint32 reserved2; }texts; struct nextcmd datac; struct nextsect datas; struct nextsect bsss; struct nextsym{ uint32 cmd; uint32 cmdsize; uint32 symoff; uint32 nsyms; uint32 spoff; uint32 pcoff; }symc; */ }; struct i386exec { /* UNUSED struct i386coff{ uint32 isectmagic; uint32 itime; uint32 isyms; uint32 insyms; uint32 iflags; }; struct i386hdr{ uint32 imagic; uint32 itextsize; uint32 idatasize; uint32 ibsssize; uint32 ientry; uint32 itextstart; uint32 idatastart; }; struct coffsect itexts; struct coffsect idatas; struct coffsect ibsss; struct coffsect icomments; */ };