The following commit has been merged in the master branch: commit be5239c07517d40f4e278612dffa1d0806852f3e Author: Sylvestre Ledru <sylvestre.le...@scilab-enterprises.com> Date: Sat Sep 28 16:13:54 2013 +0200
* Fix a miscompilation issue with gcc 4.8 (Closes: #721805) * Rebuild to fix the mod gfortran issue (Closes: #687127) diff --git a/debian/changelog b/debian/changelog index a69da25..33eaadd 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +hdf5 (1.8.11-3) unstable; urgency=low + + * Fix a miscompilation issue with gcc 4.8 (Closes: #721805) + * Rebuild to fix the mod gfortran issue (Closes: #687127) + + -- Sylvestre Ledru <sylves...@debian.org> Sat, 28 Sep 2013 16:11:34 +0200 + hdf5 (1.8.11-2) unstable; urgency=low * Fix the FTBFS under ia64 (Closes: #711777, #711561) diff --git a/debian/patches/0001-Fix-long-double-detection.patch b/debian/patches/0001-Fix-long-double-detection.patch new file mode 100644 index 0000000..234732f --- /dev/null +++ b/debian/patches/0001-Fix-long-double-detection.patch @@ -0,0 +1,183 @@ +From 4707d38bd9994de69dded7e3599b4efd20b13aec Mon Sep 17 00:00:00 2001 +From: Antonio Valentino <antonio.valent...@tiscali.it> +Date: Fri, 27 Sep 2013 19:23:52 +0000 +Subject: [PATCH] Fix long double detection + +--- + src/H5detect.c | 67 ++++++++++++++++++++++++++++++++++++++++------------------ + 1 file changed, 47 insertions(+), 20 deletions(-) + +diff --git a/src/H5detect.c b/src/H5detect.c +index d6f6a3b..eedf175 100644 +--- a/src/H5detect.c ++++ b/src/H5detect.c +@@ -118,10 +118,12 @@ static volatile int nd_g = 0, na_g = 0; + + static void print_results(int nd, detected_t *d, int na, malign_t *m); + static void iprint(detected_t *); +-static int byte_cmp(int, const void *, const void *); +-static int bit_cmp(int, int *, volatile void *, volatile void *); ++static int byte_cmp(int, const void *, const void *, const unsigned char *); ++static int bit_cmp(int, int *, volatile void *, volatile void *, ++ const unsigned char *); + static void fix_order(int, int, int *, const char **); +-static int imp_bit(int, int *, volatile void *, volatile void *); ++static int imp_bit(int, int *, volatile void *, volatile void *, ++ const unsigned char *); + static unsigned long find_bias(int, int, int *, void *); + static void precision (detected_t*); + static void print_header(void); +@@ -293,6 +295,8 @@ precision (detected_t *d) + #define DETECT_F(TYPE,VAR,INFO) { \ + volatile TYPE _v1, _v2, _v3; \ + unsigned char _buf1[sizeof(TYPE)], _buf3[sizeof(TYPE)]; \ ++ unsigned char _pad_mask[sizeof(TYPE)]; \ ++ unsigned char _byte_mask; \ + int _i, _j, _last = (-1); \ + char *_mesg; \ + \ +@@ -300,11 +304,26 @@ precision (detected_t *d) + INFO.varname = #VAR; \ + INFO.size = sizeof(TYPE); \ + \ +- /* Completely initialize temporary variables, in case the bits used in */ \ +- /* the type take less space than the number of bits used to store the type */ \ +- memset(&_v3, 0, sizeof(TYPE)); \ +- memset(&_v2, 0, sizeof(TYPE)); \ +- memset(&_v1, 0, sizeof(TYPE)); \ ++ /* Initialize padding mask */ \ ++ HDmemset(_pad_mask, 0, sizeof(_pad_mask)); \ ++ \ ++ /* Padding bits. Set a variable to 4.0, then flip each bit and see if \ ++ * the modified variable is equal ("==") to the original. Build a \ ++ * padding bitmask to indicate which bits in the type are padding (i.e. \ ++ * have no effect on the value and should be ignored by subsequent \ ++ * steps). This is necessary because padding bits can change arbitrarily \ ++ * and interfere with detection of the various properties below unless we \ ++ * know to ignore them. */ \ ++ _v1 = 4.0; \ ++ HDmemcpy(_buf1, (const void *)&_v1, sizeof(TYPE)); \ ++ for(_i = 0; _i < (int)sizeof(TYPE); _i++) \ ++ for(_byte_mask = (unsigned char)1; _byte_mask; _byte_mask <<= 1) { \ ++ _buf1[_i] ^= _byte_mask; \ ++ HDmemcpy((void *)&_v2, (const void *)_buf1, sizeof(TYPE)); \ ++ if(_v1 != _v2) \ ++ _pad_mask[_i] |= _byte_mask; \ ++ _buf1[_i] ^= _byte_mask; \ ++ } /* enf for */ \ + \ + /* Byte Order */ \ + for(_i = 0, _v1 = 0.0, _v2 = 1.0; _i < (int)sizeof(TYPE); _i++) { \ +@@ -313,7 +332,7 @@ precision (detected_t *d) + _v2 /= 256.0; \ + memcpy(_buf1, (const void *)&_v1, sizeof(TYPE)); \ + memcpy(_buf3, (const void *)&_v3, sizeof(TYPE)); \ +- _j = byte_cmp(sizeof(TYPE), &_buf3, &_buf1); \ ++ _j = byte_cmp(sizeof(TYPE), _buf3, _buf1, _pad_mask); \ + if(_j >= 0) { \ + INFO.perm[_i] = _j; \ + _last = _i; \ +@@ -327,19 +346,19 @@ precision (detected_t *d) + /* Implicit mantissa bit */ \ + _v1 = 0.5; \ + _v2 = 1.0; \ +- INFO.imp = imp_bit (sizeof(TYPE), INFO.perm, &_v1, &_v2); \ ++ INFO.imp = imp_bit (sizeof(TYPE), INFO.perm, &_v1, &_v2, _pad_mask); \ + \ + /* Sign bit */ \ + _v1 = 1.0; \ + _v2 = -1.0; \ +- INFO.sign = bit_cmp (sizeof(TYPE), INFO.perm, &_v1, &_v2); \ ++ INFO.sign = bit_cmp (sizeof(TYPE), INFO.perm, &_v1, &_v2, _pad_mask); \ + \ + /* Mantissa */ \ + INFO.mpos = 0; \ + \ + _v1 = 1.0; \ + _v2 = 1.5; \ +- INFO.msize = bit_cmp (sizeof(TYPE), INFO.perm, &_v1, &_v2); \ ++ INFO.msize = bit_cmp (sizeof(TYPE), INFO.perm, &_v1, &_v2, _pad_mask); \ + INFO.msize += 1 + (INFO.imp?0:1) - INFO.mpos; \ + \ + /* Exponent */ \ +@@ -879,7 +898,8 @@ iprint(detected_t *d) + * + * Purpose: Compares two chunks of memory A and B and returns the + * byte index into those arrays of the first byte that +- * differs between A and B. ++ * differs between A and B. Ignores differences where the ++ * corresponding bit in pad_mask is set to 0. + * + * Return: Success: Index of differing byte. + * +@@ -894,13 +914,16 @@ iprint(detected_t *d) + *------------------------------------------------------------------------- + */ + static int +-byte_cmp(int n, const void *_a, const void *_b) ++byte_cmp(int n, const void *_a, const void *_b, const unsigned char *pad_mask) + { + int i; + const unsigned char *a = (const unsigned char *) _a; + const unsigned char *b = (const unsigned char *) _b; + +- for (i = 0; i < n; i++) if (a[i] != b[i]) return i; ++ for(i = 0; i < n; i++) ++ if((a[i] & pad_mask[i]) != (b[i] & pad_mask[i])) ++ return i; ++ + return -1; + } + +@@ -911,7 +934,8 @@ byte_cmp(int n, const void *_a, const void *_b) + * Purpose: Compares two bit vectors and returns the index for the + * first bit that differs between the two vectors. The + * size of the vector is NBYTES. PERM is a mapping from +- * actual order to little endian. ++ * actual order to little endian. Ignores differences where ++ * the corresponding bit in pad_mask is set to 0. + * + * Return: Success: Index of first differing bit. + * +@@ -926,7 +950,8 @@ byte_cmp(int n, const void *_a, const void *_b) + *------------------------------------------------------------------------- + */ + static int +-bit_cmp(int nbytes, int *perm, volatile void *_a, volatile void *_b) ++bit_cmp(int nbytes, int *perm, volatile void *_a, volatile void *_b, ++ const unsigned char *pad_mask) + { + int i, j; + volatile unsigned char *a = (volatile unsigned char *) _a; +@@ -935,7 +960,8 @@ bit_cmp(int nbytes, int *perm, volatile void *_a, volatile void *_b) + + for (i = 0; i < nbytes; i++) { + assert(perm[i] < nbytes); +- if ((aa = a[perm[i]]) != (bb = b[perm[i]])) { ++ if ((aa = a[perm[i]] & pad_mask[perm[i]]) ++ != (bb = b[perm[i]] & pad_mask[perm[i]])) { + for (j = 0; j < 8; j++, aa >>= 1, bb >>= 1) { + if ((aa & 1) != (bb & 1)) return i * 8 + j; + } +@@ -1050,7 +1076,8 @@ fix_order(int n, int last, int *perm, const char **mesg) + *------------------------------------------------------------------------- + */ + static int +-imp_bit(int n, int *perm, volatile void *_a, volatile void *_b) ++imp_bit(int n, int *perm, volatile void *_a, volatile void *_b, ++ const unsigned char *pad_mask) + { + volatile unsigned char *a = (volatile unsigned char *) _a; + volatile unsigned char *b = (volatile unsigned char *) _b; +@@ -1061,7 +1088,7 @@ imp_bit(int n, int *perm, volatile void *_a, volatile void *_b) + * Look for the least significant bit that has changed between + * A and B. This is the least significant bit of the exponent. + */ +- changed = bit_cmp(n, perm, a, b); ++ changed = bit_cmp(n, perm, a, b, pad_mask); + assert(changed >= 0); + + /* +-- +1.8.4.rc3 + diff --git a/debian/patches/series b/debian/patches/series index b2077d7..fd125f9 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -5,3 +5,4 @@ relax-version-check.patch skip_cxx_inclusion.diff soname.diff ftbfs-ia64.diff +0001-Fix-long-double-detection.patch -- Hierarchical Data Format 5 (HDF5) _______________________________________________ Pkg-grass-devel mailing list Pkg-grass-devel@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-grass-devel