// Copyright 2014 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. /* * Plan 9 a.out constants and data structures */ package plan9obj import ( "bytes" "encoding/binary" ) // Plan 9 Program header. type prog struct { Magic uint32 /* magic number */ Text uint32 /* size of text segment */ Data uint32 /* size of initialized data */ Bss uint32 /* size of uninitialized data */ Syms uint32 /* size of symbol table */ Entry uint32 /* entry point */ Spsz uint32 /* size of pc/sp offset table */ Pcsz uint32 /* size of pc/line number table */ } // Plan 9 symbol table entries. type sym struct { value uint64 typ byte name []byte } const ( hsize = 4 * 8 _HDR_MAGIC = 0x00008000 /* header expansion */ ) func magic(f, b int) string { buf := new(bytes.Buffer) var i uint32 = uint32((f) | ((((4 * (b)) + 0) * (b)) + 7)) binary.Write(buf, binary.BigEndian, i) return string(buf.Bytes()) } var ( _A_MAGIC = magic(0, 8) /* 68020 (retired) */ _I_MAGIC = magic(0, 11) /* intel 386 */ _J_MAGIC = magic(0, 12) /* intel 960 (retired) */ _K_MAGIC = magic(0, 13) /* sparc */ _V_MAGIC = magic(0, 16) /* mips 3000 BE */ _X_MAGIC = magic(0, 17) /* att dsp 3210 (retired) */ _M_MAGIC = magic(0, 18) /* mips 4000 BE */ _D_MAGIC = magic(0, 19) /* amd 29000 (retired) */ _E_MAGIC = magic(0, 20) /* arm */ _Q_MAGIC = magic(0, 21) /* powerpc */ _N_MAGIC = magic(0, 22) /* mips 4000 LE */ _L_MAGIC = magic(0, 23) /* dec alpha (retired) */ _P_MAGIC = magic(0, 24) /* mips 3000 LE */ _U_MAGIC = magic(0, 25) /* sparc64 (retired) */ _S_MAGIC = magic(_HDR_MAGIC, 26) /* amd64 */ _T_MAGIC = magic(_HDR_MAGIC, 27) /* powerpc64 */ _R_MAGIC = magic(_HDR_MAGIC, 28) /* arm64 */ ) type ExecTable struct { Magic string Ptrsz int Hsize uint32 } var exectab = []ExecTable{ {_A_MAGIC, 4, hsize}, {_I_MAGIC, 4, hsize}, {_J_MAGIC, 4, hsize}, {_K_MAGIC, 4, hsize}, {_V_MAGIC, 4, hsize}, {_X_MAGIC, 4, hsize}, {_M_MAGIC, 4, hsize}, {_D_MAGIC, 4, hsize}, {_E_MAGIC, 4, hsize}, {_Q_MAGIC, 4, hsize}, {_N_MAGIC, 4, hsize}, {_L_MAGIC, 4, hsize}, {_P_MAGIC, 4, hsize}, {_U_MAGIC, 4, hsize}, {_S_MAGIC, 8, hsize + 8}, {_T_MAGIC, 8, hsize + 8}, {_R_MAGIC, 8, hsize + 8}, }