diff options
| author | Matthew Dempsky <mdempsky@google.com> | 2016-04-06 12:01:40 -0700 |
|---|---|---|
| committer | Matthew Dempsky <mdempsky@google.com> | 2016-04-07 01:23:25 +0000 |
| commit | c6e11fe03765e3fe1fc68bd794625ca0ecd833be (patch) | |
| tree | c5b131e7c2406496f836a0055e28e9a9ff09eedb /src/cmd/internal/obj | |
| parent | 31cf1c17792d4da9dae2504c703633a0db8072c7 (diff) | |
| download | go-c6e11fe03765e3fe1fc68bd794625ca0ecd833be.tar.xz | |
cmd: add new common architecture representation
Information about CPU architectures (e.g., name, family, byte
ordering, pointer and register size) is currently redundantly
scattered around the source tree. Instead consolidate the basic
information into a single new package cmd/internal/sys.
Also, introduce new sys.I386, sys.AMD64, etc. names for the constants
'8', '6', etc. and replace most uses of the latter. The notable
exceptions are a couple of error messages that still refer to the old
char-based toolchain names and function reltype in cmd/link.
Passes toolstash/buildall.
Change-Id: I8a6f0cbd49577ec1672a98addebc45f767e36461
Reviewed-on: https://go-review.googlesource.com/21623
Reviewed-by: Michael Hudson-Doyle <michael.hudson@canonical.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Diffstat (limited to 'src/cmd/internal/obj')
| -rw-r--r-- | src/cmd/internal/obj/arm/obj5.go | 15 | ||||
| -rw-r--r-- | src/cmd/internal/obj/arm64/obj7.go | 15 | ||||
| -rw-r--r-- | src/cmd/internal/obj/data.go | 2 | ||||
| -rw-r--r-- | src/cmd/internal/obj/link.go | 19 | ||||
| -rw-r--r-- | src/cmd/internal/obj/mips/obj0.go | 22 | ||||
| -rw-r--r-- | src/cmd/internal/obj/objfile.go | 3 | ||||
| -rw-r--r-- | src/cmd/internal/obj/pcln.go | 4 | ||||
| -rw-r--r-- | src/cmd/internal/obj/ppc64/obj9.go | 22 | ||||
| -rw-r--r-- | src/cmd/internal/obj/s390x/objz.go | 15 | ||||
| -rw-r--r-- | src/cmd/internal/obj/sym.go | 3 | ||||
| -rw-r--r-- | src/cmd/internal/obj/x86/asm6.go | 2 | ||||
| -rw-r--r-- | src/cmd/internal/obj/x86/obj6.go | 55 |
12 files changed, 62 insertions, 115 deletions
diff --git a/src/cmd/internal/obj/arm/obj5.go b/src/cmd/internal/obj/arm/obj5.go index 92ffc7b2f3..042e6ab648 100644 --- a/src/cmd/internal/obj/arm/obj5.go +++ b/src/cmd/internal/obj/arm/obj5.go @@ -32,7 +32,7 @@ package arm import ( "cmd/internal/obj" - "encoding/binary" + "cmd/internal/sys" "fmt" "log" "math" @@ -412,7 +412,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) { p.As = AMOVW p.From.Type = obj.TYPE_MEM p.From.Reg = REGG - p.From.Offset = 4 * int64(ctxt.Arch.Ptrsize) // G.panic + p.From.Offset = 4 * int64(ctxt.Arch.PtrSize) // G.panic p.To.Type = obj.TYPE_REG p.To.Reg = REG_R1 @@ -708,9 +708,9 @@ func stacksplit(ctxt *obj.Link, p *obj.Prog, framesize int32) *obj.Prog { p.As = AMOVW p.From.Type = obj.TYPE_MEM p.From.Reg = REGG - p.From.Offset = 2 * int64(ctxt.Arch.Ptrsize) // G.stackguard0 + p.From.Offset = 2 * int64(ctxt.Arch.PtrSize) // G.stackguard0 if ctxt.Cursym.Cfunc { - p.From.Offset = 3 * int64(ctxt.Arch.Ptrsize) // G.stackguard1 + p.From.Offset = 3 * int64(ctxt.Arch.PtrSize) // G.stackguard1 } p.To.Type = obj.TYPE_REG p.To.Reg = REG_R1 @@ -1032,15 +1032,10 @@ var unaryDst = map[obj.As]bool{ } var Linkarm = obj.LinkArch{ - ByteOrder: binary.LittleEndian, - Name: "arm", - Thechar: '5', + Arch: sys.ArchARM, Preprocess: preprocess, Assemble: span5, Follow: follow, Progedit: progedit, UnaryDst: unaryDst, - Minlc: 4, - Ptrsize: 4, - Regsize: 4, } diff --git a/src/cmd/internal/obj/arm64/obj7.go b/src/cmd/internal/obj/arm64/obj7.go index b3de44c029..d833beeb2d 100644 --- a/src/cmd/internal/obj/arm64/obj7.go +++ b/src/cmd/internal/obj/arm64/obj7.go @@ -32,7 +32,7 @@ package arm64 import ( "cmd/internal/obj" - "encoding/binary" + "cmd/internal/sys" "fmt" "log" "math" @@ -56,9 +56,9 @@ func stacksplit(ctxt *obj.Link, p *obj.Prog, framesize int32) *obj.Prog { p.As = AMOVD p.From.Type = obj.TYPE_MEM p.From.Reg = REGG - p.From.Offset = 2 * int64(ctxt.Arch.Ptrsize) // G.stackguard0 + p.From.Offset = 2 * int64(ctxt.Arch.PtrSize) // G.stackguard0 if ctxt.Cursym.Cfunc { - p.From.Offset = 3 * int64(ctxt.Arch.Ptrsize) // G.stackguard1 + p.From.Offset = 3 * int64(ctxt.Arch.PtrSize) // G.stackguard1 } p.To.Type = obj.TYPE_REG p.To.Reg = REG_R1 @@ -778,7 +778,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) { q.As = AMOVD q.From.Type = obj.TYPE_MEM q.From.Reg = REGG - q.From.Offset = 4 * int64(ctxt.Arch.Ptrsize) // G.panic + q.From.Offset = 4 * int64(ctxt.Arch.PtrSize) // G.panic q.To.Type = obj.TYPE_REG q.To.Reg = REG_R1 @@ -941,15 +941,10 @@ var unaryDst = map[obj.As]bool{ } var Linkarm64 = obj.LinkArch{ - ByteOrder: binary.LittleEndian, - Name: "arm64", - Thechar: '7', + Arch: sys.ArchARM64, Preprocess: preprocess, Assemble: span7, Follow: follow, Progedit: progedit, UnaryDst: unaryDst, - Minlc: 4, - Ptrsize: 8, - Regsize: 8, } diff --git a/src/cmd/internal/obj/data.go b/src/cmd/internal/obj/data.go index a3cc178adc..37ab70bb0e 100644 --- a/src/cmd/internal/obj/data.go +++ b/src/cmd/internal/obj/data.go @@ -110,7 +110,7 @@ func (s *LSym) WriteInt(ctxt *Link, off int64, siz int, i int64) { // WriteAddr writes an address of size siz into s at offset off. // rsym and roff specify the relocation for the address. func (s *LSym) WriteAddr(ctxt *Link, off int64, siz int, rsym *LSym, roff int64) { - if siz != ctxt.Arch.Ptrsize { + if siz != ctxt.Arch.PtrSize { ctxt.Diag("WriteAddr: bad address size: %d", siz) } s.prepwrite(ctxt, off, siz) diff --git a/src/cmd/internal/obj/link.go b/src/cmd/internal/obj/link.go index 9c06e8dec6..81a5689aef 100644 --- a/src/cmd/internal/obj/link.go +++ b/src/cmd/internal/obj/link.go @@ -30,7 +30,7 @@ package obj -import "encoding/binary" +import "cmd/internal/sys" // An Addr is an argument to an instruction. // The general forms and their encodings are: @@ -682,15 +682,15 @@ func (ctxt *Link) Diag(format string, args ...interface{}) { // on the stack in the function prologue and so always have a pointer between // the hardware stack pointer and the local variable area. func (ctxt *Link) FixedFrameSize() int64 { - switch ctxt.Arch.Thechar { - case '6', '8': + switch ctxt.Arch.Family { + case sys.AMD64, sys.I386: return 0 - case '9': + case sys.PPC64: // PIC code on ppc64le requires 32 bytes of stack, and it's easier to // just use that much stack always on ppc64x. - return int64(4 * ctxt.Arch.Ptrsize) + return int64(4 * ctxt.Arch.PtrSize) default: - return int64(ctxt.Arch.Ptrsize) + return int64(ctxt.Arch.PtrSize) } } @@ -701,17 +701,12 @@ type SymVer struct { // LinkArch is the definition of a single architecture. type LinkArch struct { - ByteOrder binary.ByteOrder - Name string - Thechar int + *sys.Arch Preprocess func(*Link, *LSym) Assemble func(*Link, *LSym) Follow func(*Link, *LSym) Progedit func(*Link, *Prog) UnaryDst map[As]bool // Instruction takes one operand, a destination. - Minlc int - Ptrsize int - Regsize int } /* executable header types */ diff --git a/src/cmd/internal/obj/mips/obj0.go b/src/cmd/internal/obj/mips/obj0.go index ca7d4465c9..49fc2fb864 100644 --- a/src/cmd/internal/obj/mips/obj0.go +++ b/src/cmd/internal/obj/mips/obj0.go @@ -31,7 +31,7 @@ package mips import ( "cmd/internal/obj" - "encoding/binary" + "cmd/internal/sys" "fmt" "math" ) @@ -336,7 +336,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) { q.As = AMOVV q.From.Type = obj.TYPE_MEM q.From.Reg = REGG - q.From.Offset = 4 * int64(ctxt.Arch.Ptrsize) // G.panic + q.From.Offset = 4 * int64(ctxt.Arch.PtrSize) // G.panic q.To.Type = obj.TYPE_REG q.To.Reg = REG_R1 @@ -559,9 +559,9 @@ func stacksplit(ctxt *obj.Link, p *obj.Prog, framesize int32) *obj.Prog { p.As = AMOVV p.From.Type = obj.TYPE_MEM p.From.Reg = REGG - p.From.Offset = 2 * int64(ctxt.Arch.Ptrsize) // G.stackguard0 + p.From.Offset = 2 * int64(ctxt.Arch.PtrSize) // G.stackguard0 if ctxt.Cursym.Cfunc { - p.From.Offset = 3 * int64(ctxt.Arch.Ptrsize) // G.stackguard1 + p.From.Offset = 3 * int64(ctxt.Arch.PtrSize) // G.stackguard1 } p.To.Type = obj.TYPE_REG p.To.Reg = REG_R1 @@ -1469,27 +1469,17 @@ loop: } var Linkmips64 = obj.LinkArch{ - ByteOrder: binary.BigEndian, - Name: "mips64", - Thechar: '0', + Arch: sys.ArchMIPS64, Preprocess: preprocess, Assemble: span0, Follow: follow, Progedit: progedit, - Minlc: 4, - Ptrsize: 8, - Regsize: 8, } var Linkmips64le = obj.LinkArch{ - ByteOrder: binary.LittleEndian, - Name: "mips64le", - Thechar: '0', + Arch: sys.ArchMIPS64LE, Preprocess: preprocess, Assemble: span0, Follow: follow, Progedit: progedit, - Minlc: 4, - Ptrsize: 8, - Regsize: 8, } diff --git a/src/cmd/internal/obj/objfile.go b/src/cmd/internal/obj/objfile.go index 30a380fadf..bdd3bfc826 100644 --- a/src/cmd/internal/obj/objfile.go +++ b/src/cmd/internal/obj/objfile.go @@ -109,6 +109,7 @@ package obj import ( "bufio" + "cmd/internal/sys" "fmt" "log" "path/filepath" @@ -556,7 +557,7 @@ func (w *objWriter) writeSymDebug(s *LSym) { } else if r.Type == R_TLS_LE { name = "TLS" } - if ctxt.Arch.Thechar == '5' || ctxt.Arch.Thechar == '9' { + if ctxt.Arch.InFamily(sys.ARM, sys.PPC64) { fmt.Fprintf(ctxt.Bso, "\trel %d+%d t=%d %s+%x\n", int(r.Off), r.Siz, r.Type, name, uint64(int64(r.Add))) } else { fmt.Fprintf(ctxt.Bso, "\trel %d+%d t=%d %s+%d\n", int(r.Off), r.Siz, r.Type, name, int64(r.Add)) diff --git a/src/cmd/internal/obj/pcln.go b/src/cmd/internal/obj/pcln.go index 9770c96fcc..eca7531f3c 100644 --- a/src/cmd/internal/obj/pcln.go +++ b/src/cmd/internal/obj/pcln.go @@ -100,7 +100,7 @@ func funcpctab(ctxt *Link, dst *Pcdata, func_ *LSym, desc string, valfunc func(* } if started != 0 { - addvarint(ctxt, dst, uint32((p.Pc-pc)/int64(ctxt.Arch.Minlc))) + addvarint(ctxt, dst, uint32((p.Pc-pc)/int64(ctxt.Arch.MinLC))) pc = p.Pc } @@ -120,7 +120,7 @@ func funcpctab(ctxt *Link, dst *Pcdata, func_ *LSym, desc string, valfunc func(* if ctxt.Debugpcln != 0 { fmt.Fprintf(ctxt.Bso, "%6x done\n", uint64(int64(func_.Text.Pc)+func_.Size)) } - addvarint(ctxt, dst, uint32((func_.Size-pc)/int64(ctxt.Arch.Minlc))) + addvarint(ctxt, dst, uint32((func_.Size-pc)/int64(ctxt.Arch.MinLC))) addvarint(ctxt, dst, 0) // terminator } diff --git a/src/cmd/internal/obj/ppc64/obj9.go b/src/cmd/internal/obj/ppc64/obj9.go index 483df3a2b3..7a24d1d1bf 100644 --- a/src/cmd/internal/obj/ppc64/obj9.go +++ b/src/cmd/internal/obj/ppc64/obj9.go @@ -31,7 +31,7 @@ package ppc64 import ( "cmd/internal/obj" - "encoding/binary" + "cmd/internal/sys" "fmt" "math" ) @@ -592,7 +592,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) { q.As = AMOVD q.From.Type = obj.TYPE_MEM q.From.Reg = REGG - q.From.Offset = 4 * int64(ctxt.Arch.Ptrsize) // G.panic + q.From.Offset = 4 * int64(ctxt.Arch.PtrSize) // G.panic q.To.Type = obj.TYPE_REG q.To.Reg = REG_R3 @@ -827,9 +827,9 @@ func stacksplit(ctxt *obj.Link, p *obj.Prog, framesize int32) *obj.Prog { p.As = AMOVD p.From.Type = obj.TYPE_MEM p.From.Reg = REGG - p.From.Offset = 2 * int64(ctxt.Arch.Ptrsize) // G.stackguard0 + p.From.Offset = 2 * int64(ctxt.Arch.PtrSize) // G.stackguard0 if ctxt.Cursym.Cfunc { - p.From.Offset = 3 * int64(ctxt.Arch.Ptrsize) // G.stackguard1 + p.From.Offset = 3 * int64(ctxt.Arch.PtrSize) // G.stackguard1 } p.To.Type = obj.TYPE_REG p.To.Reg = REG_R3 @@ -1181,27 +1181,17 @@ loop: } var Linkppc64 = obj.LinkArch{ - ByteOrder: binary.BigEndian, - Name: "ppc64", - Thechar: '9', + Arch: sys.ArchPPC64, Preprocess: preprocess, Assemble: span9, Follow: follow, Progedit: progedit, - Minlc: 4, - Ptrsize: 8, - Regsize: 8, } var Linkppc64le = obj.LinkArch{ - ByteOrder: binary.LittleEndian, - Name: "ppc64le", - Thechar: '9', + Arch: sys.ArchPPC64LE, Preprocess: preprocess, Assemble: span9, Follow: follow, Progedit: progedit, - Minlc: 4, - Ptrsize: 8, - Regsize: 8, } diff --git a/src/cmd/internal/obj/s390x/objz.go b/src/cmd/internal/obj/s390x/objz.go index 239deec6a1..454a0d76ec 100644 --- a/src/cmd/internal/obj/s390x/objz.go +++ b/src/cmd/internal/obj/s390x/objz.go @@ -31,7 +31,7 @@ package s390x import ( "cmd/internal/obj" - "encoding/binary" + "cmd/internal/sys" "fmt" "math" ) @@ -460,7 +460,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) { q.As = AMOVD q.From.Type = obj.TYPE_MEM q.From.Reg = REGG - q.From.Offset = 4 * int64(ctxt.Arch.Ptrsize) // G.panic + q.From.Offset = 4 * int64(ctxt.Arch.PtrSize) // G.panic q.To.Type = obj.TYPE_REG q.To.Reg = REG_R3 @@ -664,9 +664,9 @@ func stacksplitPre(ctxt *obj.Link, p *obj.Prog, framesize int32) (*obj.Prog, *ob p.As = AMOVD p.From.Type = obj.TYPE_MEM p.From.Reg = REGG - p.From.Offset = 2 * int64(ctxt.Arch.Ptrsize) // G.stackguard0 + p.From.Offset = 2 * int64(ctxt.Arch.PtrSize) // G.stackguard0 if ctxt.Cursym.Cfunc { - p.From.Offset = 3 * int64(ctxt.Arch.Ptrsize) // G.stackguard1 + p.From.Offset = 3 * int64(ctxt.Arch.PtrSize) // G.stackguard1 } p.To.Type = obj.TYPE_REG p.To.Reg = REG_R3 @@ -999,15 +999,10 @@ var unaryDst = map[obj.As]bool{ } var Links390x = obj.LinkArch{ - ByteOrder: binary.BigEndian, - Name: "s390x", - Thechar: 'z', + Arch: sys.ArchS390X, Preprocess: preprocess, Assemble: spanz, Follow: follow, Progedit: progedit, UnaryDst: unaryDst, - Minlc: 2, - Ptrsize: 8, - Regsize: 8, } diff --git a/src/cmd/internal/obj/sym.go b/src/cmd/internal/obj/sym.go index 64df62a2ae..beacc94ee8 100644 --- a/src/cmd/internal/obj/sym.go +++ b/src/cmd/internal/obj/sym.go @@ -32,6 +32,7 @@ package obj import ( + "cmd/internal/sys" "log" "os" "path/filepath" @@ -100,7 +101,7 @@ func Linknew(arch *LinkArch) *Link { } // On arm, record goarm. - if ctxt.Arch.Thechar == '5' { + if ctxt.Arch.Family == sys.ARM { ctxt.Goarm = Getgoarm() } diff --git a/src/cmd/internal/obj/x86/asm6.go b/src/cmd/internal/obj/x86/asm6.go index 773494b7af..b940094b8b 100644 --- a/src/cmd/internal/obj/x86/asm6.go +++ b/src/cmd/internal/obj/x86/asm6.go @@ -1754,7 +1754,7 @@ func naclpad(ctxt *obj.Link, s *obj.LSym, c int32, pad int32) int32 { } func spadjop(ctxt *obj.Link, p *obj.Prog, l, q obj.As) obj.As { - if p.Mode != 64 || ctxt.Arch.Ptrsize == 4 { + if p.Mode != 64 || ctxt.Arch.PtrSize == 4 { return l } return q diff --git a/src/cmd/internal/obj/x86/obj6.go b/src/cmd/internal/obj/x86/obj6.go index 0e8aeca4d3..302a597f4c 100644 --- a/src/cmd/internal/obj/x86/obj6.go +++ b/src/cmd/internal/obj/x86/obj6.go @@ -32,7 +32,7 @@ package x86 import ( "cmd/internal/obj" - "encoding/binary" + "cmd/internal/sys" "fmt" "log" "math" @@ -49,7 +49,7 @@ func CanUse1InsnTLS(ctxt *obj.Link) bool { return true } - if ctxt.Arch.Regsize == 4 { + if ctxt.Arch.RegSize == 4 { switch ctxt.Headtype { case obj.Hlinux, obj.Hnacl, @@ -75,7 +75,7 @@ func CanUse1InsnTLS(ctxt *obj.Link) bool { func progedit(ctxt *obj.Link, p *obj.Prog) { // Maintain information about code generation mode. if ctxt.Mode == 0 { - ctxt.Mode = ctxt.Arch.Regsize * 8 + ctxt.Mode = ctxt.Arch.RegSize * 8 } p.Mode = int8(ctxt.Mode) @@ -207,7 +207,7 @@ func progedit(ctxt *obj.Link, p *obj.Prog) { } // Rewrite MOVL/MOVQ $XXX(FP/SP) as LEAL/LEAQ. - if p.From.Type == obj.TYPE_ADDR && (ctxt.Arch.Thechar == '6' || p.From.Name != obj.NAME_EXTERN && p.From.Name != obj.NAME_STATIC) { + if p.From.Type == obj.TYPE_ADDR && (ctxt.Arch.Family == sys.AMD64 || p.From.Name != obj.NAME_EXTERN && p.From.Name != obj.NAME_STATIC) { switch p.As { case AMOVL: p.As = ALEAL @@ -614,7 +614,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) { // Make room for to save a base pointer. If autoffset == 0, // this might do something special like a tail jump to // another function, so in that case we omit this. - bpsize = ctxt.Arch.Ptrsize + bpsize = ctxt.Arch.PtrSize autoffset += int32(bpsize) p.To.Offset += int64(bpsize) @@ -656,7 +656,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) { } if autoffset != 0 { - if autoffset%int32(ctxt.Arch.Regsize) != 0 { + if autoffset%int32(ctxt.Arch.RegSize) != 0 { ctxt.Diag("unaligned stack size %d", autoffset) } p = obj.Appendp(ctxt, p) @@ -671,10 +671,10 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) { p = obj.Appendp(ctxt, p) p.As = obj.ANOP - p.Spadj = int32(-ctxt.Arch.Ptrsize) + p.Spadj = int32(-ctxt.Arch.PtrSize) p = obj.Appendp(ctxt, p) p.As = obj.ANOP - p.Spadj = int32(ctxt.Arch.Ptrsize) + p.Spadj = int32(ctxt.Arch.PtrSize) } deltasp := autoffset @@ -724,7 +724,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) { p.As = AMOVQ p.From.Type = obj.TYPE_MEM p.From.Reg = REG_CX - p.From.Offset = 4 * int64(ctxt.Arch.Ptrsize) // G.panic + p.From.Offset = 4 * int64(ctxt.Arch.PtrSize) // G.panic p.To.Type = obj.TYPE_REG p.To.Reg = REG_BX if ctxt.Headtype == obj.Hnacl && p.Mode == 64 { @@ -757,7 +757,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) { p.As = ALEAQ p.From.Type = obj.TYPE_MEM p.From.Reg = REG_SP - p.From.Offset = int64(autoffset) + int64(ctxt.Arch.Regsize) + p.From.Offset = int64(autoffset) + int64(ctxt.Arch.RegSize) p.To.Type = obj.TYPE_REG p.To.Reg = REG_DI if ctxt.Headtype == obj.Hnacl || p.Mode == 32 { @@ -935,7 +935,7 @@ func indir_cx(ctxt *obj.Link, p *obj.Prog, a *obj.Addr) { // Returns last new instruction. func load_g_cx(ctxt *obj.Link, p *obj.Prog) *obj.Prog { p.As = AMOVQ - if ctxt.Arch.Ptrsize == 4 { + if ctxt.Arch.PtrSize == 4 { p.As = AMOVL } p.From.Type = obj.TYPE_MEM @@ -984,9 +984,9 @@ func stacksplit(ctxt *obj.Link, p *obj.Prog, framesize int32, textarg int32) *ob p.From.Type = obj.TYPE_REG p.From.Reg = REG_SP indir_cx(ctxt, p, &p.To) - p.To.Offset = 2 * int64(ctxt.Arch.Ptrsize) // G.stackguard0 + p.To.Offset = 2 * int64(ctxt.Arch.PtrSize) // G.stackguard0 if ctxt.Cursym.Cfunc { - p.To.Offset = 3 * int64(ctxt.Arch.Ptrsize) // G.stackguard1 + p.To.Offset = 3 * int64(ctxt.Arch.PtrSize) // G.stackguard1 } } else if framesize <= obj.StackBig { // large stack: SP-framesize <= stackguard-StackSmall @@ -1006,9 +1006,9 @@ func stacksplit(ctxt *obj.Link, p *obj.Prog, framesize int32, textarg int32) *ob p.From.Type = obj.TYPE_REG p.From.Reg = REG_AX indir_cx(ctxt, p, &p.To) - p.To.Offset = 2 * int64(ctxt.Arch.Ptrsize) // G.stackguard0 + p.To.Offset = 2 * int64(ctxt.Arch.PtrSize) // G.stackguard0 if ctxt.Cursym.Cfunc { - p.To.Offset = 3 * int64(ctxt.Arch.Ptrsize) // G.stackguard1 + p.To.Offset = 3 * int64(ctxt.Arch.PtrSize) // G.stackguard1 } } else { // Such a large stack we need to protect against wraparound. @@ -1030,9 +1030,9 @@ func stacksplit(ctxt *obj.Link, p *obj.Prog, framesize int32, textarg int32) *ob p.As = mov indir_cx(ctxt, p, &p.From) - p.From.Offset = 2 * int64(ctxt.Arch.Ptrsize) // G.stackguard0 + p.From.Offset = 2 * int64(ctxt.Arch.PtrSize) // G.stackguard0 if ctxt.Cursym.Cfunc { - p.From.Offset = 3 * int64(ctxt.Arch.Ptrsize) // G.stackguard1 + p.From.Offset = 3 * int64(ctxt.Arch.PtrSize) // G.stackguard1 } p.To.Type = obj.TYPE_REG p.To.Reg = REG_SI @@ -1402,43 +1402,28 @@ var unaryDst = map[obj.As]bool{ } var Linkamd64 = obj.LinkArch{ - ByteOrder: binary.LittleEndian, - Name: "amd64", - Thechar: '6', + Arch: sys.ArchAMD64, Preprocess: preprocess, Assemble: span6, Follow: follow, Progedit: progedit, UnaryDst: unaryDst, - Minlc: 1, - Ptrsize: 8, - Regsize: 8, } var Linkamd64p32 = obj.LinkArch{ - ByteOrder: binary.LittleEndian, - Name: "amd64p32", - Thechar: '6', + Arch: sys.ArchAMD64P32, Preprocess: preprocess, Assemble: span6, Follow: follow, Progedit: progedit, UnaryDst: unaryDst, - Minlc: 1, - Ptrsize: 4, - Regsize: 8, } var Link386 = obj.LinkArch{ - ByteOrder: binary.LittleEndian, - Name: "386", - Thechar: '8', + Arch: sys.Arch386, Preprocess: preprocess, Assemble: span6, Follow: follow, Progedit: progedit, UnaryDst: unaryDst, - Minlc: 1, - Ptrsize: 4, - Regsize: 4, } |
