[gdb/testsuite] Stabilize gdb-caching-proc.exp test order
[deliverable/binutils-gdb.git] / gdb / typeprint.c
index 0a93a831b86130a0a57c80df636c45ee558311fa..c87f6d13e02ec5aa191027ce3f5795c6352df639 100644 (file)
@@ -94,11 +94,11 @@ print_offset_data::maybe_print_hole (struct ui_file *stream,
       unsigned int hole_bit = hole % TARGET_CHAR_BIT;
 
       if (hole_bit > 0)
-       fprintf_filtered (stream, "/* XXX %2u-bit %s  */\n", hole_bit,
+       fprintf_filtered (stream, "/* XXX %2u-bit %s   */\n", hole_bit,
                          for_what);
 
       if (hole_byte > 0)
-       fprintf_filtered (stream, "/* XXX %2u-byte %s */\n", hole_byte,
+       fprintf_filtered (stream, "/* XXX %2u-byte %s  */\n", hole_byte,
                          for_what);
     }
 }
@@ -131,32 +131,16 @@ print_offset_data::update (struct type *type, unsigned int field_idx,
 
   maybe_print_hole (stream, bitpos, "hole");
 
-  if (TYPE_FIELD_PACKED (type, field_idx))
+  if (TYPE_FIELD_PACKED (type, field_idx)
+      || offset_bitpos % TARGET_CHAR_BIT != 0)
     {
-      /* We're dealing with a bitfield.  Print how many bits are left
-        to be used.  */
-      unsigned int bitsize = TYPE_FIELD_BITSIZE (type, field_idx);
-      /* The bitpos relative to the beginning of our container
-        field.  */
-      unsigned int relative_bitpos;
-
-      /* The following was copied from
-        value.c:value_primitive_field.  */
-      if ((bitpos % fieldsize_bit) + bitsize <= fieldsize_bit)
-       relative_bitpos = bitpos % fieldsize_bit;
-      else
-       relative_bitpos = bitpos % TARGET_CHAR_BIT;
+      /* We're dealing with a bitfield.  Print the bit offset.  */
+      fieldsize_bit = TYPE_FIELD_BITSIZE (type, field_idx);
 
-      /* This is the exact offset (in bits) of this bitfield.  */
-      unsigned int bit_offset
-       = (bitpos - relative_bitpos) + offset_bitpos;
+      unsigned real_bitpos = bitpos + offset_bitpos;
 
-      /* The position of the field, relative to the beginning of the
-        struct, and how many bits are left to be used in this
-        container.  */
-      fprintf_filtered (stream, "/* %4u:%2u", bit_offset / TARGET_CHAR_BIT,
-                       fieldsize_bit - (relative_bitpos + bitsize));
-      fieldsize_bit = bitsize;
+      fprintf_filtered (stream, "/* %4u:%2u", real_bitpos / TARGET_CHAR_BIT,
+                       real_bitpos % TARGET_CHAR_BIT);
     }
   else
     {
@@ -341,9 +325,8 @@ typedef_hash_table::find_global_typedef (const struct type_print_options *flags,
 
   if (applied != NULL)
     {
-      new_tf->name
-       = (const char *) obstack_copy0 (&flags->global_typedefs->m_storage,
-                                       applied, strlen (applied));
+      new_tf->name = obstack_strdup (&flags->global_typedefs->m_storage,
+                                    applied);
       xfree (applied);
     }
 
@@ -413,17 +396,16 @@ type_print (struct type *type, const char *varstring, struct ui_file *stream,
 std::string
 type_to_string (struct type *type)
 {
-  TRY
+  try
     {
       string_file stb;
 
       type_print (type, "", &stb, -1);
       return std::move (stb.string ());
     }
-  CATCH (except, RETURN_MASK_ALL)
+  catch (const gdb_exception &except)
     {
     }
-  END_CATCH
 
   return {};
 }
@@ -834,7 +816,7 @@ Available FLAGS are:\n\
   /M    print methods defined in a class\n\
   /t    do not print typedefs defined in a class\n\
   /T    print typedefs defined in a class\n\
-  /o    print offsets and sizes of fields in a struct (like pahole)\n"));
+  /o    print offsets and sizes of fields in a struct (like pahole)"));
   set_cmd_completer (c, expression_completer);
 
   c = add_com ("whatis", class_vars, whatis_command,
This page took 0.025118 seconds and 4 git commands to generate.