summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/all-nacl.bash4
-rw-r--r--src/cmd/8l/l.h1
-rw-r--r--src/cmd/8l/span.c13
-rw-r--r--src/cmd/ld/pe.c2
-rw-r--r--src/pkg/runtime/nacl/mem.c28
5 files changed, 43 insertions, 5 deletions
diff --git a/src/all-nacl.bash b/src/all-nacl.bash
index dce9e6254..23107d25e 100755
--- a/src/all-nacl.bash
+++ b/src/all-nacl.bash
@@ -18,18 +18,22 @@ xcd() {
}
(xcd pkg/exp/nacl/srpc
+make clean
make install
) || exit $?
(xcd pkg/exp/nacl/av
+make clean
make install
) || exit $?
(xcd pkg/exp/4s
+make clean
make
) || exit $?
(xcd pkg/exp/spacewar
+make clean
make
) || exit $?
diff --git a/src/cmd/8l/l.h b/src/cmd/8l/l.h
index adc3f4dee..dd559e419 100644
--- a/src/cmd/8l/l.h
+++ b/src/cmd/8l/l.h
@@ -102,6 +102,7 @@ struct Prog
char tt;
uchar mark; /* work on these */
uchar back;
+ uchar bigjmp;
};
struct Auto
diff --git a/src/cmd/8l/span.c b/src/cmd/8l/span.c
index d46f86ff6..f649777ec 100644
--- a/src/cmd/8l/span.c
+++ b/src/cmd/8l/span.c
@@ -73,8 +73,7 @@ start:
if(debug['v'])
Bprint(&bso, "%5.2f span %d\n", cputime(), n);
Bflush(&bso);
- if(n > 500) {
- // TODO(rsc): figure out why nacl takes so long to converge.
+ if(n > 50) {
print("span must be looping - %d\n", textsize);
errorexit();
}
@@ -1183,10 +1182,13 @@ found:
q = p->pcond;
if(q) {
v = q->pc - p->pc - 2;
- if(v >= -128 && v <= 127) {
+ if(q->pc == 0)
+ v = 0;
+ if(v >= -128 && v <= 127 && !p->bigjmp) {
*andptr++ = op;
*andptr++ = v;
} else {
+ p->bigjmp = 1;
v -= 6-2;
*andptr++ = 0x0f;
*andptr++ = o->op[z+1];
@@ -1230,10 +1232,13 @@ found:
q = p->pcond;
if(q) {
v = q->pc - p->pc - 2;
- if(v >= -128 && v <= 127) {
+ if(q->pc == 0)
+ v = 0;
+ if(v >= -128 && v <= 127 && !p->bigjmp) {
*andptr++ = op;
*andptr++ = v;
} else {
+ p->bigjmp = 1;
v -= 5-2;
*andptr++ = o->op[z+1];
*andptr++ = v;
diff --git a/src/cmd/ld/pe.c b/src/cmd/ld/pe.c
index c225d0cd4..3a3099d04 100644
--- a/src/cmd/ld/pe.c
+++ b/src/cmd/ld/pe.c
@@ -31,7 +31,7 @@ new_section(char *name, int size, int noraw)
errorexit();
}
h = &sh[nsect++];
- strncpy(h->Name, name, sizeof(h->Name));
+ strncpy((char*)h->Name, name, sizeof(h->Name));
h->VirtualSize = size;
if(!sect_virt_begin)
sect_virt_begin = 0x1000;
diff --git a/src/pkg/runtime/nacl/mem.c b/src/pkg/runtime/nacl/mem.c
new file mode 100644
index 000000000..52e351a7d
--- /dev/null
+++ b/src/pkg/runtime/nacl/mem.c
@@ -0,0 +1,28 @@
+#include "runtime.h"
+#include "defs.h"
+#include "os.h"
+#include "malloc.h"
+
+void*
+SysAlloc(uintptr n)
+{
+ mstats.sys += n;
+ return runtime_mmap(nil, n, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_ANON|MAP_PRIVATE, -1, 0);
+}
+
+void
+SysUnused(void *v, uintptr n)
+{
+ USED(v);
+ USED(n);
+ // TODO(rsc): call madvise MADV_DONTNEED
+}
+
+void
+SysFree(void *v, uintptr n)
+{
+ USED(v);
+ USED(n);
+ // TODO(rsc): call munmap
+}
+