x86-64 ABI requires arrays greater than 16 bytes to be aligned to
authormartynas <martynas@openbsd.org>
Thu, 1 May 2014 14:15:42 +0000 (14:15 +0000)
committermartynas <martynas@openbsd.org>
Thu, 1 May 2014 14:15:42 +0000 (14:15 +0000)
16byte boundary.  However, GCC 16-byte aligns arrays of >=16 BITS,
not BYTES.

This diff improves bug detectability for code which has local arrays
of [16 .. 127] bits:  in those cases SSP will now detect even 1-byte
overflows.

OK kettenis@.  Tested in snaps for a week.

gnu/gcc/gcc/config/i386/i386.c

index 5abc943..6fab6d8 100644 (file)
@@ -14051,7 +14051,7 @@ ix86_local_alignment (tree type, int align)
       if (AGGREGATE_TYPE_P (type)
           && TYPE_SIZE (type)
           && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
-          && (TREE_INT_CST_LOW (TYPE_SIZE (type)) >= 16
+          && (TREE_INT_CST_LOW (TYPE_SIZE (type)) >= 128
               || TREE_INT_CST_HIGH (TYPE_SIZE (type))) && align < 128)
        return 128;
     }