diff options
| author | Russ Cox <rsc@golang.org> | 2010-09-12 00:17:44 -0400 |
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2010-09-12 00:17:44 -0400 |
| commit | 698fb4f192b92cee97c397672d4041108b33cc82 (patch) | |
| tree | 09e83504b6fa447356e343e242a4903bd69e1dbf /src/cmd/8l/obj.c | |
| parent | be443ee8bc64e93bc56d760f3e28f4318c00a8bd (diff) | |
| download | go-698fb4f192b92cee97c397672d4041108b33cc82.tar.xz | |
6g, 6l, 8g, 8l: move read-only data to text segment
Changing 5g and 5l too, but it doesn't work yet.
R=ken2
CC=golang-dev
https://golang.org/cl/2136047
Diffstat (limited to 'src/cmd/8l/obj.c')
| -rw-r--r-- | src/cmd/8l/obj.c | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/src/cmd/8l/obj.c b/src/cmd/8l/obj.c index 241b4d6b7f..006189444b 100644 --- a/src/cmd/8l/obj.c +++ b/src/cmd/8l/obj.c @@ -432,7 +432,7 @@ zsym(char *pn, Biobuf *f, Sym *h[]) void zaddr(char *pn, Biobuf *f, Adr *a, Sym *h[]) { - int o, t; + int t; int32 l; Sym *s; Auto *u; @@ -652,18 +652,20 @@ loop: s = p->from.sym; if(s->type == 0 || s->type == SXREF) { s->type = SBSS; - s->value = 0; + s->size = 0; } - if(s->type != SBSS) { + if(s->type != SBSS && !s->dupok) { diag("%s: redefinition: %s in %s", pn, s->name, TNAME); s->type = SBSS; - s->value = 0; + s->size = 0; } - if(p->to.offset > s->value) - s->value = p->to.offset; + if(p->to.offset > s->size) + s->size = p->to.offset; if(p->from.scale & DUPOK) s->dupok = 1; + if(p->from.scale & RODATA) + s->type = SRODATA; goto loop; case ADYNT: @@ -788,7 +790,7 @@ loop: s = lookup(literal, 0); if(s->type == 0) { s->type = SBSS; - s->value = 4; + s->size = 4; t = prg(); t->as = ADATA; t->line = p->line; @@ -827,7 +829,7 @@ loop: s = lookup(literal, 0); if(s->type == 0) { s->type = SBSS; - s->value = 8; + s->size = 8; t = prg(); t->as = ADATA; t->line = p->line; @@ -955,7 +957,7 @@ doprof1(void) q->to.offset = n; s->type = SBSS; - s->value = n*4; + s->size = n*4; } void |
