]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/internal/obj: replace AGLOBL with (*Link).Globl
authorMatthew Dempsky <mdempsky@google.com>
Fri, 16 Sep 2016 22:31:04 +0000 (15:31 -0700)
committerMatthew Dempsky <mdempsky@google.com>
Sat, 17 Sep 2016 00:51:47 +0000 (00:51 +0000)
Replace the AGLOBL pseudo-op with a method to directly register an
LSym as a global. Similar to how we previously already replaced the
ADATA pseudo-op with directly writing out data bytes.

Passes toolstash -cmp.

Change-Id: I3631af0a2ab5798152d0c26b833dc309dbec5772
Reviewed-on: https://go-review.googlesource.com/29366
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Dave Cheney <dave@cheney.net>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/cmd/asm/internal/asm/asm.go
src/cmd/compile/internal/gc/dcl.go
src/cmd/compile/internal/gc/gsubr.go
src/cmd/compile/internal/gc/obj.go
src/cmd/compile/internal/gc/plive.go
src/cmd/internal/obj/link.go
src/cmd/internal/obj/plist.go
src/cmd/internal/obj/util.go
src/cmd/internal/obj/x86/asm6.go

index 6167810f1bde0f81f158099e0b4190b329b8830f..3cb69c7997524c3e98bbc29831a9937a24190218 100644 (file)
@@ -269,17 +269,7 @@ func (p *Parser) asmGlobl(word string, operands [][]lex.Token) {
        }
 
        // log.Printf("GLOBL %s %d, $%d", name, flag, size)
-       prog := &obj.Prog{
-               Ctxt:   p.ctxt,
-               As:     obj.AGLOBL,
-               Lineno: p.histLineNum,
-               From:   nameAddr,
-               From3: &obj.Addr{
-                       Offset: flag,
-               },
-               To: addr,
-       }
-       p.append(prog, "", false)
+       p.ctxt.Globl(nameAddr.Sym, addr.Offset, int(flag))
 }
 
 // asmPCData assembles a PCDATA pseudo-op.
index b3e2a78c41953384d1ed227e5ae31d47d4c88ece..0a1d63ae3d3397b784e83dbab1bf51ee222ba815 100644 (file)
@@ -1268,7 +1268,6 @@ func funccompile(n *Node) {
                // If we have compile errors, ignore any assembler/linker errors.
                Ctxt.DiagFunc = func(string, ...interface{}) {}
        }
-       flushdata()
        obj.Flushplist(Ctxt) // convert from Prog list to machine code
 }
 
index 1be8788dfca81d8a6e0ab99d78a6e88b99c72fea..cd9c7e974e157bb6abea7e018f66950d0f5d2c8c 100644 (file)
@@ -35,33 +35,13 @@ import (
        "fmt"
 )
 
-var (
-       ddumped bool
-       dfirst  *obj.Prog
-       dpc     *obj.Prog
-)
-
 func Prog(as obj.As) *obj.Prog {
        var p *obj.Prog
 
-       if as == obj.AGLOBL {
-               if ddumped {
-                       Fatalf("already dumped data")
-               }
-               if dpc == nil {
-                       dpc = Ctxt.NewProg()
-                       dfirst = dpc
-               }
-
-               p = dpc
-               dpc = Ctxt.NewProg()
-               p.Link = dpc
-       } else {
-               p = Pc
-               Pc = Ctxt.NewProg()
-               Clearp(Pc)
-               p.Link = Pc
-       }
+       p = Pc
+       Pc = Ctxt.NewProg()
+       Clearp(Pc)
+       p.Link = Pc
 
        if lineno == 0 && Debug['K'] != 0 {
                Warn("prog: line 0")
@@ -102,29 +82,6 @@ func Appendpp(p *obj.Prog, as obj.As, ftype obj.AddrType, freg int16, foffset in
        return q
 }
 
-func dumpdata() {
-       ddumped = true
-       if dfirst == nil {
-               return
-       }
-       newplist()
-       *Pc = *dfirst
-       Pc = dpc
-       Clearp(Pc)
-}
-
-func flushdata() {
-       if dfirst == nil {
-               return
-       }
-       newplist()
-       *Pc = *dfirst
-       Pc = dpc
-       Clearp(Pc)
-       dfirst = nil
-       dpc = nil
-}
-
 // Fixup instructions after allocauto (formerly compactframe) has moved all autos around.
 func fixautoused(p *obj.Prog) {
        for lp := &p; ; {
@@ -160,19 +117,16 @@ func fixautoused(p *obj.Prog) {
 }
 
 func ggloblnod(nam *Node) {
-       p := Gins(obj.AGLOBL, nam, nil)
-       p.Lineno = nam.Lineno
-       p.From.Sym.Gotype = Linksym(ngotype(nam))
-       p.To.Sym = nil
-       p.To.Type = obj.TYPE_CONST
-       p.To.Offset = nam.Type.Width
-       p.From3 = new(obj.Addr)
+       s := Linksym(nam.Sym)
+       s.Gotype = Linksym(ngotype(nam))
+       flags := 0
        if nam.Name.Readonly {
-               p.From3.Offset = obj.RODATA
+               flags = obj.RODATA
        }
        if nam.Type != nil && !haspointers(nam.Type) {
-               p.From3.Offset |= obj.NOPTR
+               flags |= obj.NOPTR
        }
+       Ctxt.Globl(s, nam.Type.Width, flags)
 }
 
 func ggloblsym(s *Sym, width int32, flags int16) {
@@ -180,18 +134,11 @@ func ggloblsym(s *Sym, width int32, flags int16) {
 }
 
 func ggloblLSym(s *obj.LSym, width int32, flags int16) {
-       p := Gins(obj.AGLOBL, nil, nil)
-       p.From.Type = obj.TYPE_MEM
-       p.From.Name = obj.NAME_EXTERN
-       p.From.Sym = s
        if flags&obj.LOCAL != 0 {
-               p.From.Sym.Local = true
+               s.Local = true
                flags &^= obj.LOCAL
        }
-       p.To.Type = obj.TYPE_CONST
-       p.To.Offset = int64(width)
-       p.From3 = new(obj.Addr)
-       p.From3.Offset = int64(flags)
+       Ctxt.Globl(s, int64(width), int(flags))
 }
 
 func gtrack(s *Sym) {
@@ -450,7 +397,7 @@ func Patch(p *obj.Prog, to *obj.Prog) {
 func Gins(as obj.As, f, t *Node) *obj.Prog {
        switch as {
        case obj.AVARKILL, obj.AVARLIVE, obj.AVARDEF, obj.ATYPE,
-               obj.ATEXT, obj.AFUNCDATA, obj.AUSEFIELD, obj.AGLOBL:
+               obj.ATEXT, obj.AFUNCDATA, obj.AUSEFIELD:
        default:
                Fatalf("unhandled gins op %v", as)
        }
index 93ca2f856369acb5d64cfccddff87870f54b3ceb..a51e8999eafcb577c27eb973e19214d7b566e9ad 100644 (file)
@@ -147,7 +147,6 @@ func dumpobj1(outfile string, mode int) {
                ggloblsym(zero, int32(zerosize), obj.DUPOK|obj.RODATA)
        }
 
-       dumpdata()
        obj.Writeobjdirect(Ctxt, bout.Writer)
 
        if writearchive {
index de59583d8aba7f06c08b507796fc0096d0d1e8d3..7eee6d53932e3ac3c6f98ce56d899b3f6645863f 100644 (file)
@@ -855,7 +855,7 @@ func checkptxt(fn *Node, firstp *obj.Prog) {
                if false {
                        fmt.Printf("analyzing '%v'\n", p)
                }
-               if p.As != obj.AGLOBL && p.As != obj.ATYPE {
+               if p.As != obj.ATYPE {
                        checkprog(fn, p)
                }
        }
index 5d77d69df3ab93bc43c67addaf380d00ac7f0a90..a9af709be6db6d25ea91a1c29cfdf11a904163f4 100644 (file)
@@ -276,7 +276,6 @@ const (
        ADUFFZERO
        AEND
        AFUNCDATA
-       AGLOBL
        AJMP
        ANOP
        APCDATA
index 3c046d162132f8c5f1bafd69b9934990b533285f..9d76ea9ee8c5a9bad3036a47b1f81988e38ce9a2 100644 (file)
@@ -82,34 +82,6 @@ func flushplist(ctxt *Link, freeProgs bool) {
                                curtext.Autom = a
                                continue
 
-                       case AGLOBL:
-                               s := p.From.Sym
-                               if s.Seenglobl {
-                                       fmt.Printf("duplicate %v\n", p)
-                               }
-                               s.Seenglobl = true
-                               if s.Onlist {
-                                       log.Fatalf("symbol %s listed multiple times", s.Name)
-                               }
-                               s.Onlist = true
-                               ctxt.Data = append(ctxt.Data, s)
-                               s.Size = p.To.Offset
-                               if s.Type == 0 || s.Type == SXREF {
-                                       s.Type = SBSS
-                               }
-                               flag := int(p.From3.Offset)
-                               if flag&DUPOK != 0 {
-                                       s.Dupok = true
-                               }
-                               if flag&RODATA != 0 {
-                                       s.Type = SRODATA
-                               } else if flag&NOPTR != 0 {
-                                       s.Type = SNOPTRBSS
-                               } else if flag&TLSBSS != 0 {
-                                       s.Type = STLSBSS
-                               }
-                               continue
-
                        case ATEXT:
                                s := p.From.Sym
                                if s == nil {
@@ -217,3 +189,29 @@ func flushplist(ctxt *Link, freeProgs bool) {
                ctxt.freeProgs()
        }
 }
+
+func (ctxt *Link) Globl(s *LSym, size int64, flag int) {
+       if s.Seenglobl {
+               fmt.Printf("duplicate %v\n", s)
+       }
+       s.Seenglobl = true
+       if s.Onlist {
+               log.Fatalf("symbol %s listed multiple times", s.Name)
+       }
+       s.Onlist = true
+       ctxt.Data = append(ctxt.Data, s)
+       s.Size = size
+       if s.Type == 0 || s.Type == SXREF {
+               s.Type = SBSS
+       }
+       if flag&DUPOK != 0 {
+               s.Dupok = true
+       }
+       if flag&RODATA != 0 {
+               s.Type = SRODATA
+       } else if flag&NOPTR != 0 {
+               s.Type = SNOPTRBSS
+       } else if flag&TLSBSS != 0 {
+               s.Type = STLSBSS
+       }
+}
index 6270a8b8bbb11221d83f599f5867da7101542481..9a12e88ed62f2783b83100f278b19888bb265c27 100644 (file)
@@ -143,7 +143,7 @@ func (p *Prog) String() string {
                sep = ", "
        }
        if p.From3Type() != TYPE_NONE {
-               if p.From3.Type == TYPE_CONST && (p.As == ATEXT || p.As == AGLOBL) {
+               if p.From3.Type == TYPE_CONST && p.As == ATEXT {
                        // Special case - omit $.
                        fmt.Fprintf(&buf, "%s%d", sep, p.From3.Offset)
                } else if quadOpAmd64 {
@@ -477,7 +477,6 @@ var Anames = []string{
        "DUFFZERO",
        "END",
        "FUNCDATA",
-       "GLOBL",
        "JMP",
        "NOP",
        "PCDATA",
index a602179be4622202d0bb1868a10bbdb8631537da..a8e33038130f0148ac32bf266bae5f6e0d913fd2 100644 (file)
@@ -1148,7 +1148,6 @@ var optab =
        {AFXSAVE, ysvrs, Pm, [23]uint8{0xae, 00, 0xae, 00}},
        {AFXRSTOR64, ysvrs, Pw, [23]uint8{0x0f, 0xae, 01, 0x0f, 0xae, 01}},
        {AFXSAVE64, ysvrs, Pw, [23]uint8{0x0f, 0xae, 00, 0x0f, 0xae, 00}},
-       {obj.AGLOBL, nil, 0, [23]uint8{}},
        {AHLT, ynone, Px, [23]uint8{0xf4}},
        {AIDIVB, ydivb, Pb, [23]uint8{0xf6, 07}},
        {AIDIVL, ydivl, Px, [23]uint8{0xf7, 07}},