Whamcloud - gitweb
Work around GCC bug on the Arm platform
authorTheodore Ts'o <tytso@mit.edu>
Mon, 13 Nov 2006 03:22:00 +0000 (22:22 -0500)
committerTheodore Ts'o <tytso@mit.edu>
Mon, 13 Nov 2006 03:22:00 +0000 (22:22 -0500)
Addresses Debian Bug: #397044

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
lib/ext2fs/ChangeLog
lib/ext2fs/badblocks.c

index 8e5e8c0..b0084ea 100644 (file)
@@ -1,5 +1,14 @@
 2006-11-12  Theodore Tso  <tytso@mit.edu>
 
+       * badblocks.c (make_u32_list): Add workaround for GCC bug (ARM,
+               gcc version 4.1.1-17).  The inline function involved is
+               used all over the e2fsprogs sources, so hopefully this bug
+               won't hit us in other places, but with this one change the
+               e2fsprogs regression test suite is passing, so we'll cross
+               our fingers, report the GCC bug, and hope that it doesn't
+               cause any data corruption/loss.  (Addresses Debian Bug:
+               #397044; Gcc bug reported as Debian Bug #398316)
+
        * unix_io.c (unix_flush): Allow offsets greater than 2G.
                (Addresses SourceForge Bug #1547922)
 
index 4b76ef0..42e33bf 100644 (file)
 #include "ext2_fs.h"
 #include "ext2fsP.h"
 
+#ifdef __arm__
+#define BUGGY_ARM_GCC
+#endif
+
 /*
  * Helper function for making a badblocks list
  */
@@ -42,11 +46,19 @@ static errcode_t make_u32_list(int size, int num, __u32 *list,
        bb->magic = EXT2_ET_MAGIC_BADBLOCKS_LIST;
        bb->size = size ? size : 10;
        bb->num = num;
+#ifdef BUGGY_ARM_GCC
+       bb->list = malloc(bb->size * sizeof(blk_t));
+       if (!bb->list) {
+               free(bb);
+               return EXT2_ET_NO_MEMORY;
+       }
+#else
        retval = ext2fs_get_mem(bb->size * sizeof(blk_t), &bb->list);
        if (!bb->list) {
                ext2fs_free_mem(&bb);
                return retval;
        }
+#endif
        if (list)
                memcpy(bb->list, list, bb->size * sizeof(blk_t));
        else