diff options
| author | Valery Ushakov <uwe@stderr.spb.ru> | 2019-03-10 03:44:16 +0200 |
|---|---|---|
| committer | Valery Ushakov <uwe@stderr.spb.ru> | 2019-03-10 03:44:16 +0200 |
| commit | 594bd56378a3a707845dd8813881c427a3a8d16e (patch) | |
| tree | 5f18116b77d615f40c50d449a332dafd21347c05 /emu/NetBSD | |
| parent | 9b7850d511c2c910abfb42ece20650b97fba5a72 (diff) | |
| parent | 55520626f59983d296c98c008af92f7c5c27bf5f (diff) | |
Merged default into NetBSD/pthreads
Diffstat (limited to 'emu/NetBSD')
| -rw-r--r-- | emu/NetBSD/asm-power.S | 91 | ||||
| -rw-r--r-- | emu/NetBSD/emu | 3 | ||||
| -rw-r--r-- | emu/NetBSD/emu-g | 4 | ||||
| -rw-r--r-- | emu/NetBSD/emu.c | 88 | ||||
| -rw-r--r-- | emu/NetBSD/mkfile | 7 | ||||
| -rw-r--r-- | emu/NetBSD/os.c | 8 | ||||
| -rw-r--r-- | emu/NetBSD/segflush-386.c | 9 | ||||
| -rw-r--r-- | emu/NetBSD/segflush-power.c | 12 |
8 files changed, 122 insertions, 100 deletions
diff --git a/emu/NetBSD/asm-power.S b/emu/NetBSD/asm-power.S new file mode 100644 index 00000000..da40e825 --- /dev/null +++ b/emu/NetBSD/asm-power.S @@ -0,0 +1,91 @@ +#include <machine/asm.h> + +ENTRY_NOPROFILE(FPsave) + stfd %f14,0*8(%r3) + stfd %f15,1*8(%r3) + stfd %f16,2*8(%r3) + stfd %f17,3*8(%r3) + stfd %f18,4*8(%r3) + stfd %f19,5*8(%r3) + stfd %f20,6*8(%r3) + stfd %f21,7*8(%r3) + stfd %f22,8*8(%r3) + stfd %f23,9*8(%r3) + stfd %f24,10*8(%r3) + stfd %f25,11*8(%r3) + stfd %f26,12*8(%r3) + stfd %f27,13*8(%r3) + stfd %f28,14*8(%r3) + stfd %f29,15*8(%r3) + stfd %f30,16*8(%r3) + stfd %f31,17*8(%r3) + blr + END(FPsave) + +ENTRY_NOPROFILE(FPrestore) + lfd %f14,0*8(%r3) + lfd %f15,1*8(%r3) + lfd %f16,2*8(%r3) + lfd %f17,3*8(%r3) + lfd %f18,4*8(%r3) + lfd %f19,5*8(%r3) + lfd %f20,6*8(%r3) + lfd %f21,7*8(%r3) + lfd %f22,8*8(%r3) + lfd %f23,9*8(%r3) + lfd %f24,10*8(%r3) + lfd %f25,11*8(%r3) + lfd %f26,12*8(%r3) + lfd %f27,13*8(%r3) + lfd %f28,14*8(%r3) + lfd %f29,15*8(%r3) + lfd %f30,16*8(%r3) + lfd %f31,17*8(%r3) + blr + END(FPrestore) + +ENTRY_NOPROFILE(_tas) + sync + mr %r4, %r3 + addi %r5,0,0x1 +1: + lwarx %r3, 0, %r4 + cmpwi %r3, 0 + bne- 2f + stwcx. %r5, 0, %r4 + bne- 1b +2: + sync + blr + END(_tas) + +/* + * void + * executeonnewstack(void *tos, void (*tramp)(void *arg), void *arg) + */ +ENTRY_NOPROFILE(executeonnewstack) + mr %r1,%r3 /* change stacks */ + stwu %lr,-16(%r1) /* save lr to aid the traceback */ + li %r0,0 + stw %r0,20(%r1) + mr %r3,%r5 + mtctr %r4 + bctrl /* tramp(arg) */ + br + END(executeonnewstack) + +/* + * void unlockandexit(int *key) + * + * NB: the return status may be garbaged if the stack is reused + * between the unlock and the system call, but this should + * not matter since no task is waiting for the result + */ +ENTRY_NOPROFILE(unlockandexit) + li %r0,0x0 + stw %r0,0(%r3) /* unlock */ + li %r0,1 /* sys exit; 234 is exit group */ + li %r3,0 /* exit status */ + sc + br + END(unlockandexit) diff --git a/emu/NetBSD/emu b/emu/NetBSD/emu index 55705a2b..d89c5bc5 100644 --- a/emu/NetBSD/emu +++ b/emu/NetBSD/emu @@ -81,6 +81,9 @@ port uqid code + #ifdef __powerpc__ + int macjit = 1; /* tell compiler it's not plan9 abi */ + #endif init emuinit diff --git a/emu/NetBSD/emu-g b/emu/NetBSD/emu-g index e662b4c1..6e87297a 100644 --- a/emu/NetBSD/emu-g +++ b/emu/NetBSD/emu-g @@ -70,6 +70,10 @@ port uqid code + #ifdef __powerpc__ + int macjit = 1; /* tell compiler it's not plan9 abi */ + #endif + void setpointer(int x, int y){USED(x); USED(y);} ulong strtochan(char *s){USED(s); return ~0;} diff --git a/emu/NetBSD/emu.c b/emu/NetBSD/emu.c deleted file mode 100644 index 69e1139d..00000000 --- a/emu/NetBSD/emu.c +++ /dev/null @@ -1,88 +0,0 @@ -#include "dat.h" -#include "fns.h" -#include "error.h" -#include "interp.h" - - -#include "emu.root.h" - -ulong ndevs = 29; - -extern Dev rootdevtab; -extern Dev consdevtab; -extern Dev envdevtab; -extern Dev mntdevtab; -extern Dev pipedevtab; -extern Dev progdevtab; -extern Dev profdevtab; -extern Dev srvdevtab; -extern Dev dupdevtab; -extern Dev ssldevtab; -extern Dev capdevtab; -extern Dev fsdevtab; -extern Dev cmddevtab; -extern Dev indirdevtab; -extern Dev drawdevtab; -extern Dev pointerdevtab; -extern Dev snarfdevtab; -extern Dev ipdevtab; -extern Dev eiadevtab; -extern Dev audiodevtab; -extern Dev memdevtab; -Dev* devtab[]={ - &rootdevtab, - &consdevtab, - &envdevtab, - &mntdevtab, - &pipedevtab, - &progdevtab, - &profdevtab, - &srvdevtab, - &dupdevtab, - &ssldevtab, - &capdevtab, - &fsdevtab, - &cmddevtab, - &indirdevtab, - &drawdevtab, - &pointerdevtab, - &snarfdevtab, - &ipdevtab, - &eiadevtab, - &audiodevtab, - &memdevtab, - nil, - nil, - nil, - nil, - nil, - nil, - nil, - nil, - nil, -}; - -void links(void){ -} - -extern void sysmodinit(void); -extern void drawmodinit(void); -extern void tkmodinit(void); -extern void mathmodinit(void); -extern void srvmodinit(void); -extern void keyringmodinit(void); -extern void loadermodinit(void); -extern void freetypemodinit(void); -void modinit(void){ - sysmodinit(); - drawmodinit(); - tkmodinit(); - mathmodinit(); - srvmodinit(); - keyringmodinit(); - loadermodinit(); - freetypemodinit(); -} - -char* conffile = "emu"; -ulong kerndate = KERNDATE; diff --git a/emu/NetBSD/mkfile b/emu/NetBSD/mkfile index 8eda46f3..17516997 100644 --- a/emu/NetBSD/mkfile +++ b/emu/NetBSD/mkfile @@ -1,8 +1,6 @@ SYSTARG=NetBSD -OBJTYPE=386 <../../mkconfig SYSTARG=NetBSD -OBJTYPE=386 #Configurable parameters @@ -24,6 +22,7 @@ X11LIBS= -L/usr/X11R7/lib -R/usr/X11R7/lib -lXext -lX11 OBJ=\ asm-$OBJTYPE.$O\ os.$O\ + segflush-$OBJTYPE.$O\ kproc-pthreads.$O\ $CONF.root.$O\ lock.$O\ @@ -38,8 +37,6 @@ KERNDATE=`{$NDATE} default:V: $O.$CONF -<../port/portmkfile - $O.$CONF: $OBJ $CONF.c $CONF.root.h $LIBFILES $CC $CFLAGS '-DKERNDATE='$KERNDATE $CONF.c $LD $LDFLAGS -o $target $OBJ $CONF.$O $LIBFILES $SYSLIBS @@ -47,4 +44,6 @@ $O.$CONF: $OBJ $CONF.c $CONF.root.h $LIBFILES install:V: $O.$CONF cp $O.$CONF $INSTALLDIR/$CONF +<../port/portmkfile + devfs.$O: ../port/devfs-posix.c diff --git a/emu/NetBSD/os.c b/emu/NetBSD/os.c index 3aa95975..8ffce24e 100644 --- a/emu/NetBSD/os.c +++ b/emu/NetBSD/os.c @@ -301,11 +301,3 @@ limbosleep(ulong milsec) { return osmillisleep(milsec); } - -int -segflush(void *a, ulong n) -{ - USED(a); - USED(n); - return 0; -} diff --git a/emu/NetBSD/segflush-386.c b/emu/NetBSD/segflush-386.c new file mode 100644 index 00000000..cdf0496b --- /dev/null +++ b/emu/NetBSD/segflush-386.c @@ -0,0 +1,9 @@ +#include "dat.h" + +int +segflush(void *a, ulong n) +{ + USED(a); + USED(n); + return 0; +} diff --git a/emu/NetBSD/segflush-power.c b/emu/NetBSD/segflush-power.c new file mode 100644 index 00000000..845d74f6 --- /dev/null +++ b/emu/NetBSD/segflush-power.c @@ -0,0 +1,12 @@ +#include <sys/types.h> +#include <machine/cpu.h> + +#include "dat.h" + + +int +segflush(void *a, ulong n) +{ + __syncicache(a, n); + return 0; +} |
