aboutsummaryrefslogtreecommitdiff
path: root/emit.c
diff options
context:
space:
mode:
authorQuentin Carbonneaux <[email protected]>2024-04-12 11:32:36 +0200
committerQuentin Carbonneaux <[email protected]>2024-04-12 11:33:58 +0200
commit8ded7a56a2d7f1922b4f58a953f9ac37aa8be737 (patch)
tree863aa56ca7b0b35cf33539ae82960db75c27fe20 /emit.c
parent4a809d69b5647aabc8f6a9e22e0bc889f9c779ed (diff)
add common linkage for data
Diffstat (limited to 'emit.c')
-rw-r--r--emit.c14
1 files changed, 13 insertions, 1 deletions
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)