gdb: Remove an update of current_source_line and current_source_symtab

While reviewing some of the annotation code I noticed that
identify_source_line (in source.c) sets current_source_line,
current_source_symtab, and also calls clear_lines_listed_range.  This
seems a little strange, identify_source_line is really a wrapper
around annotate_source, and is only called when annotation_level is
greater than 0 (so annotations are turned on).

It seems weird (to me) that when annotations are on we update GDB's
idea of the "current" line/symtab, but when they are off we don't,
given that annotations are really about communicating GDB's state to a
user (GUI) and surely shouldn't be changing GDB's behaviour.

This commit removes from identify_source_line all of the setting of
current line/symtab and the call to clear_lines_listed_range, after
doing this GDB still passes all tests, so I don't believe these lines
were actually required.

With this code removed identify_source_line is only a wrapper around
annotate_source, so I moved identify_source_line to annotate.c and
renamed it to annotate_source_line.

gdb/ChangeLog:

	* annotate.c: Add 'source.h' and 'objfiles.h' includes.
	(annotate_source): Make static.
	(annotate_source_line): Moved from source.c and renamed from
	identify_source_line.  Update the return type.
	* annotate.h (annotate_source): Delete declaration.
	(annotate_source_line): Declaration moved from source.h, and
	renamed from identify_source_line.  Return type updated.
	* source.c (identify_source_line): Moved to annotate.c and renamed
	to annotate_source_line.
	(info_line_command): Remove check of annotation_level.
	* source.h (identify_source_line): Move declaration to annotate.h
	and rename to annotate_source_line.
	* stack.c: Add 'annotate.h' include.
	(print_frame_info): Remove check of annotation_level before
	calling annotate_source_line.
This commit is contained in:
Andrew Burgess 2019-06-12 22:34:26 +01:00
parent 00df30ae1e
commit 0d3abd8cc9
6 changed files with 62 additions and 43 deletions

View File

@ -1,3 +1,21 @@
2019-06-15 Andrew Burgess <andrew.burgess@embecosm.com>
* annotate.c: Add 'source.h' and 'objfiles.h' includes.
(annotate_source): Make static.
(annotate_source_line): Moved from source.c and renamed from
identify_source_line. Update the return type.
* annotate.h (annotate_source): Delete declaration.
(annotate_source_line): Declaration moved from source.h, and
renamed from identify_source_line. Return type updated.
* source.c (identify_source_line): Moved to annotate.c and renamed
to annotate_source_line.
(info_line_command): Remove check of annotation_level.
* source.h (identify_source_line): Move declaration to annotate.h
and rename to annotate_source_line.
* stack.c: Add 'annotate.h' include.
(print_frame_info): Remove check of annotation_level before
calling annotate_source_line.
2019-06-15 Andrew Burgess <andrew.burgess@embecosm.com>
* source-cache.c (source_cache::get_plain_source_lines): Use

View File

@ -26,6 +26,8 @@
#include "inferior.h"
#include "infrun.h"
#include "top.h"
#include "source.h"
#include "objfiles.h"
/* Prototypes for local functions. */
@ -417,7 +419,7 @@ annotate_arg_end (void)
printf_filtered (("\n\032\032arg-end\n"));
}
void
static void
annotate_source (const char *filename, int line, int character, int mid,
struct gdbarch *gdbarch, CORE_ADDR pc)
{
@ -430,6 +432,31 @@ annotate_source (const char *filename, int line, int character, int mid,
mid ? "middle" : "beg", paddress (gdbarch, pc));
}
/* See annotate.h. */
bool
annotate_source_line (struct symtab *s, int line, int mid_statement,
CORE_ADDR pc)
{
if (annotation_level > 0)
{
if (s->line_charpos == nullptr)
open_source_file_with_line_charpos (s);
if (s->fullname == nullptr)
return false;
/* Don't index off the end of the line_charpos array. */
if (line > s->nlines)
return false;
annotate_source (s->fullname, line, s->line_charpos[line - 1],
mid_statement, get_objfile_arch (SYMTAB_OBJFILE (s)),
pc);
return true;
}
return false;
}
void
annotate_frame_begin (int level, struct gdbarch *gdbarch, CORE_ADDR pc)
{

View File

@ -87,8 +87,17 @@ struct annotate_arg_emitter
DISABLE_COPY_AND_ASSIGN (annotate_arg_emitter);
};
extern void annotate_source (const char *, int, int, int,
struct gdbarch *, CORE_ADDR);
/* If annotations are turned on then print annotation describing the full
name of the source file S and the line number LINE and its corresponding
character position.
MID_STATEMENT is nonzero if the PC is not at the beginning of that
line.
Return true if successful, false if the file could not be found or
annotations are turned off. */
extern bool annotate_source_line (struct symtab *s, int line,
int mid_statement, CORE_ADDR pc);
extern void annotate_frame_begin (int, struct gdbarch *, CORE_ADDR);
extern void annotate_function_call (void);

View File

@ -1212,29 +1212,6 @@ open_source_file_with_line_charpos (struct symtab *s)
/* See source.h. */
int
identify_source_line (struct symtab *s, int line, int mid_statement,
CORE_ADDR pc)
{
if (s->line_charpos == nullptr)
open_source_file_with_line_charpos (s);
if (s->fullname == 0)
return 0;
if (line > s->nlines)
/* Don't index off the end of the line_charpos array. */
return 0;
annotate_source (s->fullname, line, s->line_charpos[line - 1],
mid_statement, get_objfile_arch (SYMTAB_OBJFILE (s)), pc);
current_source_line = line;
current_source_symtab = s;
clear_lines_listed_range ();
return 1;
}
/* Print source lines from the file of symtab S,
starting with line number LINE and stopping before line number STOPLINE. */
@ -1519,8 +1496,8 @@ info_line_command (const char *arg, int from_tty)
/* If this is the only line, show the source code. If it could
not find the file, don't do anything special. */
if (annotation_level && sals.size () == 1)
identify_source_line (sal.symtab, sal.line, 0, start_pc);
if (sals.size () == 1)
annotate_source_line (sal.symtab, sal.line, 0, start_pc);
}
else
/* Is there any case in which we get here, and have an address

View File

@ -127,17 +127,6 @@ extern void clear_current_source_symtab_and_line (void);
/* Add a source path substitution rule. */
extern void add_substitute_path_rule (char *, char *);
/* Print text describing the full name of the source file S
and the line number LINE and its corresponding character position.
The text starts with two Ctrl-z so that the Emacs-GDB interface
can easily find it.
MID_STATEMENT is nonzero if the PC is not at the beginning of that line.
Return 1 if successful, 0 if could not find the file. */
extern int identify_source_line (struct symtab *s, int line,
int mid_statement, CORE_ADDR pc);
/* Flags passed as 4th argument to print_source_lines. */
enum print_source_lines_flag
{

View File

@ -47,6 +47,7 @@
#include "linespec.h"
#include "cli/cli-utils.h"
#include "objfiles.h"
#include "annotate.h"
#include "symfile.h"
#include "extension.h"
@ -962,13 +963,11 @@ print_frame_info (const frame_print_options &fp_opts,
if (source_print && sal.symtab)
{
int done = 0;
int mid_statement = ((print_what == SRC_LINE)
&& frame_show_address (frame, sal));
bool done = annotate_source_line (sal.symtab, sal.line, mid_statement,
get_frame_pc (frame));
if (annotation_level)
done = identify_source_line (sal.symtab, sal.line, mid_statement,
get_frame_pc (frame));
if (!done)
{
if (deprecated_print_frame_info_listing_hook)