diff options
author | Juergen Daubert <jue@jue.li> | 2009-05-15 09:54:59 +0200 |
---|---|---|
committer | Juergen Daubert <jue@jue.li> | 2009-05-15 09:54:59 +0200 |
commit | 395226f8e7aa78bf962bd595f98f7f0e3a8e6339 (patch) | |
tree | a9e299be1370f8c62d280bb41200311ca87e23b9 /mdadm | |
parent | beab7806d1f64fb754615b29b068e4577e9770d9 (diff) | |
download | opt-395226f8e7aa78bf962bd595f98f7f0e3a8e6339.tar.gz opt-395226f8e7aa78bf962bd595f98f7f0e3a8e6339.tar.xz |
mdadm: fixed build with gcc 4.4
Diffstat (limited to 'mdadm')
-rw-r--r-- | mdadm/.md5sum | 1 | ||||
-rw-r--r-- | mdadm/Pkgfile | 6 | ||||
-rw-r--r-- | mdadm/mdadm-2.6.9-gcc44.patch | 110 |
3 files changed, 115 insertions, 2 deletions
diff --git a/mdadm/.md5sum b/mdadm/.md5sum index c3d9e67ad..5618e676b 100644 --- a/mdadm/.md5sum +++ b/mdadm/.md5sum @@ -1 +1,2 @@ +4ceaeb6d140ab3286446a976bbdc9a55 mdadm-2.6.9-gcc44.patch beaa0f066288441d9b3ad1ef67fa0237 mdadm-2.6.9.tar.gz diff --git a/mdadm/Pkgfile b/mdadm/Pkgfile index 03ac23396..9a530eef7 100644 --- a/mdadm/Pkgfile +++ b/mdadm/Pkgfile @@ -4,10 +4,12 @@ name=mdadm version=2.6.9 -release=1 -source=(http://www.kernel.org/pub/linux/utils/raid/$name/$name-$version.tar.gz) +release=2 +source=(http://www.kernel.org/pub/linux/utils/raid/$name/$name-$version.tar.gz + $name-$version-gcc44.patch) build() { cd $name-$version + patch -p1 -i $SRC/$name-$version-gcc44.patch make CXFLAGS="$CFLAGS" DESTDIR=$PKG MANDIR=/usr/man install } diff --git a/mdadm/mdadm-2.6.9-gcc44.patch b/mdadm/mdadm-2.6.9-gcc44.patch new file mode 100644 index 000000000..bb9f7fa37 --- /dev/null +++ b/mdadm/mdadm-2.6.9-gcc44.patch @@ -0,0 +1,110 @@ +From caa0f6c623214231380c5ef0de91b53cc43d1e0b Mon Sep 17 00:00:00 2001 +From: NeilBrown <neilb@suse.de> +Date: Wed, 29 Apr 2009 11:44:02 +1000 +Subject: [PATCH] Fix gcc-4.4 compiler warning. + +Apparently the dereferencing of a type-punned pointer breaks strict +aliasing rules. And we wouldn't want to do that. +So just make a different array of the appropriate type and use memcpy. + +Resolves-Debian-bug: 505375 +Signed-off-by: NeilBrown <neilb@suse.de> +--- + bitmap.c | 28 +++++++++++++++------------- + super1.c | 19 +++++++------------ + 2 files changed, 22 insertions(+), 25 deletions(-) + +diff --git a/bitmap.c b/bitmap.c +index 352be5d..5618087 100644 +--- a/bitmap.c ++++ b/bitmap.c +@@ -270,6 +270,7 @@ int ExamineBitmap(char *filename, int brief, struct supertype *st) + int rv = 1; + char buf[64]; + int swap; ++ __u32 uuid32[4]; + + info = bitmap_file_read(filename, brief, &st); + if (!info) +@@ -297,19 +298,20 @@ int ExamineBitmap(char *filename, int brief, struct supertype *st) + #else + swap = 1; + #endif +- if (swap) { +- printf(" UUID : %08x:%08x:%08x:%08x\n", +- swapl(*(__u32 *)(sb->uuid+0)), +- swapl(*(__u32 *)(sb->uuid+4)), +- swapl(*(__u32 *)(sb->uuid+8)), +- swapl(*(__u32 *)(sb->uuid+12))); +- } else { +- printf(" UUID : %08x:%08x:%08x:%08x\n", +- *(__u32 *)(sb->uuid+0), +- *(__u32 *)(sb->uuid+4), +- *(__u32 *)(sb->uuid+8), +- *(__u32 *)(sb->uuid+12)); +- } ++ memcpy(uuid32, sb->uuid, 16); ++ if (swap) ++ printf(" UUID : %08x:%08x:%08x:%08x\n", ++ swapl(uuid32[0]), ++ swapl(uuid32[1]), ++ swapl(uuid32[2]), ++ swapl(uuid32[3])); ++ else ++ printf(" UUID : %08x:%08x:%08x:%08x\n", ++ uuid32[0], ++ uuid32[1], ++ uuid32[2], ++ uuid32[3]); ++ + printf(" Events : %llu\n", (unsigned long long)sb->events); + printf(" Events Cleared : %llu\n", (unsigned long long)sb->events_cleared); + printf(" State : %s\n", bitmap_state(sb->state)); +diff --git a/super1.c b/super1.c +index 1342412..037c5eb 100644 +--- a/super1.c ++++ b/super1.c +@@ -612,10 +612,8 @@ static int update_super1(struct supertype *st, struct mdinfo *info, + + if ((rfd = open("/dev/urandom", O_RDONLY)) < 0 || + read(rfd, sb->device_uuid, 16) != 16) { +- *(__u32*)(sb->device_uuid) = random(); +- *(__u32*)(sb->device_uuid+4) = random(); +- *(__u32*)(sb->device_uuid+8) = random(); +- *(__u32*)(sb->device_uuid+12) = random(); ++ __u32 r[4] = {random(), random(), random(), random()}; ++ memcpy(sb->device_uuid, r, 16); + } + + sb->dev_roles[i] = +@@ -735,10 +733,8 @@ static int init_super1(struct supertype *st, mdu_array_info_t *info, + else { + if ((rfd = open("/dev/urandom", O_RDONLY)) < 0 || + read(rfd, sb->set_uuid, 16) != 16) { +- *(__u32*)(sb->set_uuid) = random(); +- *(__u32*)(sb->set_uuid+4) = random(); +- *(__u32*)(sb->set_uuid+8) = random(); +- *(__u32*)(sb->set_uuid+12) = random(); ++ __u32 r[4] = {random(), random(), random(), random()}; ++ memcpy(sb->set_uuid, r, 16); + } + if (rfd >= 0) close(rfd); + } +@@ -912,11 +908,10 @@ static int write_init_super1(struct supertype *st, + + if ((rfd = open("/dev/urandom", O_RDONLY)) < 0 || + read(rfd, sb->device_uuid, 16) != 16) { +- *(__u32*)(sb->device_uuid) = random(); +- *(__u32*)(sb->device_uuid+4) = random(); +- *(__u32*)(sb->device_uuid+8) = random(); +- *(__u32*)(sb->device_uuid+12) = random(); ++ __u32 r[4] = {random(), random(), random(), random()}; ++ memcpy(sb->device_uuid, r, 16); + } ++ + if (rfd >= 0) close(rfd); + sb->events = 0; + +-- +1.6.2 + |