mirror of https://github.com/golang/go.git
92 lines
2.4 KiB
Go
92 lines
2.4 KiB
Go
// 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},
|
|
}
|