gdb: Don't allow annotations to influence what else GDB prints

The annotations should be additional information printed by GDB to be
consumed by users (GUIs), but GDB shouldn't reduce what it prints
based on whether annotations are on or not.  However, this is what
happens for annotate_source_line.

This commit makes annotate_source_line a void function that simply
outputs the annotation information, GDB will then print the contents
of the source line to the terminal in the normal way.

Some tests needed to be updated after this commit.

gdb/ChangeLog:

	* annotate.c (annotate_source_line): Change return type to void,
	update implementation to match.
	* annotate.h (annotate_source_line): Change return type to void,
	update header comment.
	* stack.c (print_frame_info): Don't change what frame information
	is printed based on whether annotations are on or not.

gdb/testsuite/ChangeLog:

	* gdb.base/annota1.exp: Update expected results.
	* gdb.cp/annota2.exp: Likewise.
	* gdb.cp/annota3.exp: Likewise.
This commit is contained in:
Andrew Burgess 2019-06-14 23:43:00 +01:00
parent 0d3abd8cc9
commit ec8e2b6d30
8 changed files with 52 additions and 45 deletions

View File

@ -1,3 +1,12 @@
2019-06-15 Andrew Burgess <andrew.burgess@embecosm.com>
* annotate.c (annotate_source_line): Change return type to void,
update implementation to match.
* annotate.h (annotate_source_line): Change return type to void,
update header comment.
* stack.c (print_frame_info): Don't change what frame information
is printed based on whether annotations are on or not.
2019-06-15 Andrew Burgess <andrew.burgess@embecosm.com>
* annotate.c: Add 'source.h' and 'objfiles.h' includes.

View File

@ -434,7 +434,7 @@ annotate_source (const char *filename, int line, int character, int mid,
/* See annotate.h. */
bool
void
annotate_source_line (struct symtab *s, int line, int mid_statement,
CORE_ADDR pc)
{
@ -443,17 +443,15 @@ annotate_source_line (struct symtab *s, int line, int mid_statement,
if (s->line_charpos == nullptr)
open_source_file_with_line_charpos (s);
if (s->fullname == nullptr)
return false;
return;
/* Don't index off the end of the line_charpos array. */
if (line > s->nlines)
return false;
return;
annotate_source (s->fullname, line, s->line_charpos[line - 1],
mid_statement, get_objfile_arch (SYMTAB_OBJFILE (s)),
pc);
return true;
}
return false;
}

View File

@ -92,11 +92,8 @@ struct annotate_arg_emitter
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,
line. */
extern void annotate_source_line (struct symtab *s, int line,
int mid_statement, CORE_ADDR pc);
extern void annotate_frame_begin (int, struct gdbarch *, CORE_ADDR);

View File

@ -965,45 +965,41 @@ print_frame_info (const frame_print_options &fp_opts,
{
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));
annotate_source_line (sal.symtab, sal.line, mid_statement,
get_frame_pc (frame));
if (!done)
if (deprecated_print_frame_info_listing_hook)
deprecated_print_frame_info_listing_hook (sal.symtab, sal.line,
sal.line + 1, 0);
else
{
if (deprecated_print_frame_info_listing_hook)
deprecated_print_frame_info_listing_hook (sal.symtab,
sal.line,
sal.line + 1, 0);
else
struct value_print_options opts;
get_user_print_options (&opts);
/* We used to do this earlier, but that is clearly
wrong. This function is used by many different
parts of gdb, including normal_stop in infrun.c,
which uses this to print out the current PC
when we stepi/nexti into the middle of a source
line. Only the command line really wants this
behavior. Other UIs probably would like the
ability to decide for themselves if it is desired. */
if (opts.addressprint && mid_statement)
{
struct value_print_options opts;
get_user_print_options (&opts);
/* We used to do this earlier, but that is clearly
wrong. This function is used by many different
parts of gdb, including normal_stop in infrun.c,
which uses this to print out the current PC
when we stepi/nexti into the middle of a source
line. Only the command line really wants this
behavior. Other UIs probably would like the
ability to decide for themselves if it is desired. */
if (opts.addressprint && mid_statement)
{
uiout->field_core_addr ("addr",
gdbarch, get_frame_pc (frame));
uiout->text ("\t");
}
print_source_lines (sal.symtab, sal.line, sal.line + 1, 0);
uiout->field_core_addr ("addr",
gdbarch, get_frame_pc (frame));
uiout->text ("\t");
}
}
/* If disassemble-next-line is set to on and there is line debug
messages, output assembly codes for next line. */
if (disassemble_next_line == AUTO_BOOLEAN_TRUE)
do_gdb_disassembly (get_frame_arch (frame), -1, sal.pc, sal.end);
print_source_lines (sal.symtab, sal.line, sal.line + 1, 0);
}
}
/* If disassemble-next-line is set to on and there is line debug
messages, output assembly codes for next line. */
if (disassemble_next_line == AUTO_BOOLEAN_TRUE)
do_gdb_disassembly (get_frame_arch (frame), -1, sal.pc, sal.end);
if (set_current_sal)
{
CORE_ADDR pc;

View File

@ -1,3 +1,9 @@
2019-06-15 Andrew Burgess <andrew.burgess@embecosm.com>
* gdb.base/annota1.exp: Update expected results.
* gdb.cp/annota2.exp: Likewise.
* gdb.cp/annota3.exp: Likewise.
2019-06-15 Andrew Burgess <andrew.burgess@embecosm.com>
* gdb.base/style-logging.exp: Remove path from test name.

View File

@ -268,10 +268,10 @@ if [target_info exists gdb,nosignals] {
unsupported "backtrace @ signal handler"
} else {
gdb_test_multiple "signal SIGUSR1" "send SIGUSR1" {
-re "\r\n\032\032post-prompt\r\nContinuing with signal SIGUSR1.\r\n\r\n\032\032starting\(\(\r\n\r\n\032\032frames-invalid\)|\(\r\n\r\n\032\032breakpoints-invalid\)\)+\r\n\r\n\032\032breakpoint 2\r\n\r\nBreakpoint 2, \r\n\032\032frame-begin 0 $hex\r\n\r\n\032\032frame-function-name\r\nhandle_USR1\r\n\032\032frame-args\r\n \\(\r\n\032\032arg-begin\r\nsig\r\n\032\032arg-name-end\r\n=\r\n\032\032arg-value -\r\n$decimal\r\n\032\032arg-end\r\n\\)\r\n\032\032frame-source-begin\r\n at \r\n\032\032frame-source-file\r\n${escapedsrcfile}\r\n\032\032frame-source-file-end\r\n:\r\n\032\032frame-source-line\r\n.*\r\n\032\032frame-source-end\r\n\r\n\r\n\032\032source.*annota1.c:.*:.*:beg:$hex\r\n\r\n\032\032frame-end\r\n\r\n\032\032stopped\r\n$gdb_prompt$" {
-re "\r\n\032\032post-prompt\r\nContinuing with signal SIGUSR1.\r\n\r\n\032\032starting\(\(\r\n\r\n\032\032frames-invalid\)|\(\r\n\r\n\032\032breakpoints-invalid\)\)+\r\n\r\n\032\032breakpoint 2\r\n\r\nBreakpoint 2, \r\n\032\032frame-begin 0 $hex\r\n\r\n\032\032frame-function-name\r\nhandle_USR1\r\n\032\032frame-args\r\n \\(\r\n\032\032arg-begin\r\nsig\r\n\032\032arg-name-end\r\n=\r\n\032\032arg-value -\r\n$decimal\r\n\032\032arg-end\r\n\\)\r\n\032\032frame-source-begin\r\n at \r\n\032\032frame-source-file\r\n${escapedsrcfile}\r\n\032\032frame-source-file-end\r\n:\r\n\032\032frame-source-line\r\n.*\r\n\032\032frame-source-end\r\n\r\n\r\n\032\032source.*annota1.c:.*:.*:beg:$hex\r\n$decimal\[^\r\n\]+\r\n\r\n\032\032frame-end\r\n\r\n\032\032stopped\r\n$gdb_prompt$" {
pass "send SIGUSR1"
}
-re "\r\n\032\032post-prompt\r\nContinuing with signal SIGUSR1.\r\n\r\n\032\032starting\(\(\r\n\r\n\032\032frames-invalid\)|\(\r\n\r\n\032\032breakpoints-invalid\)\)+\r\n\r\n\032\032breakpoint 2\r\n\r\nBreakpoint 2, \r\n\032\032frame-begin 0 $hex\r\n\r\n\032\032frame-function-name\r\nhandle_USR1\r\n\032\032frame-args\r\n \\(\r\n\032\032arg-begin\r\nsig\r\n\032\032arg-name-end\r\n=\r\n\032\032arg-value -\r\n$decimal\r\n\032\032arg-end\r\n\\)\r\n\032\032frame-source-begin\r\n at \r\n\032\032frame-source-file\r\n.*${srcfile}\r\n\032\032frame-source-file-end\r\n:\r\n\032\032frame-source-line\r\n.*\r\n\032\032frame-source-end\r\n\r\n\r\n\032\032source.*annota1.c:.*:.*:beg:$hex\r\n\r\n\032\032frame-end\r\n\r\n\032\032stopped\r\n$gdb_prompt$" {
-re "\r\n\032\032post-prompt\r\nContinuing with signal SIGUSR1.\r\n\r\n\032\032starting\(\(\r\n\r\n\032\032frames-invalid\)|\(\r\n\r\n\032\032breakpoints-invalid\)\)+\r\n\r\n\032\032breakpoint 2\r\n\r\nBreakpoint 2, \r\n\032\032frame-begin 0 $hex\r\n\r\n\032\032frame-function-name\r\nhandle_USR1\r\n\032\032frame-args\r\n \\(\r\n\032\032arg-begin\r\nsig\r\n\032\032arg-name-end\r\n=\r\n\032\032arg-value -\r\n$decimal\r\n\032\032arg-end\r\n\\)\r\n\032\032frame-source-begin\r\n at \r\n\032\032frame-source-file\r\n.*${srcfile}\r\n\032\032frame-source-file-end\r\n:\r\n\032\032frame-source-line\r\n.*\r\n\032\032frame-source-end\r\n\r\n\r\n\032\032source.*annota1.c:.*:.*:beg:$hex\r\n$decimal\[^\r\n\]+\r\n\r\n\032\032frame-end\r\n\r\n\032\032stopped\r\n$gdb_prompt$" {
setup_xfail "*-*-*" 1270
fail "send SIGUSR1"
}

View File

@ -243,6 +243,7 @@ set pat [multi_line "" \
"" \
"" \
"\032\032source .*$srcfile.*beg:$hex" \
"$decimal\[^\r\n\]+" \
"" \
"\032\032frame-end" \
"" \

View File

@ -164,7 +164,7 @@ gdb_expect_list "set watch on a.x" "$gdb_prompt$" {
# annotate-watchpoint
#
gdb_test_multiple "next" "watch triggered on a.x" {
-re "\r\n\032\032post-prompt\r\n\r\n\032\032starting\r\n\r\n\032\032watchpoint 3\r\n.*atchpoint 3: a.x\r\n\r\nOld value = 0\r\nNew value = 1\r\n\r\n(\032\032frame-begin 0 0x\[0-9a-z\]+\r\n|)main \\(\\) at .*$srcfile:$decimal\r\n\r\n\032\032source .*$srcfile.*beg:$hex\r\n\r\n\032\032stopped\r\n.*$gdb_prompt$" {
-re "\r\n\032\032post-prompt\r\n\r\n\032\032starting\r\n\r\n\032\032watchpoint 3\r\n.*atchpoint 3: a.x\r\n\r\nOld value = 0\r\nNew value = 1\r\n\r\n(\032\032frame-begin 0 0x\[0-9a-z\]+\r\n|)main \\(\\) at .*$srcfile:$decimal\r\n\r\n\032\032source .*$srcfile.*beg:$hex\r\n$decimal\[^\r\n\]+\r\n\r\n\032\032stopped\r\n.*$gdb_prompt$" {
pass "watch triggered on a.x"
}
}