aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog12
-rw-r--r--gdb/breakpoint.c13
-rw-r--r--gdb/breakpoint.h2
-rw-r--r--gdb/linespec.h5
4 files changed, 28 insertions, 4 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 758149d..6dcf808 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,17 @@
2011-03-24 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.
+
+2011-03-24 Tom Tromey <tromey@redhat.com>
+
* symtab.c (decode_line_spec): Update.
* linespec.c (build_canonical_line_spec): Change type of
'canonical'.
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index 8822855..dbd9588 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -4622,7 +4622,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);
@@ -7205,7 +7207,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;
@@ -7314,6 +7316,7 @@ create_breakpoint_sal (struct gdbarch *gdbarch,
}
}
+ b->display_canonical = display_canonical;
if (addr_string)
b->addr_string = addr_string;
else
@@ -7498,7 +7501,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);
}
}
@@ -7954,7 +7958,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.