The patch seems to be just a fast implementation of sysmips(). Why would it solve an otherwise illegal instruction problem? George, what was exactly the error and the faulty instruction? Jun Pete Popov wrote: > > George Gensure wrote: > > > I build the 2.4.3 #5 kernel from the CVS source, and have had some > > trouble with specific programs. I get illegal instruction errors on > > find and tar. Is there anything I can do to correct this? > > I'm guessing you're running into the sys_sysmips problem. A patch has > not yet been applied to the oss.sgi.com kernel. I've attached a patch > from Florian that seems to work well and should apply cleanly. > > Pete > > ------------------------------------------------------------------------------ > diff -Nur linux.orig/arch/mips/kernel/Makefile linux/arch/mips/kernel/Makefile > --- linux.orig/arch/mips/kernel/Makefile Mon Apr 9 00:23:08 2001 > +++ linux/arch/mips/kernel/Makefile Mon Apr 9 00:23:34 2001 > @@ -20,7 +20,7 @@ > obj-y += branch.o process.o signal.o entry.o \ > traps.o ptrace.o vm86.o ioport.o reset.o \ > semaphore.o setup.o syscall.o sysmips.o \ > - ipc.o scall_o32.o unaligned.o > + ipc.o scall_o32.o unaligned.o fast-sysmips.o > obj-$(CONFIG_MODULES) += mips_ksyms.o > > ifdef CONFIG_CPU_R3000 > @@ -69,5 +69,6 @@ > > entry.o: entry.S > head.o: head.S > +fast-sysmips.o: fast-sysmips.S > > include $(TOPDIR)/Rules.make > diff -Nur linux.orig/arch/mips/kernel/fast-sysmips.S linux/arch/mips/kernel/fast-sysmips.S > --- linux.orig/arch/mips/kernel/fast-sysmips.S Thu Jan 1 01:00:00 1970 > +++ linux/arch/mips/kernel/fast-sysmips.S Mon Apr 9 00:28:20 2001 > @@ -0,0 +1,85 @@ > +/* > + * MIPS_ATOMIC_SET asm implementation for ll/sc capable cpus > + * > + * This file is subject to the terms and conditions of the GNU General Public > + * License. See the file "COPYING" in the main directory of this archive > + * for more details. > + * > + * Copyright (C) 2001 Florian Lohoff <flo@rfc822.org> > + * > + */ > +#include <asm/asm.h> > +#include <asm/mipsregs.h> > +#include <asm/regdef.h> > +#include <asm/stackframe.h> > +#include <asm/isadep.h> > +#include <asm/unistd.h> > +#include <asm/sysmips.h> > +#include <asm/offset.h> > +#include <asm/errno.h> > + > +#define PT_TRACESYS 0x00000002 > + > + EXPORT(fast_sysmips) > + > + .set noreorder > + > + li t0, MIPS_ATOMIC_SET > + beq a0, t0, 1f > + nop > + j sys_sysmips > + nop > + > +1: > + > + # a0 - MIPS_ATOMIC_SET > + # a1 - mem ptr > + # a2 - value > + > + addiu sp, sp, -8 # Reserve space > + sw a0, (sp) # Save arg0 > + > + addiu a0, a1, 4 # addr+size > + ori v0, a1, 4 # addr | size > + lw v1, THREAD_CURDS(gp) # current->thread.current_ds > + or v0, v0, a0 # addr | size | (addr+size) > + and v1, v1, v0 # (mask)&(addr | size | (addr+size) > + bltz v1, 5f > + nop > + > +2: > + ll v0, (a1) > + move t0, a2 > + sc t0, (a1) > + beqz t0, 2b > + nop > + > + sw v0, PT_R2+8(sp) # Result value > + sw zero, PT_R7+8(sp) # Success indicator > + > + lw t0, TASK_PTRACE(gp) # syscall tracing enabled? > + andi t0, PT_TRACESYS > + bnez t0, 3f > + nop > + > +4: > + lw a0, (sp) # Restore arg0 > + addiu sp, sp, 8 # Restore sp > + > + j o32_ret_from_sys_call > + nop > + > +3: > + sw ra, 4(sp) > + jal syscall_trace > + nop > + lw ra, 4(sp) > + j 4b > + nop > + > +5: > + lw a0, (sp) # Restore arg0 > + addiu sp, sp, 8 # Restore sp > + j ra > + li v0, -EFAULT > + > diff -Nur linux.orig/arch/mips/kernel/irix5sys.h linux/arch/mips/kernel/irix5sys.h > --- linux.orig/arch/mips/kernel/irix5sys.h Mon Apr 9 00:16:29 2001 > +++ linux/arch/mips/kernel/irix5sys.h Sun Apr 8 21:21:16 2001 > @@ -69,7 +69,7 @@ > SYS(irix_getgid, 0) /* 1047 getgid() V*/ > SYS(irix_unimp, 0) /* 1048 (XXX IRIX 4 ssig) V*/ > SYS(irix_msgsys, 6) /* 1049 sys_msgsys V*/ > -SYS(sys_sysmips, 4) /* 1050 sysmips() HV*/ > +SYS(fast_sysmips, 4) /* 1050 sysmips() HV*/ > SYS(irix_unimp, 0) /* 1051 XXX sysacct() IV*/ > SYS(irix_shmsys, 5) /* 1052 sys_shmsys V*/ > SYS(irix_semsys, 0) /* 1053 sys_semsys V*/ > diff -Nur linux.orig/arch/mips/kernel/syscalls.h linux/arch/mips/kernel/syscalls.h > --- linux.orig/arch/mips/kernel/syscalls.h Mon Apr 9 00:16:30 2001 > +++ linux/arch/mips/kernel/syscalls.h Sun Apr 8 21:21:43 2001 > @@ -163,7 +163,7 @@ > SYS(sys_writev, 3) > SYS(sys_cacheflush, 3) > SYS(sys_cachectl, 3) > -SYS(sys_sysmips, 4) > +SYS(fast_sysmips, 4) > SYS(sys_ni_syscall, 0) /* 4150 */ > SYS(sys_getsid, 1) > SYS(sys_fdatasync, 0)