* c-valprint.c (c_value_print): Add VALUE_OFFSET to the address
authorDaniel Jacobowitz <drow@false.org>
Sat, 21 Jun 2003 23:27:53 +0000 (23:27 +0000)
committerDaniel Jacobowitz <drow@false.org>
Sat, 21 Jun 2003 23:27:53 +0000 (23:27 +0000)
argument of val_print.
* cp-valprint.c (cp_print_value): Don't add the offset parameter
to the address argument of baseclass_offset or target_read_memory.
Do add it to the argument of cp_print_value_fields.

gdb/ChangeLog
gdb/c-valprint.c
gdb/cp-valprint.c

index 6b1da4488c2f739c12cb3a7e4abbc0a8fbe6b830..f24da7b26e025b224687e8e8d324b614c35e876a 100644 (file)
@@ -1,3 +1,11 @@
+2003-06-21  Daniel Jacobowitz  <drow@mvista.com>
+
+       * c-valprint.c (c_value_print): Add VALUE_OFFSET to the address
+       argument of val_print.
+       * cp-valprint.c (cp_print_value): Don't add the offset parameter
+       to the address argument of baseclass_offset or target_read_memory.
+       Do add it to the argument of cp_print_value_fields.
+
 2003-06-21  Andrew Cagney  <cagney@redhat.com>
 
        * mips-tdep.c: Include "reggroups.h" and "sim-regno.h".
index 419b24770b69d54714b860fcdb870804bf8bc97b..4ca48a65a62cefcc451ccecb44bfcfff898ca020 100644 (file)
@@ -592,7 +592,8 @@ c_value_print (struct value *val, struct ui_file *stream, int format,
       /* Otherwise, we end up at the return outside this "if" */
     }
 
-  return val_print (type, VALUE_CONTENTS_ALL (val), VALUE_EMBEDDED_OFFSET (val),
-                   VALUE_ADDRESS (val),
+  return val_print (type, VALUE_CONTENTS_ALL (val),
+                   VALUE_EMBEDDED_OFFSET (val),
+                   VALUE_ADDRESS (val) + VALUE_OFFSET (val),
                    stream, format, 1, 0, pretty);
 }
index 60a209343128446de7715dd85b22d42bdb9452da..a591d1859a5a3c5525f6ab59eb023ad94fbb7788 100644 (file)
@@ -554,7 +554,7 @@ cp_print_value (struct type *type, struct type *real_type, char *valaddr,
        {
          boffset = baseclass_offset (type, i,
                                      valaddr + offset,
-                                     address + offset);
+                                     address);
          skip = ((boffset == -1) || (boffset + offset) < 0) ? 1 : -1;
 
          if (BASETYPE_VIA_VIRTUAL (type, i))
@@ -569,9 +569,10 @@ cp_print_value (struct type *type, struct type *real_type, char *valaddr,
                {
                  /* FIXME (alloca): unsafe if baseclass is really really large. */
                  base_valaddr = (char *) alloca (TYPE_LENGTH (baseclass));
-                 if (target_read_memory (address + offset + boffset, base_valaddr,
+                 if (target_read_memory (address + boffset, base_valaddr,
                                          TYPE_LENGTH (baseclass)) != 0)
                    skip = 1;
+                 address = address + boffset;
                  thisoffset = 0;
                  boffset = 0;
                  thistype = baseclass;
@@ -600,7 +601,8 @@ cp_print_value (struct type *type, struct type *real_type, char *valaddr,
        fprintf_filtered (stream, "<invalid address>");
       else
        cp_print_value_fields (baseclass, thistype, base_valaddr,
-                              thisoffset + boffset, address, stream, format,
+                              thisoffset + boffset, address + boffset,
+                              stream, format,
                               recurse, pretty,
                               ((struct type **)
                                obstack_base (&dont_print_vb_obstack)),