]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/internal/obj: remove ATYPE
authorMatthew Dempsky <mdempsky@google.com>
Tue, 7 Feb 2017 01:06:02 +0000 (17:06 -0800)
committerMatthew Dempsky <mdempsky@google.com>
Tue, 7 Feb 2017 22:38:18 +0000 (22:38 +0000)
In cmd/compile, we can directly construct obj.Auto to represent local
variables and attach them to the function's obj.LSym.

In preparation for being able to emit more precise DWARF info based on
other compiler available information (e.g., lexical scoping).

Change-Id: I9c4225ec59306bec42552838493022e0e9d70228
Reviewed-on: https://go-review.googlesource.com/36420
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Heschi Kreinick <heschi@google.com>
Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
16 files changed:
src/cmd/compile/internal/amd64/prog.go
src/cmd/compile/internal/arm/prog.go
src/cmd/compile/internal/arm64/prog.go
src/cmd/compile/internal/gc/gsubr.go
src/cmd/compile/internal/gc/pgen.go
src/cmd/compile/internal/gc/plive.go
src/cmd/compile/internal/mips/prog.go
src/cmd/compile/internal/mips64/prog.go
src/cmd/compile/internal/ppc64/prog.go
src/cmd/compile/internal/s390x/prog.go
src/cmd/compile/internal/x86/prog.go
src/cmd/internal/obj/arm/asm5.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 bd95f46a4cc2e71509241c4513b98d9e1e62a617..6dff09329b5f197c8b87ab52c86b2217160ecc58 100644 (file)
@@ -23,7 +23,6 @@ const (
 // As an exception to that rule, we typically write down all the
 // size variants of an operation even if we just use a subset.
 var progtable = [x86.ALAST & obj.AMask]gc.ProgInfo{
-       obj.ATYPE:     {Flags: gc.Pseudo | gc.Skip},
        obj.ATEXT:     {Flags: gc.Pseudo},
        obj.AFUNCDATA: {Flags: gc.Pseudo},
        obj.APCDATA:   {Flags: gc.Pseudo},
index 1dd7c98e38cf187f8e6028ff9ed45224fee8f044..1b80ddefd0cd277d01b949411284a928d6b5198b 100644 (file)
@@ -22,7 +22,6 @@ const (
 // As an exception to that rule, we typically write down all the
 // size variants of an operation even if we just use a subset.
 var progtable = [arm.ALAST & obj.AMask]gc.ProgInfo{
-       obj.ATYPE:     {Flags: gc.Pseudo | gc.Skip},
        obj.ATEXT:     {Flags: gc.Pseudo},
        obj.AFUNCDATA: {Flags: gc.Pseudo},
        obj.APCDATA:   {Flags: gc.Pseudo},
index 5d3ec67bc882f29d663483fc6627cd5d6e9c763a..7cb7517534cc24b0eef753b9603c30050ddaab65 100644 (file)
@@ -25,7 +25,6 @@ const (
 //
 // The table is formatted for 8-space tabs.
 var progtable = [arm64.ALAST & obj.AMask]gc.ProgInfo{
-       obj.ATYPE:     {Flags: gc.Pseudo | gc.Skip},
        obj.ATEXT:     {Flags: gc.Pseudo},
        obj.AFUNCDATA: {Flags: gc.Pseudo},
        obj.APCDATA:   {Flags: gc.Pseudo},
index e0127afe89316d4f9d6a5bb961b968e856e84bd1..3719ccbd55e862c4c18f7b65c0d27314b49b123d 100644 (file)
@@ -299,7 +299,7 @@ func Patch(p *obj.Prog, to *obj.Prog) {
 // Gins inserts instruction as. f is from, t is to.
 func Gins(as obj.As, f, t *Node) *obj.Prog {
        switch as {
-       case obj.AVARKILL, obj.AVARLIVE, obj.AVARDEF, obj.ATYPE,
+       case obj.AVARKILL, obj.AVARLIVE, obj.AVARDEF,
                obj.ATEXT, obj.AFUNCDATA, obj.AUSEFIELD:
        default:
                Fatalf("unhandled gins op %v", as)
index 64f61b4352bd0df92d5ec2425bfe8127cf533953..5ec253667ba898d71c9ffc1840f3c8a4eabfa841 100644 (file)
@@ -422,29 +422,45 @@ func compile(fn *Node) {
                }
        }
 
-       for _, n := range fn.Func.Dcl {
+       gendebug(ptxt.From.Sym, fn.Func.Dcl)
+
+       genssa(ssafn, ptxt, gcargs, gclocals)
+       ssafn.Free()
+}
+
+func gendebug(fn *obj.LSym, decls []*Node) {
+       if fn == nil {
+               return
+       }
+
+       for _, n := range decls {
                if n.Op != ONAME { // might be OTYPE or OLITERAL
                        continue
                }
+
+               var name int16
                switch n.Class {
                case PAUTO:
                        if !n.Used {
                                continue
                        }
-                       fallthrough
+                       name = obj.NAME_AUTO
                case PPARAM, PPARAMOUT:
-                       // The symbol is excluded later from debugging info if its name begins ".autotmp_", but the type is still necessary.
-                       // See bugs #17644 and #17830 and cmd/internal/dwarf/dwarf.go
-                       p := Gins(obj.ATYPE, n, nil)
-                       p.From.Sym = obj.Linklookup(Ctxt, n.Sym.Name, 0)
-                       p.To.Type = obj.TYPE_MEM
-                       p.To.Name = obj.NAME_EXTERN
-                       p.To.Sym = Linksym(ngotype(n))
+                       name = obj.NAME_PARAM
+               default:
+                       continue
                }
-       }
 
-       genssa(ssafn, ptxt, gcargs, gclocals)
-       ssafn.Free()
+               a := &obj.Auto{
+                       Asym:    obj.Linklookup(Ctxt, n.Sym.Name, 0),
+                       Aoffset: int32(n.Xoffset),
+                       Name:    name,
+                       Gotype:  Linksym(ngotype(n)),
+               }
+
+               a.Link = fn.Autom
+               fn.Autom = a
+       }
 }
 
 type symByName []*Sym
index a0d56aec41564bc4fdc285c12bbcb6ee9aa58192..2a65eac5e98ccfe3ebe07b4597f971861157849f 100644 (file)
@@ -910,9 +910,7 @@ func checkptxt(fn *Node, firstp *obj.Prog) {
                if false {
                        fmt.Printf("analyzing '%v'\n", p)
                }
-               if p.As != obj.ATYPE {
-                       checkprog(fn, p)
-               }
+               checkprog(fn, p)
        }
 }
 
index 32805f0777b9366ad7876891a4f300f2edb91887..2113bb7e129a5746430ca5c37ef602f211f98d25 100644 (file)
@@ -25,7 +25,6 @@ const (
 //
 // The table is formatted for 8-space tabs.
 var progtable = [mips.ALAST & obj.AMask]gc.ProgInfo{
-       obj.ATYPE:     {Flags: gc.Pseudo | gc.Skip},
        obj.ATEXT:     {Flags: gc.Pseudo},
        obj.AFUNCDATA: {Flags: gc.Pseudo},
        obj.APCDATA:   {Flags: gc.Pseudo},
index 74c735c5873e0bf3101456eca0125cde728cb63a..9c2c94a37f173c66cc831bbd51354f11bc82c760 100644 (file)
@@ -25,7 +25,6 @@ const (
 //
 // The table is formatted for 8-space tabs.
 var progtable = [mips.ALAST & obj.AMask]gc.ProgInfo{
-       obj.ATYPE:     {Flags: gc.Pseudo | gc.Skip},
        obj.ATEXT:     {Flags: gc.Pseudo},
        obj.AFUNCDATA: {Flags: gc.Pseudo},
        obj.APCDATA:   {Flags: gc.Pseudo},
index 59cbaa1c6bf79232a7472e092a6dd286ca395394..ff5fde36e6f9e26d3ffb0a6325733e63eb11b253 100644 (file)
@@ -25,7 +25,6 @@ const (
 //
 // The table is formatted for 8-space tabs.
 var progtable = [ppc64.ALAST & obj.AMask]gc.ProgInfo{
-       obj.ATYPE:     {Flags: gc.Pseudo | gc.Skip},
        obj.ATEXT:     {Flags: gc.Pseudo},
        obj.AFUNCDATA: {Flags: gc.Pseudo},
        obj.APCDATA:   {Flags: gc.Pseudo},
index f356617d00b0905eaedea9d77fc547467c92cf68..fbe9291a2416d61b67014cd06c4f674e49827134 100644 (file)
@@ -18,7 +18,6 @@ import (
 // As an exception to that rule, we typically write down all the
 // size variants of an operation even if we just use a subset.
 var progtable = [s390x.ALAST & obj.AMask]gc.ProgInfo{
-       obj.ATYPE & obj.AMask:     {Flags: gc.Pseudo | gc.Skip},
        obj.ATEXT & obj.AMask:     {Flags: gc.Pseudo},
        obj.AFUNCDATA & obj.AMask: {Flags: gc.Pseudo},
        obj.APCDATA & obj.AMask:   {Flags: gc.Pseudo},
index e46bdb7f23528f64622827ce9f9c1e5f8039e452..33ea29d420983cc3b9bcbf490da004e0d57e2d20 100644 (file)
@@ -25,7 +25,6 @@ const (
 //
 // The table is formatted for 8-space tabs.
 var progtable = [x86.ALAST & obj.AMask]gc.ProgInfo{
-       obj.ATYPE:     {Flags: gc.Pseudo | gc.Skip},
        obj.ATEXT:     {Flags: gc.Pseudo},
        obj.AFUNCDATA: {Flags: gc.Pseudo},
        obj.APCDATA:   {Flags: gc.Pseudo},
index a7217e2e6d83b226501aeddefda7fc0b7e4b5cf5..1fd1a1ce141b7595d7ac1ddf69a207ca06c04ecd 100644 (file)
@@ -1411,8 +1411,7 @@ func buildop(ctxt *obj.Link) {
                        AMOVM,
                        ARFE,
                        obj.ATEXT,
-                       obj.AUSEFIELD,
-                       obj.ATYPE:
+                       obj.AUSEFIELD:
                        break
 
                case AADDF:
index 1d2d03593d391c2af00b8cae9a2ae03c7050cf51..f81e1e2ef61fb7f214584b74e11e9050d3160e96 100644 (file)
@@ -290,7 +290,6 @@ const (
        APCDATA
        ARET
        ATEXT
-       ATYPE
        AUNDEF
        AUSEFIELD
        AVARDEF
index 643f9d02c05990d2bb852835eb54e71a369fa9dc..27a24ef10036cfed84d1eb6ad680dcac82e63a95 100644 (file)
@@ -50,30 +50,6 @@ func flushplist(ctxt *Link, freeProgs bool) {
                        case AEND:
                                continue
 
-                       case ATYPE:
-                               // Assume each TYPE instruction describes
-                               // a different local variable or parameter,
-                               // so no dedup.
-                               // Using only the TYPE instructions means
-                               // that we discard location information about local variables
-                               // in C and assembly functions; that information is inferred
-                               // from ordinary references, because there are no TYPE
-                               // instructions there. Without the type information, gdb can't
-                               // use the locations, so we don't bother to save them.
-                               // If something else could use them, we could arrange to
-                               // preserve them.
-                               if curtext == nil {
-                                       continue
-                               }
-                               a := new(Auto)
-                               a.Asym = p.From.Sym
-                               a.Aoffset = int32(p.From.Offset)
-                               a.Name = int16(p.From.Name)
-                               a.Gotype = p.To.Sym
-                               a.Link = curtext.Autom
-                               curtext.Autom = a
-                               continue
-
                        case ATEXT:
                                s := p.From.Sym
                                if s == nil {
index ec6899e67f746274f7c3067016ff6d83b3cbd056..5880577655a6fe52e2b616f8c755a6af00423908 100644 (file)
@@ -474,7 +474,6 @@ var Anames = []string{
        "PCDATA",
        "RET",
        "TEXT",
-       "TYPE",
        "UNDEF",
        "USEFIELD",
        "VARDEF",
index bf678228226e360bc0375f7183bb6009d073afa2..466fb9cc8fabfcaea633a4e203f231b4384b5937 100644 (file)
@@ -1699,7 +1699,6 @@ var optab =
        {AXTEST, ynone, Px, [23]uint8{0x0f, 01, 0xd6}},
        {AXGETBV, ynone, Pm, [23]uint8{01, 0xd0}},
        {obj.AUSEFIELD, ynop, Px, [23]uint8{0, 0}},
-       {obj.ATYPE, nil, 0, [23]uint8{}},
        {obj.AFUNCDATA, yfuncdata, Px, [23]uint8{0, 0}},
        {obj.APCDATA, ypcdata, Px, [23]uint8{0, 0}},
        {obj.AVARDEF, nil, 0, [23]uint8{}},