summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES4
-rw-r--r--emu/DragonFly/os.c7
-rw-r--r--emu/FreeBSD/os.c7
-rw-r--r--emu/Hp/os.c12
-rw-r--r--emu/Irix/os.c6
-rw-r--r--emu/Linux/os.c4
-rw-r--r--emu/MacOSX/os.c11
-rw-r--r--emu/NetBSD/os.c10
-rw-r--r--emu/Nt/ie-os.c16
-rw-r--r--emu/Nt/os.c23
-rw-r--r--emu/OpenBSD/os.c7
-rw-r--r--emu/Plan9/os.c8
-rw-r--r--emu/Plan9/win.c6
-rw-r--r--emu/Solaris/os.c3
-rw-r--r--emu/Unixware/os.c3
-rw-r--r--emu/port/fns.h3
16 files changed, 48 insertions, 82 deletions
diff --git a/CHANGES b/CHANGES
index 36964c01..ea820309 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,5 +1,9 @@
+20110225
+ split emu.h from lib9.h for all platforms
+ kproc in emu is now a void type as in os
20110224
move private mem flag to Progs [issue 240, mechiel]
+20110224
20110208
emu/Linux/os.c - use -lrt's semaphores instead of signals
emu/Linux/mkfile - add -lrt to library list, and push out separation of X11LIBS from SYSLIBS for emu-g done ages ago
diff --git a/emu/DragonFly/os.c b/emu/DragonFly/os.c
index 269eed08..c6b5a50c 100644
--- a/emu/DragonFly/os.c
+++ b/emu/DragonFly/os.c
@@ -189,7 +189,7 @@ tramp(void *arg)
_exit(0);
}
-int
+void
kproc(char *name, void (*func)(void*), void *arg, int flags)
{
Proc *p;
@@ -245,10 +245,7 @@ kproc(char *name, void (*func)(void*), void *arg, int flags)
p->kstack = stackalloc(p, &tos);
pid = rfork_thread(RFPROC|RFMEM|RFNOWAIT, tos, tramp, p);
if(pid < 0)
- panic("ourfork");
-
- return pid;
-
+ panic("rfork");
}
void
diff --git a/emu/FreeBSD/os.c b/emu/FreeBSD/os.c
index fd09e968..bc68265b 100644
--- a/emu/FreeBSD/os.c
+++ b/emu/FreeBSD/os.c
@@ -190,7 +190,7 @@ tramp(void *arg)
_exit(0);
}
-int
+void
kproc(char *name, void (*func)(void*), void *arg, int flags)
{
Proc *p;
@@ -246,10 +246,7 @@ kproc(char *name, void (*func)(void*), void *arg, int flags)
p->kstack = stackalloc(p, &tos);
pid = rfork_thread(RFPROC|RFMEM|RFNOWAIT, tos, tramp, p);
if(pid < 0)
- panic("ourfork");
-
- return pid;
-
+ panic("rfork");
}
void
diff --git a/emu/Hp/os.c b/emu/Hp/os.c
index a371ac50..b51b4a8c 100644
--- a/emu/Hp/os.c
+++ b/emu/Hp/os.c
@@ -189,7 +189,7 @@ tramp(void *v)
pthread_t active_threads[BUNCHES]; /* this should be more than enuf */
-int
+void
kproc(char *name, void (*func)(void*), void *arg, int flags)
{
pthread_t thread;
@@ -221,8 +221,7 @@ kproc(char *name, void (*func)(void*), void *arg, int flags)
p->env->uid = up->env->uid;
p->env->gid = up->env->gid;
- kstrdup(&p->env->user, up->env->user);
-;
+ kstrdup(&p->env->user, up->env->user);
strcpy(p->text, name);
@@ -243,12 +242,8 @@ kproc(char *name, void (*func)(void*), void *arg, int flags)
if((pthread_attr_create(&attr))== -1)
panic("pthread_attr_create failed");
- errno=0;
pthread_attr_setsched(&attr,SCHED_OTHER);
- if(errno)
- panic("pthread_attr_setsched failed");
-
- if(pthread_create(&thread, attr, tramp, p))
+ if(pthread_create(&thread, &attr, tramp, p))
panic("thr_create failed\n");
if(sigaction(SIGBUS, nil, &oldact))
panic("sigaction failed");
@@ -258,7 +253,6 @@ kproc(char *name, void (*func)(void*), void *arg, int flags)
if((id=cma_thread_get_unique(&thread))>=BUNCHES)
panic("id too big");
active_threads[id]=thread;
- return id;
}
void
diff --git a/emu/Irix/os.c b/emu/Irix/os.c
index 42bcf99b..8a8c3cbe 100644
--- a/emu/Irix/os.c
+++ b/emu/Irix/os.c
@@ -83,7 +83,7 @@ tramp(void *p, size_t stacksz)
pexit("", 0);
}
-int
+void
kproc(char *name, void (*func)(void*), void *arg, int flags)
{
Proc *p;
@@ -147,12 +147,10 @@ kproc(char *name, void (*func)(void*), void *arg, int flags)
pid = sprocsp(tramp, PR_SALL, p, 0, KSTACK);
- if(-1 < pid)
+ if(pid >= 0)
sproctbl[i] = pid;
else
sproctbl[i] = -1;
-
- return pid;
}
void
diff --git a/emu/Linux/os.c b/emu/Linux/os.c
index df4bb997..7a3daaaa 100644
--- a/emu/Linux/os.c
+++ b/emu/Linux/os.c
@@ -104,7 +104,7 @@ tramp(void *arg)
return 0; /* not reached */
}
-int
+void
kproc(char *name, void (*func)(void*), void *arg, int flags)
{
Proc *p;
@@ -171,8 +171,6 @@ kproc(char *name, void (*func)(void*), void *arg, int flags)
if(clone(tramp, tos, CLONE_PTRACE|CLONE_VM|CLONE_FS|CLONE_FILES|SIGCHLD, p, nil, nil, nil) <= 0)
panic("kproc: clone failed");
-
- return 0;
}
static void
diff --git a/emu/MacOSX/os.c b/emu/MacOSX/os.c
index 0b161e50..ddb7559c 100644
--- a/emu/MacOSX/os.c
+++ b/emu/MacOSX/os.c
@@ -233,7 +233,7 @@ tramp(void *arg)
return NULL;
}
-int
+void
kproc(char *name, void (*func)(void*), void *arg, int flags)
{
pthread_t thread;
@@ -291,24 +291,16 @@ kproc(char *name, void (*func)(void*), void *arg, int flags)
procs.tail = p;
unlock(&procs.l);
- up->kid = p;
-
if(pthread_attr_init(&attr) == -1)
panic("pthread_attr_init failed");
- errno = 0;
pthread_attr_setschedpolicy(&attr, SCHED_OTHER);
- if(errno)
- panic("pthread_attr_setschedpolicy failed");
-
pthread_attr_setinheritsched(&attr, PTHREAD_INHERIT_SCHED);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
if(pthread_create(&thread, &attr, tramp, p))
panic("thr_create failed\n");
pthread_attr_destroy(&attr);
-
- return (int)thread;
}
int
@@ -330,7 +322,6 @@ segflush(void *va, ulong len)
void
oshostintr(Proc *p)
{
-fprint(2, "oshostintr %p\n", p);
pthread_kill((pthread_t)p->sigid, SIGUSR1);
}
diff --git a/emu/NetBSD/os.c b/emu/NetBSD/os.c
index 68bb0a3c..11ef0647 100644
--- a/emu/NetBSD/os.c
+++ b/emu/NetBSD/os.c
@@ -80,7 +80,7 @@ tramp(void *arg)
return 0;
}
-int
+void
kproc(char *name, void (*func)(void*), void *arg, int flags)
{
int pid;
@@ -96,7 +96,6 @@ kproc(char *name, void (*func)(void*), void *arg, int flags)
if(p == nil) {
print("kproc(%s): no memory", name);
panic("kproc: no memory");
- return -1;
}
if(flags & KPDUPPG) {
@@ -146,8 +145,6 @@ kproc(char *name, void (*func)(void*), void *arg, int flags)
fprint(2, "emu: clone failed: %s\n", strerror(errno));
panic("kproc: clone failed");
}
-
- return 0;
}
/*
@@ -192,9 +189,10 @@ trapSEGV(int signo)
static void
trapFPE(int signo)
{
+ char buf[64];
USED(signo);
- print("FPU status=0x%.4lux", getfsr());
- disfault(nil, "Floating exception");
+ snprint(buf, sizeof(buf), "sys: fp: exception status=%.4lux", getfsr());
+ disfault(nil, buf);
}
static void
diff --git a/emu/Nt/ie-os.c b/emu/Nt/ie-os.c
index ddf09b57..ee38f2ac 100644
--- a/emu/Nt/ie-os.c
+++ b/emu/Nt/ie-os.c
@@ -127,7 +127,7 @@ tramp(LPVOID p)
return 0;
}
-int
+void
kproc(char *name, void (*func)(void*), void *arg, int flags)
{
DWORD h;
@@ -137,10 +137,8 @@ kproc(char *name, void (*func)(void*), void *arg, int flags)
Egrp *eg;
p = newproc();
- if(p == nil){
- print("out of kernel processes\n");
- return -1;
- }
+ if(p == nil)
+ panic("out of kernel processes");
if(flags & KPDUPPG) {
pg = up->env->pgrp;
@@ -178,12 +176,8 @@ kproc(char *name, void (*func)(void*), void *arg, int flags)
unlock(&procs.l);
p->pid = (int)CreateThread(0, 16384, tramp, p, 0, &h);
- if(p->pid <= 0){
- pfree(p);
- print("ran out of kernel processes\n");
- return -1;
- }
- return p->pid;
+ if(p->pid <= 0)
+ panic("ran out of kernel processes");
}
#if(_WIN32_WINNT >= 0x0400)
diff --git a/emu/Nt/os.c b/emu/Nt/os.c
index ad6943be..c489d9e0 100644
--- a/emu/Nt/os.c
+++ b/emu/Nt/os.c
@@ -116,7 +116,7 @@ tramp(LPVOID p)
return 0;
}
-int
+void
kproc(char *name, void (*func)(void*), void *arg, int flags)
{
DWORD h;
@@ -126,16 +126,11 @@ kproc(char *name, void (*func)(void*), void *arg, int flags)
Egrp *eg;
p = newproc();
- if(p == nil){
- print("out of kernel processes\n");
- return -1;
- }
+ if(p == nil)
+ panic("out of kernel processes");
p->os = CreateEvent(NULL, FALSE, FALSE, NULL);
- if(p->os == NULL){
- pfree(p);
- print("can't allocate os event\n");
- return -1;
- }
+ if(p->os == NULL)
+ panic("can't allocate os event");
if(flags & KPDUPPG) {
pg = up->env->pgrp;
@@ -173,12 +168,8 @@ kproc(char *name, void (*func)(void*), void *arg, int flags)
unlock(&procs.l);
p->pid = (int)CreateThread(0, 16384, tramp, p, 0, &h);
- if(p->pid <= 0){
- pfree(p);
- print("ran out of kernel processes\n");
- return -1;
- }
- return p->pid;
+ if(p->pid <= 0)
+ panic("ran out of kernel processes");
}
#if(_WIN32_WINNT >= 0x0400)
diff --git a/emu/OpenBSD/os.c b/emu/OpenBSD/os.c
index 0715ec2a..52025839 100644
--- a/emu/OpenBSD/os.c
+++ b/emu/OpenBSD/os.c
@@ -194,7 +194,7 @@ tramp(void *arg)
_exit(0);
}
-int
+void
kproc(char *name, void (*func)(void*), void *arg, int flags)
{
Proc *p;
@@ -250,10 +250,7 @@ kproc(char *name, void (*func)(void*), void *arg, int flags)
p->kstack = stackalloc(p, &tos);
pid = rfork_thread(RFPROC|RFMEM|RFNOWAIT, tos, tramp, p);
if(pid < 0)
- panic("ourfork");
-
- return pid;
-
+ panic("rfork");
}
void
diff --git a/emu/Plan9/os.c b/emu/Plan9/os.c
index d681ec67..97b9b7e0 100644
--- a/emu/Plan9/os.c
+++ b/emu/Plan9/os.c
@@ -67,7 +67,7 @@ pexit(char *msg, int)
}
int
-kproc(char *name, void (*func)(void*), void *arg, int flags)
+kproc1(char *name, void (*func)(void*), void *arg, int flags)
{
int pid;
Proc *p;
@@ -132,6 +132,12 @@ kproc(char *name, void (*func)(void*), void *arg, int flags)
}
void
+kproc(char *name, void (*func)(void*), void *arg, int flags)
+{
+ kproc1(name, func, arg, flags);
+}
+
+void
traphandler(void *reg, char *msg)
{
int intwait;
diff --git a/emu/Plan9/win.c b/emu/Plan9/win.c
index 2f280853..e588cd79 100644
--- a/emu/Plan9/win.c
+++ b/emu/Plan9/win.c
@@ -16,6 +16,8 @@ enum
extern Memimage *screenimage;
+extern int kproc1(char*, void (*)(void*), void*, int);
+
static ulong* attachwindow(Rectangle*, ulong*, int*, int*);
static void plan9readmouse(void*);
@@ -150,8 +152,8 @@ attachscreen(Rectangle *r, ulong *chan, int *d, int *width, int *softscreen)
return nil;
}
- mousepid = kproc("readmouse", plan9readmouse, nil, 0);
- keybdpid = kproc("readkbd", plan9readkeybd, nil, 0);
+ mousepid = kproc1("readmouse", plan9readmouse, nil, 0);
+ keybdpid = kproc1("readkbd", plan9readkeybd, nil, 0);
fd = open("/dev/label", OWRITE);
if(fd >= 0){
diff --git a/emu/Solaris/os.c b/emu/Solaris/os.c
index 02862220..47ba15da 100644
--- a/emu/Solaris/os.c
+++ b/emu/Solaris/os.c
@@ -81,7 +81,7 @@ tramp(void *v)
pexit("", 0);
}
-int
+void
kproc(char *name, void (*func)(void*), void *arg, int flags)
{
thread_t thread;
@@ -139,7 +139,6 @@ kproc(char *name, void (*func)(void*), void *arg, int flags)
if(thr_create(0, 0, &tramp, p, THR_BOUND|THR_DETACHED, &thread))
panic("thr_create failed\n");
thr_yield();
- return(thread);
}
/* to get pc on trap use siginfo.si_pc field and define all trap handlers
diff --git a/emu/Unixware/os.c b/emu/Unixware/os.c
index 6493aa87..cf410c01 100644
--- a/emu/Unixware/os.c
+++ b/emu/Unixware/os.c
@@ -81,7 +81,7 @@ tramp(void *v)
pexit("", 0);
}
-int
+void
kproc(char *name, void (*func)(void*), void *arg, int flags)
{
thread_t thread;
@@ -139,7 +139,6 @@ kproc(char *name, void (*func)(void*), void *arg, int flags)
if(thr_create(0, 0, &tramp, p, THR_BOUND|THR_DETACHED, &thread))
panic("thr_create failed\n");
thr_yield();
- return(thread);
}
/* to get pc on trap use siginfo.si_pc field and define all trap handlers
diff --git a/emu/port/fns.h b/emu/port/fns.h
index 86162d2e..be825d17 100644
--- a/emu/port/fns.h
+++ b/emu/port/fns.h
@@ -88,7 +88,8 @@ int isdotdot(char*);
int iseve(void);
int kannounce(char*, char*);
int kdial(char*, char*, char*, int*);
-int kproc(char*, void (*)(void*), void*, int);
+void kproc(char*, void (*)(void*), void*, int);
+void kprocinit(Proc*);
int kfgrpclose(Fgrp*, int);
void ksetenv(char*, char*, int);
void kstrcpy(char*, char*, int);