diff -Naur -X ./dontdiff.ibr linux-2.4.3s-1.0.0p4/Makefile linux-2.4.3s-1.0.0p4-ibr-sparc/Makefile
--- linux-2.4.3s-1.0.0p4/Makefile	Sun Apr 15 13:35:51 2001
+++ linux-2.4.3s-1.0.0p4-ibr-sparc/Makefile	Sun Apr 15 20:57:00 2001
@@ -9,7 +9,8 @@
 
 KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
 
-ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/)
+#ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/)
+ARCH=sparc
 
 CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
 	  else if [ -x /bin/bash ]; then echo /bin/bash; \
@@ -22,7 +23,7 @@
 HOSTCC  	= gcc
 HOSTCFLAGS	= -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer
 
-CROSS_COMPILE 	=
+CROSS_COMPILE 	=sparc-sun-linux-
 
 #
 # Include the make variables (CC, etc...)
@@ -92,11 +93,11 @@
 CPPFLAGS := -D__KERNEL__ -I$(HPATH)
 
 ifdef CONFIG_MOSIX_UDB
-CFLAGS := $(CPPFLAGS) -Wall -Wstrict-prototypes -O2 -fno-omit-frame-pointer -fno-strict-aliasing
+CFLAGS := -g $(CPPFLAGS) -Wall -Wstrict-prototypes -O2 -fno-omit-frame-pointer -fno-strict-aliasing
 else
-CFLAGS := $(CPPFLAGS) -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -fno-strict-aliasing
+CFLAGS := -g $(CPPFLAGS) -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -fno-strict-aliasing
 endif
-AFLAGS := -D__ASSEMBLY__ $(CPPFLAGS)
+AFLAGS := -g -D__ASSEMBLY__ $(CPPFLAGS)
 
 #
 # ROOT_DEV specifies the default root-device when making the image.
@@ -131,15 +132,15 @@
 		 drivers/misc/misc.o \
 		 drivers/net/net.o \
 		 drivers/media/media.o
-LIBS		=$(TOPDIR)/lib/lib.a
+LIBS		=lib/lib.a
 ifdef CONFIG_MOSIX
-CORE_FILES	+= $(TOPDIR)/mos/mos.o
+CORE_FILES	+= mos/mos.o
 SUBDIRS		=mos kernel drivers mm fs net ipc lib
 else
 SUBDIRS		=kernel drivers mm fs net ipc lib
 endif
 ifdef CONFIG_MOSIX_UDB
-CORE_FILES	+= $(TOPDIR)/udb/debugger.o
+CORE_FILES	+= udb/debugger.o
 SUBDIRS		+= udb
 endif
 
diff -Naur -X ./dontdiff.ibr linux-2.4.3s-1.0.0p4/arch/sparc/Makefile linux-2.4.3s-1.0.0p4-ibr-sparc/arch/sparc/Makefile
--- linux-2.4.3s-1.0.0p4/arch/sparc/Makefile	Sat Dec 30 00:07:20 2000
+++ linux-2.4.3s-1.0.0p4-ibr-sparc/arch/sparc/Makefile	Sun Apr 15 13:41:09 2001
@@ -41,8 +41,9 @@
 CORE_FILES := arch/sparc/kernel/kernel.o arch/sparc/mm/mm.o $(CORE_FILES) \
 	arch/sparc/math-emu/math-emu.o
 
-LIBS := $(TOPDIR)/lib/lib.a $(LIBS) $(TOPDIR)/arch/sparc/prom/promlib.a \
-	$(TOPDIR)/arch/sparc/lib/lib.a
+LIBS := $(LIBS) \
+	arch/sparc/prom/promlib.a \
+	arch/sparc/lib/lib.a
 
 # This one has to come last
 SUBDIRS += arch/sparc/boot
diff -Naur -X ./dontdiff.ibr linux-2.4.3s-1.0.0p4/arch/sparc/boot/Makefile linux-2.4.3s-1.0.0p4-ibr-sparc/arch/sparc/boot/Makefile
--- linux-2.4.3s-1.0.0p4/arch/sparc/boot/Makefile	Sun Feb 27 06:46:44 2000
+++ linux-2.4.3s-1.0.0p4-ibr-sparc/arch/sparc/boot/Makefile	Sun Apr 15 14:49:37 2001
@@ -34,7 +34,7 @@
 	$(LD) -r $(patsubst %,$(TOPDIR)/%,$(BTOBJS)) \
 		--start-group \
 		$(patsubst %,$(TOPDIR)/%,$(BTLIBS)) \
-		$(LIBS) \
+		$(patsubst %,$(TOPDIR)/%,$(LIBS)) \
 		--end-group -o vmlinux.o
 
 btfix.s: btfixupprep vmlinux.o
diff -Naur -X ./dontdiff.ibr linux-2.4.3s-1.0.0p4/arch/sparc/config.in linux-2.4.3s-1.0.0p4-ibr-sparc/arch/sparc/config.in
--- linux-2.4.3s-1.0.0p4/arch/sparc/config.in	Thu Mar 29 09:53:03 2001
+++ linux-2.4.3s-1.0.0p4-ibr-sparc/arch/sparc/config.in	Wed Apr 11 20:27:18 2001
@@ -8,6 +8,30 @@
 define_bool CONFIG_HIGHMEM y
 
 mainmenu_option next_comment
+comment 'MOSIX'
+bool 'MOSIX process migration support' CONFIG_MOSIX
+if [ "$CONFIG_MOSIX" = "y" ]; then
+	bool 'Support clusters with a complex network topology' CONFIG_MOSIX_TOPOLOGY
+	if [ "$CONFIG_MOSIX_TOPOLOGY" = "y" ]; then
+	    int  'Maximum network-topology complexity to support (2-10)' CONFIG_MOSIX_MAXTOPOLOGY 4
+	fi
+
+	bool 'MOSIX Kernel Debugger' CONFIG_MOSIX_UDB
+	if [ "$CONFIG_MOSIX_UDB" = "y" ]; then
+		bool 'MOSIX Kernel Debugging Code' CONFIG_MOSIX_DEBUG
+		bool 'Allow migration to self (for easyier testing)' CONFIG_MOSIX_CHEAT_MIGSELF
+		bool 'Process-arrival messages' CONFIG_MOSIX_WEEEEEEEEE
+	fi
+	bool 'MOSIX Kernel Diagnostics' CONFIG_MOSIX_DIAG
+	bool 'Stricter security on MOSIX ports' CONFIG_MOSIX_SECUREPORTS
+	int  'Level of process-identity disclosure (0-3)' CONFIG_MOSIX_DISCLOSURE 1
+	bool 'Create the kernel with a "-mosix" extension' CONFIG_MOSIX_EXTMOSIX
+	bool 'Direct File-System Access' CONFIG_MOSIX_DFSA
+	bool 'MOSIX File-System' CONFIG_MOSIX_FS
+fi
+endmenu
+
+mainmenu_option next_comment
 comment 'Code maturity level options'
 bool 'Prompt for development and/or incomplete code/drivers' CONFIG_EXPERIMENTAL
 endmenu
diff -Naur -X ./dontdiff.ibr linux-2.4.3s-1.0.0p4/arch/sparc/kernel/ptrace.c linux-2.4.3s-1.0.0p4-ibr-sparc/arch/sparc/kernel/ptrace.c
--- linux-2.4.3s-1.0.0p4/arch/sparc/kernel/ptrace.c	Wed Apr 11 20:03:29 2001
+++ linux-2.4.3s-1.0.0p4-ibr-sparc/arch/sparc/kernel/ptrace.c	Sun Apr 15 13:41:09 2001
@@ -22,6 +22,10 @@
 #include <asm/system.h>
 #include <asm/uaccess.h>
 
+#ifdef CONFIG_MOSIX
+#include <linux/mosix.h>
+#endif CONFIG_MOSIX
+
 #define MAGIC_CONSTANT 0x80000000
 
 
diff -Naur -X ./dontdiff.ibr linux-2.4.3s-1.0.0p4/arch/sparc/kernel/sparc-stub.c linux-2.4.3s-1.0.0p4-ibr-sparc/arch/sparc/kernel/sparc-stub.c
--- linux-2.4.3s-1.0.0p4/arch/sparc/kernel/sparc-stub.c	Tue Oct 10 20:33:51 2000
+++ linux-2.4.3s-1.0.0p4-ibr-sparc/arch/sparc/kernel/sparc-stub.c	Mon Apr 16 16:47:30 2001
@@ -292,6 +292,9 @@
 	unsigned char ch, recv;
 
 	/*  $<packet info>#<checksum>. */
+
+	prom_printf("in putpacket().\n");
+	
 	do {
 		putDebugChar('$');
 		checksum = 0;
@@ -524,6 +527,8 @@
 
 	tt = (registers[TBR] >> 4) & 0xff;
 
+	prom_printf("in handle_exception().\n");
+
 	/* reply to host that an exception has occurred */
 	sigval = computeSignal(tt);
 	ptr = remcomOutBuffer;
@@ -564,6 +569,8 @@
 
 	*ptr++ = 0;
 
+	prom_printf("before putpacket().\n");
+
 	putpacket(remcomOutBuffer);
 
 	/* XXX We may want to add some features dealing with poking the
@@ -712,6 +719,8 @@
 {
 	if (!initialized)
 		return;
+
+	prom_printf("in breakpoint().\n");
 
 	/* Again, watch those c-prefixes for ELF kernels */
 #if defined(__svr4__) || defined(__ELF__)
diff -Naur -X ./dontdiff.ibr linux-2.4.3s-1.0.0p4/drivers/char/console.c linux-2.4.3s-1.0.0p4-ibr-sparc/drivers/char/console.c
--- linux-2.4.3s-1.0.0p4/drivers/char/console.c	Sun Apr 15 13:35:51 2001
+++ linux-2.4.3s-1.0.0p4-ibr-sparc/drivers/char/console.c	Sun Apr 15 13:41:09 2001
@@ -2141,6 +2141,7 @@
 }
 
 #ifdef CONFIG_MOSIX_UDB
+#ifdef __i386__  /* ibr begin */
 int
 vt_console_read(struct console *co, const char *into, unsigned cnt)
 {
@@ -2164,6 +2165,12 @@
 	keyboard_manual_mode(0);
 	return(n);
 }
+#else __i386__
+int vt_console_read(struct console *co, const char *into, unsigned cnt)
+{
+	return 0;
+}
+#endif __i386__  /* ibr end */
 #endif CONFIG_MOSIX_UDB
 
 static kdev_t vt_console_device(struct console *c)
diff -Naur -X ./dontdiff.ibr linux-2.4.3s-1.0.0p4/drivers/sbus/char/sunserial.c linux-2.4.3s-1.0.0p4-ibr-sparc/drivers/sbus/char/sunserial.c
--- linux-2.4.3s-1.0.0p4/drivers/sbus/char/sunserial.c	Wed Apr 11 20:03:44 2001
+++ linux-2.4.3s-1.0.0p4-ibr-sparc/drivers/sbus/char/sunserial.c	Mon Apr 16 20:17:04 2001
@@ -73,7 +73,10 @@
 
 void __init rs_kgdb_hook(int channel)
 {
-	rs_ops.rs_kgdb_hook(channel);
+/*
+	prom_printf("in rs_kgdb_hook(%d);\n", channel);
+	prom_printf("rs_ops.rs_kgdb_hook = %p.\n", rs_ops.rs_kgdb_hook);
+*/	rs_ops.rs_kgdb_hook(channel);
 }
 
 void __init serial_console_init(void)
diff -Naur -X ./dontdiff.ibr linux-2.4.3s-1.0.0p4/drivers/sbus/char/zs.c linux-2.4.3s-1.0.0p4-ibr-sparc/drivers/sbus/char/zs.c
--- linux-2.4.3s-1.0.0p4/drivers/sbus/char/zs.c	Thu Jan  4 22:50:17 2001
+++ linux-2.4.3s-1.0.0p4-ibr-sparc/drivers/sbus/char/zs.c	Mon Apr 16 19:37:27 2001
@@ -167,7 +167,8 @@
 #define MIN(a,b)	((a) < (b) ? (a) : (b))
 #endif
 
-#undef ZS_LOG
+/*#undef ZS_LOG*/
+#define ZS_LOG
 #ifdef ZS_LOG
 struct zs_logent {
 	u8 reg, val;
@@ -1086,10 +1087,18 @@
 {
 	struct sun_zschannel *chan = zs_kgdbchan;
 
-	while((sbus_readb(&chan->control) & Tx_BUF_EMP)==0)
-		udelay(5);
-	sbus_writeb(kgdb_char, &chan->data);
+        prom_printf("in putDebugChar.\n");
+        prom_printf("putDebugChar('%c');\nchan = %p, Tx_BUF_EMP = %x\n", kgdb_char, chan, Tx_BUF_EMP);
+/*	while ( (chan->control & Tx_BUF_EMP) == 0 )
+		udelay(5);*/
+/*	while((sbus_readb(&chan->control) & Tx_BUF_EMP)==0)
+		udelay(5);*/
+	prom_printf("sbus_writeb.\n");
+	chan->data = kgdb_char;
+/*	sbus_writeb(kgdb_char, &chan->data);*/
+	prom_printf("WSYNC.\n");
 	ZS_WSYNC(chan);
+	prom_printf("ZSLOG.\n");
 	ZSLOG(REGDATA, kgdb_char, 1);
 }
 
@@ -2650,12 +2659,15 @@
 {
 	int chip = 0;
 
+	prom_printf("zs_kgdb_hook(%d);\n", tty_num);
+
 	if(!zs_chips[chip]) {
 		zs_chips[chip] = get_zs(chip);
 		/* Two channels per chip */
 		zs_channels[(chip*2)] = &zs_chips[chip]->channelA;
 		zs_channels[(chip*2)+1] = &zs_chips[chip]->channelB;
 	}
+	prom_printf("zs_channels = %p, zs_channels[%d] = %p, zs_soft = %p\n", zs_channels, zs_channels[tty_num], zs_soft);
 	zs_soft[tty_num].zs_channel = zs_channels[tty_num];
 	zs_kgdbchan = zs_soft[tty_num].zs_channel;
 	zs_soft[tty_num].change_needed = 0;
diff -Naur -X ./dontdiff.ibr linux-2.4.3s-1.0.0p4/fs/binfmt_elf.c linux-2.4.3s-1.0.0p4-ibr-sparc/fs/binfmt_elf.c
--- linux-2.4.3s-1.0.0p4/fs/binfmt_elf.c	Sun Apr 15 13:35:50 2001
+++ linux-2.4.3s-1.0.0p4-ibr-sparc/fs/binfmt_elf.c	Sun Apr 15 14:25:23 2001
@@ -411,8 +411,10 @@
 		goto out;
 #ifdef CONFIG_MOSIX
 #ifndef __i386__
+#if 0  /* ibr begin */
 On platforms where "flush_icache_range" is non-empty,
 it has to distributed and run REMOTELY.
+#endif  /* ibr end */
 #endif __i386__
 #endif CONFIG_MOSIX
 	flush_icache_range((unsigned long)addr,
@@ -846,7 +848,9 @@
 
 #ifdef CONFIG_MOSIX
 	}
+#ifdef __i386__  /* ibr begin */
 	mosix_obtain_registers(START_THREAD_REGS|ELF_PLAT_INIT_REGS);
+#endif  /* ibr end */
 #endif CONFIG_MOSIX
 
 #ifdef ELF_PLAT_INIT
diff -Naur -X ./dontdiff.ibr linux-2.4.3s-1.0.0p4/fs/exec.c linux-2.4.3s-1.0.0p4-ibr-sparc/fs/exec.c
--- linux-2.4.3s-1.0.0p4/fs/exec.c	Sun Apr 15 13:35:50 2001
+++ linux-2.4.3s-1.0.0p4-ibr-sparc/fs/exec.c	Sun Apr 15 14:24:10 2001
@@ -276,10 +276,14 @@
 	pgd = pgd_offset(tsk->mm, address);
 
 	spin_lock(&tsk->mm->page_table_lock);
+#ifdef __i386__  /* ibr begin */
 	pmd = pmd_alloc(tsk->mm, pgd, address);
+#endif  /* ir end */
 	if (!pmd)
 		goto out;
+#ifdef __i386__  /* ibr begin */
 	pte = pte_alloc(tsk->mm, pmd, address);
+#endif  /* ir end */
 	if (!pte)
 		goto out;
 	if (!pte_none(*pte))
@@ -464,7 +468,7 @@
  * disturbing other processes.  (Other processes might share the signal
  * table via the CLONE_SIGNAL option to clone().)
  */
- 
+
 static inline int make_private_signals(void)
 {
 	struct signal_struct * newsig;
@@ -941,7 +945,12 @@
 #ifdef CONFIG_MOSIX
 	current->mosix.inexec = &bprm;
 	if((current->mosix.dflags & DDEPUTY) && retval >= 0)
-		retval = mosix_deputy_bring_strings(&bprm, (char *)regs->ebx,
+		retval = mosix_deputy_bring_strings(&bprm,
+#ifdef __i386__  /* ibr begin */
+						    (char *)regs->ebx,
+#else
+						    filename,
+#endif  /* ibr end */
 								envp, argv);
 	else
 	{
diff -Naur -X ./dontdiff.ibr linux-2.4.3s-1.0.0p4/fs/file_table.c linux-2.4.3s-1.0.0p4-ibr-sparc/fs/file_table.c
--- linux-2.4.3s-1.0.0p4/fs/file_table.c	Sun Apr 15 13:35:50 2001
+++ linux-2.4.3s-1.0.0p4-ibr-sparc/fs/file_table.c	Sun Apr 15 14:22:54 2001
@@ -116,7 +116,9 @@
 		file->f_vfsmnt = NULL;
 		if (file->f_mode & FMODE_WRITE)
 #ifdef CONFIG_MOSIX
+#ifdef __i386__  /* ibr begin */
 		if (!(file->f_flags & O_NOWRITEACCESS))
+#endif  /* ibr begin */
 #endif CONFIG_MOSIX
 			put_write_access(inode);
 		dput(dentry);
diff -Naur -X ./dontdiff.ibr linux-2.4.3s-1.0.0p4/fs/proc/array.c linux-2.4.3s-1.0.0p4-ibr-sparc/fs/proc/array.c
--- linux-2.4.3s-1.0.0p4/fs/proc/array.c	Sun Apr 15 13:35:50 2001
+++ linux-2.4.3s-1.0.0p4-ibr-sparc/fs/proc/array.c	Sun Apr 15 14:20:08 2001
@@ -419,8 +419,10 @@
 		up_read(&mm->mmap_sem);
 		if(task == current && (task->mosix.dflags & DREMOTE))
 		/* just in case EIP and/or ESP are held by DEPUTY: */
+#ifdef __i386__  /* ibe begin */
 			mosix_obtain_registers(
 				BIT_OF_REGISTER(eip)|BIT_OF_REGISTER(esp));
+#endif  /* ibr end */
 		t->eip = KSTK_EIP(task);
 		t->esp = KSTK_ESP(task);
 	}
diff -Naur -X ./dontdiff.ibr linux-2.4.3s-1.0.0p4/include/asm-sparc/atomic.h linux-2.4.3s-1.0.0p4-ibr-sparc/include/asm-sparc/atomic.h
--- linux-2.4.3s-1.0.0p4/include/asm-sparc/atomic.h	Sun Apr 15 13:36:13 2001
+++ linux-2.4.3s-1.0.0p4-ibr-sparc/include/asm-sparc/atomic.h	Sun Apr 15 20:39:34 2001
@@ -100,6 +100,32 @@
 
 #define atomic_add_negative(i, v) (__atomic_add((i), (v)) < 0)
 
+/* ibr begin */
+static __inline__ void __atomic_set_mask32(unsigned long mask, unsigned int __volatile__ *addr)
+{
+	*addr |= mask;
+}
+
+static __inline__ void __atomic_clear_mask32(unsigned long mask, unsigned int __volatile__ *addr)
+{
+	*addr &= ~mask;
+}
+
+static __inline__ void __atomic_set_mask(unsigned long mask, unsigned long *addr)
+{
+	*addr |= mask;
+}
+
+static __inline__ void __atomic_clear_mask(unsigned long mask, unsigned long *addr)
+{
+	*addr &= ~mask;
+}
+
+#define atomic_set_mask(mask, addr)	__atomic_set_mask32(mask, addr)
+#define atomic_clear_mask(mask, addr)	__atomic_clear_mask32(mask, addr)
+
+/* ibr end */
+
 #endif /* !(__KERNEL__) */
 
 #endif /* !(__ARCH_SPARC_ATOMIC__) */
diff -Naur -X ./dontdiff.ibr linux-2.4.3s-1.0.0p4/include/asm-sparc/siginfo.h linux-2.4.3s-1.0.0p4-ibr-sparc/include/asm-sparc/siginfo.h
--- linux-2.4.3s-1.0.0p4/include/asm-sparc/siginfo.h	Sun Apr 15 13:36:13 2001
+++ linux-2.4.3s-1.0.0p4-ibr-sparc/include/asm-sparc/siginfo.h	Sun Apr 15 20:39:34 2001
@@ -62,6 +62,12 @@
 			int _band;	/* POLL_IN, POLL_OUT, POLL_MSG */
 			int _fd;
 		} _sigpoll;
+#ifdef CONFIG_MOSIX  /* ibr begin */
+		struct {
+			int _newplace;
+			int _reason;
+		} _sigmig;
+#endif CONFIG_MOSIX  /* ibr end */
 	} _sifields;
 } siginfo_t;
 
@@ -80,6 +86,10 @@
 #define si_trapno	_sifields._sigfault._trapno
 #define si_band		_sifields._sigpoll._band
 #define si_fd		_sifields._sigpoll._fd
+#ifdef CONFIG_MOSIX  /* ibr begin */
+#define       si_newplace     _sifields._sigmig._newplace
+#define       si_reason       _sifields._sigmig._reason
+#endif CONFIG_MOSIX  /* ibr end */
 
 #ifdef __KERNEL__
 #define __SI_MASK	0xffff0000
diff -Naur -X ./dontdiff.ibr linux-2.4.3s-1.0.0p4/include/mos/hardirq.h linux-2.4.3s-1.0.0p4-ibr-sparc/include/mos/hardirq.h
--- linux-2.4.3s-1.0.0p4/include/mos/hardirq.h	Thu Jan  1 02:00:00 1970
+++ linux-2.4.3s-1.0.0p4-ibr-sparc/include/mos/hardirq.h	Sun Apr 15 13:41:10 2001
@@ -0,0 +1,15 @@
+#ifndef _MOS_HARDIRQ_H
+#define _MOS_HARDIRQ_H
+
+#include <asm/hardirq.h>
+
+#define LOCAL_IRQ_COUNT(cpu)    local_irq_count[cpu]
+
+#ifdef __sparc__
+#ifndef __SMP__
+#undef LOCAL_IRQ_COUNT
+#define LOCAL_IRQ_COUNT(cpu)    local_irq_count
+#endif
+#endif
+
+#endif _MOS_HARDIRQ_H
diff -Naur -X ./dontdiff.ibr linux-2.4.3s-1.0.0p4/include/mos/mosixtask.h linux-2.4.3s-1.0.0p4-ibr-sparc/include/mos/mosixtask.h
--- linux-2.4.3s-1.0.0p4/include/mos/mosixtask.h	Wed Apr  4 17:51:45 2001
+++ linux-2.4.3s-1.0.0p4-ibr-sparc/include/mos/mosixtask.h	Sun Apr 15 13:56:52 2001
@@ -108,7 +108,9 @@
 	unsigned long exit_mem;	/* memory on REMOTE when exited */
 	unsigned short deputy_regs; /* bit map of regs in charge of DEPUTY */
 	unsigned short pass_regs; /* bit map of regs to pass */
+#ifdef __i386__  /* ibr begin */
 	__u32 features[NCAPINTS]; /* CPU features on original node */
+#endif  /* ibr end */
 	short mypid;		/* original PID */
 	short sigmig;		/* signal to receive on migration */
 	uint32_t *altregs;	/* place of registers when not on stack-top */
@@ -148,6 +150,12 @@
 #else
 #define DFSA_INIT_TASK
 #endif CONFIG_MOSIX_DFSA
+
+#if defined(__i386__)  /* ibr begin */
+#define __INIT_TASK_TASK_SIZE	TASK_SIZE,
+#elif defined(__sparc__)
+#define __INIT_TASK_TASK_SIZE	KERNBASE /* hack -- TASK_SIZE isn't a constant on sparc. */,
+#endif  /* ibr end */
 
 #ifdef CONFIG_MOSIX_FS
 #define	MFS_INIT_TASK	/* All fields are 0, nothing to declare */
diff -Naur -X ./dontdiff.ibr linux-2.4.3s-1.0.0p4/include/mos/protocol.h linux-2.4.3s-1.0.0p4-ibr-sparc/include/mos/protocol.h
--- linux-2.4.3s-1.0.0p4/include/mos/protocol.h	Wed Apr  4 17:51:45 2001
+++ linux-2.4.3s-1.0.0p4-ibr-sparc/include/mos/protocol.h	Sun Apr 15 14:01:25 2001
@@ -36,7 +36,9 @@
 	short reason;
 	short topology;
 	int personality;
+#ifdef __i386__  /* ibr begin */
 	int wp_works_ok;
+#endif  /* ibr end */
 	int pages_sent;
 	int request_type;
 	int has_dfsa;
@@ -344,7 +346,9 @@
 	int nmigs;
 	int pagecredit;
 	int lastxcpu;
+#ifdef __i386__  /* ibr begin */
 	__u32 features[NCAPINTS];
+#endif  /* ibr end */
 	u64 tscval;
 	struct opcost depcost[MAX_MOSIX_TOPOLOGY];
 	int depspeed;
diff -Naur -X ./dontdiff.ibr linux-2.4.3s-1.0.0p4/mos/Makefile linux-2.4.3s-1.0.0p4-ibr-sparc/mos/Makefile
--- linux-2.4.3s-1.0.0p4/mos/Makefile	Wed Apr  4 17:51:45 2001
+++ linux-2.4.3s-1.0.0p4-ibr-sparc/mos/Makefile	Sun Apr 15 14:53:58 2001
@@ -18,9 +18,13 @@
 
 O_TARGET := mos.o
 obj-y    := alternate.o auto_syscalls.o balance.o comm.o config.o decay.o \
-	    deputy.o div.o export.o freemem.o init.o info.o kernel.o load.o \
+	    deputy.o export.o freemem.o init.o info.o kernel.o load.o \
 	    log.o mig.o mosadmin.o mosproc.o prequest.o remote.o rinode.o \
 	    service.o syscalls.o ucache.o
+
+ifeq ($(ARCH), i386)
+obj-y += div.o
+endif
 
 obj-$(CONFIG_MOSIX_DFSA) += badops.o dfsa.o
 
diff -Naur -X ./dontdiff.ibr linux-2.4.3s-1.0.0p4/mos/balance.c linux-2.4.3s-1.0.0p4-ibr-sparc/mos/balance.c
--- linux-2.4.3s-1.0.0p4/mos/balance.c	Wed Apr  4 17:51:45 2001
+++ linux-2.4.3s-1.0.0p4-ibr-sparc/mos/balance.c	Sun Apr 15 15:07:00 2001
@@ -20,7 +20,9 @@
 #include <mos/protocol.h>
 #include <linux/mosix.h>
 #include <asm/uaccess.h>
-#include <asm/i387.h>
+/* ibr begin */
+/*#include <asm/i387.h>*/
+/* ibr end */
 #include <linux/smp_lock.h>
 #include <linux/swap.h>
 #include <linux/stddef.h>
@@ -45,6 +47,7 @@
 char *
 fformat(char *buf, double v)
 {
+#ifdef __i386__  /* ibr begin */
 	char *p = buf;
 	int started = 0;
 	double tens;
@@ -111,6 +114,7 @@
 	}
 	*p = '\0';
 	return(buf);
+#endif  /* ibr end */
 }
 #endif CONFIG_MOSIX_DEBUG
 
@@ -212,6 +216,7 @@
 	b = m->copyoutbytes * costs->outkb + m->copyinbytes * costs->inkb;
 	e = m->ndemandpages * costs->page + m->nsyscalls * costs->syscall;
 	if(costs->out || costs->in)	/* they are usually 0, so save time */
+#ifdef __i386__  /* ibr begin */
 #if COPY_COUNTER_MULTIPLIER != EVENT_COUNTER_VALUE
 #warning no reason they should not be the same, but inefficient code provided:
 		return((b >> 10) + (e >> EVENT_COUNTER_SHIFT) +
@@ -220,6 +225,9 @@
 #else
 		e += m->ncopyouts * costs->out + m->ncopyins * costs->in;
 #endif
+#else
+	e += m->ncopyouts * costs->out + m->ncopyins * costs->in;
+#endif  /* ibr end */
 #if EVENT_COUNTER_SHIFT == 10
 	/* we are lucky that the cost of a system call is the same
 	 * order of magnitude as copying 1KB to/from user-space
@@ -643,6 +651,7 @@
 void
 consider(int reason, struct sonstats *sons)
 {
+#ifdef __i386__  /* ibr begin */
 #define	INFLOAD 0x8000000
 #define	MAX_CONSIDERED	(INFO_WIN+1+MAX_MFS_STATNODES)
 #if MAX_CONSIDERED > 127
@@ -1063,6 +1072,7 @@
 	unchoose_me();
 	if(m->dflags & DREMOTE)
 		ask_deputy_to_goto(0);
+#endif  /* ibr end */
 }
 
 void
diff -Naur -X ./dontdiff.ibr linux-2.4.3s-1.0.0p4/mos/config.c linux-2.4.3s-1.0.0p4-ibr-sparc/mos/config.c
--- linux-2.4.3s-1.0.0p4/mos/config.c	Wed Apr  4 17:51:45 2001
+++ linux-2.4.3s-1.0.0p4-ibr-sparc/mos/config.c	Sun Apr 15 14:05:04 2001
@@ -281,11 +281,13 @@
 	int numpe = 0;
 	int error = 0;
 
+#ifdef __i386__  /* ibr begin */
 	if (!boot_cpu_data.hard_math)
 	{
 		printk("Sorry, MOSIX requires a math-unit.\n");
 		return(-ENODEV);
 	}
+#endif  /* ibr end */
 	if(!spin_trylock(&modifying))
 		return(-EBUSY);
 	error = -E2BIG;
diff -Naur -X ./dontdiff.ibr linux-2.4.3s-1.0.0p4/mos/deputy.c linux-2.4.3s-1.0.0p4-ibr-sparc/mos/deputy.c
--- linux-2.4.3s-1.0.0p4/mos/deputy.c	Wed Apr  4 17:51:45 2001
+++ linux-2.4.3s-1.0.0p4-ibr-sparc/mos/deputy.c	Sun Apr 15 15:05:40 2001
@@ -244,7 +244,9 @@
 			delay_sigs ^= 1;
 			deputy_add_rusage((struct rusage *)head);
 			comm_free(head);
+#ifdef __i386__  /* ibr begin */
 			do_syscall_trace();
+#endif  /* ibr end */
 			if(!(p->mosix.dflags & DDEPUTY))
 				break;
 			if(deputy_reply(REM_SYSCALL_TRACE, NULL, 0, NULL, 0, 0,
@@ -901,20 +903,26 @@
 		case __NR_vfork:
 		case __NR_clone:
 		case __NR_execve:
+#ifdef __i386__  /* ibr begin */
 		case __NR_iopl:
 		case __NR_ioperm:
+#endif  /* ibr end */
 		case __NR_sigsuspend:
 		case __NR_rt_sigsuspend:
 		case __NR_sigreturn:
 		case __NR_rt_sigreturn:
 		case __NR_sigaltstack:
+#ifdef __i386__  /* ibr begin */
 		case __NR_vm86old:
 		case __NR_vm86:
+#endif  /* ibr end */
 			if(delay_sigs)
 				p->mosix.dflags |= DTRACESYS1;
 				/* (for the son to set "delay_sigs") */
+#ifdef __i386__  /* ibr begin */
 			r.ret = call_with_regs((void *)sys_call_table[n],
 								&regs, &regs);
+#endif  /* ibr end */
 			p->mosix.dflags &= ~DTRACESYS1;
 			if(p->mosix.deputy_regs ||
 					!(current->mosix.dflags & DDEPUTY))
@@ -929,7 +937,9 @@
 	}
 	if(!(p->mosix.dflags & DDEPUTY))
 	{
+#ifdef i386  /* ibr begin */
 		mos_to_regs(&current->mosix)->eax = r.ret;
+#endif  /* ibr end */
 		return;
 	}
 	cdata = deputy_pack_read_cache_data(&l, &r, &tofree);
@@ -1004,12 +1014,14 @@
 {
 	u64 r;
 
+#ifdef i386  /* ibr begin */
 	__asm__ __volatile__(
 		"rdtsc\n\t"
 		"movl %%eax, 0(%%ebx)\n\t"
 		"movl %%edx, 4(%%ebx)"
 		: "=m" (r)
 		: "b" (&r));
+#endif  /* ibr end */
 	return(deputy_reply(REM_GETTSC|REPLY, &r, sizeof(r), NULL, 0, 0, 2));
 }
 
@@ -1338,8 +1350,10 @@
 	if(deputy_request(DEP_DUMP_FPU, NULL, 0, NULL, 0, 0,
 		(void **)&r, -sizeof(r)))
 		return(0);
+#ifdef i386  /* ibr begin */
 	if(r && comm_copydata(f, sizeof(*f), 0))
 		return(0);
+#endif  /* ibr end */
 	return(r);
 }
 
@@ -1359,7 +1373,9 @@
 	f.do_forkmigrate = !migrated;
 	f.pid = son->pid;
 	resend:
+#ifdef i386  /* ibr begin */
 	m->pass_regs = ALL_REGISTERS & ~BIT_OF_REGISTER(eax);
+#endif  /* ibr end */
 	if(comm_send(DEP_PLEASE_FORK, &f, sizeof(f), NULL, 0, 0))
 	{
 		bad:
diff -Naur -X ./dontdiff.ibr linux-2.4.3s-1.0.0p4/mos/export.c linux-2.4.3s-1.0.0p4-ibr-sparc/mos/export.c
--- linux-2.4.3s-1.0.0p4/mos/export.c	Wed Apr  4 17:51:45 2001
+++ linux-2.4.3s-1.0.0p4-ibr-sparc/mos/export.c	Sun Apr 15 14:07:03 2001
@@ -17,6 +17,7 @@
 #include <asm/uaccess.h>
 #include <linux/mosix.h>
 
+#ifdef __i386__  /* ibr begin */
 EXPORT_SYMBOL(deputy_copy_to_user);
 EXPORT_SYMBOL(deputy_copy_from_user);
 EXPORT_SYMBOL(deputy_clear_user);
@@ -27,6 +28,7 @@
 EXPORT_SYMBOL(mosix_obtain_registers);
 EXPORT_SYMBOL(mosix_deputy_setup_args);
 EXPORT_SYMBOL(mosix_deputy_dump_thread);
+#endif  /* ibr end */
 
 #ifdef CONFIG_MOSIX_DFSA
 EXPORT_SYMBOL(dfsa_open_file);
diff -Naur -X ./dontdiff.ibr linux-2.4.3s-1.0.0p4/mos/init.c linux-2.4.3s-1.0.0p4-ibr-sparc/mos/init.c
--- linux-2.4.3s-1.0.0p4/mos/init.c	Wed Apr  4 17:51:45 2001
+++ linux-2.4.3s-1.0.0p4-ibr-sparc/mos/init.c	Sun Apr 15 15:03:39 2001
@@ -38,8 +38,10 @@
 	config_udb();
 #endif CONFIG_MOSIX_UDB
 	cpuspeed = ((int64_t)loops_per_jiffy) * STD_SPD / STD_LOOPS;
+#ifdef __i386__  /* ibr begin */
 	if(!x86_udelay_tsc)
 		cpuspeed *= 2;
+#endif  /* ibr end */
 	info_init();
 	proc_update_costs();
 #ifdef CONFIG_MOSIX_FS
diff -Naur -X ./dontdiff.ibr linux-2.4.3s-1.0.0p4/mos/kernel.c linux-2.4.3s-1.0.0p4-ibr-sparc/mos/kernel.c
--- linux-2.4.3s-1.0.0p4/mos/kernel.c	Thu Apr 12 01:20:06 2001
+++ linux-2.4.3s-1.0.0p4-ibr-sparc/mos/kernel.c	Sun Apr 15 14:07:39 2001
@@ -514,8 +514,10 @@
 	register struct task_struct *p = current;
 	int any = 0;
 
+#ifdef __i386__  /* ibr begin */
 	if((regs.xcs & 3) != 3)	/* going back to kernel -- not to user mode */
 		return(0);
+#endif  /* ibr end */
 	__sti();		/* could be called after an interrupt */
 #ifdef CONFIG_MOSIX_DIAG
 	if(current->mosix.altregs != (uint32_t *)&regs)
diff -Naur -X ./dontdiff.ibr linux-2.4.3s-1.0.0p4/mos/mig.c linux-2.4.3s-1.0.0p4-ibr-sparc/mos/mig.c
--- linux-2.4.3s-1.0.0p4/mos/mig.c	Wed Apr  4 17:51:45 2001
+++ linux-2.4.3s-1.0.0p4-ibr-sparc/mos/mig.c	Sun Apr 15 14:09:51 2001
@@ -32,12 +32,18 @@
 #include <asm/softirq.h>
 #include <asm/mman.h>
 #include <asm/mmu_context.h>
+#ifdef __i386__  /* ibr begin */
 #include <asm/ldt.h>
+#endif  /* ibr end */
 #include <linux/vmalloc.h>
+#ifdef __i386__  /* ibr begin */
 #include <asm/desc.h>
+#endif  /* ibr end */
 #include <linux/module.h>
 #include <asm/processor.h>
+#ifdef __i386__  /* ibr begin */
 #include <asm/i387.h>
+#endif  /* ibr end */
 #ifdef CONFIG_MOSIX_DFSA
 #include <mos/dfsa.h>
 #endif CONFIG_MOSIX_DFSA
@@ -144,7 +150,9 @@
 		}
 
 		current->mosix.deppe = comm_getpeer(mlink);
+#ifdef __i386__  /* ibr begin */
 		error = user_thread(mig_remote_receive_proc, (void *)mlink, 0);
+#endif  /* ibr end */
 		if (error < 0)
 		{
 #ifdef CONFIG_MOSIX_DEBUG
@@ -202,8 +210,10 @@
 		printk("%s-migrating: 2\n", desc_mostask(NULL));
 #endif CONFIG_MOSIX_DEBUG
 
+#ifdef i386  /* ibr begin */
 	if(mrp->wp_works_ok && !boot_cpu_data.wp_works_ok)
 		reply = -ENOEXEC;
+#endif  /* ibr end */
 
 	set_personality(mrp->personality);
 	if(current->personality != mrp->personality)
@@ -444,7 +454,9 @@
 
 		info.si_signo = p->mosix.sigmig;
 		info.si_errno = 0;
+#ifdef __i386__  /* ibr begin */
 		info.si_code = SI_MIGRATED;
+#endif  /* ibr end */
 		info.si_newplace = whereto;
 		info.si_reason = reason;
 		send_sig_info(p->mosix.sigmig, &info, p);
@@ -518,7 +530,9 @@
 	mrp.topology = MAX_MOSIX_TOPOLOGY;
 	mrp.reason = reason;
 	mrp.personality = current->personality;
+#ifdef __i386__  /* ibr begin */
 	mrp.wp_works_ok = boot_cpu_data.wp_works_ok;
+#endif  /* ibr end */
 	mrp.request_type = type;
 #ifdef CONFIG_MOSIX_DFSA
 	mrp.has_dfsa = 1;
@@ -1144,23 +1158,28 @@
 int
 mig_send_fp(void)
 {
+#ifdef __i386__  /* ibr begin */
 	unlazy_fpu(current);
 	expel_progress = 1;
 	return(comm_send(has_fxsr ? MIG_XFP : MIG_FP, &current->thread.i387,
 				sizeof(current->thread.i387), NULL, 0, 0));
+#endif  /* ibr end */
 }
 
 int
 mig_send_ldt(void)
 {
+#ifdef __i386__  /* ibr begin */
 	expel_progress = 1;
 	return(comm_send(MIG_LDT, NULL, 0,
 		current->mm->context.segments, LDT_ENTRIES*LDT_ENTRY_SIZE, 0));
+#endif  /* ibr end */
 }
 
 int
 mig_send_misc(int credit)
 {
+#ifdef __i386__  /* ibr begin */
 	struct mig_misc_h m;
 	clock_t utime, stime;
 	extern unsigned long do_it_virt(struct task_struct *, unsigned long);
@@ -1261,6 +1280,7 @@
 	if(!(p->mosix.dflags & DDEPUTY) && /* (DEPUTY gets it in "depticks") */
 		utime + stime > 0)
 		absorb_deptime(utime + stime);
+#endif  /* ibr end */
 	return(-1);
 }
 
@@ -1293,7 +1313,9 @@
 	if(mig_send_mm_stats() || mig_send_mm_areas() ||
 		(credit = mig_send_pages()) < 0 ||
 		(current->used_math && mig_send_fp()) ||
+#ifdef __i386__  /* ibr begin */
 		(current->mm->context.segments && mig_send_ldt()) ||
+#endif  /* ibr end */
 		mig_send_misc(credit))
 	{
 		comm_send(MIG_NOT_COMING, NULL, 0, NULL, 0, 0);
@@ -1487,6 +1509,7 @@
 	kunmap(page);
 	pgd = pgd_offset(mm, addr);
 	spin_lock(&mm->page_table_lock);
+#ifdef __i386__  /* ibr begin */
 	if (!(pmd = pmd_alloc(mm, pgd, addr)))
 	{
 #ifdef CONFIG_MOSIX_DIAG
@@ -1507,6 +1530,7 @@
 		spin_unlock(&mm->page_table_lock);
 		return(-1);
 	}
+#endif  /* ibr end */
 	if (!pte_none(*pte)) {
 		printk("%s-mig_do_receive_page: double page at addr 0x%x\n",
 			desc_mostask(NULL), (int)addr);
@@ -1524,14 +1548,17 @@
 void
 mig_do_receive_fp(union i387_union *i)
 {
+#ifdef __i386__  /* ibr begin */ 
 	current->used_math = 1;
 	unlazy_fpu(current);
 	if(has_fxsr())
 		fsave_to_fxsave(i, &current->thread.i387);
 	else
 		memcpy((caddr_t)&current->thread.i387, (caddr_t)i, sizeof(*i));
+#endif  /* ibr end */
 }
 
+#ifdef i386  /* ibr begin */
 void
 mig_do_receive_xfp(union i387_union *i)
 {
@@ -1564,6 +1591,7 @@
 	load_LDT(mm);
 	return(0);
 }
+#endif  /* ibr end */
 
 void
 mig_do_receive_misc(struct mig_misc_h *m)
@@ -1577,7 +1605,9 @@
 		p->nice = m->nice;
 		p->cap_effective = (p->cap_effective & ~REMOTE_CAPS) |
 							(m->caps & REMOTE_CAPS);
+#ifdef __i386__  /* ibr begin */
 		memcpy(p->mosix.features, m->features, sizeof(m->features));
+#endif  /* ibr end */
 		task_lock(p);
 		if(m->stay)
 			p->mosix.stay |= DNOMIGRATE;
@@ -1594,8 +1624,10 @@
 	}
 	p->mosix.dflags &= ~(DTRACESYS1|DTRACESYS2);
 	p->mosix.dflags |= m->dflags;
+#ifdef __i386__  /* ibr begin */
 	memcpy((caddr_t)p->thread.debugreg, (caddr_t)m->debugreg,
 		sizeof(m->debugreg));
+#endif  /* ibr end */
 	p->it_prof_incr = m->it_prof_incr;
 	p->it_virt_incr = m->it_virt_incr;
 	p->mosix.deputy_regs = m->deputy_regs;
@@ -1699,11 +1731,16 @@
 				}
 				break;
 			case MIG_FP:
+#ifdef __i386__  /* ibr begin */
 				mig_do_receive_fp((union i387_union *)head);
+#endif  /* ibr end */
 				break;
 			case MIG_XFP:
+#ifdef __i386__  /* ibr begin */
 				mig_do_receive_xfp((union i387_union *)head);
+#endif  /* ibr end */
 				break;
+#ifdef __i386__  /* ibr begin */
 			case MIG_LDT:
 				if(mig_do_receive_ldt())
 				{
@@ -1714,6 +1751,7 @@
 					comm_free(head);
 					goto fail;
 				}
+#endif  /* ibr end */
 				break;
 			case MIG_MISC:
 				mig_do_receive_misc((struct mig_misc_h *)head);
@@ -1721,7 +1759,9 @@
 				spin_lock_irq(&runqueue_lock);
 				m->dflags &= ~DINCOMING;
 				spin_unlock_irq(&runqueue_lock);
+#ifdef __i386__  /* ibr begin */
 				flush_tlb();	/* for all the new pages */
+#endif  /* ibr end */
 				comm_send(MIG_MISC|REPLY, NULL, 0, NULL, 0, 0);
 				return(0);
 			case MIG_NOT_COMING:
diff -Naur -X ./dontdiff.ibr linux-2.4.3s-1.0.0p4/mos/mosadmin.c linux-2.4.3s-1.0.0p4-ibr-sparc/mos/mosadmin.c
--- linux-2.4.3s-1.0.0p4/mos/mosadmin.c	Wed Apr  4 17:51:45 2001
+++ linux-2.4.3s-1.0.0p4-ibr-sparc/mos/mosadmin.c	Sun Apr 15 15:02:10 2001
@@ -245,8 +245,10 @@
 				release_irqlock(this_cpu);
 #endif CONFIG_SMP
 			}
+#ifdef __i386__  /* ibr begin */
 			while(in_softirq())
 				cpu_bh_enable(this_cpu);
+#endif  /* ibr end */
 			sti();
 		}
 		if(boot)
diff -Naur -X ./dontdiff.ibr linux-2.4.3s-1.0.0p4/mos/prequest.c linux-2.4.3s-1.0.0p4-ibr-sparc/mos/prequest.c
--- linux-2.4.3s-1.0.0p4/mos/prequest.c	Wed Apr  4 17:51:45 2001
+++ linux-2.4.3s-1.0.0p4-ibr-sparc/mos/prequest.c	Sun Apr 15 15:01:01 2001
@@ -10,6 +10,7 @@
  */
 /*
  * Author(s): Amnon Shiloh.
+ * edited by ibr.
  */
 #include <linux/sched.h>
 #include <linux/mosix.h>
@@ -213,52 +214,76 @@
 			pr->reply = 0;
 			break;
 		case PR_PTRACE_GET_STACK_LONG:
+#ifdef __i386__  /* ibr begin */
 			pr->reply = get_stack_long(current, pr->param);
+#endif  /* ibr end */
 			break;
 		case PR_PTRACE_PUT_STACK_LONG:
+#ifdef __i386__  /* ibr begin */
 			pr->reply = put_stack_long(current, pr->param,
 				(unsigned long)pr->param2);
+#endif  /* ibr end */
 			break;
 		case PR_PTRACE_GETREGS:
+#ifdef __i386__  /* ibr begin */
 			ptrace_getregs((unsigned long *)pr->ereply);
+#endif  /* ibr end */
 			break;
 		case PR_PTRACE_SETREGS:
+#ifdef __i386__  /* ibr begin */
 			ptrace_putregs((unsigned long *)pr->ereply);
+#endif  /* ibr end */
 			pr->reply = 0;
 			break;
 		case PR_PTRACE_PEEKUSER:
+#ifdef __i386__  /* ibr begin */
 			*((unsigned long *)pr->ereply) =
 				ptrace_peekuser(pr->param);
+#endif  /* ibr end */
 			pr->reply = 0;
 			break;
 		case PR_PTRACE_POKEUSER:
+#ifdef __i386__  /* ibr begin */
 			ptrace_pokeuser(pr->param, pr->param2);
+#endif  /* ibr end */
 			pr->reply = 0;
 			break;
 		case PR_PTRACE_CONT:
+#ifdef __i386__  /* ibr begin */
 			ptrace_cont(pr->param);
+#endif  /* ibr end */
 			pr->reply = 0;
 			break;
 		case PR_PTRACE_SINGLE_STEP:
+#ifdef __i386__  /* ibr begin */
 			ptrace_single_step();
+#endif  /* ibr end */
 			pr->reply = 0;
 			break;
 		case PR_PTRACE_GETFPREGS:
+#ifdef __i386__  /* ibr begin */
 			ptrace_getfpregs((struct user_i387_struct *)pr->ereply);
+#endif  /* ibr end */
 			pr->reply = 0;
 			break;
 		case PR_PTRACE_SETFPREGS:
+#ifdef __i386__  /* ibr begin */
 			ptrace_setfpregs((struct user_i387_struct *)pr->ereply);
+#endif  /* ibr end */
 			pr->reply = 0;
 			break;
 		case PR_PTRACE_GETFPXREGS:
+#ifdef __i386__  /* ibr begin */
 			ptrace_getfpxregs(
 					(struct user_fxsr_struct *)pr->ereply);
+#endif  /* ibr end */
 			pr->reply = 0;
 			break;
 		case PR_PTRACE_SETFPXREGS:
+#ifdef __i386__  /* ibr begin */
 			ptrace_setfpxregs(
 					(struct user_fxsr_struct *)pr->ereply);
+#endif  /* ibr end */
 			pr->reply = 0;
 			break;
 	}
@@ -380,11 +405,15 @@
 			break;
 		case PR_PTRACE_SETFPREGS:
 			snd = pr->ereply;
+#ifdef __i386__  /* ibr begin */
 			sndlen = sizeof(struct user_i387_struct);
+#endif  /* ibr end */
 			break;
 		case PR_PTRACE_SETFPXREGS:
 			snd = pr->ereply;
+#ifdef __i386__  /* ibr begin */
 			sndlen = sizeof(struct user_fxsr_struct);
+#endif  /* ibr end */
 			break;
 			/* the following may be done locally */
 		case PR_PROCFS_GET_STAT_PARTS:
@@ -540,14 +569,20 @@
 			}
 			break;
 		case PR_PTRACE_GET_STACK_LONG:
+#ifdef __i386__  /* ibr begin */
 			r.reply = get_stack_long(current, p->param);
+#endif  /* ibr end */
 			break;
 		case PR_PTRACE_PUT_STACK_LONG:
+#ifdef __i386__  /* ibr begin */
 			r.reply = put_stack_long(current, p->param,
 				(unsigned long)p->param2);
+#endif  /* ibr end */
 			break;
 		case PR_PTRACE_GETREGS:
+#ifdef __i386__  /* ibr begin */
 			ptrace_getregs((unsigned long *)buffer);
+#endif  /* ibr end */
 			r.datalen = 17 * sizeof(unsigned long);
 			r.reply = 0;
 			break;
@@ -555,21 +590,29 @@
 			r.reply = 0;
 			if(!comm_recvdata((void **)&buffer))
 			{
+#ifdef __i386__  /* ibr begin */
 				ptrace_putregs((unsigned long *)buffer);
+#endif  /* ibr end */
 				comm_free(buffer);
 			}
 			break;
 		case PR_PTRACE_PEEKUSER:
+#ifdef __i386__  /* ibr begin */
 			data[0] = ptrace_peekuser(p->param);
+#endif  /* ibr end */
 			r.datalen = sizeof(unsigned long);
 			r.reply = 0;
 			break;
 		case PR_PTRACE_POKEUSER:
+#ifdef __i386__  /* ibr begin */
 			ptrace_pokeuser(p->param, p->param2);
+#endif  /* ibr end */
 			r.datalen = r.reply = 0;
 			break;
 		case PR_PTRACE_CONT:
+#ifdef __i386__  /* ibr begin */
 			ptrace_cont(p->param);
+#endif  /* ibr end */
 			r.datalen = r.reply = 0;
 			break;
 		case PR_PTRACE_NOT_TRACED:
@@ -577,34 +620,44 @@
 			r.datalen = r.reply = 0;
 			break;
 		case PR_PTRACE_SINGLE_STEP:
+#ifdef __i386__  /* ibr begin */
 			ptrace_single_step();
+#endif  /* ibr end */
 			r.datalen = r.reply = 0;
 			break;
 		case PR_PTRACE_GETFPREGS:
+#ifdef __i386__  /* ibr begin */
 			ptrace_getfpregs((struct user_i387_struct *)buffer);
 			r.datalen = sizeof(struct user_i387_struct);
+#endif  /* ibr end */
 			r.reply = 0;
 			break;
 		case PR_PTRACE_SETFPREGS:
 			r.reply = 0;
 			if(!comm_recvdata((void **)&buffer))
 			{
+#ifdef __i386__  /* ibr begin */
 				ptrace_setfpregs(
 					(struct user_i387_struct *)buffer);
+#endif  /* ibr end */
 				comm_free(buffer);
 			}
 			break;
 		case PR_PTRACE_GETFPXREGS:
+#ifdef __i386__  /* ibr begin */
 			ptrace_getfpxregs((struct user_fxsr_struct *)buffer);
 			r.datalen = sizeof(struct user_fxsr_struct);
+#endif  /* ibr end */
 			r.reply = 0;
 			break;
 		case PR_PTRACE_SETFPXREGS:
 			r.reply = 0;
 			if(!comm_recvdata((void **)&buffer))
 			{
+#ifdef __i386__  /* ibr begin */
 				ptrace_setfpxregs(
 					(struct user_fxsr_struct *)buffer);
+#endif  /* ibr end */
 				comm_free(buffer);
 			}
 			break;
diff -Naur -X ./dontdiff.ibr linux-2.4.3s-1.0.0p4/mos/remote.c linux-2.4.3s-1.0.0p4-ibr-sparc/mos/remote.c
--- linux-2.4.3s-1.0.0p4/mos/remote.c	Wed Apr  4 17:51:45 2001
+++ linux-2.4.3s-1.0.0p4-ibr-sparc/mos/remote.c	Sun Apr 15 14:12:40 2001
@@ -84,8 +84,10 @@
 			p->mosix.dflags &= ~DPSYNC;
 			if(expect == DEP_USERMODE)
 			{
+#ifdef __i386__  /* ibr begin */
 				if(has_ret_value)
 					mos_to_regs(&p->mosix)->eax = ret_value;
+#endif  /* ibr end */
 				return(0);
 			}
 			if(type != (expect | USERMODE))
@@ -417,6 +419,7 @@
 
 	s.n = n;
 	memcpy((caddr_t)s.args, (caddr_t)regs, sizeof(s.args));
+#ifdef __i386__  /* ibr begin */
 	switch(n)
 	{
 		/* the following system-calls are supposed to ask for the
@@ -441,10 +444,13 @@
 			current->mosix.pass_regs = ALL_REGISTERS;
 			break;
 	}
+#endif  /* ibr end */
 	p = construct_ucache_envelope(&l, &data_from_user, &s, &tofree);
 	bump_syscalls();
+#ifdef __i386__  /* ibr begin */
 	if(p)
 		bump_copyin(l);
+#endif  /* ibr end */
 	/* Cannot use "remote_request" here, because we MUST free "tofree" */
 	error = comm_send(REM_SYSCALL, &s, sizeof(s), p, l, data_from_user);
 	if(tofree)
@@ -572,10 +578,12 @@
 	ka.sa.sa_restorer = s->restorer;
 	current->sas_ss_sp = s->ss_sp;
 	current->sas_ss_size = s->ss_size;
+#ifdef __i386__  /* ibr begin */
 	if(s->flags & SA_SIGINFO)
 		setup_rt_frame(s->sig, &ka, &s->info, &s->set, mos_to_regs(&current->mosix));
 	else
 		setup_frame(s->sig, &ka, &s->set, mos_to_regs(&current->mosix));
+#endif  /* ibr end */
 	comm_free(s);
 	return(comm_send(DEP_SETUPFRAME|REPLY, NULL, 0, NULL, 0, 0));
 }
@@ -651,11 +659,13 @@
 									int *);
 	struct restore_sigcontext_ret_h r;
 
+#ifdef __i386__  /* ibr begin */
 	r.result = restore_sigcontext(mos_to_regs(&current->mosix), *frame,
 									&r.eax);
 
 	comm_free(frame);
 	current->mosix.pass_regs |= BIT_OF_REGISTER(esp);
+#endif  /* ibr end */
 	return(comm_send(DEP_RESTORESIGCONTEXT|REPLY, &r, sizeof(r),
 								NULL, 0, 0));
 }
@@ -771,7 +781,9 @@
 	}
 	result = comm_send(DEP_COPY_FROM_USER|REPLY, &result, sizeof(result),
 		(result == u->size) ? NULL : to, u->size - result, direct);
+#ifdef __i386__  /* ibr begin */
 	bump_copyin(u->size);
+#endif  /* ibr end */
 	comm_free(u);
 	if(!direct && to)
 		kfree(to);
@@ -793,7 +805,9 @@
 	}
 	if(result)
 		comm_flushdata(COMM_ALLDATA);
+#ifdef __i386__  /* ibr begin */
 	bump_copyout(u->size);
+#endif  /* ibr end */
 	comm_free(u);
 	return(comm_send(DEP_COPY_TO_USER|REPLY, &result, sizeof(result),
 		NULL, 0, 0));
@@ -804,7 +818,9 @@
 {
 	int error = (comm_copydata(u->addr, u->size, 1) != 0);
 
+#ifdef __i386__  /* ibr begin */
 	bump_copyout(u->size);
+#endif  /* ibr end */
 	comm_free(u);
 	if(error)
 		comm_flushdata(COMM_ALLDATA);
@@ -840,8 +856,10 @@
 		result > 0 ? to : NULL, result > 0 ? result : 0, 0);
 	if(to)
 		kfree(to);
+#ifdef __i386__  /* ibr begin */
 	if(result > 0)
 		bump_copyin(result);
+#endif  /* ibr end */
 	return(result);
 }
 
@@ -863,11 +881,13 @@
 int
 remote_verify_write(struct user_copy_h *u)
 {
+#ifdef __i386__  /* ibr begin */
 	int result = __verify_write(u->addr, u->size);
 
 	comm_free(u);
 	return(comm_send(DEP_VERIFY_WRITE|REPLY, &result, sizeof(result),
 		NULL, 0, 0));
+#endif  /* ibr end */
 }
 
 int
@@ -885,7 +905,9 @@
 			u->sum, &r.error);
 	result = comm_send(DEP_CSUM_COPY_FROM_USER|REPLY, &r, sizeof(r),
 		r.error ? NULL : to, r.error ? 0 : u->len, 0);
+#ifdef __i386__  /* ibr begin */
 	bump_copyin(u->len);
+#endif  /* ibr end */
 	comm_free(u);
 	if(to)
 		kfree(to);
@@ -1013,7 +1035,9 @@
 				kaddr = kmap(bprm.page[i]);
 				err = comm_send(REM_MORESTRINGS, &m, sizeof(m),
 				      kaddr + (PAGE_SIZE - m.len), m.len, 0);
+#ifdef __i386__  /* ibr begin */
 				kunmap(bprm->page[i]);
+#endif  /* ibr end */
 			}
 			__free_page(bprm.page[i]);
 			bprm.page[i] = 0;
@@ -1034,10 +1058,12 @@
 			r.pgno = 0;
 			kaddr = NULL;	/* only to pacify the compiler */
 		}
+#ifdef __i386__  /* ibr begin */
 		err = comm_send(DEP_BRING_STRINGS|REPLY, &r, sizeof(r), r.pgno ?
 			(kaddr + (PAGE_SIZE-r.len)) : 0, r.pgno ? r.len : 0, 0);
 		if(r.pgno)
 			kunmap(bprm->page[MAX_ARG_PAGES-1]);
+#endif  /* ibr end */
 	}
 	for(i = 0 ; i < MAX_ARG_PAGES ; i++)
 	if(bprm.page[i])
@@ -1132,9 +1158,11 @@
 			p->ptrace &= ~PT_DTRACE;
 		r.start_stack = p->mm->start_stack;
 	}
+#ifdef __i386__  /* ibr begin */
 	p->mosix.pass_regs |= BIT_OF_REGISTER(xds)|BIT_OF_REGISTER(xes)|
 		BIT_OF_REGISTER(xss)|BIT_OF_REGISTER(xcs)|BIT_OF_REGISTER(eip)|
 		BIT_OF_REGISTER(esp);
+#endif  /* ibr end */
 	err = comm_send(DEP_SETUP_ARGS|REPLY, &r, sizeof(r), NULL, 0, 0);
 	mosix_decay_exec();
 	out:
@@ -1176,7 +1204,9 @@
 int
 remote_init_aout_mm(struct exec *ex)
 {
+#ifdef __i386__  /* ibr begin */
 	aout_remote_init_mm(ex);
+#endif  /* ibr end */
 	comm_free(ex);
 	return(comm_send(DEP_INIT_AOUT_MM|REPLY, NULL, 0, NULL, 0, 0));
 }
@@ -1256,7 +1286,9 @@
 	int done, ret;
 
 	comm_free(f);
+#ifdef __i386__  /* ibr begin */
 	mosix_obtain_registers(ALL_REGISTERS & ~BIT_OF_REGISTER(eax));
+#endif  /* ibr end */
 	if(lf.do_forkmigrate)
 		mosix_forkmigrate();	/* may not return */
 	ret = -EAGAIN;
@@ -1322,12 +1354,14 @@
 int
 remote_dump_fpu(void)
 {
+#ifdef __i386__  /* ibr begin */
 	extern int dump_fpu (struct pt_regs *, struct user_i387_struct *);
 	struct user_i387_struct f;
 	int r = dump_fpu(mos_to_regs(&current->mosix), &f);
 
 	return(comm_send(DEP_DUMP_FPU|REPLY, &r, sizeof(r),
 		r ? &f : NULL, r ? sizeof(f) : 0, 0));
+#endif  /* ibr end */
 }
 
 int
diff -Naur -X ./dontdiff.ibr linux-2.4.3s-1.0.0p4/mos/service.c linux-2.4.3s-1.0.0p4-ibr-sparc/mos/service.c
--- linux-2.4.3s-1.0.0p4/mos/service.c	Wed Apr  4 17:51:45 2001
+++ linux-2.4.3s-1.0.0p4-ibr-sparc/mos/service.c	Sun Apr 15 13:41:17 2001
@@ -151,6 +151,7 @@
 	 * interrupt and avoid returning via ret_with_reschedule...
 	 * the remedy is:
 	 */
+#ifdef __i386__  /* ibr begin */
 	regs->xcs |= 3;
 
 	if(current->thread.debugreg[7])
@@ -166,6 +167,7 @@
 	current->lock_depth = -1;
 	/*current->mosix.lock_depth = -1;*/
 	asm("movl %0,%%esp ; jmp ret_from_kickstart" : : "r" (regs));
+#endif  /* ibr end */
 	/*NOTREACHED*/
 }
 
diff -Naur -X ./dontdiff.ibr linux-2.4.3s-1.0.0p4/mos/syscalls.c linux-2.4.3s-1.0.0p4-ibr-sparc/mos/syscalls.c
--- linux-2.4.3s-1.0.0p4/mos/syscalls.c	Wed Apr  4 17:51:45 2001
+++ linux-2.4.3s-1.0.0p4-ibr-sparc/mos/syscalls.c	Sun Apr 15 14:15:06 2001
@@ -156,9 +156,11 @@
 int
 remote_sys_modify_ldt(int n, int func, void *ptr, unsigned long bytecount)
 {
+#ifdef __i386__  /* ibr begin */
 	extern asmlinkage int sys_modify_ldt(int, void *, unsigned long);
 
 	return(sys_modify_ldt(func, ptr, bytecount));
+#endif  /* ibr end */
 }
 
 long
@@ -1827,7 +1829,9 @@
 int
 remote_sys_sigreturn(int n, struct pt_regs regs)
 {
+#ifdef __i386__  /* ibr begin */
 	set_write_region(regs.esp - 8, 732);
+#endif  /* ibr end */
 	/* Eek, struct sigframe not defined outside arch/i386/kernel/signal.c */
 	return(remote_standard_system_call(n, &regs));
 }
@@ -2271,7 +2275,9 @@
 int
 remote_sys_rt_sigreturn(int n, struct pt_regs regs)
 {
+#ifdef __i386__ /* ibr begin */
 	set_write_region(regs.esp - 8, 892);
+#endif  /* ibr end */
 	/*Eek,struct rt_sigframe not defined outside arch/i386/kernel/signal.c*/
 	return(remote_standard_system_call(n, &regs));
 }
diff -Naur -X ./dontdiff.ibr linux-2.4.3s-1.0.0p4/mos/ucache.c linux-2.4.3s-1.0.0p4-ibr-sparc/mos/ucache.c
--- linux-2.4.3s-1.0.0p4/mos/ucache.c	Wed Apr  4 17:51:45 2001
+++ linux-2.4.3s-1.0.0p4-ibr-sparc/mos/ucache.c	Sun Apr 15 14:15:28 2001
@@ -1487,7 +1487,9 @@
 	}
 	else
 		l += e[i].len;
+#ifdef __i386__  /* ibr begin */
 	bump_copyout(l);
+#endif  /* ibr end */
 	return(0);
 }
 
diff -Naur -X ./dontdiff.ibr linux-2.4.3s-1.0.0p4/udb/Makefile linux-2.4.3s-1.0.0p4-ibr-sparc/udb/Makefile
--- linux-2.4.3s-1.0.0p4/udb/Makefile	Wed Apr  4 17:51:45 2001
+++ linux-2.4.3s-1.0.0p4-ibr-sparc/udb/Makefile	Sun Apr 15 13:41:19 2001
@@ -23,6 +23,5 @@
 
 all_targets: symtab
 
-symtab:	symtab.o
+symtab:	symtab.c
 	$(HOSTCC) $(HOSTCFLAGS) $< -o $@
-
diff -Naur -X ./dontdiff.ibr linux-2.4.3s-1.0.0p4/udb/udb.c linux-2.4.3s-1.0.0p4-ibr-sparc/udb/udb.c
--- linux-2.4.3s-1.0.0p4/udb/udb.c	Wed Apr  4 17:51:45 2001
+++ linux-2.4.3s-1.0.0p4-ibr-sparc/udb/udb.c	Sun Apr 15 14:57:32 2001
@@ -747,7 +747,9 @@
 
 again:
 	skip_one = 0;
+#ifdef __i386__  /* ibr begin */
 	__asm__("movl %%ebp,%0" : "=r" (ebp));
+#endif  /* ibr end */
 	for(; ebp >= stack_area && ebp < 8188+stack_area ;
 		ebp = skip_one ? ebp : *(unsigned long *) ebp , skip_one = 0)
 	{
@@ -794,7 +796,9 @@
 
 	if(spin_is_locked(&udb_lock))
 		spin_unlock(&udb_lock);
+#ifdef __i386__  /* ibr begin */
 	set_fastest_reboot();
+#endif  /* ibr end */
 	current->mosix.catchme = 0;
 	if(!udb_booting++ &&
 		(current->pid == 0 || (current->mosix.dflags & DREMOTE)))
@@ -811,8 +815,10 @@
 			release_irqlock(this_cpu);
 #endif CONFIG_SMP
 		}
+#ifdef __i386__  /* ibr begin */
 		while(in_softirq())
 			cpu_bh_enable(this_cpu);
+#endif  /* ibr end */
 		sti();
 		wake_up_process(child_reaper);
 		child_reaper->mosix.catchme = 1;
@@ -849,6 +855,7 @@
 int
 udb_breakpoint(struct pt_regs *regs)
 {
+#ifdef __i386__  /* ibr begin */
 	unsigned long eip = (unsigned long)regs->eip;
 	register int b;
 	static char msg[100];
@@ -868,6 +875,7 @@
 
 	set_bpt = regs->eip;
 	mosix_debugger(msg);
+#endif  /* ibr end */
 	return(1);
 }
 
@@ -1202,8 +1210,10 @@
 	char resp;
 
 	for(i = 0 ; i < 100000 ; i++)
+#ifdef __i386__  /* ibr begin */
 	if(can_read_lock(&tasklist_lock))
 		break;
+#endif  /* ibr end */
 	if(i < 100000)
 	{
 		read_lock(&tasklist_lock);
@@ -1476,6 +1486,7 @@
 void
 low_do_regs(struct task_struct *p, char *num)
 {
+#ifdef __i386__  /* ibr begin */
 	printk("%d(%s):", p->pid, p->comm);
 	printreg(p, "eip", BIT_OF_REGISTER(eip));
 	printreg(p, "esp", BIT_OF_REGISTER(esp));
@@ -1495,6 +1506,7 @@
 	printreg(p, "xes", BIT_OF_REGISTER(xes));
 	printreg(p, "xss", BIT_OF_REGISTER(xss));
 	printk("\n");
+#endif  /* ibr end */
 }
 
 void

