aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuval Pavel Zholkover <paulzhol@gmail.com>2010-12-06 16:38:28 -0500
committerRuss Cox <rsc@golang.org>2010-12-06 16:38:28 -0500
commit8221eb910383e27141a4e0482588289e50c574ab (patch)
treed529f172dd5a41c0e2a796f1336fcd621e0877f3
parent4468e5b3761b8d38104cec857fc7ec20cdc211ad (diff)
downloadgo-8221eb910383e27141a4e0482588289e50c574ab.tar.gz
go-8221eb910383e27141a4e0482588289e50c574ab.zip
8l, runtime: fix Plan 9 386 build.
8l was broken by commit 7ac0d2eed9, it caused .data to be page aligned in the file - which is not how Plan 9 expects things to be. Also .rodata was layed out in a similar fashion. Not sure when signame was introduced, but added a stub. Removed the symo assignment in asm.c as it is not currently used. Fix runtime breakage after commit 629c065d36 which prefixes all external symbols with runtime·. R=rsc CC=golang-dev https://golang.org/cl/2674041
-rw-r--r--src/cmd/8l/asm.c1
-rw-r--r--src/cmd/8l/obj.c2
-rw-r--r--src/cmd/ld/data.c4
-rw-r--r--src/pkg/runtime/plan9/386/signal.c6
-rw-r--r--src/pkg/runtime/plan9/mem.c2
-rw-r--r--src/pkg/runtime/plan9/runtime_defs.go23
-rw-r--r--src/pkg/runtime/plan9/thread.c16
7 files changed, 43 insertions, 11 deletions
diff --git a/src/cmd/8l/asm.c b/src/cmd/8l/asm.c
index fd2984955e..3900dd2a1f 100644
--- a/src/cmd/8l/asm.c
+++ b/src/cmd/8l/asm.c
@@ -386,7 +386,6 @@ asmb(void)
break;
case 2:
seek(cout, HEADR+segtext.filelen+segdata.filelen, 0);
- symo = HEADR+segtext.filelen+segdata.filelen;
break;
case 3:
case 4:
diff --git a/src/cmd/8l/obj.c b/src/cmd/8l/obj.c
index 73a01311f5..1c3407206d 100644
--- a/src/cmd/8l/obj.c
+++ b/src/cmd/8l/obj.c
@@ -192,7 +192,7 @@ main(int argc, char *argv[])
if(INITDAT == -1)
INITDAT = 0;
if(INITRND == -1)
- INITRND = 4096;
+ INITRND = 1;
break;
case 3: /* MS-DOS .COM */
HEADR = 0;
diff --git a/src/cmd/ld/data.c b/src/cmd/ld/data.c
index ddcbcaa849..f2081178c0 100644
--- a/src/cmd/ld/data.c
+++ b/src/cmd/ld/data.c
@@ -739,6 +739,10 @@ address(void)
segdata.fileoff = va - segtext.vaddr + segtext.fileoff;
if(thechar == '8' && HEADTYPE == 10) // Windows PE
segdata.fileoff = segtext.fileoff + rnd(segtext.len, PEFILEALIGN);
+ if(thechar == '8' && HEADTYPE == 2) { // Plan 9
+ segdata.vaddr = va = rnd(va, 4096);
+ segdata.fileoff = segtext.fileoff + segtext.filelen;
+ }
for(s=segdata.sect; s != nil; s=s->next) {
s->vaddr = va;
va += s->len;
diff --git a/src/pkg/runtime/plan9/386/signal.c b/src/pkg/runtime/plan9/386/signal.c
index 95fb2ca225..6bde098466 100644
--- a/src/pkg/runtime/plan9/386/signal.c
+++ b/src/pkg/runtime/plan9/386/signal.c
@@ -8,3 +8,9 @@ void
runtime·gettime(int64*, int32*)
{
}
+
+String
+runtime·signame(int32)
+{
+ return runtime·emptystring;
+}
diff --git a/src/pkg/runtime/plan9/mem.c b/src/pkg/runtime/plan9/mem.c
index 7e36f9534c..651e6728ed 100644
--- a/src/pkg/runtime/plan9/mem.c
+++ b/src/pkg/runtime/plan9/mem.c
@@ -20,7 +20,7 @@ runtime·SysAlloc(uintptr ask)
// Plan 9 sbrk from /sys/src/libc/9sys/sbrk.c
bl = ((uintptr)bloc + Round) & ~Round;
- if(brk_((void*)(bl + ask)) < 0)
+ if(runtime·brk_((void*)(bl + ask)) < 0)
return (void*)-1;
bloc = (byte*)bl + ask;
return (void*)bl;
diff --git a/src/pkg/runtime/plan9/runtime_defs.go b/src/pkg/runtime/plan9/runtime_defs.go
new file mode 100644
index 0000000000..cf0b414a95
--- /dev/null
+++ b/src/pkg/runtime/plan9/runtime_defs.go
@@ -0,0 +1,23 @@
+// Copyright 2010 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Go definitions of internal structures. Master is runtime.h
+
+package runtime
+
+type lock struct {
+ key uint32
+ sema uint32
+}
+
+type usema struct {
+ u uint32
+ k uint32
+}
+
+
+type note struct {
+ wakeup int32
+ sema usema
+}
diff --git a/src/pkg/runtime/plan9/thread.c b/src/pkg/runtime/plan9/thread.c
index 81e3bffbbe..f1bd1ffbe2 100644
--- a/src/pkg/runtime/plan9/thread.c
+++ b/src/pkg/runtime/plan9/thread.c
@@ -36,10 +36,10 @@ runtime·newosproc(M *m, G *g, void *stk, void (*fn)(void))
m->tls[0] = m->id; // so 386 asm can find it
if(0){
runtime·printf("newosproc stk=%p m=%p g=%p fn=%p rfork=%p id=%d/%d ostk=%p\n",
- stk, m, g, fn, rfork, m->id, m->tls[0], &m);
+ stk, m, g, fn, runtime·rfork, m->id, m->tls[0], &m);
}
- if (rfork(RFPROC | RFMEM, stk, m, g, fn) < 0 )
+ if (runtime·rfork(RFPROC | RFMEM, stk, m, g, fn) < 0 )
runtime·throw("newosproc: rfork failed");
}
@@ -63,10 +63,10 @@ runtime·lock(Lock *l)
runtime·throw("lock count");
m->locks++;
- if(xadd(&l->key, 1) == 1)
+ if(runtime·xadd(&l->key, 1) == 1)
return; // changed from 0 -> 1; we hold lock
// otherwise wait in kernel
- while(plan9_semacquire(&l->sema, 1) < 0) {
+ while(runtime·plan9_semacquire(&l->sema, 1) < 0) {
/* interrupted; try again */
}
}
@@ -78,7 +78,7 @@ runtime·unlock(Lock *l)
if(m->locks < 0)
runtime·throw("lock count");
- if(xadd(&l->key, -1) == 0)
+ if(runtime·xadd(&l->key, -1) == 0)
return; // changed from 1 -> 0: no contention
runtime·plan9_semrelease(&l->sema, 1);
@@ -98,8 +98,8 @@ runtime·destroylock(Lock *l)
void
runtime·usemacquire(Usema *s)
{
- if((int32)xadd(&s->u, -1) < 0)
- while(plan9_semacquire(&s->k, 1) < 0) {
+ if((int32)runtime·xadd(&s->u, -1) < 0)
+ while(runtime·plan9_semacquire(&s->k, 1) < 0) {
/* interrupted; try again */
}
}
@@ -107,7 +107,7 @@ runtime·usemacquire(Usema *s)
void
runtime·usemrelease(Usema *s)
{
- if((int32)xadd(&s->u, 1) <= 0)
+ if((int32)runtime·xadd(&s->u, 1) <= 0)
runtime·plan9_semrelease(&s->k, 1);
}