diff --git a/Judy-1.0.5-undefined-behavior.patch b/Judy-1.0.5-undefined-behavior.patch new file mode 100644 index 0000000..e8741d0 --- /dev/null +++ b/Judy-1.0.5-undefined-behavior.patch @@ -0,0 +1,120 @@ +diff -crb judy-1.0.5-orig/src/JudyCommon/JudyByCount.c judy-1.0.5/src/JudyCommon/JudyByCount.c +*** judy-1.0.5-orig/src/JudyCommon/JudyByCount.c 2005-02-15 15:06:07.000000000 -0600 +--- judy-1.0.5/src/JudyCommon/JudyByCount.c 2014-02-18 13:45:35.225145230 -0600 +*************** +*** 817,823 **** + // Shorthand for where to find start of Index bytes array: + + #ifdef JUDY1 +! #define PJI (Pjp->jp_1Index) + #else + #define PJI (Pjp->jp_LIndex) + #endif +--- 817,823 ---- + // Shorthand for where to find start of Index bytes array: + + #ifdef JUDY1 +! #define PJI (Pjp->jp_2Index) + #else + #define PJI (Pjp->jp_LIndex) + #endif +diff -crb judy-1.0.5-orig/src/JudyCommon/JudyGet.c judy-1.0.5/src/JudyCommon/JudyGet.c +*** judy-1.0.5-orig/src/JudyCommon/JudyGet.c 2005-02-15 15:06:07.000000000 -0600 +--- judy-1.0.5/src/JudyCommon/JudyGet.c 2014-02-18 13:49:50.840632644 -0600 +*************** +*** 630,636 **** + #ifdef JUDY1 + + #define CHECKINDEXNATIVE(LEAF_T, PJP, IDX, INDEX) \ +! if (((LEAF_T *)((PJP)->jp_1Index))[(IDX) - 1] == (LEAF_T)(INDEX)) \ + return(1) + + #define CHECKLEAFNONNAT(LFBTS, PJP, INDEX, IDX, COPY) \ +--- 630,636 ---- + #ifdef JUDY1 + + #define CHECKINDEXNATIVE(LEAF_T, PJP, IDX, INDEX) \ +! if (((LEAF_T *)((PJP)->jp_2Index))[(IDX) - 1] == (LEAF_T)(INDEX)) \ + return(1) + + #define CHECKLEAFNONNAT(LFBTS, PJP, INDEX, IDX, COPY) \ +diff -crb judy-1.0.5-orig/src/JudyCommon/JudyIns.c judy-1.0.5/src/JudyCommon/JudyIns.c +*** judy-1.0.5-orig/src/JudyCommon/JudyIns.c 2005-02-15 15:06:07.000000000 -0600 +--- judy-1.0.5/src/JudyCommon/JudyIns.c 2014-02-18 13:00:49.871850635 -0600 +*************** +*** 1503,1509 **** + JU_BITMAPSETL(Pjlb, Index); + + for (offset = 0; offset < 15; ++offset) +! JU_BITMAPSETL(Pjlb, Pjp->jp_1Index[offset]); + + // Set jp_DcdPopO including the current pop0; incremented later: + DcdP0 = (Index & cJU_DCDMASK(1)) + 15 - 1; +--- 1503,1510 ---- + JU_BITMAPSETL(Pjlb, Index); + + for (offset = 0; offset < 15; ++offset) +! // JU_BITMAPSETL(Pjlb, Pjp->jp_1Index[offset]); // elements 8..15 are optimized out by gcc, so need to do the following +! JU_BITMAPSETL(Pjlb, Pjp->jp_2Index[offset]); + + // Set jp_DcdPopO including the current pop0; incremented later: + DcdP0 = (Index & cJU_DCDMASK(1)) + 15 - 1; +diff -crb judy-1.0.5-orig/src/JudyCommon/JudyPrevNext.c judy-1.0.5/src/JudyCommon/JudyPrevNext.c +*** judy-1.0.5-orig/src/JudyCommon/JudyPrevNext.c 2005-02-15 15:06:07.000000000 -0600 +--- judy-1.0.5/src/JudyCommon/JudyPrevNext.c 2014-02-18 13:45:40.972875737 -0600 +*************** +*** 907,913 **** + // Shorthand for where to find start of Index bytes array: + + #ifdef JUDY1 +! #define PJI (Pjp->jp_1Index) + #else + #define PJI (Pjp->jp_LIndex) + #endif +--- 907,913 ---- + // Shorthand for where to find start of Index bytes array: + + #ifdef JUDY1 +! #define PJI (Pjp->jp_2Index) + #else + #define PJI (Pjp->jp_LIndex) + #endif +diff -crb judy-1.0.5-orig/src/JudyCommon/JudyPrivateBranch.h judy-1.0.5/src/JudyCommon/JudyPrivateBranch.h +*** judy-1.0.5-orig/src/JudyCommon/JudyPrivateBranch.h 2005-02-15 15:06:07.000000000 -0600 +--- judy-1.0.5/src/JudyCommon/JudyPrivateBranch.h 2014-02-18 13:00:39.510533765 -0600 +*************** +*** 86,91 **** +--- 86,98 ---- + } jpi_t; + + ++ typedef struct _JUDY_POINTER_IMMED2 // JPI2. ++ { ++ uint8_t j_pi_2Index[2 * sizeof(Word_t) - 1]; // see above. ++ uint8_t j_pi_Type; // JP type, 1 of cJ*_JPIMMED*. ++ } jpi2_t; ++ ++ + // UNION OF JP TYPES: + // + // A branch is an array of cJU_BRANCHUNUMJPS (256) of this object, or an +*************** +*** 97,102 **** +--- 104,110 ---- + { + jpo_t j_po; // other than immediate indexes. + jpi_t j_pi; // immediate indexes. ++ jpi2_t j_pi2; // immediate indexes using j_pi_LIndex as well + } jp_t, *Pjp_t; + + // For coding convenience: +*************** +*** 105,110 **** +--- 113,119 ---- + + #define jp_1Index j_pi.j_pi_1Index // for storing Indexes in first word. + #define jp_LIndex j_pi.j_pi_LIndex // for storing Indexes in second word. ++ #define jp_2Index j_pi2.j_pi_2Index // for storing Indexes spanning both words. + #define jp_Addr j_po.j_po_Addr + //#define jp_DcdPop0 j_po.jpo_u.j_po_DcdPop0 + #define jp_Type j_po.jpo_u.j_po_Bytes[sizeof(Word_t) - 1] diff --git a/Judy.spec b/Judy.spec index fe87e0a..8b7e0fa 100644 --- a/Judy.spec +++ b/Judy.spec @@ -1,6 +1,6 @@ Name: Judy Version: 1.0.5 -Release: 7%{?dist} +Release: 8%{?dist} Summary: General purpose dynamic array Group: System Environment/Libraries License: LGPLv2+ @@ -12,7 +12,9 @@ Patch0: Judy-1.0.4-test-shared.patch # The J1* man pages were incorrectly being symlinked to Judy, rather than Judy1 # This patch corrects that; submitted upstream 2008/11/27 Patch1: Judy-1.0.4-fix-Judy1-mans.patch -BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) +# Fix some code with undefined behavior, commented on and removed by gcc +Patch2: Judy-1.0.5-undefined-behavior.patch +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(id -nu) %description Judy is a C library that provides a state-of-the-art core technology @@ -39,9 +41,11 @@ for developing applications that use the Judy library. %setup -q -n judy-%{version} %patch0 -p1 -b .test-shared %patch1 -p1 -b .fix-Judy1-mans +%patch2 -p1 -b .behavior cp -p %{SOURCE1} . %build +export CFLAGS="%{optflags} -fno-strict-aliasing -fno-tree-ccp -fno-tree-dominator-opts -fno-tree-copy-prop -fno-tree-vrp" %configure --disable-static make #%{?_smp_mflags} @@ -84,6 +88,12 @@ rm -rf %{buildroot} %postun -p /sbin/ldconfig %changelog +* Tue Feb 18 2014 Paul Howarth - 1.0.5-8 +- Fix some code with undefined behavior +- Build with -fno-strict-aliasing +- Disable various compiler tree optimizations that trigger reproducible + crashes in gtkwave without generating compiler warnings (#1064090) + * Fri Aug 02 2013 Fedora Release Engineering - 1.0.5-7 - Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild @@ -96,40 +106,40 @@ rm -rf %{buildroot} * Thu Jan 12 2012 Fedora Release Engineering - 1.0.5-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild -* Fri Jan 6 2012 Paul Howarth 1.0.5-3 -- rebuilt for gcc 4.7 +* Fri Jan 6 2012 Paul Howarth - 1.0.5-3 +- Rebuilt for gcc 4.7 -* Mon Feb 7 2011 Fedora Release Engineering 1.0.5-2 -- rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild +* Mon Feb 7 2011 Fedora Release Engineering - 1.0.5-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild -* Sun Jul 18 2010 Paul Howarth 1.0.5-1 -- update to 1.0.5 - - added proper clean targets to enable multiple builds - - added examples directory - - correctly detects 32/64-bit build environment - - allow explicit configure for 32/64-bit environment -- cosmetic spec file clean-ups +* Sun Jul 18 2010 Paul Howarth - 1.0.5-1 +- Update to 1.0.5 + - Added proper clean targets to enable multiple builds + - Added examples directory + - Correctly detects 32/64-bit build environment + - Allow explicit configure for 32/64-bit environment +- Cosmetic spec file clean-ups -* Fri Jul 24 2009 Fedora Release Engineering 1.0.4-6 -- rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild +* Fri Jul 24 2009 Fedora Release Engineering - 1.0.4-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild -* Mon Feb 23 2009 Fedora Release Engineering 1.0.4-5 -- rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild +* Mon Feb 23 2009 Fedora Release Engineering - 1.0.4-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild -* Sat Dec 13 2008 Charles R. Anderson 1.0.4-4 -- for Judy1 man page fix, patch Makefile.{am,in} instead of +* Sat Dec 13 2008 Charles R. Anderson - 1.0.4-4 +- For Judy1 man page fix, patch Makefile.{am,in} instead of relying on autotools to regenerate the latter -- add README.Fedora with upstream's license explanation +- Add README.Fedora with upstream's license explanation -* Sun Nov 30 2008 Charles R. Anderson 1.0.4-3 -- fix Judy1 man page symlinks -- use valid tag License: LGPLv2+ confirmed with upstream -- use version macro in Source0 -- remove Makefiles from installed doc tree +* Sun Nov 30 2008 Charles R. Anderson - 1.0.4-3 +- Fix Judy1 man page symlinks +- Use valid tag License: LGPLv2+ confirmed with upstream +- Use version macro in Source0 +- Remove Makefiles from installed doc tree -* Thu Nov 27 2008 Charles R. Anderson 1.0.4-2 -- patch tests to run with shared library -- run tests in check section +* Thu Nov 27 2008 Charles R. Anderson - 1.0.4-2 +- Patch tests to run with shared library +- Run tests in check section -* Sun Oct 05 2008 Charles R. Anderson 1.0.4-1 -- initial package for Fedora +* Sun Oct 05 2008 Charles R. Anderson - 1.0.4-1 +- Initial package for Fedora