'Illegal instruction' on taking a trap on UltrasparcIII

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

 



Hi,

Ruby 1.8 in Debian has been misbehaving on sparc for some time 
(http://bugs.debian.org/393817):

jurij@goofy:~$ ruby1.8
Illegal instruction
jurij@goofy:~$ uname -a
Linux goofy 2.6.22-1-sparc64-smp #1 SMP Sun Aug 12 01:17:37 NZST 2007 sparc64 GNU/Linux

This has been traced to the following code fragment in Ruby's 
defines.h:

#if defined(sparc) || defined(__sparc__)
static inline void
flush_register_windows(void)
{
    asm
#ifdef __GNUC__
        volatile
#endif
# if defined(__sparc_v9__) || defined(__sparcv9) || 
defined(__arch64__)
        ("flushw")
# elif defined(linux) || defined(__linux__)
        ("ta  0x83")
# else /* Solaris, OpenBSD, NetBSD, etc. */
        ("ta  0x03")
# endif /* trap always to flush register windows if we are on a Sparc 
system */
        ;
}
#  define FLUSH_REGISTER_WINDOWS flush_register_windows()
[...]

In Debian we are still generating instructions for v8 by default (this 
is going to change soon, as we have decided to drop sparc32 support 
for the next release), so it tries to execute 'ta 0x83'. This leads to 
illegal instruction, but, interestingly enough, only on UltrasparcIII 
or better (originally the bug has been discovered on Niagara, 
confirmed on Blade 1000 and Blade 2500). Machines with UltrasparcII do 
not have any problems with this instruction. As it is unlikely that 
it's this instruction itself which is causing a SIGILL, my guess is 
that the illegal instruction is hit somewhere in the trap handler in 
the kernel, however I was not able to debug it further yet. Any ideas 
would be appreciated.

Best regards,
-- 
Jurij Smakov                                           jurij@xxxxxxxxx
Key: http://www.wooyd.org/pgpkey/                      KeyID: C99E03CC
-
To unsubscribe from this list: send the line "unsubscribe sparclinux" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Kernel Development]     [DCCP]     [Linux ARM Development]     [Linux]     [Photo]     [Yosemite Help]     [Linux ARM Kernel]     [Linux SCSI]     [Linux x86_64]     [Linux Hams]

  Powered by Linux