diff options
author | he <he@pkgsrc.org> | 2009-06-19 11:25:15 +0000 |
---|---|---|
committer | he <he@pkgsrc.org> | 2009-06-19 11:25:15 +0000 |
commit | 39995703317f91ff8b89ca7678df207a9075cd91 (patch) | |
tree | 7ac2e171d66a49e7606af71548b3e1a337c71ee6 /time/sunbird/patches | |
parent | d0ccaf8d0f1df2341d6748a9e894e714645f38f1 (diff) | |
download | pkgsrc-39995703317f91ff8b89ca7678df207a9075cd91.tar.gz |
Update from version 0.9 to 0.9nb1.
Pkgsrc changes:
o For the benefit of 64-bit strict alignment archs using gcc, such
as NetBSD/sparc64, ensure that the specially crafted double values
are properly aligned. Thanks to martin@ for pointing to the problem.
This should stop regxpcom from dropping core on NetBSD/sparc64.
OK'ed by wiz@
Diffstat (limited to 'time/sunbird/patches')
-rw-r--r-- | time/sunbird/patches/patch-en | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/time/sunbird/patches/patch-en b/time/sunbird/patches/patch-en new file mode 100644 index 00000000000..40db68e2a12 --- /dev/null +++ b/time/sunbird/patches/patch-en @@ -0,0 +1,47 @@ +$NetBSD: patch-en,v 1.1 2009/06/19 11:25:15 he Exp $ + +For the benefit of 64-bit strict alignment archs using gcc, such +as NetBSD/sparc64, ensure that the specially crafted double values +are properly aligned. + +--- extensions/transformiix/source/base/Double.cpp.orig 2006-06-22 21:13:00.000000000 +0200 ++++ extensions/transformiix/source/base/Double.cpp +@@ -95,8 +95,12 @@ typedef union txdpun { + #define TX_DOUBLE_HI32(x) (__extension__ ({ txdpun u; u.d = (x); u.s.hi; })) + #define TX_DOUBLE_LO32(x) (__extension__ ({ txdpun u; u.d = (x); u.s.lo; })) + ++#define __d_align __attribute__ ((aligned (__alignof__(double)))) ++ + #else // __GNUC__ + ++#define __d_align /* Empty */ ++ + /* We don't know of any non-gcc compilers that perform alias optimization, + * so this code should work. + */ +@@ -117,17 +121,19 @@ typedef union txdpun { + + //-- Initialize Double related constants + #ifdef IS_BIG_ENDIAN +-const PRUint32 nanMask[2] = {TX_DOUBLE_HI32_EXPMASK | TX_DOUBLE_HI32_MANTMASK, ++const PRUint32 nanMask[2] __d_align = {TX_DOUBLE_HI32_EXPMASK | TX_DOUBLE_HI32_MANTMASK, + 0xffffffff}; +-const PRUint32 infMask[2] = {TX_DOUBLE_HI32_EXPMASK, 0}; +-const PRUint32 negInfMask[2] = {TX_DOUBLE_HI32_EXPMASK | TX_DOUBLE_HI32_SIGNBIT, 0}; ++const PRUint32 infMask[2] __d_align = {TX_DOUBLE_HI32_EXPMASK, 0}; ++const PRUint32 negInfMask[2] __d_align = {TX_DOUBLE_HI32_EXPMASK | TX_DOUBLE_HI32_SIGNBIT, 0}; + #else +-const PRUint32 nanMask[2] = {0xffffffff, ++const PRUint32 nanMask[2] __d_align = {0xffffffff, + TX_DOUBLE_HI32_EXPMASK | TX_DOUBLE_HI32_MANTMASK}; +-const PRUint32 infMask[2] = {0, TX_DOUBLE_HI32_EXPMASK}; +-const PRUint32 negInfMask[2] = {0, TX_DOUBLE_HI32_EXPMASK | TX_DOUBLE_HI32_SIGNBIT}; ++const PRUint32 infMask[2] __d_align = {0, TX_DOUBLE_HI32_EXPMASK}; ++const PRUint32 negInfMask[2] __d_align = {0, TX_DOUBLE_HI32_EXPMASK | TX_DOUBLE_HI32_SIGNBIT}; + #endif + ++#undef __d_align ++ + const double Double::NaN = *((double*)nanMask); + const double Double::POSITIVE_INFINITY = *((double*)infMask); + const double Double::NEGATIVE_INFINITY = *((double*)negInfMask); |