From 8ded7a56a2d7f1922b4f58a953f9ac37aa8be737 Mon Sep 17 00:00:00 2001 From: Quentin Carbonneaux Date: Fri, 12 Apr 2024 11:32:36 +0200 Subject: add common linkage for data --- emit.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'emit.c') diff --git a/emit.c b/emit.c index 490628e..82eba9e 100644 --- a/emit.c +++ b/emit.c @@ -75,7 +75,17 @@ emitdat(Dat *d, FILE *f) zero = 0; break; case DEnd: - if (zero != -1) { + if (d->lnk->common) { + if (zero == -1) + die("invalid common data definition"); + p = d->name[0] == '"' ? "" : T.assym; + fprintf(f, ".comm %s%s,%"PRId64, + p, d->name, zero); + if (d->lnk->align) + fprintf(f, ",%d", d->lnk->align); + fputc('\n', f); + } + else if (zero != -1) { emitlnk(d->name, d->lnk, SecBss, f); fprintf(f, "\t.fill %"PRId64",1,0\n", zero); } @@ -87,6 +97,8 @@ emitdat(Dat *d, FILE *f) fprintf(f, "\t.fill %"PRId64",1,0\n", d->u.num); break; default: + if (d->lnk->common) + die("unsupported common data item"); if (zero != -1) { emitlnk(d->name, d->lnk, SecData, f); if (zero > 0) -- cgit v1.2.3