From bd0c9332d5b1da1371d03e8e0ad03de0d08e08c6 Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Thu, 15 May 2014 05:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 2014-05-15 --- sys/doc/backup.ms | 4 ++-- sys/doc/backup.pdf | Bin 0 -> 31940 bytes sys/doc/backup.ps | Bin 227348 -> 227346 bytes sys/man/2/time | 19 +++++++++++++----- sys/src/9/bcm/fns.h | 2 +- sys/src/9/kw/arch.c | 31 +++++++++++++++++++++------- sys/src/9/kw/fns.h | 2 +- sys/src/9/mtx/fns.h | 2 +- sys/src/9/mtx/trap.c | 29 ++++++++++++++++++++------ sys/src/9/omap/arch.c | 31 +++++++++++++++++++++------- sys/src/9/omap/fns.h | 2 +- sys/src/9/pc/fns.h | 5 ++++- sys/src/9/pc/trap.c | 26 ++++++++++++++++++++++++ sys/src/9/port/syscallfmt.c | 9 ++++++++- sys/src/9/port/sysfile.c | 11 +++++----- sys/src/9/port/sysproc.c | 21 ++++++++++++++----- sys/src/9/port/systab.h | 3 +++ sys/src/9/ppc/fns.h | 2 +- sys/src/9/ppc/trap.c | 29 ++++++++++++++++++++------ sys/src/9/rb/faultmips.c | 29 ++++++++++++++++++++------ sys/src/9/rb/fns.h | 2 +- sys/src/9/teg2/arch.c | 29 ++++++++++++++++++++------ sys/src/9/teg2/fns.h | 2 +- sys/src/libc/9sys/mkfile | 1 - sys/src/libc/9sys/time.c | 38 ----------------------------------- sys/src/libc/9syscall/mkfile | 14 ++++++------- sys/src/libc/9syscall/sys.h | 1 + 27 files changed, 234 insertions(+), 110 deletions(-) create mode 100644 sys/doc/backup.pdf diff --git a/sys/doc/backup.ms b/sys/doc/backup.ms index 1a059de3c..6699e7ad9 100644 --- a/sys/doc/backup.ms +++ b/sys/doc/backup.ms @@ -32,9 +32,9 @@ as the term is used by everyone but disk manufacturers. In the case of BDs, even that is an exaggeration, with the actual capacity being closer to $48.44 times 10 sup 9$ bytes, -so the claimed capacity should be read as `50 VAX-gigabytes', +so the claimed capacity should be read as `50 BD-gigabytes', where a -.I VAX-gigabyte +.I BD-gigabyte is 968,800,338 bytes. The default .I venti diff --git a/sys/doc/backup.pdf b/sys/doc/backup.pdf new file mode 100644 index 0000000000000000000000000000000000000000..162f2c0d62c0b2f1d105ee473a7f9fbff6ac49e3 GIT binary patch literal 31940 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 sAO2q;u2!8P8>LufMq*> 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 literal 0 HcmV?d00001 diff --git a/sys/doc/backup.ps b/sys/doc/backup.ps index 7c7e3f6ad78caea4a92332bbabc4fe10596e30cd..e61447d5e5e589dbe0a7eb77ecc59fd5368a0222 100644 GIT binary patch delta 537 zcmYk3y-EW?6ooMZ5rq_rmXfuKiHYpYot>XXK`b<;v=Ky@Bx|w|iMSg=Y)p~LN<^I6 zcMyCIL41xpf_IW-H{I~fnRDly`#vwd%}dkS+N|(Je$TI!2Z3bXc=I3`Ry_(5GQial zl7Pyba0Ei-k{e(Wky_DEAA$A*+qfW=A_#m8cCAIq&+SPP#`UVlDDccO#;J@;nt`Mr zA`whyq%$zleb_~+z|X09Fr6rwR6Sq;%W&Kujs~a&p>xkRTJnl7f=u=p8WeH1VrXIn zTvJO)}lq*oe@J7L99&N&9n2_P0>h zi+aWdM=Tk)pJ@3pChNC2jDf;9={qe{UHN_;K;cc`hv@9-a0Oo1f; delta 553 zcmYk3ze)o^5Qov#C`y_@>?GI4Xd?T6_dpOkJyVLP*ldzBIY>zGE=X)lk;YC$*w#m| z5PS|ne2zSVv+=k~w|w*M%t$w1P(`)82p{Vz;wU-QQ9$_*ETpt1v zm}Uy+0Ho9zxMfrU(n}7(4*1wM&QP^L3AoID2dMJYnj~RduX&UZo^^;}D&<^eAnAob zgzsmh-8a!7>;P4M?zPRxw4-EF^B7(3*Bg%e;4;bc4lQWOtC-~EJ~SY4*gP9!VgQ^e zTM5uU5?Z*!u6;R11v?B-p-fcfUY=Yvz*ZnV2WVQ-P?G*4M&lwP!oCM+$KpQPE;+dy zb&Y#J6cv`Pn06kWqxBn3A&~UGFLhmGTxU$X95^hPRu=iemoSR+aThKwCL{!tYMt=T rjQa^trCGK{X^j)1{s(^y(1xuv(Po*#SEkqE=+UL582vhGqTho*6|06k diff --git a/sys/man/2/time b/sys/man/2/time index ceb377fae..9e1054c68 100644 --- a/sys/man/2/time +++ b/sys/man/2/time @@ -33,18 +33,27 @@ should be stored in and treated as .BR ulong s; this extends the range of valid times into the year 2106. .PP -These functions work by reading +.I Time +simply calls +.I nsec +and returns the value divided by 1000000000. +.PP +.I Nsec +is a system call. +Previous implementations read .BR /dev/bintime , -opening that file when they are first called. +opening that file when first called, +and maintaining a static file descriptor; +however, +the maintenance of file descriptors in the face +of process forks is overly complex and prone to error. .SH SOURCE .B /sys/src/libc/9sys/time.c .br -.B /sys/src/libc/9sys/nsec.c +.B /sys/src/libc/9syscall .SH SEE ALSO .IR cputime (2), .IR cons (3) .SH DIAGNOSTICS Sets .IR errstr . -.SH BUGS -These routines maintain a static file descriptor. diff --git a/sys/src/9/bcm/fns.h b/sys/src/9/bcm/fns.h index d3d6d6a37..a20427f5b 100644 --- a/sys/src/9/bcm/fns.h +++ b/sys/src/9/bcm/fns.h @@ -95,11 +95,11 @@ extern int fpuemu(Ureg*); extern void delay(int); /* only scheddump() */ extern int islo(void); extern void microdelay(int); /* only edf.c */ -extern void evenaddr(uintptr); extern void idlehands(void); extern void setkernur(Ureg*, Proc*); /* only devproc.c */ extern void* sysexecregs(uintptr, ulong, int); extern void sysprocsetup(Proc*); +extern void validalign(uintptr, unsigned); extern void kexit(Ureg*); diff --git a/sys/src/9/kw/arch.c b/sys/src/9/kw/arch.c index c800ffc77..3c7d6cf65 100644 --- a/sys/src/9/kw/arch.c +++ b/sys/src/9/kw/arch.c @@ -28,15 +28,32 @@ setkernur(Ureg* ureg, Proc* p) } /* - * called in sysfile.c + * called in syscallfmt.c, sysfile.c, sysproc.c */ void -evenaddr(uintptr addr) -{ - if(addr & 3){ - postnote(up, 1, "sys: odd address", NDebug); - error(Ebadarg); - } +validalign(uintptr addr, unsigned align) +{ + /* + * Plan 9 is a 32-bit O/S, and the hardware it runs on + * does not usually have instructions which move 64-bit + * quantities directly, synthesizing the operations + * with 32-bit move instructions. Therefore, the compiler + * (and hardware) usually only enforce 32-bit alignment, + * if at all. + * + * Take this out if the architecture warrants it. + */ + if(align == sizeof(vlong)) + align = sizeof(long); + + /* + * Check align is a power of 2, then addr alignment. + */ + if((align != 0 && !(align & (align-1))) && !(addr & (align-1))) + return; + postnote(up, 1, "sys: odd address", NDebug); + error(Ebadarg); + /*NOTREACHED*/ } /* go to user space */ diff --git a/sys/src/9/kw/fns.h b/sys/src/9/kw/fns.h index 6e8db4201..3766bcbf0 100644 --- a/sys/src/9/kw/fns.h +++ b/sys/src/9/kw/fns.h @@ -128,13 +128,13 @@ extern Block* uciallocb(int); extern void delay(int); /* only scheddump() */ extern int islo(void); extern void microdelay(int); /* only edf.c */ -extern void evenaddr(uintptr); extern void idlehands(void); extern void setkernur(Ureg*, Proc*); /* only devproc.c */ extern void spldone(void); extern int splfhi(void); extern int splflo(void); extern void sysprocsetup(Proc*); +extern void validalign(uintptr, unsigned); /* * PCI diff --git a/sys/src/9/mtx/fns.h b/sys/src/9/mtx/fns.h index d88d0d636..023d483d1 100644 --- a/sys/src/9/mtx/fns.h +++ b/sys/src/9/mtx/fns.h @@ -15,7 +15,6 @@ void delay(int); void dumpregs(Ureg*); void delayloopinit(void); void eieio(void); -void evenaddr(ulong); void faultpower(Ureg*, ulong addr, int read); void fprestore(FPsave*); void fpsave(FPsave*); @@ -103,6 +102,7 @@ void trapvec(void); void tlbflush(ulong); void tlbflushall(void); #define userureg(ur) (((ur)->status & MSR_PR) != 0) +void validalign(uintptr, unsigned); void watchreset(void); #define waserror() (up->nerrlab++, setlabel(&up->errlab[up->nerrlab-1])) diff --git a/sys/src/9/mtx/trap.c b/sys/src/9/mtx/trap.c index abd84f37a..5f7f9d523 100644 --- a/sys/src/9/mtx/trap.c +++ b/sys/src/9/mtx/trap.c @@ -522,15 +522,32 @@ kprocchild(Proc *p, void (*func)(void*), void *arg) } /* - * called in sysfile.c + * called in syscallfmt.c, sysfile.c, sysproc.c */ void -evenaddr(ulong addr) +validalign(uintptr addr, unsigned align) { - if(addr & 3){ - postnote(up, 1, "sys: odd address", NDebug); - error(Ebadarg); - } + /* + * Plan 9 is a 32-bit O/S, and the hardware it runs on + * does not usually have instructions which move 64-bit + * quantities directly, synthesizing the operations + * with 32-bit move instructions. Therefore, the compiler + * (and hardware) usually only enforce 32-bit alignment, + * if at all. + * + * Take this out if the architecture warrants it. + */ + if(align == sizeof(vlong)) + align = sizeof(long); + + /* + * Check align is a power of 2, then addr alignment. + */ + if((align != 0 && !(align & (align-1))) && !(addr & (align-1))) + return; + postnote(up, 1, "sys: odd address", NDebug); + error(Ebadarg); + /*NOTREACHED*/ } long diff --git a/sys/src/9/omap/arch.c b/sys/src/9/omap/arch.c index a9b9537a9..2b2d11aee 100644 --- a/sys/src/9/omap/arch.c +++ b/sys/src/9/omap/arch.c @@ -28,15 +28,32 @@ setkernur(Ureg* ureg, Proc* p) } /* - * called in sysfile.c + * called in syscallfmt.c, sysfile.c, sysproc.c */ void -evenaddr(uintptr addr) -{ - if(addr & 3){ - postnote(up, 1, "sys: odd address", NDebug); - error(Ebadarg); - } +validalign(uintptr addr, unsigned align) +{ + /* + * Plan 9 is a 32-bit O/S, and the hardware it runs on + * does not usually have instructions which move 64-bit + * quantities directly, synthesizing the operations + * with 32-bit move instructions. Therefore, the compiler + * (and hardware) usually only enforce 32-bit alignment, + * if at all. + * + * Take this out if the architecture warrants it. + */ + if(align == sizeof(vlong)) + align = sizeof(long); + + /* + * Check align is a power of 2, then addr alignment. + */ + if((align != 0 && !(align & (align-1))) && !(addr & (align-1))) + return; + postnote(up, 1, "sys: odd address", NDebug); + error(Ebadarg); + /*NOTREACHED*/ } /* go to user space */ diff --git a/sys/src/9/omap/fns.h b/sys/src/9/omap/fns.h index 30ff4c467..a46dff739 100644 --- a/sys/src/9/omap/fns.h +++ b/sys/src/9/omap/fns.h @@ -138,11 +138,11 @@ extern void ucfreeb(Block*); extern void delay(int); /* only scheddump() */ extern int islo(void); extern void microdelay(int); /* only edf.c */ -extern void evenaddr(uintptr); extern void idlehands(void); extern void setkernur(Ureg*, Proc*); /* only devproc.c */ extern void* sysexecregs(uintptr, ulong, int); extern void sysprocsetup(Proc*); +extern void validalign(uintptr, unsigned); /* * PCI stuff. diff --git a/sys/src/9/pc/fns.h b/sys/src/9/pc/fns.h index f7462a2ce..a79d4d894 100644 --- a/sys/src/9/pc/fns.h +++ b/sys/src/9/pc/fns.h @@ -26,7 +26,6 @@ int dmadone(int); void dmaend(int); int dmainit(int, int); long dmasetup(int, void*, long, int); -#define evenaddr(x) /* x86 doesn't care */ void fpclear(void); void fpenv(FPsave*); void fpinit(void); @@ -182,6 +181,7 @@ ulong upaalloc(int, int); void upafree(ulong, int); void upareserve(ulong, int); #define userureg(ur) (((ur)->cs & 0xFFFF) == UESEL) +void validalign(uintptr, unsigned); void vectortable(void); void* vmap(ulong, int); int vmapsync(ulong); @@ -190,6 +190,9 @@ void wbinvd(void); void wrmsr(int, vlong); int xchgw(ushort*, int); +#define PTR2UINT(p) ((uintptr)(p)) +#define UINT2PTR(i) ((void*)(i)) + #define waserror() (up->nerrlab++, setlabel(&up->errlab[up->nerrlab-1])) #define KADDR(a) kaddr(a) #define PADDR(a) paddr((void*)(a)) diff --git a/sys/src/9/pc/trap.c b/sys/src/9/pc/trap.c index 561fa24c9..51ea084ce 100644 --- a/sys/src/9/pc/trap.c +++ b/sys/src/9/pc/trap.c @@ -953,6 +953,32 @@ if(0) print("%s %lud: noted %.8lux %.8lux\n", } } +void +validalign(uintptr addr, unsigned align) +{ + /* + * Plan 9 is a 32-bit O/S, and the hardware it runs on + * does not usually have instructions which move 64-bit + * quantities directly, synthesizing the operations + * with 32-bit move instructions. Therefore, the compiler + * (and hardware) usually only enforce 32-bit alignment, + * if at all. + * + * Take this out if the architecture warrants it. + */ + if(align == sizeof(vlong)) + align = sizeof(long); + + /* + * Check align is a power of 2, then addr alignment. + */ + if((align != 0 && !(align & (align-1))) && !(addr & (align-1))) + return; + postnote(up, 1, "sys: odd address", NDebug); + error(Ebadarg); + /*NOTREACHED*/ +} + long execregs(ulong entry, ulong ssize, ulong nargs) { diff --git a/sys/src/9/port/syscallfmt.c b/sys/src/9/port/syscallfmt.c index c22968c13..76abb46be 100644 --- a/sys/src/9/port/syscallfmt.c +++ b/sys/src/9/port/syscallfmt.c @@ -113,7 +113,7 @@ syscallfmt(int syscallno, ulong pc, va_list list) a = va_arg(list, char*); fmtuserstring(&fmt, a, ""); argv = va_arg(list, char**); - evenaddr(PTR2UINT(argv)); + validalign(PTR2UINT(argv), sizeof(char*)); for(;;){ validaddr((ulong)argv, sizeof(char**), 0); a = *(char **)argv; @@ -299,6 +299,10 @@ syscallfmt(int syscallno, ulong pc, va_list list) fmtprint(&fmt, " %lld", vl); } break; + case NSEC: + v = va_arg(list, vlong*); + fmtprint(&fmt, "%#p", v); + break; } up->syscalltrace = fmtstrflush(&fmt); @@ -400,6 +404,9 @@ sysretfmt(int syscallno, va_list list, long ret, uvlong start, uvlong stop) } fmtprint(&fmt, " = %ld", ret); break; + case NSEC: + fmtprint(&fmt, " = %ld", ret); /* FoV */ + break; } fmtprint(&fmt, " %s %#llud %#llud\n", errstr, start, stop); up->syscalltrace = fmtstrflush(&fmt); diff --git a/sys/src/9/port/sysfile.c b/sys/src/9/port/sysfile.c index 3109e0623..4b8597649 100644 --- a/sys/src/9/port/sysfile.c +++ b/sys/src/9/port/sysfile.c @@ -190,8 +190,8 @@ syspipe(ulong *arg) Dev *d; static char *datastr[] = {"data", "data1"}; - validaddr(arg[0], 2*BY2WD, 1); - evenaddr(arg[0]); + validaddr(arg[0], sizeof(fd), 1); + validalign(arg[0], sizeof(int)); d = devtab[devno('|', 0)]; c[0] = namec("#|", Atodir, 0, 0); c[1] = 0; @@ -215,8 +215,8 @@ syspipe(ulong *arg) error(Enofd); poperror(); - ((long*)arg[0])[0] = fd[0]; - ((long*)arg[0])[1] = fd[1]; + ((int*)arg[0])[0] = fd[0]; + ((int*)arg[0])[1] = fd[1]; return 0; } @@ -859,7 +859,8 @@ sseek(ulong *arg) long sysseek(ulong *arg) { - validaddr(arg[0], BY2V, 1); + validaddr(arg[0], sizeof(vlong), 1); + validalign(arg[0], sizeof(vlong)); sseek(arg); return 0; } diff --git a/sys/src/9/port/sysproc.c b/sys/src/9/port/sysproc.c index ca4924ccd..d8098d8ee 100644 --- a/sys/src/9/port/sysproc.c +++ b/sys/src/9/port/sysproc.c @@ -315,7 +315,7 @@ sysexec(ulong *arg) nargs++; } } - evenaddr(arg[1]); + validalign(arg[1], sizeof(char**)); argp = (char**)arg[1]; validaddr((ulong)argp, BY2WD, 0); while(*argp){ @@ -591,7 +591,7 @@ sys_wait(ulong *arg) return pwait(nil); validaddr(arg[0], sizeof(OWaitmsg), 1); - evenaddr(arg[0]); + validalign(arg[0], BY2WD); /* who cares? */ pid = pwait(&w); if(pid >= 0){ ow = (OWaitmsg*)arg[0]; @@ -1083,7 +1083,7 @@ syssemacquire(ulong *arg) Segment *s; validaddr(arg[0], sizeof(long), 1); - evenaddr(arg[0]); + validalign(arg[0], sizeof(long)); addr = (long*)arg[0]; block = arg[1]; @@ -1102,7 +1102,7 @@ systsemacquire(ulong *arg) Segment *s; validaddr(arg[0], sizeof(long), 1); - evenaddr(arg[0]); + validalign(arg[0], sizeof(long)); addr = (long*)arg[0]; ms = arg[1]; @@ -1120,7 +1120,7 @@ syssemrelease(ulong *arg) Segment *s; validaddr(arg[0], sizeof(long), 1); - evenaddr(arg[0]); + validalign(arg[0], sizeof(long)); addr = (long*)arg[0]; delta = arg[1]; @@ -1131,3 +1131,14 @@ syssemrelease(ulong *arg) error(Ebadarg); return semrelease(s, addr, delta); } + +long +sysnsec(ulong *arg) +{ + validaddr(arg[0], sizeof(vlong), 1); + validalign(arg[0], sizeof(vlong)); + + *(vlong*)arg[0] = todget(nil); + + return 0; +} diff --git a/sys/src/9/port/systab.h b/sys/src/9/port/systab.h index c80b55508..c0bf76c8e 100644 --- a/sys/src/9/port/systab.h +++ b/sys/src/9/port/systab.h @@ -53,6 +53,7 @@ Syscall sysawait; Syscall syspread; Syscall syspwrite; Syscall systsemacquire; +Syscall sysnsec; Syscall sysdeath; Syscall *systab[]={ @@ -107,6 +108,7 @@ Syscall *systab[]={ [PREAD] syspread, [PWRITE] syspwrite, [TSEMACQUIRE] systsemacquire, + [NSEC] sysnsec, }; char *sysctab[]={ @@ -161,6 +163,7 @@ char *sysctab[]={ [PREAD] "Pread", [PWRITE] "Pwrite", [TSEMACQUIRE] "Tsemacquire", + [NSEC] "Nsec", }; int nsyscall = (sizeof systab/sizeof systab[0]); diff --git a/sys/src/9/ppc/fns.h b/sys/src/9/ppc/fns.h index 7e44d4415..120d11e12 100644 --- a/sys/src/9/ppc/fns.h +++ b/sys/src/9/ppc/fns.h @@ -17,7 +17,6 @@ void delayloopinit(void); void dmiss(void); void dumpregs(Ureg*); void eieio(void); -void evenaddr(ulong); void faultpower(Ureg*, ulong addr, int read); void flashprogpower(int); void fpgareset(void); @@ -111,6 +110,7 @@ void touser(void*); void trapinit(void); void trapvec(void); #define userureg(ur) (((ur)->status & MSR_PR) != 0) +void validalign(uintptr, unsigned); #define waserror() (up->nerrlab++, setlabel(&up->errlab[up->nerrlab-1])) #define KADDR(a) ((void*)((ulong)(a)|KZERO)) #define PADDR(a) ((((ulong)(a)&0xf0000000)==0xf0000000)?(ulong)(a):((ulong)(a)&~KZERO)) diff --git a/sys/src/9/ppc/trap.c b/sys/src/9/ppc/trap.c index 5e0c39cae..d4174511b 100644 --- a/sys/src/9/ppc/trap.c +++ b/sys/src/9/ppc/trap.c @@ -583,15 +583,32 @@ kprocchild(Proc *p, void (*func)(void*), void *arg) } /* - * called in sysfile.c + * called in syscallfmt.c, sysfile.c, sysproc.c */ void -evenaddr(ulong addr) +validalign(uintptr addr, unsigned align) { - if(addr & 3){ - postnote(up, 1, "sys: odd address", NDebug); - error(Ebadarg); - } + /* + * Plan 9 is a 32-bit O/S, and the hardware it runs on + * does not usually have instructions which move 64-bit + * quantities directly, synthesizing the operations + * with 32-bit move instructions. Therefore, the compiler + * (and hardware) usually only enforce 32-bit alignment, + * if at all. + * + * Take this out if the architecture warrants it. + */ + if(align == sizeof(vlong)) + align = sizeof(long); + + /* + * Check align is a power of 2, then addr alignment. + */ + if((align != 0 && !(align & (align-1))) && !(addr & (align-1))) + return; + postnote(up, 1, "sys: odd address", NDebug); + error(Ebadarg); + /*NOTREACHED*/ } long diff --git a/sys/src/9/rb/faultmips.c b/sys/src/9/rb/faultmips.c index 40a912e55..b4e412411 100644 --- a/sys/src/9/rb/faultmips.c +++ b/sys/src/9/rb/faultmips.c @@ -226,13 +226,30 @@ faultmips(Ureg *ur, int user, int code) } /* - * called in sysfile.c + * called in syscallfmt.c, sysfile.c, sysproc.c */ void -evenaddr(ulong addr) +validalign(uintptr addr, unsigned align) { - if(addr & 3){ - postnote(up, 1, "sys: odd address", NDebug); - error(Ebadarg); - } + /* + * Plan 9 is a 32-bit O/S, and the hardware it runs on + * does not usually have instructions which move 64-bit + * quantities directly, synthesizing the operations + * with 32-bit move instructions. Therefore, the compiler + * (and hardware) usually only enforce 32-bit alignment, + * if at all. + * + * Take this out if the architecture warrants it. + */ + if(align == sizeof(vlong)) + align = sizeof(long); + + /* + * Check align is a power of 2, then addr alignment. + */ + if((align != 0 && !(align & (align-1))) && !(addr & (align-1))) + return; + postnote(up, 1, "sys: odd address", NDebug); + error(Ebadarg); + /*NOTREACHED*/ } diff --git a/sys/src/9/rb/fns.h b/sys/src/9/rb/fns.h index 73716c7f0..2f7231534 100644 --- a/sys/src/9/rb/fns.h +++ b/sys/src/9/rb/fns.h @@ -12,7 +12,6 @@ int cmpswap(long*, long, long); void coherence(void); void cycles(uvlong *); void dcflush(void*, ulong); -void evenaddr(ulong); void faultmips(Ureg*, int, int); ulong fcr31(void); void firmware(int); @@ -123,6 +122,7 @@ ulong tlbvirt(void); void touser(uintptr); void unleash(void); #define userureg(ur) ((ur)->status & KUSER) +void validalign(uintptr, unsigned); void vecinit(void); void vector0(void); void vector100(void); diff --git a/sys/src/9/teg2/arch.c b/sys/src/9/teg2/arch.c index edfe16136..825639ac0 100644 --- a/sys/src/9/teg2/arch.c +++ b/sys/src/9/teg2/arch.c @@ -28,15 +28,32 @@ setkernur(Ureg* ureg, Proc* p) } /* - * called in sysfile.c + * called in syscallfmt.c, sysfile.c, sysproc.c */ void -evenaddr(uintptr addr) +validalign(uintptr addr, unsigned align) { - if(addr & 3){ - postnote(up, 1, "sys: odd address", NDebug); - error(Ebadarg); - } + /* + * Plan 9 is a 32-bit O/S, and the hardware it runs on + * does not usually have instructions which move 64-bit + * quantities directly, synthesizing the operations + * with 32-bit move instructions. Therefore, the compiler + * (and hardware) usually only enforce 32-bit alignment, + * if at all. + * + * Take this out if the architecture warrants it. + */ + if(align == sizeof(vlong)) + align = sizeof(long); + + /* + * Check align is a power of 2, then addr alignment. + */ + if((align != 0 && !(align & (align-1))) && !(addr & (align-1))) + return; + postnote(up, 1, "sys: odd address", NDebug); + error(Ebadarg); + /*NOTREACHED*/ } /* go to user space */ diff --git a/sys/src/9/teg2/fns.h b/sys/src/9/teg2/fns.h index 49319a538..ca0087a25 100644 --- a/sys/src/9/teg2/fns.h +++ b/sys/src/9/teg2/fns.h @@ -197,13 +197,13 @@ extern void ucfreeb(Block*); extern void delay(int); /* only scheddump() */ extern int islo(void); extern void microdelay(int); /* only edf.c */ -extern void evenaddr(uintptr); extern void idlehands(void); extern void setkernur(Ureg*, Proc*); /* only devproc.c */ extern void syscallfmt(int syscallno, ulong pc, va_list list); extern void sysretfmt(int syscallno, va_list list, long ret, uvlong start, uvlong stop); extern void* sysexecregs(uintptr, ulong, int); extern void sysprocsetup(Proc*); +extern void validalign(uintptr, unsigned); /* libc */ long labs(long); diff --git a/sys/src/libc/9sys/mkfile b/sys/src/libc/9sys/mkfile index 3b7d95e8e..73e3ebd40 100644 --- a/sys/src/libc/9sys/mkfile +++ b/sys/src/libc/9sys/mkfile @@ -26,7 +26,6 @@ OFILES=\ getppid.$O\ getwd.$O\ iounit.$O\ - nsec.$O\ nulldir.$O\ postnote.$O\ privalloc.$O\ diff --git a/sys/src/libc/9sys/time.c b/sys/src/libc/9sys/time.c index 3e5f83b04..23ef3d1ba 100644 --- a/sys/src/libc/9sys/time.c +++ b/sys/src/libc/9sys/time.c @@ -1,50 +1,12 @@ #include #include - -/* - * After a fork with fd's copied, both fd's are pointing to - * the same Chan structure. Since the offset is kept in the Chan - * structure, the seek's and read's in the two processes can - * compete at moving the offset around. Hence the unusual loop - * in the middle of this routine. - */ -static long -oldtime(long *tp) -{ - char b[20]; - static int f = -1; - int i, retries; - long t; - - memset(b, 0, sizeof(b)); - for(retries = 0; retries < 100; retries++){ - if(f < 0) - f = open("/dev/time", OREAD|OCEXEC); - if(f < 0) - break; - if(seek(f, 0, 0) < 0 || (i = read(f, b, sizeof(b))) < 0){ - close(f); - f = -1; - } else { - if(i != 0) - break; - } - } - t = atol(b); - if(tp) - *tp = t; - return t; -} - long time(long *tp) { vlong t; t = nsec()/1000000000LL; - if(t == 0) - t = oldtime(0); if(tp != nil) *tp = t; return t; diff --git a/sys/src/libc/9syscall/mkfile b/sys/src/libc/9syscall/mkfile index 181b5853b..4e407adac 100644 --- a/sys/src/libc/9syscall/mkfile +++ b/sys/src/libc/9syscall/mkfile @@ -13,7 +13,7 @@ install:V: echo MOVW R1, '0(FP)' echo MOVW '$'$n, R1 echo SYSCALL - if(~ $i seek) { + if(~ $i seek || ~ $i nsec) { echo 'MOVW $-1,R5 BNE R1,R5,4(PC) MOVW a+0(FP),R5 @@ -36,7 +36,7 @@ install:V: echo ADD '$4',R29 echo SYSCALL echo ADD '$-4',R29 - if(~ $i seek) { # untested so far - geoff + if(~ $i seek || ~ $i nsec) { # untested so far - geoff echo 'MOVW $-1,R5 BNE R1,R5,4(PC) MOVW a+0(FP),R5 @@ -48,7 +48,7 @@ install:V: echo TEXT $i'(SB)', 1, '$0' echo MOVL '$'$n, AX echo INT '$'64 - if(~ $i seek) { + if(~ $i seek || ~ $i nsec) { echo 'CMPL AX,$-1 JNE 4(PC) MOVL a+0(FP),CX @@ -66,7 +66,7 @@ install:V: # in a register, if the system call takes no arguments # there will be no 'a0+0(FP)' reserved on the stack. # - if(! ~ $i asystemcallwithnoarguments) + if(! ~ $i asystemcallwithnoarguments || ! ~ $i nsec) echo MOVQ RARG, 'a0+0(FP)' echo MOVQ '$'$n, RARG echo SYSCALL @@ -76,7 +76,7 @@ install:V: echo MOVW R7, '0(FP)' echo MOVW '$'$n, R7 echo TA R0 - if(~ $i seek) { + if(~ $i seek || ~ $i nsec) { echo 'CMP R7,$-1 BNE 4(PC) MOVW a+0(FP),R8 @@ -89,7 +89,7 @@ install:V: echo MOVW R0, '0(FP)' echo MOVW '$'$n, R0 echo SWI 0 - if(~ $i seek) { + if(~ $i seek || ~ $i nsec) { echo 'CMP $-1,R0 BNE 4(PC) MOVW a+0(FP),R1 @@ -102,7 +102,7 @@ install:V: echo MOVW R3, '0(FP)' echo MOVW '$'$n, R3 echo SYSCALL - if(~ $i seek) { + if(~ $i seek || ~ $i nsec) { echo 'CMP R3,$-1 BNE 4(PC) MOVW a+0(FP),R8 diff --git a/sys/src/libc/9syscall/sys.h b/sys/src/libc/9syscall/sys.h index fcc274799..ff204e812 100644 --- a/sys/src/libc/9syscall/sys.h +++ b/sys/src/libc/9syscall/sys.h @@ -49,3 +49,4 @@ #define PREAD 50 #define PWRITE 51 #define TSEMACQUIRE 52 +#define NSEC 53