Fix gcc-4.7 build breakage
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
This commit is contained in:
parent
c4557897d0
commit
71a7fce336
122
mdadm-3.2.3-Work-around-gcc-4.7-s-strict-aliasing-checks.patch
Normal file
122
mdadm-3.2.3-Work-around-gcc-4.7-s-strict-aliasing-checks.patch
Normal file
@ -0,0 +1,122 @@
|
||||
From b89b2007a01f60386fb53107b883eed85319281c Mon Sep 17 00:00:00 2001
|
||||
From: Jes Sorensen <Jes.Sorensen@redhat.com>
|
||||
Date: Thu, 5 Jan 2012 12:09:45 +0100
|
||||
Subject: [PATCH 1/1] Work around gcc-4.7's strict aliasing checks
|
||||
|
||||
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
|
||||
---
|
||||
sha1.c | 8 +++++---
|
||||
super-ddf.c | 22 ++++++++++++++--------
|
||||
2 files changed, 19 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/sha1.c b/sha1.c
|
||||
index 556d9ca..0258515 100644
|
||||
--- a/sha1.c
|
||||
+++ b/sha1.c
|
||||
@@ -101,6 +101,7 @@ sha1_finish_ctx (struct sha1_ctx *ctx, void *resbuf)
|
||||
/* Take yet unprocessed bytes into account. */
|
||||
md5_uint32 bytes = ctx->buflen;
|
||||
size_t pad;
|
||||
+ md5_uint32 *ptr;
|
||||
|
||||
/* Now count remaining bytes. */
|
||||
ctx->total[0] += bytes;
|
||||
@@ -111,9 +112,10 @@ sha1_finish_ctx (struct sha1_ctx *ctx, void *resbuf)
|
||||
memcpy (&ctx->buffer[bytes], fillbuf, pad);
|
||||
|
||||
/* Put the 64-bit file length in *bits* at the end of the buffer. */
|
||||
- *(md5_uint32 *) &ctx->buffer[bytes + pad + 4] = SWAP (ctx->total[0] << 3);
|
||||
- *(md5_uint32 *) &ctx->buffer[bytes + pad] = SWAP ((ctx->total[1] << 3) |
|
||||
- (ctx->total[0] >> 29));
|
||||
+ ptr = (md5_uint32 *) &ctx->buffer[bytes + pad + 4];
|
||||
+ *ptr = SWAP (ctx->total[0] << 3);
|
||||
+ ptr = (md5_uint32 *) &ctx->buffer[bytes + pad];
|
||||
+ *ptr = SWAP ((ctx->total[1] << 3) | (ctx->total[0] >> 29));
|
||||
|
||||
/* Process last bytes. */
|
||||
sha1_process_block (ctx->buffer, bytes + pad + 8, ctx);
|
||||
diff --git a/super-ddf.c b/super-ddf.c
|
||||
index b5b0b42..abd6793 100644
|
||||
--- a/super-ddf.c
|
||||
+++ b/super-ddf.c
|
||||
@@ -1336,6 +1336,7 @@ static void getinfo_super_ddf(struct supertype *st, struct mdinfo *info, char *m
|
||||
{
|
||||
struct ddf_super *ddf = st->sb;
|
||||
int map_disks = info->array.raid_disks;
|
||||
+ __u32 *cptr;
|
||||
|
||||
if (ddf->currentconf) {
|
||||
getinfo_super_ddf_bvd(st, info, map);
|
||||
@@ -1347,8 +1348,9 @@ static void getinfo_super_ddf(struct supertype *st, struct mdinfo *info, char *m
|
||||
info->array.level = LEVEL_CONTAINER;
|
||||
info->array.layout = 0;
|
||||
info->array.md_minor = -1;
|
||||
- info->array.ctime = DECADE + __be32_to_cpu(*(__u32*)
|
||||
- (ddf->anchor.guid+16));
|
||||
+ cptr = (__u32 *)(ddf->anchor.guid + 16);
|
||||
+ info->array.ctime = DECADE + __be32_to_cpu(*cptr);
|
||||
+
|
||||
info->array.utime = 0;
|
||||
info->array.chunk_size = 0;
|
||||
info->container_enough = 1;
|
||||
@@ -1407,6 +1409,7 @@ static void getinfo_super_ddf_bvd(struct supertype *st, struct mdinfo *info, cha
|
||||
int j;
|
||||
struct dl *dl;
|
||||
int map_disks = info->array.raid_disks;
|
||||
+ __u32 *cptr;
|
||||
|
||||
memset(info, 0, sizeof(*info));
|
||||
/* FIXME this returns BVD info - what if we want SVD ?? */
|
||||
@@ -1416,8 +1419,8 @@ static void getinfo_super_ddf_bvd(struct supertype *st, struct mdinfo *info, cha
|
||||
info->array.layout = rlq_to_layout(vc->conf.rlq, vc->conf.prl,
|
||||
info->array.raid_disks);
|
||||
info->array.md_minor = -1;
|
||||
- info->array.ctime = DECADE +
|
||||
- __be32_to_cpu(*(__u32*)(vc->conf.guid+16));
|
||||
+ cptr = (__u32 *)(vc->conf.guid + 16);
|
||||
+ info->array.ctime = DECADE + __be32_to_cpu(*cptr);
|
||||
info->array.utime = DECADE + __be32_to_cpu(vc->conf.timestamp);
|
||||
info->array.chunk_size = 512 << vc->conf.chunk_shift;
|
||||
info->custom_array_size = 0;
|
||||
@@ -2192,6 +2195,7 @@ static int add_to_super_ddf(struct supertype *st,
|
||||
struct phys_disk_entry *pde;
|
||||
unsigned int n, i;
|
||||
struct stat stb;
|
||||
+ __u32 *tptr;
|
||||
|
||||
if (ddf->currentconf) {
|
||||
add_to_super_ddf_bvd(st, dk, fd, devname);
|
||||
@@ -2220,8 +2224,9 @@ static int add_to_super_ddf(struct supertype *st,
|
||||
tm = localtime(&now);
|
||||
sprintf(dd->disk.guid, "%8s%04d%02d%02d",
|
||||
T10, tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday);
|
||||
- *(__u32*)(dd->disk.guid + 16) = random32();
|
||||
- *(__u32*)(dd->disk.guid + 20) = random32();
|
||||
+ tptr = (__u32 *)(dd->disk.guid + 16);
|
||||
+ *tptr++ = random32();
|
||||
+ *tptr = random32();
|
||||
|
||||
do {
|
||||
/* Cannot be bothered finding a CRC of some irrelevant details*/
|
||||
@@ -2967,6 +2972,7 @@ static struct mdinfo *container_content_ddf(struct supertype *st, char *subarray
|
||||
unsigned int j;
|
||||
struct mdinfo *this;
|
||||
char *ep;
|
||||
+ __u32 *cptr;
|
||||
|
||||
if (subarray &&
|
||||
(strtoul(subarray, &ep, 10) != vc->vcnum ||
|
||||
@@ -2986,8 +2992,8 @@ static struct mdinfo *container_content_ddf(struct supertype *st, char *subarray
|
||||
this->array.md_minor = -1;
|
||||
this->array.major_version = -1;
|
||||
this->array.minor_version = -2;
|
||||
- this->array.ctime = DECADE +
|
||||
- __be32_to_cpu(*(__u32*)(vc->conf.guid+16));
|
||||
+ cptr = (__u32 *)(vc->conf.guid + 16);
|
||||
+ this->array.ctime = DECADE + __be32_to_cpu(*cptr);
|
||||
this->array.utime = DECADE +
|
||||
__be32_to_cpu(vc->conf.timestamp);
|
||||
this->array.chunk_size = 512 << vc->conf.chunk_shift;
|
||||
--
|
||||
1.7.8.2
|
||||
|
Loading…
Reference in New Issue
Block a user