]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: add ideal int constants to dwarf
authorKeith Randall <keithr@alum.mit.edu>
Mon, 9 Oct 2017 17:08:54 +0000 (10:08 -0700)
committerKeith Randall <khr@golang.org>
Mon, 9 Oct 2017 21:30:03 +0000 (21:30 +0000)
The core dump reader would like a bunch of ideal int
constants to be available in dwarf.

Makes the go binary 0.9% bigger.

Update #14517

Change-Id: I00cdfc7f53bcdc56fccba576c1d33010f03bdd95
Reviewed-on: https://go-review.googlesource.com/69270
Run-TryBot: Keith Randall <khr@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Austin Clements <austin@google.com>
src/cmd/compile/internal/gc/obj.go
src/runtime/runtime-gdb_test.go

index ff9889750e7e904835b110a8f69c417f7a6da708..8d814f89e82943e9bcc47bfbe65f2013d3dcc23e 100644 (file)
@@ -219,14 +219,15 @@ func dumpGlobal(n *Node) {
 
 func dumpGlobalConst(n *Node) {
        // only export typed constants
-       if n.Type == nil {
+       t := n.Type
+       if t == nil {
                return
        }
        if n.Sym.Pkg != localpkg {
                return
        }
        // only export integer constants for now
-       switch n.Type.Etype {
+       switch t.Etype {
        case TINT8:
        case TINT16:
        case TINT32:
@@ -239,10 +240,20 @@ func dumpGlobalConst(n *Node) {
        case TUINT:
        case TUINTPTR:
                // ok
+       case TIDEAL:
+               if !Isconst(n, CTINT) {
+                       return
+               }
+               x := n.Val().U.(*Mpint)
+               if x.Cmp(minintval[TINT]) < 0 || x.Cmp(maxintval[TINT]) > 0 {
+                       return
+               }
+               // Ideal integers we export as int (if they fit).
+               t = types.Types[TINT]
        default:
                return
        }
-       Ctxt.DwarfIntConst(myimportpath, n.Sym.Name, typesymname(n.Type), n.Int64())
+       Ctxt.DwarfIntConst(myimportpath, n.Sym.Name, typesymname(t), n.Int64())
 }
 
 func dumpglobls() {
index a190aa28d1bb32ec0c2e4fc09de206914da47802..03194bcd58e03a602cd2deb7ef1a114a17e59fe7 100644 (file)
@@ -427,6 +427,7 @@ func TestGdbConst(t *testing.T) {
                "-ex", "print main.largeConstant",
                "-ex", "print main.minusOne",
                "-ex", "print 'runtime._MSpanInUse'",
+               "-ex", "print 'runtime._PageSize'",
                filepath.Join(dir, "a.exe"),
        }
        got, _ := exec.Command("gdb", args...).CombinedOutput()
@@ -435,7 +436,7 @@ func TestGdbConst(t *testing.T) {
 
        t.Logf("output %q", sgot)
 
-       if !strings.Contains(sgot, "\n$1 = 42\n$2 = 18446744073709551615\n$3 = -1\n$4 = 1 '\\001'") {
+       if !strings.Contains(sgot, "\n$1 = 42\n$2 = 18446744073709551615\n$3 = -1\n$4 = 1 '\\001'\n$5 = 8192") {
                t.Fatalf("output mismatch")
        }
 }