diff options
Diffstat (limited to 'src/cmd/6l/obj.c')
-rw-r--r-- | src/cmd/6l/obj.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/cmd/6l/obj.c b/src/cmd/6l/obj.c index d258f05c9..692cab7b8 100644 --- a/src/cmd/6l/obj.c +++ b/src/cmd/6l/obj.c @@ -82,6 +82,7 @@ void main(int argc, char *argv[]) { int c; + char *name, *val; Binit(&bso, 1, OWRITE); listinit(); @@ -93,6 +94,7 @@ main(int argc, char *argv[]) INITDAT = -1; INITRND = -1; INITENTRY = 0; + nuxiinit(); ARGBEGIN { default: @@ -133,9 +135,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 @@ -253,7 +255,6 @@ main(int argc, char *argv[]) zprg.mode = 64; pcstr = "%.6llux "; - nuxiinit(); histgen = 0; pc = 0; dtype = 4; @@ -554,7 +555,7 @@ loop: s->type = SBSS; s->size = 0; } - if(s->type != SBSS && !s->dupok) { + if(s->type != SBSS && s->type != SNOPTRBSS && !s->dupok) { diag("%s: redefinition: %s in %s", pn, s->name, TNAME); s->type = SBSS; @@ -566,6 +567,8 @@ loop: s->dupok = 1; if(p->from.scale & RODATA) s->type = SRODATA; + else if(p->from.scale & NOPTR) + s->type = SNOPTRBSS; goto loop; case ADATA: |