From 39cf75f7e02e5d3e0080a7862cde324e378c69ea Mon Sep 17 00:00:00 2001 From: Doug Evans Date: Fri, 29 Jun 2012 22:46:46 +0000 Subject: [PATCH] * linespec.c: #include "stack.h". (decode_line_with_current_source): Moved here from symtab.c and renamed from decode_line_spec. All callers updated. (decode_line_with_last_displayed): Moved here from breakpoint.c and renamed from decode_line_spec_1. All callers updated. * linespec.h (decode_line_with_current_source): Move declaration here from symtab.h and renamed from decode_line_spec. (decode_line_with_last_displayed): Move declaration here from symtab.h and renamed from decode_line_spec_1. * macrocmd.c: #include "linespec.h". * symtab.c: Remove #include "linespec.h". --- gdb/ChangeLog | 14 ++++++++++++++ gdb/breakpoint.c | 26 +++----------------------- gdb/infcmd.c | 2 +- gdb/linespec.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ gdb/linespec.h | 13 +++++++++++++ gdb/macrocmd.c | 4 +++- gdb/mi/mi-main.c | 3 ++- gdb/source.c | 5 +++-- gdb/stack.c | 2 +- gdb/symtab.c | 22 ---------------------- gdb/symtab.h | 7 ------- gdb/tracepoint.c | 2 +- 12 files changed, 89 insertions(+), 59 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index b9e1f626d1..4ab87071ca 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,17 @@ +2012-06-29 Doug Evans + + * linespec.c: #include "stack.h". + (decode_line_with_current_source): Moved here from symtab.c and + renamed from decode_line_spec. All callers updated. + (decode_line_with_last_displayed): Moved here from breakpoint.c and + renamed from decode_line_spec_1. All callers updated. + * linespec.h (decode_line_with_current_source): Move declaration here + from symtab.h and renamed from decode_line_spec. + (decode_line_with_last_displayed): Move declaration here from symtab.h + and renamed from decode_line_spec_1. + * macrocmd.c: #include "linespec.h". + * symtab.c: Remove #include "linespec.h". + 2012-06-28 Doug Evans * dwarf2read.c (get_cu_length): New function. diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index 71a5e19396..896c122903 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -11532,8 +11532,9 @@ clear_command (char *arg, int from_tty) if (arg) { - sals = decode_line_spec (arg, (DECODE_LINE_FUNFIRSTLINE - | DECODE_LINE_LIST_MODE)); + sals = decode_line_with_current_source (arg, + (DECODE_LINE_FUNFIRSTLINE + | DECODE_LINE_LIST_MODE)); default_match = 0; } else @@ -14494,27 +14495,6 @@ invalidate_bp_value_on_memory_change (CORE_ADDR addr, int len, } } -/* Use the last displayed codepoint's values, or nothing - if they aren't valid. */ - -struct symtabs_and_lines -decode_line_spec_1 (char *string, int flags) -{ - struct symtabs_and_lines sals; - - if (string == 0) - error (_("Empty line specification.")); - if (last_displayed_sal_is_valid ()) - sals = decode_line_1 (&string, flags, - get_last_displayed_symtab (), - get_last_displayed_line ()); - else - sals = decode_line_1 (&string, flags, (struct symtab *) NULL, 0); - if (*string) - error (_("Junk at end of line specification: %s"), string); - return sals; -} - /* Create and insert a raw software breakpoint at PC. Return an identifier, which should be used to remove the breakpoint later. In general, places which call this should be using something on the diff --git a/gdb/infcmd.c b/gdb/infcmd.c index b7770ccfb9..475ac90e1c 100644 --- a/gdb/infcmd.c +++ b/gdb/infcmd.c @@ -1140,7 +1140,7 @@ jump_command (char *arg, int from_tty) if (!arg) error_no_arg (_("starting address")); - sals = decode_line_spec_1 (arg, DECODE_LINE_FUNFIRSTLINE); + sals = decode_line_with_last_displayed (arg, DECODE_LINE_FUNFIRSTLINE); if (sals.nelts != 1) { error (_("Unreasonable jump request")); diff --git a/gdb/linespec.c b/gdb/linespec.c index ccafe59c9e..4156694bc4 100644 --- a/gdb/linespec.c +++ b/gdb/linespec.c @@ -43,6 +43,7 @@ #include "cli/cli-utils.h" #include "filenames.h" #include "ada-lang.h" +#include "stack.h" typedef struct symtab *symtab_p; DEF_VEC_P (symtab_p); @@ -2325,6 +2326,8 @@ decode_line_full (char **argptr, int flags, do_cleanups (cleanups); } +/* See linespec.h. */ + struct symtabs_and_lines decode_line_1 (char **argptr, int flags, struct symtab *default_symtab, @@ -2345,6 +2348,51 @@ decode_line_1 (char **argptr, int flags, return result; } +/* See linespec.h. */ + +struct symtabs_and_lines +decode_line_with_current_source (char *string, int flags) +{ + struct symtabs_and_lines sals; + struct symtab_and_line cursal; + + if (string == 0) + error (_("Empty line specification.")); + + /* 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! */ + cursal = get_current_source_symtab_and_line (); + + sals = decode_line_1 (&string, flags, + cursal.symtab, cursal.line); + + if (*string) + error (_("Junk at end of line specification: %s"), string); + return sals; +} + +/* See linespec.h. */ + +struct symtabs_and_lines +decode_line_with_last_displayed (char *string, int flags) +{ + struct symtabs_and_lines sals; + + if (string == 0) + error (_("Empty line specification.")); + + if (last_displayed_sal_is_valid ()) + sals = decode_line_1 (&string, flags, + get_last_displayed_symtab (), + get_last_displayed_line ()); + else + sals = decode_line_1 (&string, flags, (struct symtab *) NULL, 0); + + if (*string) + error (_("Junk at end of line specification: %s"), string); + return sals; +} + /* First, some functions to initialize stuff at the beggining of the diff --git a/gdb/linespec.h b/gdb/linespec.h index ed8174fb7a..0310bb4a4e 100644 --- a/gdb/linespec.h +++ b/gdb/linespec.h @@ -93,6 +93,8 @@ extern void destroy_linespec_result (struct linespec_result *); extern struct cleanup * make_cleanup_destroy_linespec_result (struct linespec_result *); +/* Decode a linespec using the provided default symtab and line. */ + extern struct symtabs_and_lines decode_line_1 (char **argptr, int flags, struct symtab *default_symtab, int default_line); @@ -139,4 +141,15 @@ extern void decode_line_full (char **argptr, int flags, const char *select_mode, const char *filter); +/* Given a string, return the line specified by it, using the current + source symtab and line as defaults. + This is for commands like "list" and "breakpoint". */ + +extern struct symtabs_and_lines decode_line_with_current_source (char *, int); + +/* Given a string, return the line specified by it, using the last displayed + codepoint's values as defaults, or nothing if they aren't valid. */ + +extern struct symtabs_and_lines decode_line_with_last_displayed (char *, int); + #endif /* defined (LINESPEC_H) */ diff --git a/gdb/macrocmd.c b/gdb/macrocmd.c index 367f211d06..a327cade4c 100644 --- a/gdb/macrocmd.c +++ b/gdb/macrocmd.c @@ -26,6 +26,7 @@ #include "command.h" #include "gdbcmd.h" #include "gdb_string.h" +#include "linespec.h" /* The `macro' prefix command. */ @@ -282,7 +283,8 @@ info_macros_command (char *args, int from_tty) ms = default_macro_scope (); else { - struct symtabs_and_lines sals = decode_line_spec (args, 0); + struct symtabs_and_lines sals = + decode_line_with_current_source (args, 0); if (sals.nelts) ms = sal_macro_scope (sals.sals[0]); diff --git a/gdb/mi/mi-main.c b/gdb/mi/mi-main.c index d395731278..dfb489243c 100644 --- a/gdb/mi/mi-main.c +++ b/gdb/mi/mi-main.c @@ -2436,7 +2436,8 @@ mi_cmd_trace_find (char *command, char **argv, int argc) if (argc != 2) error (_("Line is required")); - sals = decode_line_spec (argv[1], DECODE_LINE_FUNFIRSTLINE); + sals = decode_line_with_current_source (argv[1], + DECODE_LINE_FUNFIRSTLINE); back_to = make_cleanup (xfree, sals.sals); sal = sals.sals[0]; diff --git a/gdb/source.c b/gdb/source.c index 7de86b4925..0ff0782d45 100644 --- a/gdb/source.c +++ b/gdb/source.c @@ -243,7 +243,8 @@ select_source_symtab (struct symtab *s) if one exists. */ if (lookup_symbol (main_name (), 0, VAR_DOMAIN, 0)) { - sals = decode_line_spec (main_name (), DECODE_LINE_FUNFIRSTLINE); + sals = decode_line_with_current_source (main_name (), + DECODE_LINE_FUNFIRSTLINE); sal = sals.sals[0]; xfree (sals.sals); current_source_pspace = sal.pspace; @@ -1405,7 +1406,7 @@ line_info (char *arg, int from_tty) } else { - sals = decode_line_spec_1 (arg, DECODE_LINE_LIST_MODE); + sals = decode_line_with_last_displayed (arg, DECODE_LINE_LIST_MODE); dont_repeat (); } diff --git a/gdb/stack.c b/gdb/stack.c index 02e36ca2e0..2520e2c36d 100644 --- a/gdb/stack.c +++ b/gdb/stack.c @@ -2373,7 +2373,7 @@ func_command (char *arg, int from_tty) return; frame = parse_frame_specification ("0"); - sals = decode_line_spec (arg, DECODE_LINE_FUNFIRSTLINE); + sals = decode_line_with_current_source (arg, DECODE_LINE_FUNFIRSTLINE); cleanups = make_cleanup (xfree, sals.sals); func_bounds = (struct function_bounds *) xmalloc ( sizeof (struct function_bounds) * sals.nelts); diff --git a/gdb/symtab.c b/gdb/symtab.c index 46d119a523..d83f518fa7 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -33,7 +33,6 @@ #include "language.h" #include "demangle.h" #include "inferior.h" -#include "linespec.h" #include "source.h" #include "filenames.h" /* for FILENAME_CMP */ #include "objc-lang.h" @@ -4821,27 +4820,6 @@ skip_prologue_using_sal (struct gdbarch *gdbarch, CORE_ADDR func_addr) return prologue_sal.pc; } -struct symtabs_and_lines -decode_line_spec (char *string, int flags) -{ - struct symtabs_and_lines sals; - struct symtab_and_line cursal; - - if (string == 0) - error (_("Empty line specification.")); - - /* We use whatever is set as the current source line. We do not try - and get a default or it will recursively call us! */ - cursal = get_current_source_symtab_and_line (); - - sals = decode_line_1 (&string, flags, - cursal.symtab, cursal.line); - - if (*string) - error (_("Junk at end of line specification: %s"), string); - return sals; -} - /* Track MAIN */ static char *name_of_main; enum language language_of_main = language_unknown; diff --git a/gdb/symtab.h b/gdb/symtab.h index 57f618d0f1..76120a37a9 100644 --- a/gdb/symtab.h +++ b/gdb/symtab.h @@ -1113,13 +1113,6 @@ extern int find_line_pc_range (struct symtab_and_line, CORE_ADDR *, extern void resolve_sal_pc (struct symtab_and_line *); -/* Given a string, return the line specified by it. For commands like "list" - and "breakpoint". */ - -extern struct symtabs_and_lines decode_line_spec (char *, int); - -extern struct symtabs_and_lines decode_line_spec_1 (char *, int); - /* Symmisc.c */ void maintenance_print_symbols (char *, int); diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c index e4fd2d3810..0fc4ea4bae 100644 --- a/gdb/tracepoint.c +++ b/gdb/tracepoint.c @@ -2494,7 +2494,7 @@ trace_find_line_command (char *args, int from_tty) } else { - sals = decode_line_spec (args, DECODE_LINE_FUNFIRSTLINE); + sals = decode_line_with_current_source (args, DECODE_LINE_FUNFIRSTLINE); sal = sals.sals[0]; } -- 2.34.1