aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog20
-rw-r--r--gdb/cli/cli-cmds.c10
-rw-r--r--gdb/linespec.c9
-rw-r--r--gdb/source.c31
-rw-r--r--gdb/source.h24
-rw-r--r--gdb/stack.c4
6 files changed, 60 insertions, 38 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index e1866d1..8180ac7 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,7 +1,23 @@
2002-09-22 Fernando Nasser <fnasser@redhat.com>
- * source.c (get_current_source_symtab_and_line): Initialize sal.pc and
- sal.end fields.
+ * source.c (get_current_or_default_source_symtab_and_line): Remove
+ function.
+ (set_default_source_symtab_and_line): New function. Attempts to
+ determine a source file to list lines from if one is not currently
+ defined.
+ (get_current_source_symtab_and_line): Initialize sal.pc and
+ sal.end fields.
+ (set_current_source_symtab_and_line): Mark argument as const.
+ * source.h: Update declarations and comments.
+ * linespec.c (decode_line_1): Replace call to removed routine above.
+ * stack.c (print_frame_info_base): Ditto.
+ * cli/cli-cmds.c (edit_command): Ditto.
+ (list_command): Ditto.
+
+2002-09-22 Fernando Nasser <fnasser@redhat.com>
+
+ * source.c (get_current__or_default_source_symtab_and_line): Initialize
+ sal.pc and sal.end fields.
(get_current_or_default_source_symtab_and_line): Ditto.
* breakpoint.c (parse_breakpoint_sals): Use correct accessor function
so we do not cause a new source symtab to be searched for (reverting an
diff --git a/gdb/cli/cli-cmds.c b/gdb/cli/cli-cmds.c
index 0b5b857..c44975a 100644
--- a/gdb/cli/cli-cmds.c
+++ b/gdb/cli/cli-cmds.c
@@ -552,7 +552,10 @@ edit_command (char *arg, int from_tty)
/* Pull in the current default source line if necessary */
if (arg == 0)
- sal = get_current_or_default_source_symtab_and_line ();
+ {
+ set_default_source_symtab_and_line ();
+ sal = get_current_source_symtab_and_line ();
+ }
/* bare "edit" edits file with present line. */
@@ -655,7 +658,10 @@ list_command (char *arg, int from_tty)
/* Pull in the current default source line if necessary */
if (arg == 0 || arg[0] == '+' || arg[0] == '-')
- cursal = get_current_or_default_source_symtab_and_line ();
+ {
+ set_default_source_symtab_and_line ();
+ cursal = get_current_source_symtab_and_line ();
+ }
/* "l" or "l +" lists next ten lines. */
diff --git a/gdb/linespec.c b/gdb/linespec.c
index d1bb4e3..5631fd3 100644
--- a/gdb/linespec.c
+++ b/gdb/linespec.c
@@ -1027,13 +1027,16 @@ decode_line_1 (char **argptr, int funfirstline, struct symtab *default_symtab,
/* This is where we need to make sure that we have good defaults.
We must guarantee that this section of code is never executed
when we are called with just a function name, since
- get_current_or_default_source_symtab_and_line uses
+ set_default_source_symtab_and_line uses
select_source_symtab that calls us with such an argument */
if (s == 0 && default_symtab == 0)
{
- struct symtab_and_line cursal =
- get_current_or_default_source_symtab_and_line ();
+ struct symtab_and_line cursal;
+
+ /* Make sure we have at least a default source file. */
+ set_default_source_symtab_and_line ();
+ cursal = get_current_source_symtab_and_line ();
default_symtab = cursal.symtab;
default_line = cursal.line;
diff --git a/gdb/source.c b/gdb/source.c
index d2e47fe..5c88a55 100644
--- a/gdb/source.c
+++ b/gdb/source.c
@@ -152,21 +152,22 @@ get_current_source_symtab_and_line (void)
cursal.symtab = current_source_symtab;
cursal.line = current_source_line;
+ cursal.pc = 0;
+ cursal.end = 0;
return cursal;
}
-/* Return the current source file for listing and next line to list.
- If a file is not set, try and get a default.
+/* 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.
It may err out if a default cannot be determined.
- Depending on where it is called, it can recurse as the process of
- determining a new default may call the caler!
- Use get_current_source_symtab_and_line instead to get whatever
- we have without erroring out or trying to get a default.
- NOTE: The returned sal pc and end fields are not valid. */
+ We must be cautious about where it is called, as it can recurse as the
+ process of determining a new default may call the caller!
+ Use get_current_source_symtab_and_line only to get whatever
+ we have without erroring out or trying to get a default. */
-struct symtab_and_line
-get_current_or_default_source_symtab_and_line (void)
+void
+set_default_source_symtab_and_line (void)
{
struct symtab_and_line cursal;
@@ -176,21 +177,15 @@ get_current_or_default_source_symtab_and_line (void)
/* Pull in a current source symtab if necessary */
if (current_source_symtab == 0)
select_source_symtab (0);
-
- cursal.symtab = current_source_symtab;
- cursal.line = current_source_line;
- cursal.pc = 0;
- cursal.end = 0;
-
- return cursal;
}
/* Return the current default file for listing and next line to list
(the returned sal pc and end fields are not valid.)
- and set the surrent default to whatever is in SAL */
+ and set the current default to whatever is in SAL.
+ NOTE: The returned sal pc and end fields are not valid. */
struct symtab_and_line
-set_current_source_symtab_and_line (struct symtab_and_line *sal)
+set_current_source_symtab_and_line (const struct symtab_and_line *sal)
{
struct symtab_and_line cursal;
diff --git a/gdb/source.h b/gdb/source.h
index 84cd0ff..ba7d45f 100644
--- a/gdb/source.h
+++ b/gdb/source.h
@@ -44,23 +44,23 @@ 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 void clear_current_source_symtab_and_line (void);
+extern struct symtab_and_line get_current_source_symtab_and_line (void);
-/* Return the current source file for listing and next line to list.
- If a file is not set, try and get a default.
+/* 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.
It may err out if a default cannot be determined.
- Depending on where it is called, it can recurse as the process of
- determining a new default may call the caler!
- Use get_current_source_symtab_and_line instead to get whatever
- we have without erroring out or trying to get a default.
- NOTE: The returned sal pc and end fields are not valid. */
-extern struct symtab_and_line get_current_source_symtab_and_line (void);
+ We must be cautious about where it is called, as it can recurse as the
+ process of determining a new default may call the caller!
+ Use get_current_source_symtab_and_line only to get whatever
+ we have without erroring out or trying to get a default. */
+extern void set_default_source_symtab_and_line (void);
/* Return the current default file for listing and next line to list
(the returned sal pc and end fields are not valid.)
- and set the surrent default to whatever is in SAL */
-extern struct symtab_and_line get_current_or_default_source_symtab_and_line (void);
+ and set the current default to whatever is in SAL.
+ NOTE: The returned sal pc and end fields are not valid. */
+extern struct symtab_and_line set_current_source_symtab_and_line (const struct symtab_and_line *);
/* Reset any information stored about a default file and line to print. */
-extern struct symtab_and_line set_current_source_symtab_and_line (struct symtab_and_line *);
+extern void clear_current_source_symtab_and_line (void);
#endif
diff --git a/gdb/stack.c b/gdb/stack.c
index 4f41531..83fd26e 100644
--- a/gdb/stack.c
+++ b/gdb/stack.c
@@ -434,7 +434,9 @@ print_frame_info_base (struct frame_info *fi, int level, int source, int args)
print_source_lines (sal.symtab, sal.line, sal.line + 1, 0);
}
}
- cursal = get_current_or_default_source_symtab_and_line ();
+ /* Make sure we have at least a default source file */
+ set_default_source_symtab_and_line ();
+ cursal = get_current_source_symtab_and_line ();
cursal.line = max (sal.line - get_lines_to_list () / 2, 1);
set_current_source_symtab_and_line (&cursal);
}