I'm having what sounds like the same problem as the previous
reports. The packaged POV-Ray binary (I tried 3.6.1-3) crashes with
SIGILL early in the processing of even a simple file. Like the
previous posters, my machine is a K7 (an 2-processor Athlon MP 2600+,
to be precise). However, if I recompile from the source package (using
all the defaults on my sid machine), the resulting binary works fine.

With GDB, I can see the particular instruction that's failing:

Program received signal SIGILL, Illegal instruction.
0x0805f84c in ?? ()
(gdb) disass 0x0805f84c 0x0805f860
Dump of assembler code from 0x805f84c to 0x805f860:
0x0805f84c <[EMAIL PROTECTED]>:  cvtsd2ss 0x81813b0,%xmm0
0x0805f854 <[EMAIL PROTECTED]>:  jmp    0x805f2a3 <[EMAIL PROTECTED]>
0x0805f859 <[EMAIL PROTECTED]>:  push   %eax
0x0805f85a <[EMAIL PROTECTED]>:  cvtsd2ss 0x81813c0,%xmm0

I suspect the problem is that the packaged binary was compiled with
processor-specific instructions supported by the build machine but not
my processor: for instance, SSE2 if the build machine is a Pentium 4
(my processor supports only the original generation SSE). My guess as
to the culprit is some lines in the configure script that guess GCC
flags based on /proc/cpuinfo. From line 885 of configure.ac:

        if test -r /proc/cpuinfo ; then  # Linux
          pov_cpuinfo=/proc/cpuinfo
        elif test -r /compat/linux/proc/cpuinfo ; then # FreeBSD using linprocfs
          pov_cpuinfo=/compat/linux/proc/cpuinfo
        elif test "`dmesg 2> /dev/null`"; then  # FreeBSD 4.9 at least
          pov_modelname=`dmesg | grep CPU | $head_1 | cut -d: -f2 | tr A-Z a-z`
          pov_cpuflags=`dmesg | grep Features | $head_1 | cut -d'<' -f2 | sed 's
/[,>]/ /g' | tr A-Z a-z`
          pov_vendorid=`dmesg | grep Origin | $head_1 | cut -d'"' -f2`
        fi
      fi

      if test "$pov_cpuinfo"; then
        pov_modelname=`cat $pov_cpuinfo | grep 'model name' | $head_1 | cut -d: 
-f2 | tr A-Z a-z`
        pov_cpuflags=`cat $pov_cpuinfo | grep flags | $head_1 | cut -d: -f2`
        pov_cpuflags=`echo $pov_cpuflags`  # remove leading/trailing blanks
        pov_vendorid=`cat $pov_cpuinfo | grep vendor_id | $head_1 | cut -d: -f2`
        pov_vendorid=`echo $pov_vendorid`
      fi

In any case, the architecture selection flags in debian/rules aren't
correctly taking effect: "cvtsd2ss" is some sort of SSE[23]?
instruction, definitely not something compatible back to the 486. On
my machine, I could see "-msse" being passed to GCC during the source
build. I suspect this problem actually makes the binary unusable on
any older processor.

 -- Stephen


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to