http://sourceware.org/ml/gdb-patches/2011-06/msg00136.html
authorAndrew Burgess <aburgess@broadcom.com>
Thu, 23 Jun 2011 09:51:57 +0000 (09:51 +0000)
committerAndrew Burgess <aburgess@broadcom.com>
Thu, 23 Jun 2011 09:51:57 +0000 (09:51 +0000)
2011-06-23  Andrew Burgess  <aburgess@broadcom.com>

* gdbtypes.c (append_composite_type_field_aligned): Fix
calculation of bit position based on alignment.

gdb/ChangeLog
gdb/gdbtypes.c

index fb4c664..b2ff7ff 100644 (file)
@@ -1,3 +1,8 @@
+2011-06-23  Andrew Burgess  <aburgess@broadcom.com>
+
+       * gdbtypes.c (append_composite_type_field_aligned): Fix
+       calculation of bit position based on alignment.
+
 2011-06-22  Pedro Alves  <pedro@codesourcery.com>
 
        * breakpoint.c (bpstat_stop_status): Call the check_status
index 2bdb4eb..2572046 100644 (file)
@@ -3654,12 +3654,15 @@ append_composite_type_field_aligned (struct type *t, char *name,
 
          if (alignment)
            {
-             int left = FIELD_BITPOS (f[0]) % (alignment * TARGET_CHAR_BIT);
+             int left;
+
+             alignment *= TARGET_CHAR_BIT;
+             left = FIELD_BITPOS (f[0]) % alignment;
 
              if (left)
                {
-                 FIELD_BITPOS (f[0]) += left;
-                 TYPE_LENGTH (t) += left / TARGET_CHAR_BIT;
+                 FIELD_BITPOS (f[0]) += (alignment - left);
+                 TYPE_LENGTH (t) += (alignment - left) / TARGET_CHAR_BIT;
                }
            }
        }