summaryrefslogtreecommitdiff
path: root/libgo/go/debug/plan9obj/plan9obj.go
diff options
context:
space:
mode:
Diffstat (limited to 'libgo/go/debug/plan9obj/plan9obj.go')
-rw-r--r--libgo/go/debug/plan9obj/plan9obj.go91
1 files changed, 91 insertions, 0 deletions
diff --git a/libgo/go/debug/plan9obj/plan9obj.go b/libgo/go/debug/plan9obj/plan9obj.go
new file mode 100644
index 00000000000..4e3b08f4164
--- /dev/null
+++ b/libgo/go/debug/plan9obj/plan9obj.go
@@ -0,0 +1,91 @@
+// 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},
+}