diff options
author | Ulrich Weigand <uweigand@de.ibm.com> | 2010-01-04 14:55:08 +0000 |
---|---|---|
committer | Ulrich Weigand <uweigand@de.ibm.com> | 2010-01-04 14:55:08 +0000 |
commit | 704e9165595fdc491ff1a9f467dc4d7a64c949fd (patch) | |
tree | abb43b252e51eb43b3c9473411c6a8d4e62b7ab3 /gdb | |
parent | c975cc98812d1518ea614cb4c39ca7e771ccac16 (diff) | |
download | gdb-704e9165595fdc491ff1a9f467dc4d7a64c949fd.zip gdb-704e9165595fdc491ff1a9f467dc4d7a64c949fd.tar.gz gdb-704e9165595fdc491ff1a9f467dc4d7a64c949fd.tar.bz2 |
* printcmd.c: Include "arch-utils.h".
(do_one_display): Re-parse expression if current architecture changed.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/printcmd.c | 15 |
2 files changed, 20 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 208967f..a8f1278 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2010-01-04 Ulrich Weigand <uweigand@de.ibm.com> + + * printcmd.c: Include "arch-utils.h". + (do_one_display): Re-parse expression if current architecture changed. + 2010-01-03 Jan Kratochvil <jan.kratochvil@redhat.com> Joel Brobecker <brobecker@adacore.com> diff --git a/gdb/printcmd.c b/gdb/printcmd.c index 2960e44..88db08b 100644 --- a/gdb/printcmd.c +++ b/gdb/printcmd.c @@ -49,6 +49,7 @@ #include "solib.h" #include "parser-defs.h" #include "charset.h" +#include "arch-utils.h" #ifdef TUI #include "tui/tui.h" /* For tui_active et.al. */ @@ -1606,6 +1607,20 @@ do_one_display (struct display *d) if (d->enabled_p == 0) return; + /* The expression carries the architecture that was used at parse time. + This is a problem if the expression depends on architecture features + (e.g. register numbers), and the current architecture is now different. + For example, a display statement like "display/i $pc" is expected to + display the PC register of the current architecture, not the arch at + the time the display command was given. Therefore, we re-parse the + expression if the current architecture has changed. */ + if (d->exp != NULL && d->exp->gdbarch != get_current_arch ()) + { + xfree (d->exp); + d->exp = NULL; + d->block = NULL; + } + if (d->exp == NULL) { volatile struct gdb_exception ex; |