URI: 
       tos x changes - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit b8f742db850ffc99333a97ab54fc820c6de0fd98
   DIR parent 530d00164177fd68e2aeb403e7b9be31823e3168
  HTML Author: rsc <devnull@localhost>
       Date:   Tue, 11 Jan 2005 17:43:53 +0000
       
       os x changes
       
       Diffstat:
         M include/u.h                         |       2 +-
         M src/cmd/acme/dat.h                  |       3 +++
         M src/cmd/map/map.c                   |       2 ++
         M src/cmd/map/mkfile                  |       1 -
         M src/cmd/pr.c                        |       1 +
         M src/cmd/proof/proof.h               |       2 ++
         M src/cmd/vac/error.h                 |       5 +++++
         M src/lib9pclient/fs.c                |       2 --
         A src/libmach/OpenBSD.c               |       1 +
         M src/libmach/elfcorelinux386.c       |       3 +++
         M src/libmach/machpower.c             |       2 +-
         M src/libsec/386/md5block.spp         |       2 +-
         M src/libthread/Darwin-power-asm.s    |      50 ++++++++++++++++----------------
         M src/libthread/Darwin-power.c        |      13 +++++++------
         M src/libthread/Darwin-ucontext.h     |      19 +++++++++++++++----
         M src/libthread/thread.c              |      15 +++++++++++++--
         M src/libthread/threadimpl.h          |       4 ++++
         M src/mkhdr                           |       9 ++++++++-
       
       18 files changed, 92 insertions(+), 44 deletions(-)
       ---
   DIR diff --git a/include/u.h b/include/u.h
       t@@ -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));
   DIR diff --git a/src/cmd/acme/dat.h b/src/cmd/acme/dat.h
       t@@ -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,
   DIR diff --git a/src/cmd/map/map.c b/src/cmd/map/map.c
       t@@ -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 *);
   DIR diff --git a/src/cmd/map/mkfile b/src/cmd/map/mkfile
       t@@ -5,7 +5,6 @@ LIB=libmap/libmap.a
        OFILES=map.$O\
                symbol.$O\
                index.$O\
       -        sqrt.$O\
        
        HFILES=map.h\
                iplot.h\
   DIR diff --git a/src/cmd/pr.c b/src/cmd/pr.c
       t@@ -8,6 +8,7 @@
         *        2+head+2+page[56]+5
         */
        
       +#define err                pr_err
        #define        ISPRINT(c)        ((c) >= ' ')
        #define ESC                '\033'
        #define LENGTH                66
   DIR diff --git a/src/cmd/proof/proof.h b/src/cmd/proof/proof.h
       t@@ -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;
   DIR diff --git a/src/cmd/vac/error.h b/src/cmd/vac/error.h
       t@@ -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[];
   DIR diff --git a/src/lib9pclient/fs.c b/src/lib9pclient/fs.c
       t@@ -56,7 +56,6 @@ CFsys*
        fsmount(int fd, char *aname)
        {
                int n;
       -        char *user;
                CFsys *fs;
                CFid *fid;
        
       t@@ -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);
   DIR diff --git a/src/libmach/OpenBSD.c b/src/libmach/OpenBSD.c
       t@@ -0,0 +1 @@
       +#include "nosys.c"
   DIR diff --git a/src/libmach/elfcorelinux386.c b/src/libmach/elfcorelinux386.c
       t@@ -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;
   DIR diff --git a/src/libmach/machpower.c b/src/libmach/machpower.c
       t@@ -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)
   DIR diff --git a/src/libsec/386/md5block.spp b/src/libsec/386/md5block.spp
       t@@ -43,7 +43,7 @@
        #define S43 15
        #define S44 21
        
       -#define PAYME(x) $##x
       +#define PAYME(x) $ ## x
        
        /*
         * SI is data
   DIR diff --git a/src/libthread/Darwin-power-asm.s b/src/libthread/Darwin-power-asm.s
       t@@ -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
       t@@ -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)
       t@@ -79,5 +79,5 @@ __gotolabel:
                lwz        r0, 3*4(r3)
                mtxer        r0
        
       -        lwz        r3,        6*4(r4)
       +        lwz        r3,        6*4(r3)
                blr
   DIR diff --git a/src/libthread/Darwin-power.c b/src/libthread/Darwin-power.c
       t@@ -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
   DIR diff --git a/src/libthread/Darwin-ucontext.h b/src/libthread/Darwin-ucontext.h
       t@@ -1,5 +1,6 @@
       +typedef struct mcontext mcontext_t;
        typedef struct ucontext ucontext_t;
       -struct ucontext
       +struct mcontext
        {
                ulong        pc;                /* lr */
                ulong        cr;                /* mfcr */
       t@@ -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*);
        
   DIR diff --git a/src/libthread/thread.c b/src/libthread/thread.c
       t@@ -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)
       t@@ -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*
       t@@ -156,6 +163,7 @@ _threadswitch(void)
                Proc *p;
        
                p = proc();
       +//print("threadswtch %p\n", p);
                contextswitch(&p->thread->context, &p->schedcontext);
        }
        
       t@@ -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){
       t@@ -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);
                        }
                }
       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)();
   DIR diff --git a/src/libthread/threadimpl.h b/src/libthread/threadimpl.h
       t@@ -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
        
   DIR diff --git a/src/mkhdr b/src/mkhdr
       t@@ -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