Commit Diff


commit - 530d00164177fd68e2aeb403e7b9be31823e3168
commit + b8f742db850ffc99333a97ab54fc820c6de0fd98
blob - df82ac5921930c77f6eaf9666dfaf0109c146756
blob + af9746a499803b069e4a1f49b53a33bc9d6f2492
--- include/u.h
+++ include/u.h
@@ -120,7 +120,7 @@ typedef short s16int;
 /*
  * Gcc 3 is too smart for its own good.
  */
-#if defined(__GNUC__)
+#if defined(__GNUC__) && !defined(__APPLE_CC__)
 #	if __GNUC__ >= 3
 #		undef AUTOLIB
 #		define AUTOLIB(x) int __p9l_autolib_ ## x __attribute__ ((weak));
blob - 97953325984a53687f29ad9df3e50979dee987cb
blob + 4ac0d676245ad02fbcf0f5f7e8503fcad7b085e1
--- src/cmd/acme/dat.h
+++ src/cmd/acme/dat.h
@@ -465,6 +465,9 @@ enum
 #define	WIN(q)	((((ulong)(q).path)>>8) & 0xFFFFFF)
 #define	FILE(q)	((q).path & 0xFF)
 
+#undef FALSE
+#undef TRUE
+
 enum
 {
 	FALSE,
blob - 47109d43e874e9273938f62da61e889c03aa8c83
blob + e8dd3ab3dc390432c65c05d3bed7da046153d8f9
--- src/cmd/map/map.c
+++ src/cmd/map/map.c
@@ -105,6 +105,8 @@ double	diddle(struct place *, double, double);
 void	dobounds(double, double, double, double, int);
 void	dogrid(double, double, double, double);
 int	duple(struct place *, double);
+#define fmax map_fmax
+#define fmin map_fmin
 double	fmax(double, double);
 double	fmin(double, double);
 void	getdata(char *);
blob - 4d272749c2365bea830e5188c0e44d57bbe704cd
blob + 43f2205de439949496c415db2946a1093f6eefe0
--- src/cmd/map/mkfile
+++ src/cmd/map/mkfile
@@ -5,7 +5,6 @@ LIB=libmap/libmap.a
 OFILES=map.$O\
 	symbol.$O\
 	index.$O\
-	sqrt.$O\
 
 HFILES=map.h\
 	iplot.h\
blob - 991572b1d12f53eee9353bfb5a0b5b62f8248e36
blob + 2967e0037b8e8e7e7c362a5d406efae48fe01f99
--- src/cmd/pr.c
+++ src/cmd/pr.c
@@ -8,6 +8,7 @@
  *	2+head+2+page[56]+5
  */
 
+#define err		pr_err
 #define	ISPRINT(c)	((c) >= ' ')
 #define ESC		'\033'
 #define LENGTH		66
blob - edd34991c5f4f7130414eb41a5f05c1acd1c64d1
blob + 72d55083f33cf4e1fc792179eadc6eb02e7861df
--- src/cmd/proof/proof.h
+++ src/cmd/proof/proof.h
@@ -10,6 +10,8 @@
 #define	ONES	~0
 
 #define devname proof_devname
+#define getc	proof_getc
+#define ungetc	proof_ungetc
 
 extern	char	devname[];
 extern	double	mag;
blob - bbb97373e3d80e86df15f31a86662f1518b48881
blob + 3d6c7f8da35bd2b0b8b43ddc1201b701d3956d21
--- src/cmd/vac/error.h
+++ src/cmd/vac/error.h
@@ -1,3 +1,8 @@
+/*
+ * Somehow <errno.h> has been included on Mac OS X
+ */
+#undef EIO
+
 extern char ENoDir[];
 extern char EBadDir[];
 extern char EBadMeta[];
blob - d72aa4c772e6081d9fa51945ccb7e26ad0cb43ae
blob + dfb3bc9f31def80d401d854d0abd826526580f05
--- src/lib9pclient/fs.c
+++ src/lib9pclient/fs.c
@@ -56,7 +56,6 @@ CFsys*
 fsmount(int fd, char *aname)
 {
 	int n;
-	char *user;
 	CFsys *fs;
 	CFid *fid;
 
@@ -72,7 +71,6 @@ fsmount(int fd, char *aname)
 	}
 	fs->msize = n;
 
-	user = getuser();
 	if((fid = fsattach(fs, nil, getuser(), aname)) == nil)
 		goto Error;
 	fssetroot(fs, fid);
blob - /dev/null
blob + 3626e7c6998c53ae0035343edc29d292f7dfe34f (mode 644)
--- /dev/null
+++ src/libmach/OpenBSD.c
@@ -0,0 +1 @@
+#include "nosys.c"
blob - 18f8bdfec0bb7e3f6e11501f90762e15325ba039
blob + 8fa74ab97abd0d6df23ba765740e5210a7a7a13a
--- src/libmach/elfcorelinux386.c
+++ src/libmach/elfcorelinux386.c
@@ -4,6 +4,9 @@
 #include "elf.h"
 #include "ureg386.h"
 
+#undef errno
+#define errno	uregerrno
+
 typedef struct Lreg Lreg;
 typedef struct Status Status;
 typedef struct Psinfo Psinfo;
blob - 701e9c6526703afc2d4dfb8e33972d063640e5b4
blob + 141645a6c670678e182dd7fb62d0fc8373500e60
--- src/libmach/machpower.c
+++ src/libmach/machpower.c
@@ -570,7 +570,7 @@ sub(Opcode *o, Instr *i)
 		bprint(i, "\tR%d,$%d,R%d", i->ra, i->simm, i->rd);
 }
 
-#define div qdiv
+#define div power_div
 
 static void
 div(Opcode *o, Instr *i)
blob - 61d86c36f21a1dd405630cbf6c16ab817050500c
blob + e758a7382a9533a657da5e9b165a697bf45cb323
--- src/libsec/386/md5block.spp
+++ src/libsec/386/md5block.spp
@@ -43,7 +43,7 @@
 #define S43 15
 #define S44 21
 
-#define PAYME(x) $##x
+#define PAYME(x) $ ## x
 
 /*
  * SI is data
blob - 0776b1e3ab9ca8d34567ea5ece349386c647eedb
blob + a064b5eaf5142c32c1d2c9abf39bb2bc122798e6
--- src/libthread/Darwin-power-asm.s
+++ src/libthread/Darwin-power-asm.s
@@ -4,9 +4,9 @@
 .text
 .align 2
 
-.globl	__setlabel
+.globl	__getmcontext
 
-__setlabel:				/* xxx: instruction scheduling */
+__getmcontext:				/* xxx: instruction scheduling */
 	mflr	r0
 	mfcr	r5
 	mfctr	r6
@@ -18,35 +18,35 @@ __setlabel:				/* xxx: instruction scheduling */
 
 	stw	r1, 4*4(r3)
 	stw	r2, 5*4(r3)
-	li	r5, 1				/* return value for gotolabel */
+	li	r5, 1			/* return value for setmcontext */
 	stw	r5, 6*4(r3)
 
-	stw	r13, (0+6)*4(r3)	/* callee-save GPRs */
-	stw	r14, (1+6)*4(r3)	/* xxx: block move */
-	stw	r15, (2+6)*4(r3)
-	stw	r16, (3+6)*4(r3)
-	stw	r17, (4+6)*4(r3)
-	stw	r18, (5+6)*4(r3)
-	stw	r19, (6+6)*4(r3)
-	stw	r20, (7+6)*4(r3)
-	stw	r21, (8+6)*4(r3)
-	stw	r22, (9+6)*4(r3)
-	stw	r23, (10+6)*4(r3)
-	stw	r24, (11+6)*4(r3)
-	stw	r25, (12+6)*4(r3)
-	stw	r26, (13+6)*4(r3)
-	stw	r27, (14+6)*4(r3)
-	stw	r28, (15+6)*4(r3)
-	stw	r29, (16+6)*4(r3)
-	stw	r30, (17+6)*4(r3)
-	stw	r31, (18+6)*4(r3)
+	stw	r13, (0+7)*4(r3)	/* callee-save GPRs */
+	stw	r14, (1+7)*4(r3)	/* xxx: block move */
+	stw	r15, (2+7)*4(r3)
+	stw	r16, (3+7)*4(r3)
+	stw	r17, (4+7)*4(r3)
+	stw	r18, (5+7)*4(r3)
+	stw	r19, (6+7)*4(r3)
+	stw	r20, (7+7)*4(r3)
+	stw	r21, (8+7)*4(r3)
+	stw	r22, (9+7)*4(r3)
+	stw	r23, (10+7)*4(r3)
+	stw	r24, (11+7)*4(r3)
+	stw	r25, (12+7)*4(r3)
+	stw	r26, (13+7)*4(r3)
+	stw	r27, (14+7)*4(r3)
+	stw	r28, (15+7)*4(r3)
+	stw	r29, (16+7)*4(r3)
+	stw	r30, (17+7)*4(r3)
+	stw	r31, (18+7)*4(r3)
 
 	li	r3, 0			/* return */
 	blr
 
-.globl	__gotolabel
+.globl	__setmcontext
 
-__gotolabel:
+__setmcontext:
 	lwz	r13, (0+7)*4(r3)	/* callee-save GPRs */
 	lwz	r14, (1+7)*4(r3)	/* xxx: block move */
 	lwz	r15, (2+7)*4(r3)
@@ -79,5 +79,5 @@ __gotolabel:
 	lwz	r0, 3*4(r3)
 	mtxer	r0
 
-	lwz	r3,	6*4(r4)
+	lwz	r3,	6*4(r3)
 	blr
blob - 373cc62374a21fbbd64dba55a9df4e70cb52ee67
blob + e625626c8376352a2f27e87fc7b92eeb6d5259d2
--- src/libthread/Darwin-power.c
+++ src/libthread/Darwin-power.c
@@ -8,23 +8,24 @@ makecontext(ucontext_t *ucp, void (*func)(void), int a
 
 	tos = (ulong*)ucp->uc_stack.ss_sp+ucp->uc_stack.ss_size/sizeof(ulong);
 	sp = tos - 16;	
-	ucp->label.pc = (long)func;
-	ucp->label.sp = (long)sp;
+	ucp->mc.pc = (long)func;
+	ucp->mc.sp = (long)sp;
 	va_start(arg, argc);
-	ucp->label.r3 = va_arg(arg, long);
+	ucp->mc.r3 = va_arg(arg, long);
 	va_end(arg);
 }
 
-void
+int
 getcontext(ucontext_t *uc)
 {
-	return __setlabel(uc);
+	return _getmcontext(&uc->mc);
 }
 
 int
 setcontext(ucontext_t *uc)
 {
-	return __gotolabel(uc);
+	_setmcontext(&uc->mc);
+	return 0;
 }
 
 int
blob - c7915ff8bb519ff73241a5bd94ace0432edce015
blob + a39be28a940f0ff88fb59d350dab86ce746f5d92
--- src/libthread/Darwin-ucontext.h
+++ src/libthread/Darwin-ucontext.h
@@ -1,5 +1,6 @@
+typedef struct mcontext mcontext_t;
 typedef struct ucontext ucontext_t;
-struct ucontext
+struct mcontext
 {
 	ulong	pc;		/* lr */
 	ulong	cr;		/* mfcr */
@@ -15,10 +16,20 @@ struct ucontext
 //	ulong	vr[4*12];	/* callee saved: v20-v31, 256-bits each */
 };
 
+struct ucontext
+{
+	struct {
+		void *ss_sp;
+		uint ss_size;
+	} uc_stack;
+	sigset_t uc_sigmask;
+	mcontext_t mc;
+};
+
 void makecontext(ucontext_t*, void(*)(void), int, ...);
-void getcontext(ucontext_t*);
+int getcontext(ucontext_t*);
 int setcontext(ucontext_t*);
 int swapcontext(ucontext_t*, ucontext_t*);
-int __setlabel(ucontext_t*);
-void __gotolabel(ucontext_t*);
+int _getmcontext(mcontext_t*);
+void _setmcontext(mcontext_t*);
 
blob - 120e65145c4f10271b771db0d5e4def6ee848f8f
blob + 550cc0568c6673bd22acb4a70f0fd905a3c07afc
--- src/libthread/thread.c
+++ src/libthread/thread.c
@@ -27,6 +27,11 @@ _threaddebug(char *fmt, ...)
 	static int fd = -1;
 
 return;
+	va_start(arg, fmt);
+	vfprint(1, fmt, arg);
+	va_end(arg);
+return;
+
 	if(fd < 0){
 		p = strrchr(argv0, '/');
 		if(p)
@@ -77,9 +82,11 @@ threadstart(void *v)
 	_Thread *t;
 
 	t = v;
+//print("threadstart %p\n", v);
 	t->startfn(t->startarg);
-	memset(&v, 0xff, 32);	/* try to cut off stack traces */
+//print("threadexits %p\n", v);
 	threadexits(nil);
+//print("not reacehd\n");
 }
 
 static _Thread*
@@ -156,6 +163,7 @@ _threadswitch(void)
 	Proc *p;
 
 	p = proc();
+//print("threadswtch %p\n", p);
 	contextswitch(&p->thread->context, &p->schedcontext);
 }
 
@@ -217,7 +225,7 @@ scheduler(Proc *p)
 
 	setproc(p);
 	_threaddebug("scheduler enter");
-	// print("s %p %d\n", p, gettid());
+//	print("s %p\n", p);
 	lock(&p->lock);
 	for(;;){
 		while((t = p->runqueue.head) == nil){
@@ -234,11 +242,13 @@ scheduler(Proc *p)
 		p->nswitch++;
 		_threaddebug("run %d (%s)", t->id, t->name);
 		contextswitch(&p->schedcontext, &t->context);
+//print("back in scheduler\n");
 		p->thread = nil;
 		lock(&p->lock);
 		if(t->exiting){
 			delthreadinproc(p, t);
 			p->nthread--;
+//print("ntrhead %d\n", p->nthread);
 			free(t);
 		}
 	}
@@ -313,6 +323,7 @@ threadsetstate(char *fmt, ...)
 static int
 threadqlock(QLock *l, int block, ulong pc)
 {
+//print("threadqlock %p\n", l);
 	lock(&l->l);
 	if(l->owner == nil){
 		l->owner = (*threadnow)();
blob - 0334fe30df96f9f64b566f751f3462f23d4c323a
blob + 842b81d87596768c64251c9e136e23559d34b861
--- src/libthread/threadimpl.h
+++ src/libthread/threadimpl.h
@@ -17,6 +17,10 @@ extern	void		makecontext(ucontext_t*, void(*)(), int, 
 #endif
 
 #if defined(__APPLE__)
+#	define mcontext libthread_mcontext
+#	define mcontext_t libthread_mcontext_t
+#	define ucontext libthread_ucontext
+#	define ucontext_t libthread_ucontext_t
 #	include "Darwin-ucontext.h"
 #endif
 
blob - e63c1f0661d91b0f57084803b952d9df95b13bc7
blob + 666ba430eb6a0499c9a038f06238111cbe1eb3b6
--- src/mkhdr
+++ src/mkhdr
@@ -1,5 +1,12 @@
 SYSNAME=`uname`
-OBJTYPE=`uname -m | sed 's;i.86;386;; s;/.*;;; s; ;;g' | sed 's/ppc64/power/g' | sed 's/ppc/power/g'`
+OBJTYPE=`uname -m | sed '
+	s;i.86;386;;
+	s;/.*;;;
+	s; ;;g;
+	s;PowerMacintosh;power;g;
+	s;ppc64;power;g;
+	s;ppc;power;g'`
+
 SYSVERSION=`uname -r`
 
 BIN=$PLAN9/bin