diff options
Diffstat (limited to 'src/cmd/ld/go.c')
-rw-r--r-- | src/cmd/ld/go.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/src/cmd/ld/go.c b/src/cmd/ld/go.c index 3c1e230b4..055163d08 100644 --- a/src/cmd/ld/go.c +++ b/src/cmd/ld/go.c @@ -135,6 +135,7 @@ ldpkg(Biobuf *f, char *pkg, int64 len, char *filename, int whence) if(debug['u'] && whence != ArchiveObj && (p0+6 > p1 || memcmp(p0, " safe\n", 6) != 0)) { fprint(2, "%s: load of unsafe package %s\n", argv0, filename); + nerrors++; errorexit(); } if(p0 < p1) { @@ -657,27 +658,25 @@ deadcode(void) else last->next = nil; - for(i=0; i<NHASH; i++) - for(s = hash[i]; s != S; s = s->hash) + for(s = allsym; s != S; s = s->allsym) if(strncmp(s->name, "weak.", 5) == 0) { s->special = 1; // do not lay out in data segment s->reachable = 1; + s->hide = 1; } } void doweak(void) { - int i; Sym *s, *t; // resolve weak references only if // target symbol will be in binary anyway. - for(i=0; i<NHASH; i++) - for(s = hash[i]; s != S; s = s->hash) { + for(s = allsym; s != S; s = s->allsym) { if(strncmp(s->name, "weak.", 5) == 0) { - t = lookup(s->name+5, s->version); - if(t->type != 0 && t->reachable) { + t = rlookup(s->name+5, s->version); + if(t && t->type != 0 && t->reachable) { s->value = t->value; s->type = t->type; } else { |