1
0
mirror of https://github.com/golang/go synced 2024-10-03 17:21:21 -06:00

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
This commit is contained in:
Yuval Pavel Zholkover 2010-12-06 16:38:28 -05:00 committed by Russ Cox
parent 4468e5b376
commit 8221eb9103
7 changed files with 43 additions and 11 deletions

View File

@ -386,7 +386,6 @@ asmb(void)
break; break;
case 2: case 2:
seek(cout, HEADR+segtext.filelen+segdata.filelen, 0); seek(cout, HEADR+segtext.filelen+segdata.filelen, 0);
symo = HEADR+segtext.filelen+segdata.filelen;
break; break;
case 3: case 3:
case 4: case 4:

View File

@ -192,7 +192,7 @@ main(int argc, char *argv[])
if(INITDAT == -1) if(INITDAT == -1)
INITDAT = 0; INITDAT = 0;
if(INITRND == -1) if(INITRND == -1)
INITRND = 4096; INITRND = 1;
break; break;
case 3: /* MS-DOS .COM */ case 3: /* MS-DOS .COM */
HEADR = 0; HEADR = 0;

View File

@ -739,6 +739,10 @@ address(void)
segdata.fileoff = va - segtext.vaddr + segtext.fileoff; segdata.fileoff = va - segtext.vaddr + segtext.fileoff;
if(thechar == '8' && HEADTYPE == 10) // Windows PE if(thechar == '8' && HEADTYPE == 10) // Windows PE
segdata.fileoff = segtext.fileoff + rnd(segtext.len, PEFILEALIGN); 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) { for(s=segdata.sect; s != nil; s=s->next) {
s->vaddr = va; s->vaddr = va;
va += s->len; va += s->len;

View File

@ -8,3 +8,9 @@ void
runtime·gettime(int64*, int32*) runtime·gettime(int64*, int32*)
{ {
} }
String
runtime·signame(int32)
{
return runtime·emptystring;
}

View File

@ -20,7 +20,7 @@ runtime·SysAlloc(uintptr ask)
// Plan 9 sbrk from /sys/src/libc/9sys/sbrk.c // Plan 9 sbrk from /sys/src/libc/9sys/sbrk.c
bl = ((uintptr)bloc + Round) & ~Round; bl = ((uintptr)bloc + Round) & ~Round;
if(brk_((void*)(bl + ask)) < 0) if(runtime·brk_((void*)(bl + ask)) < 0)
return (void*)-1; return (void*)-1;
bloc = (byte*)bl + ask; bloc = (byte*)bl + ask;
return (void*)bl; return (void*)bl;

View File

@ -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
}

View File

@ -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 m->tls[0] = m->id; // so 386 asm can find it
if(0){ if(0){
runtime·printf("newosproc stk=%p m=%p g=%p fn=%p rfork=%p id=%d/%d ostk=%p\n", 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"); runtime·throw("newosproc: rfork failed");
} }
@ -63,10 +63,10 @@ runtime·lock(Lock *l)
runtime·throw("lock count"); runtime·throw("lock count");
m->locks++; m->locks++;
if(xadd(&l->key, 1) == 1) if(runtime·xadd(&l->key, 1) == 1)
return; // changed from 0 -> 1; we hold lock return; // changed from 0 -> 1; we hold lock
// otherwise wait in kernel // otherwise wait in kernel
while(plan9_semacquire(&l->sema, 1) < 0) { while(runtime·plan9_semacquire(&l->sema, 1) < 0) {
/* interrupted; try again */ /* interrupted; try again */
} }
} }
@ -78,7 +78,7 @@ runtime·unlock(Lock *l)
if(m->locks < 0) if(m->locks < 0)
runtime·throw("lock count"); runtime·throw("lock count");
if(xadd(&l->key, -1) == 0) if(runtime·xadd(&l->key, -1) == 0)
return; // changed from 1 -> 0: no contention return; // changed from 1 -> 0: no contention
runtime·plan9_semrelease(&l->sema, 1); runtime·plan9_semrelease(&l->sema, 1);
@ -98,8 +98,8 @@ runtime·destroylock(Lock *l)
void void
runtime·usemacquire(Usema *s) runtime·usemacquire(Usema *s)
{ {
if((int32)xadd(&s->u, -1) < 0) if((int32)runtime·xadd(&s->u, -1) < 0)
while(plan9_semacquire(&s->k, 1) < 0) { while(runtime·plan9_semacquire(&s->k, 1) < 0) {
/* interrupted; try again */ /* interrupted; try again */
} }
} }
@ -107,7 +107,7 @@ runtime·usemacquire(Usema *s)
void void
runtime·usemrelease(Usema *s) 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); runtime·plan9_semrelease(&s->k, 1);
} }