Skip to content

Commit 048988a

Browse files
committed
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 <[email protected]> Reviewed-by: Austin Clements <[email protected]> TryBot-Result: Gobot Gobot <[email protected]>
1 parent 578667f commit 048988a

File tree

1 file changed

+6
-0
lines changed

1 file changed

+6
-0
lines changed

src/runtime/runtime-gdb.py

+6
Original file line numberDiff line numberDiff line change
@@ -528,11 +528,17 @@ def invoke(self, arg, _from_tty):
528528
save_frame = gdb.selected_frame()
529529
gdb.parse_and_eval('$save_sp = $sp')
530530
gdb.parse_and_eval('$save_pc = $pc')
531+
# In GDB, assignments to sp must be done from the
532+
# top-most frame, so select frame 0 first.
533+
gdb.execute('select-frame 0')
531534
gdb.parse_and_eval('$sp = {0}'.format(str(sp)))
532535
gdb.parse_and_eval('$pc = {0}'.format(str(pc)))
533536
try:
534537
gdb.execute(cmd)
535538
finally:
539+
# In GDB, assignments to sp must be done from the
540+
# top-most frame, so select frame 0 first.
541+
gdb.execute('select-frame 0')
536542
gdb.parse_and_eval('$sp = $save_sp')
537543
gdb.parse_and_eval('$pc = $save_pc')
538544
save_frame.select()

0 commit comments

Comments
 (0)