From f23d1b929daf1f1513c63ac810f05db9b1492c10 Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Fri, 18 Mar 2011 18:50:20 +0000 Subject: [PATCH] gdb/ * tui/tui-hooks.c (tui_selected_frame_level_changed_hook): Assume there's always a frame. Use get_frame_pc_if_available instead of get_frame_pc, and if there's no PC available, don't look up a symtab. --- gdb/ChangeLog | 7 +++++++ gdb/tui/tui-hooks.c | 38 ++++++++++++++++++++------------------ 2 files changed, 27 insertions(+), 18 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 7fb05100cf..0dbc501d99 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2011-03-18 Pedro Alves + + * tui/tui-hooks.c (tui_selected_frame_level_changed_hook): Assume + there's always a frame. Use get_frame_pc_if_available instead of + get_frame_pc, and if there's no PC available, don't look up a + symtab. + 2011-03-18 Pedro Alves * stack.c (print_frame_local_vars, print_frame_arg_vars): Handle diff --git a/gdb/tui/tui-hooks.c b/gdb/tui/tui-hooks.c index e132b5a1b3..97b99a786a 100644 --- a/gdb/tui/tui-hooks.c +++ b/gdb/tui/tui-hooks.c @@ -190,6 +190,7 @@ static void tui_selected_frame_level_changed_hook (int level) { struct frame_info *fi; + CORE_ADDR pc; /* Negative level means that the selected frame was cleared. */ if (level < 0) @@ -199,28 +200,29 @@ tui_selected_frame_level_changed_hook (int level) /* Ensure that symbols for this frame are read in. Also, determine the source language of this frame, and switch to it if desired. */ - if (fi) + if (get_frame_pc_if_available (fi, &pc)) { struct symtab *s; - - s = find_pc_symtab (get_frame_pc (fi)); + + s = find_pc_symtab (pc); /* elz: This if here fixes the problem with the pc not being - displayed in the tui asm layout, with no debug symbols. The - value of s would be 0 here, and select_source_symtab would - abort the command by calling the 'error' function. */ + displayed in the tui asm layout, with no debug symbols. The + value of s would be 0 here, and select_source_symtab would + abort the command by calling the 'error' function. */ if (s) - select_source_symtab (s); - - /* Display the frame position (even if there is no symbols). */ - tui_show_frame_info (fi); - - /* Refresh the register window if it's visible. */ - if (tui_is_window_visible (DATA_WIN)) - { - tui_refreshing_registers = 1; - tui_check_data_values (fi); - tui_refreshing_registers = 0; - } + select_source_symtab (s); + } + + /* Display the frame position (even if there is no symbols or the PC + is not known). */ + tui_show_frame_info (fi); + + /* Refresh the register window if it's visible. */ + if (tui_is_window_visible (DATA_WIN)) + { + tui_refreshing_registers = 1; + tui_check_data_values (fi); + tui_refreshing_registers = 0; } } -- 2.34.1