aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/6l/obj.c
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2010-09-12 00:17:44 -0400
committerRuss Cox <rsc@golang.org>2010-09-12 00:17:44 -0400
commit698fb4f192b92cee97c397672d4041108b33cc82 (patch)
tree09e83504b6fa447356e343e242a4903bd69e1dbf /src/cmd/6l/obj.c
parentbe443ee8bc64e93bc56d760f3e28f4318c00a8bd (diff)
downloadgo-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/6l/obj.c')
-rw-r--r--src/cmd/6l/obj.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/src/cmd/6l/obj.c b/src/cmd/6l/obj.c
index adcccb55a3..da2630e630 100644
--- a/src/cmd/6l/obj.c
+++ b/src/cmd/6l/obj.c
@@ -633,18 +633,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:
@@ -791,7 +793,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;
@@ -837,7 +839,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;
@@ -967,7 +969,7 @@ doprof1(void)
q->to.offset = n;
s->type = SBSS;
- s->value = n*4;
+ s->size = n*4;
}
void