[2/3] RFC: add `special_display' to linespec_result
Tom Tromey
tromey@redhat.com
Fri Mar 18 18:28:00 GMT 2011
This patch adds a new field to linespec_result and updates the
breakpoint code to use it. This new field gives the linespec code a way
to tell the breakpoint code that a given linespec should be displayed
verbatim in "info break".
Without this, `function:label' linespecs would display something like
`<main+3>', instead of the more friendly `function:label'.
This patch does not change anything to set this field, so it does not
affect behavior.
This, combined with patch #1, was built and regtested on x86-64 (compile
farm).
Tom
2011-03-18 Tom Tromey <tromey@redhat.com>
* linespec.h (struct linespec_result) <special_display>: New
field.
* breakpoint.h (struct breakpoint) <display_canonical>: New
field.
* breakpoint.c (print_breakpoint_location): Respect
display_canonical.
(create_breakpoint_sal): Add 'display_canonical' parameter.
(create_breakpoints_sal): Update.
(create_breakpoint): Update.
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index c1c7b5a..8f9e5f4 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -4621,7 +4621,9 @@ print_breakpoint_location (struct breakpoint *b,
if (loc != NULL)
set_current_program_space (loc->pspace);
- if (b->source_file && loc)
+ if (b->display_canonical)
+ ui_out_field_string (uiout, "what", b->addr_string);
+ else if (b->source_file && loc)
{
struct symbol *sym
= find_pc_sect_function (loc->address, loc->section);
@@ -7204,7 +7206,7 @@ create_breakpoint_sal (struct gdbarch *gdbarch,
enum bptype type, enum bpdisp disposition,
int thread, int task, int ignore_count,
struct breakpoint_ops *ops, int from_tty,
- int enabled, int internal)
+ int enabled, int internal, int display_canonical)
{
struct breakpoint *b = NULL;
int i;
@@ -7313,6 +7315,7 @@ create_breakpoint_sal (struct gdbarch *gdbarch,
}
}
+ b->display_canonical = display_canonical;
if (addr_string)
b->addr_string = addr_string;
else
@@ -7497,7 +7500,8 @@ create_breakpoints_sal (struct gdbarch *gdbarch,
create_breakpoint_sal (gdbarch, expanded, canonical->canonical[i],
cond_string, type, disposition,
thread, task, ignore_count, ops,
- from_tty, enabled, internal);
+ from_tty, enabled, internal,
+ canonical->special_display);
}
}
@@ -7953,7 +7957,8 @@ create_breakpoint (struct gdbarch *gdbarch,
cond_string, type_wanted,
tempflag ? disp_del : disp_donttouch,
thread, task, ignore_count, ops,
- from_tty, enabled, internal);
+ from_tty, enabled, internal,
+ canonical.special_display);
do_cleanups (old_chain);
diff --git a/gdb/breakpoint.h b/gdb/breakpoint.h
index bd09713..d5af928 100644
--- a/gdb/breakpoint.h
+++ b/gdb/breakpoint.h
@@ -472,6 +472,8 @@ struct breakpoint
/* Non-zero means a silent breakpoint (don't print frame info
if we stop here). */
unsigned char silent;
+ /* Non-zero means display ADDR_STRING to the user verbatim. */
+ unsigned char display_canonical;
/* Number of stops at this breakpoint that should
be continued automatically before really stopping. */
int ignore_count;
diff --git a/gdb/linespec.h b/gdb/linespec.h
index 3366fc6..d8d2ec9 100644
--- a/gdb/linespec.h
+++ b/gdb/linespec.h
@@ -25,6 +25,11 @@ struct symtab;
struct linespec_result
{
+ /* If non-zero, the linespec should be displayed to the user. This
+ is used by "unusual" linespecs where the ordinary `info break'
+ display mechanism would do the wrong thing. */
+ int special_display;
+
/* If non-NULL, an array of canonical names for returned
symtab_and_line objects. The array has as many elements as the
`nelts' field in the symtabs_and_line returned by decode_line_1.
More information about the Gdb-patches
mailing list