aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2005-01-11 17:43:53 +0000
committerrsc <devnull@localhost>2005-01-11 17:43:53 +0000
commitb8f742db850ffc99333a97ab54fc820c6de0fd98 (patch)
tree9096b9872c0e65a3f1f3cdd7b993c58411d20e5e
parent530d00164177fd68e2aeb403e7b9be31823e3168 (diff)
downloadplan9port-b8f742db850ffc99333a97ab54fc820c6de0fd98.tar.gz
plan9port-b8f742db850ffc99333a97ab54fc820c6de0fd98.tar.bz2
plan9port-b8f742db850ffc99333a97ab54fc820c6de0fd98.zip
os x changes
-rw-r--r--include/u.h2
-rw-r--r--src/cmd/acme/dat.h3
-rw-r--r--src/cmd/map/map.c2
-rw-r--r--src/cmd/map/mkfile1
-rw-r--r--src/cmd/pr.c1
-rw-r--r--src/cmd/proof/proof.h2
-rw-r--r--src/cmd/vac/error.h5
-rw-r--r--src/lib9pclient/fs.c2
-rw-r--r--src/libmach/OpenBSD.c1
-rw-r--r--src/libmach/elfcorelinux386.c3
-rw-r--r--src/libmach/machpower.c2
-rw-r--r--src/libsec/386/md5block.spp2
-rw-r--r--src/libthread/Darwin-power-asm.s50
-rw-r--r--src/libthread/Darwin-power.c13
-rw-r--r--src/libthread/Darwin-ucontext.h19
-rw-r--r--src/libthread/thread.c15
-rw-r--r--src/libthread/threadimpl.h4
-rw-r--r--src/mkhdr9
18 files changed, 92 insertions, 44 deletions
diff --git a/include/u.h b/include/u.h
index df82ac59..af9746a4 100644
--- a/include/u.h
+++ b/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));
diff --git a/src/cmd/acme/dat.h b/src/cmd/acme/dat.h
index 97953325..4ac0d676 100644
--- a/src/cmd/acme/dat.h
+++ b/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,
diff --git a/src/cmd/map/map.c b/src/cmd/map/map.c
index 47109d43..e8dd3ab3 100644
--- a/src/cmd/map/map.c
+++ b/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 *);
diff --git a/src/cmd/map/mkfile b/src/cmd/map/mkfile
index 4d272749..43f2205d 100644
--- a/src/cmd/map/mkfile
+++ b/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\
diff --git a/src/cmd/pr.c b/src/cmd/pr.c
index 991572b1..2967e003 100644
--- a/src/cmd/pr.c
+++ b/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
diff --git a/src/cmd/proof/proof.h b/src/cmd/proof/proof.h
index edd34991..72d55083 100644
--- a/src/cmd/proof/proof.h
+++ b/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;
diff --git a/src/cmd/vac/error.h b/src/cmd/vac/error.h
index bbb97373..3d6c7f8d 100644
--- a/src/cmd/vac/error.h
+++ b/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[];
diff --git a/src/lib9pclient/fs.c b/src/lib9pclient/fs.c
index d72aa4c7..dfb3bc9f 100644
--- a/src/lib9pclient/fs.c
+++ b/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);
diff --git a/src/libmach/OpenBSD.c b/src/libmach/OpenBSD.c
new file mode 100644
index 00000000..3626e7c6
--- /dev/null
+++ b/src/libmach/OpenBSD.c
@@ -0,0 +1 @@
+#include "nosys.c"
diff --git a/src/libmach/elfcorelinux386.c b/src/libmach/elfcorelinux386.c
index 18f8bdfe..8fa74ab9 100644
--- a/src/libmach/elfcorelinux386.c
+++ b/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;
diff --git a/src/libmach/machpower.c b/src/libmach/machpower.c
index 701e9c65..141645a6 100644
--- a/src/libmach/machpower.c
+++ b/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)
diff --git a/src/libsec/386/md5block.spp b/src/libsec/386/md5block.spp
index 61d86c36..e758a738 100644
--- a/src/libsec/386/md5block.spp
+++ b/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
diff --git a/src/libthread/Darwin-power-asm.s b/src/libthread/Darwin-power-asm.s
index 0776b1e3..a064b5ea 100644
--- a/src/libthread/Darwin-power-asm.s
+++ b/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
diff --git a/src/libthread/Darwin-power.c b/src/libthread/Darwin-power.c
index 373cc623..e625626c 100644
--- a/src/libthread/Darwin-power.c
+++ b/src/libthread/Darwin-power.c
@@ -8,23 +8,24 @@ makecontext(ucontext_t *ucp, void (*func)(void), int argc, ...)
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
diff --git a/src/libthread/Darwin-ucontext.h b/src/libthread/Darwin-ucontext.h
index c7915ff8..a39be28a 100644
--- a/src/libthread/Darwin-ucontext.h
+++ b/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*);
diff --git a/src/libthread/thread.c b/src/libthread/thread.c
index 120e6514..550cc056 100644
--- a/src/libthread/thread.c
+++ b/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)();
diff --git a/src/libthread/threadimpl.h b/src/libthread/threadimpl.h
index 0334fe30..842b81d8 100644
--- a/src/libthread/threadimpl.h
+++ b/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
diff --git a/src/mkhdr b/src/mkhdr
index e63c1f06..666ba430 100644
--- a/src/mkhdr
+++ b/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