aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog14
-rw-r--r--gdb/breakpoint.c26
-rw-r--r--gdb/infcmd.c2
-rw-r--r--gdb/linespec.c48
-rw-r--r--gdb/linespec.h13
-rw-r--r--gdb/macrocmd.c4
-rw-r--r--gdb/mi/mi-main.c3
-rw-r--r--gdb/source.c5
-rw-r--r--gdb/stack.c2
-rw-r--r--gdb/symtab.c22
-rw-r--r--gdb/symtab.h7
-rw-r--r--gdb/tracepoint.c2
12 files changed, 89 insertions, 59 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index b9e1f62..4ab8707 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,17 @@
+2012-06-29 Doug Evans <dje@google.com>
+
+ * 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 <dje@google.com>
* dwarf2read.c (get_cu_length): New function.
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index 71a5e19..896c122 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 b7770cc..475ac90 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 ccafe59..4156694 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 ed8174f..0310bb4 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 367f211..a327cad 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 d395731..dfb4892 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 7de86b4..0ff0782 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 02e36ca..2520e2c 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 46d119a..d83f518 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 57f618d..76120a3 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 e4fd2d3..0fc4ea4 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];
}