aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2010-02-01 15:20:19 -0800
committerRuss Cox <rsc@golang.org>2010-02-01 15:20:19 -0800
commit1f11ece67f8b4d329dcf98ca0b214e4da515e446 (patch)
treef9d56560fd3df3c2f81ff41ecb5b697d5cf31442 /src
parent0141fd3b654c5cc432d69853636ab1505cd47920 (diff)
downloadgo-1f11ece67f8b4d329dcf98ca0b214e4da515e446.tar.xz
nacl: fix build, finally fixed 8l convergence bug
R=r CC=golang-dev https://golang.org/cl/199042
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 dce9e62545..23107d25e3 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 adc3f4dee1..dd559e4195 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 d46f86ff68..f649777ec3 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 c225d0cd4e..3a3099d044 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 0000000000..52e351a7d7
--- /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
+}
+