summaryrefslogtreecommitdiff
path: root/src/cmd/5l/obj.c
diff options
context:
space:
mode:
authorKai Backman <kaib@golang.org>2009-10-08 22:16:08 -0700
committerKai Backman <kaib@golang.org>2009-10-08 22:16:08 -0700
commita9ff8658ca3de13061e9cd75c4a42f0824f9b3e0 (patch)
tree3a314f5abb1e8808819fe3a5aed7320565db27bd /src/cmd/5l/obj.c
parent40d962031ed3681065c185cd5b38fdb12dd44c2e (diff)
downloadgolang-a9ff8658ca3de13061e9cd75c4a42f0824f9b3e0.tar.gz
dupok, gcc compile fix, sync and syscall asm fix
R=rsc APPROVED=rsc DELTA=27 (18 added, 0 deleted, 9 changed) OCL=35503 CL=35505
Diffstat (limited to 'src/cmd/5l/obj.c')
-rw-r--r--src/cmd/5l/obj.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/cmd/5l/obj.c b/src/cmd/5l/obj.c
index 574d50648..45751e8c5 100644
--- a/src/cmd/5l/obj.c
+++ b/src/cmd/5l/obj.c
@@ -564,6 +564,8 @@ loop:
}
if(p->to.offset > s->value)
s->value = p->to.offset;
+ if(p->reg & DUPOK)
+ s->dupok = 1;
break;
case ADYNT:
@@ -627,10 +629,15 @@ loop:
break;
case ADATA:
+ // 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.
s = p->from.sym;
- if(s == S) {
- diag("DATA without a sym\n%P", p);
- break;
+ if(s != S && s->dupok) {
+ if(debug['v'])
+ Bprint(&bso, "skipping %s in %s: dupok\n", s->name, pn);
+ goto loop;
}
if(s != S) {
p->dlink = s->data;