summaryrefslogtreecommitdiff
path: root/src/cmd/6l/obj.c
diff options
context:
space:
mode:
authorRob Pike <r@golang.org>2008-07-09 16:40:11 -0700
committerRob Pike <r@golang.org>2008-07-09 16:40:11 -0700
commit3500c3a05374187efa2dfcc4400a0853707c5337 (patch)
tree691a7c0e3323d8c3e4c79fd5705dde611460dfdb /src/cmd/6l/obj.c
parent3e1172f413631086870446730f1e0c6e2fdd14d8 (diff)
downloadgolang-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.c13
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();