]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: fix runtime-gdb script loading
authorPaul Nasrat <pnasrat@google.com>
Wed, 14 Jan 2015 19:32:01 +0000 (14:32 -0500)
committerIan Lance Taylor <iant@golang.org>
Thu, 15 Jan 2015 05:20:19 +0000 (05:20 +0000)
runtime.rtype was a copy of reflect.rtype - update script to use that directly.
Introduces a basic test which will skip on systems without appropriate GDB.

Fixes #9326

Change-Id: I6ec74e947bd2e1295492ca34b3a8c1b49315a8cb
Reviewed-on: https://go-review.googlesource.com/2821
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/runtime/runtime-gdb.py
src/runtime/runtime-gdb_test.go [new file with mode: 0644]

index eedac7cf44cf7768ed7f766e14e2df4701dab380..cee025eb6c97edd04c8f7ed05885b478790566ca 100644 (file)
@@ -202,7 +202,7 @@ def lookup_type(name):
        except gdb.error:
                pass
 
-_rctp_type = gdb.lookup_type("struct runtime.rtype").pointer()
+_rctp_type = gdb.lookup_type("struct reflect.rtype").pointer()
 
 
 def iface_commontype(obj):
diff --git a/src/runtime/runtime-gdb_test.go b/src/runtime/runtime-gdb_test.go
new file mode 100644 (file)
index 0000000..4a74dd3
--- /dev/null
@@ -0,0 +1,59 @@
+package runtime_test
+
+import (
+       "io/ioutil"
+       "os"
+       "os/exec"
+       "path/filepath"
+       "testing"
+)
+
+func checkGdbPython(t *testing.T) {
+       cmd := exec.Command("gdb", "-nx", "-q", "--batch", "-ex", "python import sys; print('golang gdb python support')")
+       out, err := cmd.CombinedOutput()
+
+       if err != nil {
+               t.Skipf("skipping due to issue running gdb%v", err)
+       }
+       if string(out) != "golang gdb python support\n" {
+               t.Skipf("skipping due to lack of python gdb support: %s", out)
+       }
+}
+
+const helloSource = `
+package main
+import "fmt"
+func main() {
+       fmt.Println("hi")
+}
+`
+
+func TestGdbLoadRuntimeSupport(t *testing.T) {
+
+       checkGdbPython(t)
+
+       dir, err := ioutil.TempDir("", "go-build")
+       if err != nil {
+               t.Fatalf("failed to create temp directory: %v", err)
+       }
+       defer os.RemoveAll(dir)
+
+       src := filepath.Join(dir, "main.go")
+       err = ioutil.WriteFile(src, []byte(helloSource), 0644)
+       if err != nil {
+               t.Fatalf("failed to create file: %v", err)
+       }
+
+       cmd := exec.Command("go", "build", "-o", "a.exe")
+       cmd.Dir = dir
+       out, err := cmd.CombinedOutput()
+       if err != nil {
+               t.Fatalf("building source %v\n%s", err, out)
+       }
+
+       got, _ := exec.Command("gdb", "-nx", "-q", "--batch", "-ex", "source runtime-gdb.py",
+               filepath.Join(dir, "a.exe")).CombinedOutput()
+       if string(got) != "Loading Go Runtime support.\n" {
+               t.Fatalf("%s", got)
+       }
+}