diff options
Diffstat (limited to 'src/cmd/5l/obj.c')
| -rw-r--r-- | src/cmd/5l/obj.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/src/cmd/5l/obj.c b/src/cmd/5l/obj.c index 149671943..a3f816160 100644 --- a/src/cmd/5l/obj.c +++ b/src/cmd/5l/obj.c @@ -81,7 +81,7 @@ void main(int argc, char *argv[]) { int c, i; - char *p; + char *p, *name, *val; Binit(&bso, 1, OWRITE); listinit(); @@ -92,6 +92,7 @@ main(int argc, char *argv[]) INITDAT = -1; INITRND = -1; INITENTRY = 0; + nuxiinit(); p = getenv("GOARM"); if(p != nil && strcmp(p, "5") == 0) @@ -137,9 +138,9 @@ main(int argc, char *argv[]) print("%cl version %s\n", thechar, getgoversion()); errorexit(); case 'X': - // TODO: golang.org/issue/2676 - EARGF(usage()); - EARGF(usage()); + name = EARGF(usage()); + val = EARGF(usage()); + addstrdata(name, val); break; } ARGEND @@ -240,7 +241,6 @@ main(int argc, char *argv[]) histgen = 0; pc = 0; dtype = 4; - nuxiinit(); version = 0; cbp = buf.cbuf; @@ -540,7 +540,7 @@ loop: s->type = SBSS; s->value = 0; } - if(s->type != SBSS) { + if(s->type != SBSS && s->type != SNOPTRBSS && !s->dupok) { diag("redefinition: %s\n%P", s->name, p); s->type = SBSS; s->value = 0; @@ -549,6 +549,10 @@ loop: s->size = p->to.offset; if(p->reg & DUPOK) s->dupok = 1; + if(p->reg & RODATA) + s->type = SRODATA; + else if(p->reg & NOPTR) + s->type = SNOPTRBSS; break; case ADATA: @@ -558,8 +562,8 @@ loop: // redefinitions. s = p->from.sym; if(s->dupok) { - if(debug['v']) - Bprint(&bso, "skipping %s in %s: dupok\n", s->name, pn); +// if(debug['v']) +// Bprint(&bso, "skipping %s in %s: dupok\n", s->name, pn); goto loop; } if(s->file == nil) |
