diff -uNr coda-4.7.2/coda-src/rpc2/rpc2a.c coda-new/coda-src/rpc2/rpc2a.c
--- coda-4.7.2/coda-src/rpc2/rpc2a.c	Tue Sep 15 13:24:59 1998
+++ coda-new/coda-src/rpc2/rpc2a.c	Thu Oct 15 14:24:11 1998
@@ -1010,7 +1010,7 @@
 		break;
 
 	case RPC2_PORTALBYNAME:
-	    if ((sentry = getservbyname (whichPortal->Value.Name, NULL)) == NULL)
+	    if ((sentry = getservbyname (whichPortal->Value.Name, "udp")) == NULL)
 		return(RPC2_FAIL);
 	    if (htonl(1) == 1)
 		{
diff -uNr coda-4.7.2/coda-src/venus/comm.cc coda-new/coda-src/venus/comm.cc
--- coda-4.7.2/coda-src/venus/comm.cc	Fri Sep 25 11:31:49 1998
+++ coda-new/coda-src/venus/comm.cc	Thu Oct 15 14:25:19 1998
@@ -257,7 +257,7 @@
 
     /* Portal initialization. */
     /* Multicast requires that (sftp_portal = rpc2_portal + 1). */
-    struct servent *s = getservbyname("venus", 0);
+    struct servent *s = getservbyname("venus", "udp");
     if (s == 0) 
 	Choke("CommInit: getservbyname failed; check /etc/services");
     RPC2_PortalIdent portal1;
diff -uNr coda-4.7.2/coda-src/venus/fso_cfscalls2.cc coda-new/coda-src/venus/fso_cfscalls2.cc
--- coda-4.7.2/coda-src/venus/fso_cfscalls2.cc	Thu Oct  1 18:22:00 1998
+++ coda-new/coda-src/venus/fso_cfscalls2.cc	Thu Oct 15 14:49:11 1998
@@ -501,6 +501,10 @@
 static char cputype [] = "alpha";
 static char systype [] = "alpha_linux";
 #endif
+#ifdef __powerpc__
+static char cputype [] = "powerpc";
+static char systype [] = "powerpc_linux";
+#endif
 #endif /* __linux__ */
 
 #ifdef __CYGWIN32__
diff -uNr coda-4.7.2/coda-src/venus/mariner.cc coda-new/coda-src/venus/mariner.cc
--- coda-4.7.2/coda-src/venus/mariner.cc	Fri Sep 25 11:31:52 1998
+++ coda-new/coda-src/venus/mariner.cc	Thu Oct 15 14:26:32 1998
@@ -82,6 +82,7 @@
 const int MarinerStackSize = 65536;
 const int MaxMariners = 5;
 const char MarinerService[] = "venus";
+const char MarinerProto[] = "tcp";
 int MarinerMask = 0;
 
 
@@ -106,7 +107,7 @@
 	eprint("MarinerInit: setsockopt failed (%d)", errno);
 #endif
     /* Look up the well-known CODA mariner service. */
-    struct servent *serventp = getservbyname(MarinerService, 0);
+    struct servent *serventp = getservbyname(MarinerService, MarinerProto);
     if (!serventp) {
       eprint("MarinerInit: mariner service lookup failed!");
       return;
diff -uNr coda-4.7.2/coda-src/venus/sighand.cc coda-new/coda-src/venus/sighand.cc
--- coda-4.7.2/coda-src/venus/sighand.cc	Wed Sep 30 13:08:20 1998
+++ coda-new/coda-src/venus/sighand.cc	Thu Oct 15 14:28:52 1998
@@ -382,13 +382,13 @@
     {
 	fprintf(logFile, "sig=%d\n", sig);
 	fprintf(logFile, "code=%d\n", code);
-#ifndef	i386
+#if !defined(i386) && !defined(powerpc)
 #if defined(sparc) && defined(__linux__)
 	fprintf(logFile, "sc_pc=0x%x\n", contextPtr->sigc_pc);
 #else
 	fprintf(logFile, "sc_pc=0x%x\n", contextPtr->sc_pc);
 #endif
-#endif	/* !defined(i386) */
+#endif	/* !defined(i386) && !defined(powerpc) */
 
 #ifndef __BSD44__
 	for (int i = 0; i < sizeof(struct sigaction) / sizeof(int); i++)
diff -uNr coda-4.7.2/coda-src/volutil/dump.h coda-new/coda-src/volutil/dump.h
--- coda-4.7.2/coda-src/volutil/dump.h	Tue Sep 15 13:25:23 1998
+++ coda-new/coda-src/volutil/dump.h	Thu Oct 15 14:32:02 1998
@@ -102,7 +102,7 @@
 extern int DumpEnd(DumpBuffer_t *);
 
 /* Exported Routines (from readstuff.c) */
-extern char ReadTag(DumpBuffer_t *);
+extern signed char ReadTag(DumpBuffer_t *);
 extern int PutTag(char, DumpBuffer_t *);
 extern int ReadShort(DumpBuffer_t *,  unsigned short *sp); 
 extern int ReadLong(DumpBuffer_t *, unsigned long *lp);
diff -uNr coda-4.7.2/coda-src/volutil/dumpstream.cc coda-new/coda-src/volutil/dumpstream.cc
--- coda-4.7.2/coda-src/volutil/dumpstream.cc	Tue Sep 29 13:41:53 1998
+++ coda-new/coda-src/volutil/dumpstream.cc	Thu Oct 15 14:29:39 1998
@@ -414,7 +414,7 @@
 
 int dumpstream::getVnodeIndex(VnodeClass Type, long *nVnodes, long *listsize)
 {
-    register char tag;
+    register signed char tag;
     /* Skip over whatever garbage exists on the stream (remains of last vnode) */
     skip_vnode_garbage();
 
diff -uNr coda-4.7.2/coda-src/volutil/readstuff.cc coda-new/coda-src/volutil/readstuff.cc
--- coda-4.7.2/coda-src/volutil/readstuff.cc	Tue Sep 15 13:25:23 1998
+++ coda-new/coda-src/volutil/readstuff.cc	Thu Oct 15 14:32:20 1998
@@ -202,7 +202,7 @@
     return (char *) buf->DumpBufPtr;
 }
 
-char ReadTag(DumpBuffer_t *buf)
+signed char ReadTag(DumpBuffer_t *buf)
 {
     int error = 0;
     register byte *p = (byte *)get(buf, 1, &error);
diff -uNr coda-4.7.2/coda-src/volutil/vol-restore.cc coda-new/coda-src/volutil/vol-restore.cc
--- coda-4.7.2/coda-src/volutil/vol-restore.cc	Tue Sep 15 13:25:24 1998
+++ coda-new/coda-src/volutil/vol-restore.cc	Thu Oct 15 14:30:46 1998
@@ -425,7 +425,7 @@
     rec_smolist *rlist;
     DirInode *dinode = NULL;
     DirInode *camdInode = NULL;
-    register char tag;
+    register signed char tag;
     int volindex = V_volumeindex(vp);
 
     LogMsg(9, VolDebugLevel, stdout, "Restore: Reading in large vnode array.");
@@ -514,7 +514,7 @@
     int	nvnodes = 0;
     char    vbuf[SIZEOF_SMALLDISKVNODE];
     VnodeDiskObject *vdo = (VnodeDiskObject *)vbuf;
-    register char tag;
+    register signed char tag;
     rec_smolist *rlist;
     int volindex = V_volumeindex(vp);
 
@@ -594,7 +594,7 @@
 
 static void ReadVnodeDiskObject(DumpBuffer_t *buf, VnodeDiskObject *vdop, DirInode **dinode, Volume *vp, long *vnodeNumber)
 {
-    register char tag;
+    register signed char tag;
     *vnodeNumber = -1;
     tag = ReadTag(buf);
     if (tag == D_NULLVNODE){
diff -uNr coda-4.7.2/configs/Makerules coda-new/configs/Makerules
--- coda-4.7.2/configs/Makerules	Tue Sep 29 13:41:57 1998
+++ coda-new/configs/Makerules	Mon Oct 19 11:03:14 1998
@@ -162,9 +162,9 @@
 endif
 
 realclean:
-	-$(RM) *.o *.a  .depfiles/*.d
+	-$(RM) *.o *.a  .depfiles/*.d *.d
 	-rmdir .depfiles
-	-$(RM) *.client.cc *.client.c *.server.cc *.server.c *.multi.cc *.multi.c $(RP2HEADERS)
+	-$(RM) *.client.cc *.client.c *.server.cc *.server.c *.multi.cc *.multi.c *.print.c $(RP2HEADERS)
 	-$(RM) $(EXECUTABLES) $(LIBRARIES) $(TESTS) core
 	-$(RM) lex.yy.c y.tab.c y.tab.h
 	-$(RM) chdrinstall rp2hdrinstall libinstall bininstall scriptinstall \
@@ -176,6 +176,7 @@
 	-rm -f coda-src/rpc2/errorsdefs.h
 	-rm -f coda-src/rpc2/switchc2s.h
 	-rm -f coda-src/rpc2/switchs2c.h
+	-rm -f coda-src/guitools/translate.sed
 	-rm -f config.cache config.log config.status
 	-rm -f Makeconf.setup `find . -name "Makefile" | grep -v linux`
 
diff -uNr coda-4.7.2/lib-src/mlwp/lwp.c coda-new/lib-src/mlwp/lwp.c
--- coda-4.7.2/lib-src/mlwp/lwp.c	Tue Sep 15 13:25:56 1998
+++ coda-new/lib-src/mlwp/lwp.c	Thu Oct 15 14:38:28 1998
@@ -138,7 +138,7 @@
 /*----------------------------------------*/
 
 FILE *lwp_logfile = NULL;
-char    lwp_debug;
+signed char    lwp_debug;
 FILE   *lwp_logfile;
 int 	LWP_TraceProcesses = 0;
 PROCESS	lwp_cpptr;
@@ -637,8 +637,8 @@
 		perror("stack: ");
 		assert(0);
 	}
-	sprintf(msg, "STACK: from %p to %p, for %s\n", lwp_stackbase, lwp_stackbase + stacksize, name);
 #if 0
+	sprintf(msg, "STACK: from %p to %p, for %s\n", lwp_stackbase, lwp_stackbase + stacksize, name);
 	write(2, msg, strlen(msg));
 #endif
 	lwp_stackbase += ((stacksize/pagesize) + 2) * pagesize;
@@ -663,7 +663,7 @@
 	/* Gross hack: beware! */
 	PRE_Block = 1;
 	lwp_cpptr = temp;
-	savecontext(Create_Process_Part2, &temp2->context, stackptr+stacksize-4);
+	savecontext(Create_Process_Part2, &temp2->context, stackptr+stacksize-STACK_PAD);
 	/* End of gross hack */
 
 	Set_LWP_RC();
@@ -755,7 +755,7 @@
 	    lwpmove(pid, &runnable[pid->priority], &blocked);
 	    temp = lwp_cpptr;
 	    savecontext(Dispatcher, &(temp -> context),
-			&(LWPANCHOR.dsptchstack[(sizeof LWPANCHOR.dsptchstack)-4]));
+			&(LWPANCHOR.dsptchstack[(sizeof LWPANCHOR.dsptchstack)-STACK_PAD]));
 	}
 
     return LWP_SUCCESS;
diff -uNr coda-4.7.2/lib-src/mlwp/lwp.h coda-new/lib-src/mlwp/lwp.h
--- coda-4.7.2/lib-src/mlwp/lwp.h	Tue Sep 15 13:25:56 1998
+++ coda-new/lib-src/mlwp/lwp.h	Thu Oct 15 14:34:12 1998
@@ -99,7 +99,7 @@
 typedef struct lwp_pcb *PROCESS;
 
 
-extern char lwp_debug;			/* ON = show LWP debugging trace */
+extern signed char lwp_debug;			/* ON = show LWP debugging trace */
 
 /* Action to take on stack overflow. */
 #define LWP_SOQUIET	1		/* do nothing */
diff -uNr coda-4.7.2/lib-src/mlwp/lwp.private.h coda-new/lib-src/mlwp/lwp.private.h
--- coda-4.7.2/lib-src/mlwp/lwp.private.h	Tue Sep 15 13:25:56 1998
+++ coda-new/lib-src/mlwp/lwp.private.h	Thu Oct 15 14:38:00 1998
@@ -75,9 +75,22 @@
 
 
 #ifdef OLDLWP
+#if defined(__powerpc__)
 struct lwp_context {	/* saved context for dispatcher */
     char *topstack;	/* ptr to top of process stack */
+    char *returnadd;	/* return address ? */
+
+    char *ccr;		/* Condition code register */
 };
+#define STACK_PAD 64	/* make stacks 16 byte aligned and leave space for
+			   silly LinuxPPC linkage, or we segfault entering
+			   functions --troy */
+#else
+struct lwp_context {    /* saved context for dispatcher */
+    char *topstack;     /* ptr to top of process stack */
+};
+#define STACK_PAD 4
+#endif defined(__powerpc__)
 #endif OLDLWP
 
 struct rock
diff -uNr coda-4.7.2/lib-src/mlwp/process.s coda-new/lib-src/mlwp/process.s
--- coda-4.7.2/lib-src/mlwp/process.s	Tue Sep 15 13:25:56 1998
+++ coda-new/lib-src/mlwp/process.s	Thu Oct 15 14:39:08 1998
@@ -726,3 +726,162 @@
 #endif /* __arm32__ */
 
 #endif OLDLWP
+
+#if defined(__powerpc__)
+
+/* Comments:
+ *    1. Registers R10..R31 and CR0..CR7 are saved
+ *    2. "struct savearea" must hold at least 3 pointers (long)
+ *    3. This code will only work on 32 bit machines (601..604), not 620
+ *    4. No floating point registers are saved
+ *    5. The save stack "frame" is bigger than absolutely necessary.  The
+ *       PowerPC [AIX] ABI needs this extra space.
+ */
+
+
+/* Mach-O assemblers */
+#if !defined(NeXT) && !defined(__APPLE__)
+#define r0    0
+#define r1    1
+#define r2    2
+#define r3    3
+#define r4    4
+#define r5    5
+#define r6    6
+#define r7    7
+#define r8    8
+#define r9    9
+#define r10   10
+#define r11   11
+#define r12   12
+#define r13   13
+#define r14   14
+#define r15   15
+#define r16   16
+#define r17   17
+#define r18   18
+#define r19   19
+#define r20   20
+#define r21   21
+#define r22   22
+#define r23   23
+#define r24   24
+#define r25   25
+#define r26   26
+#define r27   27
+#define r28   28
+#define r29   29
+#define r30   30
+#define r31   31
+#endif /* !NeXT && !__APPLE__ */
+
+
+/*
+ * savecontext(int (*f)(), struct savearea *save, char *newsp)
+ */
+
+#define FRAME_SIZE    (32*4)+(8*4)
+#define FRAME_OFFSET  (8*4)
+
+#define TOP_OF_STACK  (0*4)
+#define RETURN                (1*4)
+#define CCR           (2*4)
+
+#if defined(NeXT) || defined(__APPLE__)
+      .globl  _savecontext
+_savecontext:
+      lis     r9,ha16(_PRE_Block)     /* Disable interrupt fiddling */
+      li      r8,1
+      stb     r8,lo16(_PRE_Block)(r9)
+#else	
+      .globl  savecontext
+savecontext:
+      lis     r9,PRE_Block@ha         /* Disable interrupt fiddling */
+      li      r8,1
+      stb     r8,PRE_Block@l(r9)
+#endif /* NeXT || __APPLE__ */
+      subi    r1,r1,FRAME_SIZE
+      mfcr    r9
+      stw     r9,CCR(r4)
+      stw     r10,10*4+FRAME_OFFSET(r1)       /* Save registers */
+      stw     r11,11*4+FRAME_OFFSET(r1)
+      stw     r12,12*4+FRAME_OFFSET(r1)
+      stw     r13,13*4+FRAME_OFFSET(r1)
+      stw     r14,14*4+FRAME_OFFSET(r1)
+      stw     r15,15*4+FRAME_OFFSET(r1)
+      stw     r16,16*4+FRAME_OFFSET(r1)
+      stw     r17,17*4+FRAME_OFFSET(r1)
+      stw     r18,18*4+FRAME_OFFSET(r1)
+      stw     r19,19*4+FRAME_OFFSET(r1)
+      stw     r20,20*4+FRAME_OFFSET(r1)
+      stw     r21,21*4+FRAME_OFFSET(r1)
+      stw     r22,22*4+FRAME_OFFSET(r1)
+      stw     r23,23*4+FRAME_OFFSET(r1)
+      stw     r24,24*4+FRAME_OFFSET(r1)
+      stw     r25,25*4+FRAME_OFFSET(r1)
+      stw     r26,26*4+FRAME_OFFSET(r1)
+      stw     r27,27*4+FRAME_OFFSET(r1)
+      stw     r28,28*4+FRAME_OFFSET(r1)
+      stw     r29,29*4+FRAME_OFFSET(r1)
+      stw     r30,30*4+FRAME_OFFSET(r1)
+      stw     r31,31*4+FRAME_OFFSET(r1)
+      stw     r1,TOP_OF_STACK(r4)
+      cmpi    0,r5,0                          /* New stack specified? */
+      mflr    r0
+      stw     r0,RETURN(r4)
+      mtlr    r3
+      beq     L1                            /* No - don't muck with pointer */
+
+    /*  mr      r1,r5 */
+      addi    r1,r5,-FRAME_OFFSET            /* leave space for silly linkage info */
+L1:   blr                                     /* Return */
+
+/*
+ * returnto(struct savearea *area)
+ */
+#if defined(NeXT) || defined(__APPLE__)
+      .globl  _returnto
+_returnto:
+#else	
+      .globl  returnto
+returnto:
+#endif /* NeXT || __APPLE__ */
+      lwz     r1,TOP_OF_STACK(r3)             /* Update stack pointer */
+      lwz     r0,RETURN(r3)                   /* Get return address */
+      mtlr    r0
+      lwz     r4,CCR(r3)
+      mtcrf   0xFF,r4
+      lwz     r10,10*4+FRAME_OFFSET(r1)       /* Restore registers */
+      lwz     r11,11*4+FRAME_OFFSET(r1)
+      lwz     r12,12*4+FRAME_OFFSET(r1)
+      lwz     r13,13*4+FRAME_OFFSET(r1)
+      lwz     r14,14*4+FRAME_OFFSET(r1)
+      lwz     r15,15*4+FRAME_OFFSET(r1)
+      lwz     r16,16*4+FRAME_OFFSET(r1)
+      lwz     r17,17*4+FRAME_OFFSET(r1)
+      lwz     r18,18*4+FRAME_OFFSET(r1)
+      lwz     r19,19*4+FRAME_OFFSET(r1)
+      lwz     r20,20*4+FRAME_OFFSET(r1)
+      lwz     r21,21*4+FRAME_OFFSET(r1)
+      lwz     r22,22*4+FRAME_OFFSET(r1)
+      lwz     r23,23*4+FRAME_OFFSET(r1)
+      lwz     r24,24*4+FRAME_OFFSET(r1)
+      lwz     r25,25*4+FRAME_OFFSET(r1)
+      lwz     r26,26*4+FRAME_OFFSET(r1)
+      lwz     r27,27*4+FRAME_OFFSET(r1)
+      lwz     r28,28*4+FRAME_OFFSET(r1)
+      lwz     r29,29*4+FRAME_OFFSET(r1)
+      lwz     r30,30*4+FRAME_OFFSET(r1)
+      lwz     r31,31*4+FRAME_OFFSET(r1)
+#if defined(NeXT) || defined(__APPLE__)
+      lis     r9,ha16(_PRE_Block)         /* Re-enable interrupt fiddling */
+      li      r8,0
+      stb     r8,lo16(_PRE_Block)(r9)
+#else	
+      lis     r9,PRE_Block@ha         /* Re-enable interrupt fiddling */
+      li      r8,0
+      stb     r8,PRE_Block@l(r9)
+#endif /* NeXT || __APPLE__ */
+      addi    r1,r1,FRAME_SIZE
+      blr
+#endif        /* __powerpc__ */

