From: NeilBrown <neilb@suse.de>
To: Jes.Sorensen@redhat.com
Cc: linux-raid@vger.kernel.org, dledford@redhat.com
Subject: Re: [PATCH 1/1] Work around gcc-4.7's strict aliasing checks
Date: Thu, 12 Jan 2012 10:43:20 +1100 [thread overview]
Message-ID: <20120112104320.471910db@notabene.brown> (raw)
In-Reply-To: <1325762201-23949-2-git-send-email-Jes.Sorensen@redhat.com>
[-- Attachment #1: Type: text/plain, Size: 5129 bytes --]
On Thu, 5 Jan 2012 12:16:41 +0100 Jes.Sorensen@redhat.com wrote:
> From: Jes Sorensen <Jes.Sorensen@redhat.com>
>
> 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;
Applied - thanks...
Do you understand this stuff? If this really "fixing" anything, or is it
still doing something bad, but is now hiding it from gcc's warning so we just
don't get told how naughty we are?
Should these things be changed to use unions ??
Thanks,
NeilBrown
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 828 bytes --]
next prev parent reply other threads:[~2012-01-11 23:43 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-01-05 11:16 [PATCH 0/1] gcc-4.7 build fix Jes.Sorensen
2012-01-05 11:16 ` [PATCH 1/1] Work around gcc-4.7's strict aliasing checks Jes.Sorensen
2012-01-11 23:43 ` NeilBrown [this message]
2012-01-12 7:14 ` David Brown
2012-01-12 13:45 ` Michal Soltys
2012-01-13 12:20 ` David Brown
2012-01-13 14:21 ` Michal Soltys
2012-01-13 17:48 ` David Brown
2012-01-12 9:24 ` Jes Sorensen
2012-01-22 0:49 ` Michal Soltys
2012-01-22 0:49 ` [PATCH] compile cleanly with -Wstrict-aliasing=1 Michal Soltys
2012-01-23 12:50 ` [PATCH 1/1] Work around gcc-4.7's strict aliasing checks Jes Sorensen
2012-01-24 0:59 ` Michal Soltys
2012-01-24 9:18 ` David Brown
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20120112104320.471910db@notabene.brown \
--to=neilb@suse.de \
--cc=Jes.Sorensen@redhat.com \
--cc=dledford@redhat.com \
--cc=linux-raid@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).