]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
gdb/
authorJan Kratochvil <jan.kratochvil@redhat.com>
Tue, 3 Apr 2012 14:39:55 +0000 (14:39 +0000)
committerJan Kratochvil <jan.kratochvil@redhat.com>
Tue, 3 Apr 2012 14:39:55 +0000 (14:39 +0000)
* cp-valprint.c (cp_print_value_fields): Check valprint_check_validity
for TYPE_VPTR_FIELDNO.
* valprint.c (valprint_check_validity): Make it global, move the
function comment ...
* value.h (valprint_check_validity): ... to this new declaration.

gdb/testsuite/
* gdb.trace/unavailable.exp
(collect globals: print object on: print derived_partial)
(collect globals: print object on: print derived_whole)
(collect globals: print object off: print derived_partial)
(collect globals: print object off: print derived_whole): Update
expected output.

gdb/ChangeLog
gdb/cp-valprint.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.trace/unavailable.exp
gdb/valprint.c
gdb/value.h

index c3ebf99d39e0157b97cba7b6fbc23f3fd5cf8c57..bdfd9b782c2981d9ac5a2e2b3441a16860f7d536 100644 (file)
@@ -1,3 +1,11 @@
+2012-04-03  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+       * cp-valprint.c (cp_print_value_fields): Check valprint_check_validity
+       for TYPE_VPTR_FIELDNO.
+       * valprint.c (valprint_check_validity): Make it global, move the
+       function comment ...
+       * value.h (valprint_check_validity): ... to this new declaration.
+
 2012-04-02  Tristan Gingold  <gingold@adacore.com>
 
        * i386-darwin-nat.c (i386_darwin_fetch_inferior_registers): Use
index cb85b0b18bc52fc9a475c78b8f0a8fdd509b1b56..7dd13bbfcec662fc33c5258965a13903fcfd11fa 100644 (file)
@@ -360,14 +360,18 @@ cp_print_value_fields (struct type *type, struct type *real_type,
                }
              else if (i == TYPE_VPTR_FIELDNO (type))
                {
-                 CORE_ADDR addr
-                   = extract_typed_address (valaddr + offset
-                                            + TYPE_FIELD_BITSIZE (type, i) / 8,
-                                            TYPE_FIELD_TYPE (type, i));
-
-                 print_function_pointer_address (get_type_arch (type),
-                                                 addr, stream,
-                                                 options->addressprint);
+                 int i_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
+                 struct type *i_type = TYPE_FIELD_TYPE (type, i);
+
+                 if (valprint_check_validity (stream, i_type, i_offset, val))
+                   {
+                     CORE_ADDR addr;
+                     
+                     addr = extract_typed_address (valaddr + i_offset, i_type);
+                     print_function_pointer_address (get_type_arch (type),
+                                                     addr, stream,
+                                                     options->addressprint);
+                   }
                }
              else
                {
index daed6f0f4c75590a3b2f801c82ab558af194a832..7fc5abe30a69d2936dff34fd181c09015b3ae036 100644 (file)
@@ -1,3 +1,12 @@
+2012-04-03  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+       * gdb.trace/unavailable.exp
+       (collect globals: print object on: print derived_partial)
+       (collect globals: print object on: print derived_whole)
+       (collect globals: print object off: print derived_partial)
+       (collect globals: print object off: print derived_whole): Update
+       expected output.
+
 2012-03-30  Keith Seitz  <keiths@redhat.com>
 
        * gdb.python: Add test for linespecs with commas.
index bc5f8931bf785bc1b2df35ae73a7da9d95cc45f0..ca2e9eb2703d4e9e7a97570564c8a37e257c87ad 100644 (file)
@@ -542,11 +542,11 @@ proc gdb_collect_globals_test { } { with_test_prefix "collect globals" {
 
        # vtable pointer available, but nothing else
        gdb_test "print derived_partial" \
-           " = \\(Derived\\) {<Middle> = {<Base> = <unavailable>, _vptr.Middle = <unavailable>, y = <unavailable>}, _vptr.Derived = $hex, z = <unavailable>}"
+           " = \\(Derived\\) {<Middle> = {<Base> = <unavailable>, _vptr.Middle = <unavailable>, y = <unavailable>}, _vptr.Derived = $hex <vtable for Derived.*>, z = <unavailable>}"
 
        # whole object available
        gdb_test "print derived_whole" \
-           " = \\(Derived\\) {<Middle> = {<Base> = {x = 2}, _vptr.Middle = $hex, y = 3}, _vptr.Derived = $hex, z = 4}"
+           " = \\(Derived\\) {<Middle> = {<Base> = {x = 2}, _vptr.Middle = $hex, y = 3}, _vptr.Derived = $hex <vtable for Derived.*>, z = 4}"
     }
 
     gdb_test_no_output "set print object off"
@@ -560,11 +560,11 @@ proc gdb_collect_globals_test { } { with_test_prefix "collect globals" {
 
        # vtable pointer available, but nothing else
        gdb_test "print derived_partial" \
-           " = {<Middle> = {<Base> = <unavailable>, _vptr.Middle = <unavailable>, y = <unavailable>}, _vptr.Derived = $hex, z = <unavailable>}"
+           " = {<Middle> = {<Base> = <unavailable>, _vptr.Middle = <unavailable>, y = <unavailable>}, _vptr.Derived = $hex <vtable for Derived.*>, z = <unavailable>}"
 
        # whole object available
        gdb_test "print derived_whole" \
-           " = {<Middle> = {<Base> = {x = 2}, _vptr.Middle = $hex, y = 3}, _vptr.Derived = $hex, z = 4}"
+           " = {<Middle> = {<Base> = {x = 2}, _vptr.Middle = $hex, y = 3}, _vptr.Derived = $hex <vtable for Derived.*>, z = 4}"
     }
 
     # An instance of a virtual class where we collected everything but
index 0037cb9f3049c9507c68e2e215b9e0ec5f7eb4d3..738fef43719ec713abac15c74053b5fc86af21d5 100644 (file)
@@ -248,17 +248,9 @@ scalar_type_p (struct type *type)
     }
 }
 
-/* Helper function to check the validity of some bits of a value.
+/* See its definition in value.h.  */
 
-   If TYPE represents some aggregate type (e.g., a structure), return 1.
-   
-   Otherwise, any of the bytes starting at OFFSET and extending for
-   TYPE_LENGTH(TYPE) bytes are invalid, print a message to STREAM and
-   return 0.  The checking is done using FUNCS.
-   
-   Otherwise, return 1.  */
-
-static int
+int
 valprint_check_validity (struct ui_file *stream,
                         struct type *type,
                         int embedded_offset,
index d501b52e5d1b23986e61fbc62a49a1ac852f350f..4d04a200e43672367f94be5caefb6dd65761a5c7 100644 (file)
@@ -213,6 +213,20 @@ extern struct value *allocate_computed_value (struct type *type,
                                              const struct lval_funcs *funcs,
                                              void *closure);
 
+/* Helper function to check the validity of some bits of a value.
+
+   If TYPE represents some aggregate type (e.g., a structure), return 1.
+   
+   Otherwise, any of the bytes starting at OFFSET and extending for
+   TYPE_LENGTH(TYPE) bytes are invalid, print a message to STREAM and
+   return 0.  The checking is done using FUNCS.
+   
+   Otherwise, return 1.  */
+
+extern int valprint_check_validity (struct ui_file *stream, struct type *type,
+                                   int embedded_offset,
+                                   const struct value *val);
+
 extern struct value *allocate_optimized_out_value (struct type *type);
 
 /* If VALUE is lval_computed, return its lval_funcs structure.  */