summaryrefslogtreecommitdiff
path: root/src/cmd/6l/obj.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/6l/obj.c')
-rw-r--r--src/cmd/6l/obj.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/cmd/6l/obj.c b/src/cmd/6l/obj.c
index 8c001e748..bc7413fe1 100644
--- a/src/cmd/6l/obj.c
+++ b/src/cmd/6l/obj.c
@@ -972,6 +972,8 @@ loop:
}
if(p->to.offset > s->value)
s->value = p->to.offset;
+ if(p->from.scale & DUPOK)
+ s->dupok = 1;
goto loop;
case ADYNT:
@@ -1017,6 +1019,12 @@ loop:
case ADATA:
data:
+ // Assume that AGLOBL comes after ADATA.
+ // If we've seen an AGLOBL that said this sym was DUPOK,
+ // ignore any more ADATA we see, which must be
+ // redefinitions.
+ if(p->from.sym != S && p->from.sym->dupok)
+ goto loop;
if(edatap == P)
datap = p;
else