summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES3
-rw-r--r--emu/port/dat.h3
-rw-r--r--emu/port/devprog.c8
-rw-r--r--emu/port/dis.c2
-rw-r--r--include/interp.h10
-rw-r--r--include/version.h2
-rw-r--r--os/port/devprog.c8
-rw-r--r--os/port/portdat.h1
8 files changed, 20 insertions, 17 deletions
diff --git a/CHANGES b/CHANGES
index b63e9167..9c313edb 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+20110209
+ split emu.h from lib9.h for all platforms
+ kproc in emu is now a void type as in os
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/port/dat.h b/emu/port/dat.h
index b245b61c..a0881050 100644
--- a/emu/port/dat.h
+++ b/emu/port/dat.h
@@ -37,6 +37,8 @@ typedef struct Walkqid Walkqid;
#undef NAMELEN
#undef ERRLEN
+#include "emu.h"
+
#pragma incomplete Queue
#pragma incomplete Mntrpc
@@ -269,7 +271,6 @@ struct Pgrp
QLock nsh;
Mhead* mnthash[MNTHASH];
int progmode;
- int privatemem; /* deny access to /prog by debuggers */
Chan* dot;
Chan* slash;
int nodevs;
diff --git a/emu/port/devprog.c b/emu/port/devprog.c
index 8ee6a75b..7eeb5d51 100644
--- a/emu/port/devprog.c
+++ b/emu/port/devprog.c
@@ -293,14 +293,14 @@ progopen(Chan *c, int omode)
error(Enomem);
break;
case Qheap:
- if(SECURE || o->pgrp->privatemem || omode != ORDWR)
+ if(SECURE || p->group->flags&Pprivatemem || omode != ORDWR)
error(Eperm);
c->aux = malloc(sizeof(Heapqry));
if(c->aux == nil)
error(Enomem);
break;
case Qdbgctl:
- if(SECURE || o->pgrp->privatemem || omode != ORDWR)
+ if(SECURE || p->group->flags&Pprivatemem || omode != ORDWR)
error(Eperm);
ctl = malloc(sizeof(Progctl));
if(ctl == nil)
@@ -1026,7 +1026,6 @@ progwrite(Chan *c, void *va, long n, vlong offset)
int i, pc;
Cmdbuf *cb;
Cmdtab *ct;
- Osenv *o;
USED(offset);
USED(va);
@@ -1072,8 +1071,7 @@ progwrite(Chan *c, void *va, long n, vlong offset)
error(Ebadctl);
break;
case CMprivate:
- o = p->osenv;
- o->pgrp->privatemem = 1;
+ p->group->flags |= Pprivatemem;
break;
}
poperror();
diff --git a/emu/port/dis.c b/emu/port/dis.c
index 881bd81f..8c474ff6 100644
--- a/emu/port/dis.c
+++ b/emu/port/dis.c
@@ -459,6 +459,8 @@ newgrp(Prog *p)
p->flags &= ~(Ppropagate|Pnotifyleader);
g->id = p->pid;
g->flags = 0;
+ if(p->group != nil)
+ g->flags |= p->group->flags&Pprivatemem;
g->child = nil;
pg = delgrp(p);
g->head = g->tail = p;
diff --git a/include/interp.h b/include/interp.h
index abbe764b..5bfd4e79 100644
--- a/include/interp.h
+++ b/include/interp.h
@@ -34,11 +34,13 @@ enum
enum
{
- Ppropagate = 1<<0,
- Pnotifyleader = 1<<1,
- Prestrict = 1<<2,
+ /* Prog and Progs flags */
+ Ppropagate = 1<<0, /* propagate exceptions within group */
+ Pnotifyleader = 1<<1, /* send exceptions to group leader */
+ Prestrict = 1<<2, /* enforce memory limits */
Prestricted = 1<<3,
- Pkilled = 1<<4
+ Pkilled = 1<<4,
+ Pprivatemem = 1<<5 /* keep heap and stack private */
};
typedef struct Alt Alt;
diff --git a/include/version.h b/include/version.h
index 2092c618..6c4a0453 100644
--- a/include/version.h
+++ b/include/version.h
@@ -1 +1 @@
-#define VERSION "Fourth Edition (20110208)"
+#define VERSION "Fourth Edition (20110224)"
diff --git a/os/port/devprog.c b/os/port/devprog.c
index c6c97efc..4289841d 100644
--- a/os/port/devprog.c
+++ b/os/port/devprog.c
@@ -295,14 +295,14 @@ progopen(Chan *c, int omode)
error(Enomem);
break;
case Qheap:
- if(SECURE || o->pgrp->privatemem || omode != ORDWR)
+ if(SECURE || p->group->flags&Pprivatemem || omode != ORDWR)
error(Eperm);
c->aux = malloc(sizeof(Heapqry));
if(c->aux == nil)
error(Enomem);
break;
case Qdbgctl:
- if(SECURE || o->pgrp->privatemem || omode != ORDWR)
+ if(SECURE || p->group->flags&Pprivatemem || omode != ORDWR)
error(Eperm);
ctl = malloc(sizeof(Progctl));
if(ctl == nil)
@@ -1028,7 +1028,6 @@ progwrite(Chan *c, void *va, long n, vlong offset)
int i, pc;
Cmdbuf *cb;
Cmdtab *ct;
- Osenv *o;
USED(offset);
USED(va);
@@ -1074,8 +1073,7 @@ progwrite(Chan *c, void *va, long n, vlong offset)
error(Ebadctl);
break;
case CMprivate:
- o = p->osenv;
- o->pgrp->privatemem = 1;
+ p->group->flags |= Pprivatemem;
break;
}
poperror();
diff --git a/os/port/portdat.h b/os/port/portdat.h
index 81e92012..e20ba770 100644
--- a/os/port/portdat.h
+++ b/os/port/portdat.h
@@ -340,7 +340,6 @@ struct Pgrp
QLock nsh;
Mhead* mnthash[MNTHASH];
int progmode;
- int privatemem; /* deny access to /prog by debuggers */
Chan* dot;
Chan* slash;
int nodevs;