Work around code with undefined behavior
- 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)
This commit is contained in:
parent
bec5b682bd
commit
a22c7e76ab
120
Judy-1.0.5-undefined-behavior.patch
Normal file
120
Judy-1.0.5-undefined-behavior.patch
Normal file
@ -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]
|
||||
70
Judy.spec
70
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 <paul@city-fan.org> - 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 <rel-eng@lists.fedoraproject.org> - 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 <rel-eng@lists.fedoraproject.org> - 1.0.5-4
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
|
||||
|
||||
* Fri Jan 6 2012 Paul Howarth <paul@city-fan.org> 1.0.5-3
|
||||
- rebuilt for gcc 4.7
|
||||
* Fri Jan 6 2012 Paul Howarth <paul@city-fan.org> - 1.0.5-3
|
||||
- Rebuilt for gcc 4.7
|
||||
|
||||
* Mon Feb 7 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> 1.0.5-2
|
||||
- rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
|
||||
* Mon Feb 7 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.0.5-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
|
||||
|
||||
* Sun Jul 18 2010 Paul Howarth <paul@city-fan.org> 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 <paul@city-fan.org> - 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 <rel-eng@lists.fedoraproject.org> 1.0.4-6
|
||||
- rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild
|
||||
* Fri Jul 24 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.0.4-6
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild
|
||||
|
||||
* Mon Feb 23 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> 1.0.4-5
|
||||
- rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild
|
||||
* Mon Feb 23 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.0.4-5
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild
|
||||
|
||||
* Sat Dec 13 2008 Charles R. Anderson <cra@wpi.edu> 1.0.4-4
|
||||
- for Judy1 man page fix, patch Makefile.{am,in} instead of
|
||||
* Sat Dec 13 2008 Charles R. Anderson <cra@wpi.edu> - 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 <cra@wpi.edu> 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 <cra@wpi.edu> - 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 <cra@wpi.edu> 1.0.4-2
|
||||
- patch tests to run with shared library
|
||||
- run tests in check section
|
||||
* Thu Nov 27 2008 Charles R. Anderson <cra@wpi.edu> - 1.0.4-2
|
||||
- Patch tests to run with shared library
|
||||
- Run tests in check section
|
||||
|
||||
* Sun Oct 05 2008 Charles R. Anderson <cra@wpi.edu> 1.0.4-1
|
||||
- initial package for Fedora
|
||||
* Sun Oct 05 2008 Charles R. Anderson <cra@wpi.edu> - 1.0.4-1
|
||||
- Initial package for Fedora
|
||||
|
||||
Loading…
Reference in New Issue
Block a user