]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: fix gdb support for goroutines.
authorLuuk van Dijk <lvd@golang.org>
Mon, 28 Mar 2011 15:34:22 +0000 (17:34 +0200)
committerLuuk van Dijk <lvd@golang.org>
Mon, 28 Mar 2011 15:34:22 +0000 (17:34 +0200)
in gdb, 'info goroutines' and 'goroutine <n> <cmd> were crashing
because the 'g' and 'm' structures had changed a bit.

R=rsc
CC=golang-dev
https://golang.org/cl/4289077

src/pkg/runtime/runtime-gdb.py

index 68dd8abdc6edb465faaa8dcb754208c254b68aad..08772a431e61663d74aade01f61da4a8e2261da3 100644 (file)
@@ -215,6 +215,8 @@ class IfacePrinter:
                return 'string'
 
        def to_string(self):
+               if self.val['data'] == 0:
+                       return 0x0
                try:
                        dtype = iface_dtype(self.val)
                except:
@@ -308,15 +310,11 @@ class GoroutinesCmd(gdb.Command):
                for ptr in linked_list(gdb.parse_and_eval("'runtime.allg'"), 'alllink'):
                        if ptr['status'] == 6:  # 'gdead'
                                continue
-                       m = ptr['m']
                        s = ' '
-                       if m:
-                               pc = m['sched']['pc'].cast(vp)
-                               sp = m['sched']['sp'].cast(vp)
+                       if ptr['m']:
                                s = '*'
-                       else:
-                               pc = ptr['sched']['pc'].cast(vp)
-                               sp = ptr['sched']['sp'].cast(vp)
+                        pc = ptr['sched']['pc'].cast(vp)
+                        sp = ptr['sched']['sp'].cast(vp)
                        blk = gdb.block_for_pc(long((pc)))
                        print s, ptr['goid'], "%8s" % sts[long((ptr['status']))], blk.function
 
@@ -326,7 +324,7 @@ def find_goroutine(goid):
                if ptr['status'] == 6:  # 'gdead'
                        continue
                if ptr['goid'] == goid:
-                       return [(ptr['m'] or ptr)['sched'][x].cast(vp) for x in 'pc', 'sp']
+                       return [ptr['sched'][x].cast(vp) for x in 'pc', 'sp']
        return None, None