pkgsrc-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

pkg/30106: www/firefox failes to install with 'Bus error' on UltraSparc machines



>Number:         30106
>Category:       pkg
>Synopsis:       www/firefox failes to install with 'Bus error' on UltraSparc 
>machines
>Confidential:   no
>Severity:       critical
>Priority:       high
>Responsible:    pkg-manager
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sun May 01 09:21:00 +0000 2005
>Originator:     SEGV
>Release:        
>Organization:
>Environment:
SunOS u10 5.10 Generic sun4u sparc SUNW,Ultra-5_10
>Description:
www/firefox has alignment issues on 64-bit architectures like UltraSparc. It 
builds fine from pkgsrc, but when it comes to installing and registering 
components it fails with 'Bus error'

Other programs based on Mozilla are likeley to have the same problems and 
should incorporate the patch given below.
>How-To-Repeat:

>Fix:
Apply the following patch to fix the alignment issues:

*** extensions/transformiix/source/base/Double.cpp.orig Wed Mar 16 17:58:58 2005
--- extensions/transformiix/source/base/Double.cpp      Wed Mar 16 17:59:16 2005
***************
*** 116,130 ****
--- 116,173 ----
  
  //-- Initialize Double related constants
  #ifdef IS_BIG_ENDIAN
+ /*
  const PRUint32 nanMask[2] =    {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};
+ */
+ 
+ /* alignment needs to be to 'double' datatype */
+ union {
+ const PRUint32 nanMask[2];
+ double dummy;
+ } un_nanMask = { {TX_DOUBLE_HI32_EXPMASK | TX_DOUBLE_HI32_MANTMASK, 
0xffffffff} };
+ #define nanMask (un_nanMask.nanMask)
+ 
+ union {
+ const PRUint32 infMask[2];
+ double dummy;
+ } un_infMask = { {TX_DOUBLE_HI32_EXPMASK, 0} };
+ #define infMask (un_infMask.infMask)
+ 
+ union {
+ const PRUint32 negInfMask[2];
+ double dummy;
+ } un_negInfMask = { {TX_DOUBLE_HI32_EXPMASK | TX_DOUBLE_HI32_SIGNBIT, 0} };
+ #define negInfMask (un_negInfMask.negInfMask)
+ 
  #else
+ /*
  const PRUint32 nanMask[2] =    {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};
+ */
+ 
+ /* alignment needs to be to 'double' datatype */
+ union {
+ const PRUint32 nanMask[2];
+ double dummy;
+ } un_nanMask = { {0xffffffff, TX_DOUBLE_HI32_EXPMASK | 
TX_DOUBLE_HI32_MANTMASK} };
+ #define nanMask (un_nanMask.nanMask)
+ 
+ union {
+ const PRUint32 infMask[2];
+ double dummy;
+ } un_infMask = { {0, TX_DOUBLE_HI32_EXPMASK} };
+ #define infMask (un_infMask.infMask)
+ 
+ union {
+ const PRUint32 negInfMask[2];
+ double dummy;
+ } un_negInfMask = { {0, TX_DOUBLE_HI32_EXPMASK | TX_DOUBLE_HI32_SIGNBIT} };
+ #define negInfMask (un_negInfMask.negInfMask)
  #endif
  
  const double Double::NaN = *((double*)nanMask);




Home | Main Index | Thread Index | Old Index