]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: set $sp before $pc in gdb python script
authorCherry Zhang <cherryyz@google.com>
Thu, 9 Jun 2016 02:22:35 +0000 (22:22 -0400)
committerCherry Zhang <cherryyz@google.com>
Thu, 9 Jun 2016 20:02:59 +0000 (20:02 +0000)
When setting $pc, gdb does a backtrace using the current value of $sp,
and it may complain if $sp does not match that $pc (although the
assignment went through successfully).

This happens with ARM SSA backend: when setting $pc it prints
> Cannot access memory at address 0x0

As well as occasionally on MIPS64:
> warning: GDB can't find the start of the function at 0xc82003fe07.
> ...

Setting $sp before setting $pc makes it happy.

Change-Id: Idd96dbef3e9b698829da553c6d71d5b4c6d492db
Reviewed-on: https://go-review.googlesource.com/23940
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Austin Clements <austin@google.com>
src/runtime/runtime-gdb.py

index e57fa00e1a4dd3f6cc62534ad5a1efcfce964d67..5c9b2a08e8f1a365a1fd5ae5276c258c622f60f9 100644 (file)
@@ -448,15 +448,15 @@ class GoroutineCmd(gdb.Command):
                except gdb.error:
                        pc = int(str(pc).split(None, 1)[0], 16)
                save_frame = gdb.selected_frame()
-               gdb.parse_and_eval('$save_pc = $pc')
                gdb.parse_and_eval('$save_sp = $sp')
-               gdb.parse_and_eval('$pc = {0}'.format(str(pc)))
+               gdb.parse_and_eval('$save_pc = $pc')
                gdb.parse_and_eval('$sp = {0}'.format(str(sp)))
+               gdb.parse_and_eval('$pc = {0}'.format(str(pc)))
                try:
                        gdb.execute(cmd)
                finally:
-                       gdb.parse_and_eval('$pc = $save_pc')
                        gdb.parse_and_eval('$sp = $save_sp')
+                       gdb.parse_and_eval('$pc = $save_pc')
                        save_frame.select()