diff options
Diffstat (limited to 'src')
| -rwxr-xr-x | src/all-nacl.bash | 4 | ||||
| -rw-r--r-- | src/cmd/8l/l.h | 1 | ||||
| -rw-r--r-- | src/cmd/8l/span.c | 13 | ||||
| -rw-r--r-- | src/cmd/ld/pe.c | 2 | ||||
| -rw-r--r-- | src/pkg/runtime/nacl/mem.c | 28 |
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 +} + |
