[rfc] Re-parse display expressions if architecture changes
Tue Dec 22 14:12:00 GMT 2009
Tom Tromey wrote:
> >>>>> "Ulrich" == Ulrich Weigand <email@example.com> writes:
> Ulrich> The patch below implements this by ensuring the expression is
> Ulrich> re-parsed if the currnet architecture is different from the one
> Ulrich> the expression was originally parsed in.
> This seems like a reasonable idea to me.
> Ulrich> Any comments? I'm planning to apply this next week.
> I think this needs to xfree the old expression to avoid a memory leak.
Oops, thanks for noticing this. Updated patch below.
* printcmd.c: Include "arch-utils.h".
(do_one_display): Re-parse expression if current architecture changed.
diff -urNp gdb-orig/gdb/printcmd.c gdb-head/gdb/printcmd.c
--- gdb-orig/gdb/printcmd.c 2009-12-18 17:27:13.000000000 +0100
+++ gdb-head/gdb/printcmd.c 2009-12-22 14:23:27.000000000 +0100
@@ -49,6 +49,7 @@
#include "tui/tui.h" /* For tui_active et.al. */
@@ -1597,6 +1598,20 @@ do_one_display (struct display *d)
if (d->enabled_p == 0)
+ /* 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;
Dr. Ulrich Weigand
GNU Toolchain for Linux on System z and Cell BE
More information about the Gdb-patches