diff --git a/lzo-2.03-alias.patch b/lzo-2.03-alias.patch new file mode 100644 index 0000000..96559d7 --- /dev/null +++ b/lzo-2.03-alias.patch @@ -0,0 +1,78 @@ +Index: src/lzo_init.c +=================================================================== +--- src/lzo_init.c.orig 2008-04-30 14:51:49.000000000 +0200 ++++ src/lzo_init.c 2010-02-11 12:25:02.000000000 +0100 +@@ -90,8 +90,13 @@ LZO_PUBLIC(int) + _lzo_config_check(void) + { + lzo_bool r = 1; +- union { unsigned char c[2*sizeof(lzo_xint)]; lzo_xint l[2]; } u; +- lzo_uintptr_t p; ++ volatile union { ++ unsigned char c[2*sizeof(lzo_xint)]; ++ lzo_xint l[2]; ++ unsigned short s[2*sizeof(lzo_xint)/sizeof(unsigned short)]; ++ lzo_uint32 i[2*sizeof(lzo_xint)/sizeof(lzo_uint32)]; ++ } u; ++ const volatile unsigned char *p; + + #if !defined(LZO_CFG_NO_CONFIG_CHECK) + #if defined(LZO_ABI_BIG_ENDIAN) +@@ -103,14 +108,14 @@ _lzo_config_check(void) + r &= (u.l[0] == 128); + #endif + #if defined(LZO_UNALIGNED_OK_2) +- p = (lzo_uintptr_t) (const lzo_voidp) &u.c[0]; ++ p = &u.c[0]; + u.l[0] = u.l[1] = 0; +- r &= ((* (const lzo_ushortp) (p+1)) == 0); ++ r &= ((* (const volatile unsigned short *) (p+1)) == 0); + #endif + #if defined(LZO_UNALIGNED_OK_4) +- p = (lzo_uintptr_t) (const lzo_voidp) &u.c[0]; ++ p = &u.c[0]; + u.l[0] = u.l[1] = 0; +- r &= ((* (const lzo_uint32p) (p+1)) == 0); ++ r &= ((* (const volatile lzo_uint32 *) (p+1)) == 0); + #endif + #endif + +Index: minilzo/minilzo.c +=================================================================== +--- minilzo/minilzo.c.orig 2008-04-30 14:51:49.000000000 +0200 ++++ minilzo/minilzo.c 2010-02-11 12:25:08.000000000 +0100 +@@ -2444,8 +2444,13 @@ LZO_PUBLIC(int) + _lzo_config_check(void) + { + lzo_bool r = 1; +- union { unsigned char c[2*sizeof(lzo_xint)]; lzo_xint l[2]; } u; +- lzo_uintptr_t p; ++ volatile union { ++ unsigned char c[2*sizeof(lzo_xint)]; ++ lzo_xint l[2]; ++ unsigned short s[2*sizeof(lzo_xint)/sizeof(unsigned short)]; ++ lzo_uint32 i[2*sizeof(lzo_xint)/sizeof(lzo_uint32)]; ++ } u; ++ const volatile unsigned char *p; + + #if !defined(LZO_CFG_NO_CONFIG_CHECK) + #if defined(LZO_ABI_BIG_ENDIAN) +@@ -2457,14 +2462,14 @@ _lzo_config_check(void) + r &= (u.l[0] == 128); + #endif + #if defined(LZO_UNALIGNED_OK_2) +- p = (lzo_uintptr_t) (const lzo_voidp) &u.c[0]; ++ p = &u.c[0]; + u.l[0] = u.l[1] = 0; +- r &= ((* (const lzo_ushortp) (p+1)) == 0); ++ r &= ((* (const volatile unsigned short *) (p+1)) == 0); + #endif + #if defined(LZO_UNALIGNED_OK_4) +- p = (lzo_uintptr_t) (const lzo_voidp) &u.c[0]; ++ p = &u.c[0]; + u.l[0] = u.l[1] = 0; +- r &= ((* (const lzo_uint32p) (p+1)) == 0); ++ r &= ((* (const volatile lzo_uint32 *) (p+1)) == 0); + #endif + #endif + diff --git a/lzo.changes b/lzo.changes index 1bffb0c..8f859f0 100644 --- a/lzo.changes +++ b/lzo.changes @@ -1,3 +1,8 @@ +------------------------------------------------------------------- +Thu Feb 11 12:30:25 CET 2010 - rguenther@suse.de + +- fix aliasing problems + ------------------------------------------------------------------- Sat Dec 19 16:48:18 CET 2009 - jengelh@medozas.de diff --git a/lzo.spec b/lzo.spec index 940236f..9b7a4fb 100644 --- a/lzo.spec +++ b/lzo.spec @@ -21,10 +21,11 @@ Name: lzo Url: http://www.oberhumer.com/opensource/lzo/ Version: 2.03 -Release: 5 +Release: 6 Group: Development/Libraries/C and C++ Source: lzo-%{version}.tar.bz2 Source2: baselibs.conf +Patch1: lzo-2.03-alias.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRequires: gcc-c++ # bug437293 @@ -102,6 +103,7 @@ Authors: %prep %setup -q +%patch1 %build %configure --enable-shared --disable-static --libdir=/%{_lib}