From 3bae94c0fb82d5eb9c36c926534fced6db198d82 Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Thu, 16 May 2024 16:50:22 -0400 Subject: [PATCH] gdb: pass program space to get_current_source_symtab_and_line Make the current program space reference bubble up one level. Change-Id: I6ba6dc4a2cb188720cbb61b84ab5c954aac105c6 Approved-By: Tom Tromey Reviewed-By: Thiago Jung Bauermann --- gdb/breakpoint.c | 5 ++--- gdb/cli/cli-cmds.c | 14 +++++++++----- gdb/compile/compile.c | 4 +++- gdb/infcmd.c | 3 ++- gdb/linespec.c | 9 +++++---- gdb/macroscope.c | 6 +++--- gdb/mi/mi-cmd-file.c | 4 ++-- gdb/objfiles.c | 3 ++- gdb/parse.c | 4 ++-- gdb/python/python.c | 2 +- gdb/source.c | 11 +++++------ gdb/source.h | 4 +++- gdb/tui/tui-disasm.c | 3 ++- gdb/tui/tui-hooks.c | 3 ++- gdb/tui/tui-source.c | 5 +++-- gdb/tui/tui-winsource.c | 10 +++++----- 16 files changed, 51 insertions(+), 39 deletions(-) diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index 84b18ecb4b0..a81951702d2 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -8825,8 +8825,6 @@ static void parse_breakpoint_sals (location_spec *locspec, struct linespec_result *canonical) { - struct symtab_and_line cursal; - if (locspec->type () == LINESPEC_LOCATION_SPEC) { const char *spec @@ -8875,7 +8873,8 @@ parse_breakpoint_sals (location_spec *locspec, ObjC: However, don't match an Objective-C method name which may have a '+' or '-' succeeded by a '['. */ - cursal = get_current_source_symtab_and_line (); + symtab_and_line cursal + = get_current_source_symtab_and_line (current_program_space); if (last_displayed_sal_is_valid ()) { const char *spec = NULL; diff --git a/gdb/cli/cli-cmds.c b/gdb/cli/cli-cmds.c index 9d3a90b057d..92bb8fc2142 100644 --- a/gdb/cli/cli-cmds.c +++ b/gdb/cli/cli-cmds.c @@ -984,7 +984,7 @@ edit_command (const char *arg, int from_tty) if (arg == 0) { set_default_source_symtab_and_line (); - sal = get_current_source_symtab_and_line (); + sal = get_current_source_symtab_and_line (current_program_space); } /* Bare "edit" edits file with present line. */ @@ -1240,7 +1240,8 @@ list_command (const char *arg, int from_tty) if (get_first_line_listed () == 0 && (arg == nullptr || arg[0] != '.')) { set_default_source_symtab_and_line (); - list_around_line (arg, get_current_source_symtab_and_line ()); + list_around_line + (arg, get_current_source_symtab_and_line (current_program_space)); } /* "l" and "l +" lists the next few lines, unless we're listing past @@ -1248,7 +1249,8 @@ list_command (const char *arg, int from_tty) else if (arg == nullptr || arg[0] == '+') { set_default_source_symtab_and_line (); - const symtab_and_line cursal = get_current_source_symtab_and_line (); + const symtab_and_line cursal + = get_current_source_symtab_and_line (current_program_space); if (last_symtab_line (cursal.symtab) >= cursal.line) print_source_lines (cursal.symtab, source_lines_range (cursal.line), 0); @@ -1262,7 +1264,8 @@ list_command (const char *arg, int from_tty) else if (arg[0] == '-') { set_default_source_symtab_and_line (); - const symtab_and_line cursal = get_current_source_symtab_and_line (); + const symtab_and_line cursal + = get_current_source_symtab_and_line (current_program_space); if (get_first_line_listed () == 1) error (_("Already at the start of %s."), @@ -1305,7 +1308,8 @@ list_command (const char *arg, int from_tty) error (_("Insufficient debug info for showing source " "lines at default location")); } - cursal = get_current_source_symtab_and_line (); + cursal + = get_current_source_symtab_and_line (current_program_space); gdb_assert (cursal.symtab != nullptr); } diff --git a/gdb/compile/compile.c b/gdb/compile/compile.c index 88531a21781..8896b44a8c4 100644 --- a/gdb/compile/compile.c +++ b/gdb/compile/compile.c @@ -17,6 +17,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ +#include "progspace.h" #include "ui.h" #include "ui-out.h" #include "command.h" @@ -487,7 +488,8 @@ get_expr_block_and_pc (CORE_ADDR *pc) if (block == NULL) { - struct symtab_and_line cursal = get_current_source_symtab_and_line (); + symtab_and_line cursal + = get_current_source_symtab_and_line (current_program_space); if (cursal.symtab) block = cursal.symtab->compunit ()->blockvector ()->static_block (); diff --git a/gdb/infcmd.c b/gdb/infcmd.c index 4ce11b5af46..a030788331c 100644 --- a/gdb/infcmd.c +++ b/gdb/infcmd.c @@ -1078,7 +1078,8 @@ jump_command (const char *arg, int from_tty) { /* If multiple sal-objects were found, try dropping those that aren't from the current symtab. */ - struct symtab_and_line cursal = get_current_source_symtab_and_line (); + symtab_and_line cursal + = get_current_source_symtab_and_line (current_program_space); sals.erase (std::remove_if (sals.begin (), sals.end (), [&] (const symtab_and_line &sal) { diff --git a/gdb/linespec.c b/gdb/linespec.c index 8670e0ac541..eae4f9f44f0 100644 --- a/gdb/linespec.c +++ b/gdb/linespec.c @@ -3205,7 +3205,8 @@ decode_line_with_current_source (const char *string, int flags) /* We use whatever is set as the current source line. We do not try and get a default source symtab+line or it will recursively call us! */ - symtab_and_line cursal = get_current_source_symtab_and_line (); + symtab_and_line cursal + = get_current_source_symtab_and_line (current_program_space); location_spec_up locspec = string_to_location_spec (&string, current_language); @@ -3255,9 +3256,9 @@ initialize_defaults (struct symtab **default_symtab, int *default_line) /* Use whatever we have for the default source line. We don't use get_current_or_default_symtab_and_line as it can recurse and call us back! */ - struct symtab_and_line cursal = - get_current_source_symtab_and_line (); - + symtab_and_line cursal + = get_current_source_symtab_and_line (current_program_space); + *default_symtab = cursal.symtab; *default_line = cursal.line; } diff --git a/gdb/macroscope.c b/gdb/macroscope.c index 4c1304f119a..c1b2238b173 100644 --- a/gdb/macroscope.c +++ b/gdb/macroscope.c @@ -121,9 +121,9 @@ default_macro_scope (void) symbol files loaded, then get_current_or_default would raise an error. But `set width' shouldn't raise an error just because it can't decide which scope to macro-expand its argument in. */ - struct symtab_and_line cursal - = get_current_source_symtab_and_line (); - + symtab_and_line cursal + = get_current_source_symtab_and_line (current_program_space); + sal.symtab = cursal.symtab; sal.line = cursal.line; } diff --git a/gdb/mi/mi-cmd-file.c b/gdb/mi/mi-cmd-file.c index 3e2702e04ed..f2fe4351f87 100644 --- a/gdb/mi/mi-cmd-file.c +++ b/gdb/mi/mi-cmd-file.c @@ -35,7 +35,6 @@ void mi_cmd_file_list_exec_source_file (const char *command, const char *const *argv, int argc) { - struct symtab_and_line st; struct ui_out *uiout = current_uiout; if (!mi_valid_noargs ("-file-list-exec-source-file", argc, argv)) @@ -43,7 +42,8 @@ mi_cmd_file_list_exec_source_file (const char *command, /* Set the default file and line, also get them. */ set_default_source_symtab_and_line (); - st = get_current_source_symtab_and_line (); + symtab_and_line st + = get_current_source_symtab_and_line (current_program_space); /* We should always get a symtab. Apparently, filename does not need to be tested for NULL. The documentation in symtab.h diff --git a/gdb/objfiles.c b/gdb/objfiles.c index ffa730120f5..67021581d3c 100644 --- a/gdb/objfiles.c +++ b/gdb/objfiles.c @@ -561,7 +561,8 @@ objfile::~objfile () and if so, call clear_current_source_symtab_and_line. */ { - struct symtab_and_line cursal = get_current_source_symtab_and_line (); + symtab_and_line cursal + = get_current_source_symtab_and_line (this->pspace ()); if (cursal.symtab && cursal.symtab->compunit ()->objfile () == this) clear_current_source_symtab_and_line (this->pspace ()); diff --git a/gdb/parse.c b/gdb/parse.c index c10b09af485..2541a2eb143 100644 --- a/gdb/parse.c +++ b/gdb/parse.c @@ -375,8 +375,8 @@ parse_exp_in_context (const char **stringptr, CORE_ADDR pc, if (!expression_context_block) { - struct symtab_and_line cursal - = get_current_source_symtab_and_line (); + symtab_and_line cursal + = get_current_source_symtab_and_line (current_program_space); if (cursal.symtab) expression_context_block diff --git a/gdb/python/python.c b/gdb/python/python.c index e9092b4d994..d86a031ee95 100644 --- a/gdb/python/python.c +++ b/gdb/python/python.c @@ -963,7 +963,7 @@ gdbpy_decode_line (PyObject *self, PyObject *args) else { set_default_source_symtab_and_line (); - def_sal = get_current_source_symtab_and_line (); + def_sal = get_current_source_symtab_and_line (current_program_space); sals = def_sal; } } diff --git a/gdb/source.c b/gdb/source.c index bdbe67d19f5..25d6e7183a7 100644 --- a/gdb/source.c +++ b/gdb/source.c @@ -231,16 +231,15 @@ get_source_location (program_space *pspace) return loc; } -/* Return the current source file for listing and next line to list. - NOTE: The returned sal pc and end fields are not valid. */ +/* See source.h. */ -struct symtab_and_line -get_current_source_symtab_and_line (void) +symtab_and_line +get_current_source_symtab_and_line (program_space *pspace) { symtab_and_line cursal; - current_source_location *loc = get_source_location (current_program_space); + current_source_location *loc = get_source_location (pspace); - cursal.pspace = current_program_space; + cursal.pspace = pspace; cursal.symtab = loc->symtab (); cursal.line = loc->line (); cursal.pc = 0; diff --git a/gdb/source.h b/gdb/source.h index 4eb17937899..541ee3b7a12 100644 --- a/gdb/source.h +++ b/gdb/source.h @@ -23,6 +23,7 @@ struct program_space; struct symtab; +struct symtab_and_line; /* See openp function definition for their description. */ @@ -108,7 +109,8 @@ extern int get_lines_to_list (void); /* Return the current source file for listing and next line to list. NOTE: The returned sal pc and end fields are not valid. */ -extern struct symtab_and_line get_current_source_symtab_and_line (void); +extern symtab_and_line get_current_source_symtab_and_line + (program_space *pspace); /* If the current source file for listing is not set, try and get a default. Usually called before get_current_source_symtab_and_line() is called. diff --git a/gdb/tui/tui-disasm.c b/gdb/tui/tui-disasm.c index 2f25fedbcab..53be866187e 100644 --- a/gdb/tui/tui-disasm.c +++ b/gdb/tui/tui-disasm.c @@ -393,7 +393,8 @@ tui_get_begin_asm_address (struct gdbarch **gdbarch_p, CORE_ADDR *addr_p) || have_partial_symbols (current_program_space)) { set_default_source_symtab_and_line (); - struct symtab_and_line sal = get_current_source_symtab_and_line (); + symtab_and_line sal + = get_current_source_symtab_and_line (current_program_space); if (sal.symtab != nullptr) find_line_pc (sal.symtab, sal.line, &addr); diff --git a/gdb/tui/tui-hooks.c b/gdb/tui/tui-hooks.c index e6673ab650d..25358d08352 100644 --- a/gdb/tui/tui-hooks.c +++ b/gdb/tui/tui-hooks.c @@ -127,7 +127,8 @@ tui_refresh_frame_and_register_information () /* Make sure that the source window is displayed. */ tui_add_win_to_layout (SRC_WIN); - struct symtab_and_line sal = get_current_source_symtab_and_line (); + symtab_and_line sal + = get_current_source_symtab_and_line (current_program_space); tui_update_source_windows_with_line (sal); } } diff --git a/gdb/tui/tui-source.c b/gdb/tui/tui-source.c index 444c0f7a90e..ee64e4172b5 100644 --- a/gdb/tui/tui-source.c +++ b/gdb/tui/tui-source.c @@ -136,7 +136,8 @@ tui_source_window::do_scroll_vertical (int num_to_scroll) if (!m_content.empty ()) { struct symtab *s; - struct symtab_and_line cursal = get_current_source_symtab_and_line (); + symtab_and_line cursal + = get_current_source_symtab_and_line (current_program_space); struct gdbarch *arch = m_gdbarch; if (cursal.symtab == NULL) @@ -220,7 +221,7 @@ void tui_source_window::display_start_addr (struct gdbarch **gdbarch_p, CORE_ADDR *addr_p) { - struct symtab_and_line cursal = get_current_source_symtab_and_line (); + symtab_and_line cursal = get_current_source_symtab_and_line (current_program_space); *gdbarch_p = m_gdbarch; find_line_pc (cursal.symtab, m_start_line_or_addr.u.line_no, addr_p); diff --git a/gdb/tui/tui-winsource.c b/gdb/tui/tui-winsource.c index 80297e59dd6..b08fca7a7e3 100644 --- a/gdb/tui/tui-winsource.c +++ b/gdb/tui/tui-winsource.c @@ -440,8 +440,8 @@ tui_source_window_base::rerender () if (!m_content.empty ()) { - struct symtab_and_line cursal - = get_current_source_symtab_and_line (); + symtab_and_line cursal + = get_current_source_symtab_and_line (current_program_space); if (m_start_line_or_addr.loa == LOA_LINE) cursal.line = m_start_line_or_addr.u.line_no; @@ -451,8 +451,8 @@ tui_source_window_base::rerender () } else if (deprecated_safe_get_selected_frame () != NULL) { - struct symtab_and_line cursal - = get_current_source_symtab_and_line (); + symtab_and_line cursal + = get_current_source_symtab_and_line (current_program_space); frame_info_ptr frame = deprecated_safe_get_selected_frame (); struct gdbarch *gdbarch = get_frame_arch (frame); @@ -492,7 +492,7 @@ tui_source_window_base::refill () if (this == tui_src_win ()) { - sal = get_current_source_symtab_and_line (); + sal = get_current_source_symtab_and_line (current_program_space); if (sal.symtab == NULL) { frame_info_ptr fi = deprecated_safe_get_selected_frame ();