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)
#include "ext2_fs.h"
#include "ext2fsP.h"
+#ifdef __arm__
+#define BUGGY_ARM_GCC
+#endif
+
/*
* Helper function for making a badblocks 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