From a25af2e99e21fe9011d4057cfab1e0cb0ffb3cdb Mon Sep 17 00:00:00 2001 From: Paul Nasrat Date: Wed, 14 Jan 2015 14:32:01 -0500 Subject: [PATCH] runtime: fix runtime-gdb script loading 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 --- src/runtime/runtime-gdb.py | 2 +- src/runtime/runtime-gdb_test.go | 59 +++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 src/runtime/runtime-gdb_test.go diff --git a/src/runtime/runtime-gdb.py b/src/runtime/runtime-gdb.py index eedac7cf44..cee025eb6c 100644 --- a/src/runtime/runtime-gdb.py +++ b/src/runtime/runtime-gdb.py @@ -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 index 0000000000..4a74dd372a --- /dev/null +++ b/src/runtime/runtime-gdb_test.go @@ -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) + } +} -- 2.50.0