mirror of
https://github.com/golang/go
synced 2024-11-26 22:11:25 -07:00
runtime: fix runtime-gdb.py when switching sp value
After a recent change to runtime-gdb_test.go the ppc64le builder has had intermittent failures. The failures occur when trying to invoke the goroutineCmd function to display the backtrace for a selected goroutine. There is nothing wrong with the testcase but it seems to intermittently leave goroutines in a state where an error can occur. The error message indicates that the problem occurs when trying to change the sp back to the original after displaying the stacktrace for the goroutine. gdb.error: Attempt to assign to an unmodifiable value. After some searching I found that this error message can happen if the sp register is changed when on a frame that is not the top-most frame. To fix the problem, frame 0 is selected before changing the value of sp. This fixes the problem in my reproducer environment, and hopefully will fix the problem on the builder. Updates #28679 Change-Id: I329bc95b30f8c95acfb161b0d9cfdcbd917a1954 Reviewed-on: https://go-review.googlesource.com/c/152540 Run-TryBot: Lynn Boger <laboger@linux.vnet.ibm.com> Reviewed-by: Austin Clements <austin@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
578667f4b5
commit
048988a0f1
@ -528,11 +528,17 @@ class GoroutineCmd(gdb.Command):
|
||||
save_frame = gdb.selected_frame()
|
||||
gdb.parse_and_eval('$save_sp = $sp')
|
||||
gdb.parse_and_eval('$save_pc = $pc')
|
||||
# In GDB, assignments to sp must be done from the
|
||||
# top-most frame, so select frame 0 first.
|
||||
gdb.execute('select-frame 0')
|
||||
gdb.parse_and_eval('$sp = {0}'.format(str(sp)))
|
||||
gdb.parse_and_eval('$pc = {0}'.format(str(pc)))
|
||||
try:
|
||||
gdb.execute(cmd)
|
||||
finally:
|
||||
# In GDB, assignments to sp must be done from the
|
||||
# top-most frame, so select frame 0 first.
|
||||
gdb.execute('select-frame 0')
|
||||
gdb.parse_and_eval('$sp = $save_sp')
|
||||
gdb.parse_and_eval('$pc = $save_pc')
|
||||
save_frame.select()
|
||||
|
Loading…
Reference in New Issue
Block a user