So I finally managed to get my hands on one of those super-rare RM7000 CPU's for
the SGI O2, and, as expected, there are some problems.
For the most part, the system will boot into userland, but it seems userland
isn't at all very happy. It seems bash is the unhappiest customer so far (or
rather, the only userland program I've seen fail repeatedly). Running the
Gentoo init scripts at startup, several scripts will terminate will a variety of
messages, from Trace/breakpoint traps, to bus errors to illegal instructions.
However, in the init scripts, they happen at specific points; usually when
booting our network startup scripts (neth.eth0, net.lo), and usually on an
exit() function in the script. Our emerge process, while python at heart, seems
to fail sporadically on the bash sections (parsing the ebuild code) as well.
I've got a feeling this is likely a problem in the kernel more than it is a
problem in the userland, but the question is how to go about determining which
and where. The RM7K's are pretty rare, so I imagine there's probably a few
undiscovered quirks in the code (notably the SC code in arch/mips/mm/sc-rm7k.c).
Not to mention, we can't even use the 1MB tertiary cache these things have.
For reference, system info:
> hinv
System: IP32
Processor: 350 Mhz RM7000, with FPU
Primary I-cache size: 16 Kbytes
Primary D-cache size: 16 Kbytes
Secondary cache size: 256 Kbytes
Ternary cache size: 1024 Kbytes
Memory size: 512 Mbytes
Graphics: CRM, Rev C
Audio: A3 version 1
SCSI Disk: scsi(0)disk(2)
SCSI Disk: scsi(0)disk(3)
SCSI CDROM: scsi(0)cdrom(4)
# cat /proc/cpuinfo
system type : SGI O2
processor : 0
cpu model : RM7000 V3.3 FPU V2.0
BogoMIPS : 350.20
byteorder : big endian
wait instruction : yes
microsecond timers : yes
tlb_entries : 48
extra interrupt vector : no
hardware watchpoint : no
ASEs implemented :
VCED exceptions : not available
VCEI exceptions : not available
And errors (from various points in the execution and multiple reboots):
* Starting eth0
/sbin/runscript.sh: line 428: 2475 Illegal instruction ( function exit ()
* Starting lo
/sbin/runscript.sh: line 428: 1464 Illegal instruction ( function exit ()
* Starting eth0
/etc/init.d/net.eth0: line 248: 1650 Bus error ( u=0;
module_load_minimum "${MODULES[i]}" || u=1; if [[ ${u} == 0 ]]; then
/sbin/runscript.sh: line 428: 2779 Bus error ( function exit ()
{
* Stopping syslog-ng ... [ ok ]
/lib/rcscripts/sh/rc-services.sh: line 444: 4093 Illegal instruction (
"/etc/init.d/${service}" stop )
/lib/rcscripts/sh/rc-services.sh: line 384: 1095 Trace/breakpoint trap
"/etc/init.d/${service}" start
So if anyone's got some old rm7k patches sitting around they want tested, or
spots where to look/debug options to turn on, let me know. I'll try switching
back to an RM5200 and rebuild bash with -g and make sure gdb is installed, them
change back to the RM7000 to try and capture some asm call or something that's
causing these exit() failures in bash (which seem to be the primary symptom)
Cheers,
--Kumba
--
Gentoo/MIPS Team Lead
"Such is oft the course of deeds that move the wheels of the world: small hands
do them because they must, while the eyes of the great are elsewhere." --Elrond