From: Keith Randall Date: Mon, 9 Oct 2017 17:08:54 +0000 (-0700) Subject: cmd/compile: add ideal int constants to dwarf X-Git-Tag: go1.10beta1~814 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=7830a19a4fcbb79c7a3a27e80449a3b15cb26e31;p=gostls13.git cmd/compile: add ideal int constants to dwarf 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 TryBot-Result: Gobot Gobot Reviewed-by: Austin Clements --- diff --git a/src/cmd/compile/internal/gc/obj.go b/src/cmd/compile/internal/gc/obj.go index ff9889750e..8d814f89e8 100644 --- a/src/cmd/compile/internal/gc/obj.go +++ b/src/cmd/compile/internal/gc/obj.go @@ -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() { diff --git a/src/runtime/runtime-gdb_test.go b/src/runtime/runtime-gdb_test.go index a190aa28d1..03194bcd58 100644 --- a/src/runtime/runtime-gdb_test.go +++ b/src/runtime/runtime-gdb_test.go @@ -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") } }