diff options
author | Rob Pike <r@golang.org> | 2008-07-09 16:40:11 -0700 |
---|---|---|
committer | Rob Pike <r@golang.org> | 2008-07-09 16:40:11 -0700 |
commit | 3500c3a05374187efa2dfcc4400a0853707c5337 (patch) | |
tree | 691a7c0e3323d8c3e4c79fd5705dde611460dfdb /src/cmd/6l/obj.c | |
parent | 3e1172f413631086870446730f1e0c6e2fdd14d8 (diff) | |
download | golang-3500c3a05374187efa2dfcc4400a0853707c5337.tar.gz |
redefinition fix for autolib: if first ATEXT is already defined, skip this file
SVN=126580
Diffstat (limited to 'src/cmd/6l/obj.c')
-rw-r--r-- | src/cmd/6l/obj.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/cmd/6l/obj.c b/src/cmd/6l/obj.c index 02bd12298..41976b605 100644 --- a/src/cmd/6l/obj.c +++ b/src/cmd/6l/obj.c @@ -461,7 +461,7 @@ objfile(char *file) struct ar_hdr arhdr; char *e, *start, *stop; - if(file[0] == '-' && file[1] == 'l') { + if(file[0] == '-' && file[1] == 'l') { // TODO: fix this if(debug['9']) sprint(name, "/%s/lib/lib", thestring); else @@ -819,6 +819,9 @@ ldobj(int f, long c, char *pn) static int files; static char **filen; char **nfilen; + int ntext; + + ntext = 0; if((files&15) == 0){ nfilen = malloc((files+16)*sizeof(char*)); @@ -1062,6 +1065,13 @@ loop: goto loop; case ATEXT: + s = p->from.sym; + if(ntext++ == 0 && s->type != 0 && s->type != SXREF) { + /* redefinition, so file has probably been seen before */ + if(debug['v']) + diag("skipping: %s: redefinition: %s", pn, s->name); + return; + } if(curtext != P) { histtoauto(); curtext->to.autom = curauto; @@ -1069,7 +1079,6 @@ loop: } skip = 0; curtext = p; - s = p->from.sym; if(s == S) { diag("%s: no TEXT symbol: %P", pn, p); errorexit(); |