From: Russ Cox Date: Mon, 13 Jul 2009 23:48:09 +0000 (-0700) Subject: fix undefined function error. X-Git-Tag: weekly.2009-11-06~1170 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=29e93590b00648423886f0663b0841f547099abf;p=gostls13.git fix undefined function error. before: mainstart: undefined: main·init in mainstart mainstart: branch out of range in mainstart (95) CALL ,0(PC) [main·init] mainstart: undefined: main·main in mainstart mainstart: branch out of range in mainstart (97) CALL ,0(PC) [main·main] mainstart: doasm: notfound from=6f to=6f (95) CALL , mainstart: doasm: notfound from=6f to=6f (97) CALL , mainstart: doasm: notfound from=6f to=6f (95) CALL , mainstart: doasm: notfound from=6f to=6f (97) CALL , mainstart: doasm: notfound from=6f to=6f (95) CALL , mainstart: doasm: notfound from=6f to=6f (97) CALL , after: mainstart: undefined: main·init in mainstart mainstart: undefined: main·main in mainstart R=r DELTA=7 (1 added, 0 deleted, 6 changed) OCL=31555 CL=31555 --- diff --git a/src/cmd/5l/pass.c b/src/cmd/5l/pass.c index 31af4468ff..852a62048e 100644 --- a/src/cmd/5l/pass.c +++ b/src/cmd/5l/pass.c @@ -343,10 +343,10 @@ patch(void) s = p->to.sym; switch(s->type) { default: - diag("undefined: %s\n%P", s->name, p); + diag("undefined: %s", s->name); s->type = STEXT; s->value = vexit; - break; + continue; // avoid more error messages case STEXT: p->to.offset = s->value; p->to.type = D_BRANCH; @@ -559,7 +559,7 @@ reachable() if(p == nil) return; s = p->from.sym; - } + } s->used = 1; do{ todo = 0; @@ -771,7 +771,7 @@ ckuse(Sym *s, Sym *s0, Use *u) } return 1; } - + static void setuse(Sym *s, Sym *s0, Use *u) { @@ -786,7 +786,7 @@ setuse(Sym *s, Sym *s0, Use *u) setfpuse(u->p, s0, s); } } - + /* detect BX O(R) which can be done as BL O(R) */ void fnptrs() @@ -795,14 +795,14 @@ fnptrs() Sym *s; Prog *p; Use *u; - + for(i=0; ilink){ if(s->fnptr && (s->type == STEXT || s->type == SLEAF || s->type == SCONST)){ // print("%s : fnptr %d %d\n", s->name, s->thumb, s->foreign); } } - } + } /* record use of syms */ for(p = firstp; p != P; p = p->link){ if(p->as == ATEXT) @@ -827,7 +827,7 @@ fnptrs() for(u = s->use; u != U; u = u->link) setuse(s, s, u); } - } + } } } diff --git a/src/cmd/6l/pass.c b/src/cmd/6l/pass.c index 69b5c7115b..3917ac5423 100644 --- a/src/cmd/6l/pass.c +++ b/src/cmd/6l/pass.c @@ -377,10 +377,11 @@ patch(void) Bprint(&bso, "%s calls %s\n", TNAME, s->name); switch(s->type) { default: - diag("undefined: %s in %s", s->name, TNAME); + /* diag prints TNAME first */ + diag("undefined: %s", s->name); s->type = STEXT; s->value = vexit; - break; /* or fall through to set offset? */ + continue; // avoid more error messages case STEXT: p->to.offset = s->value; break; diff --git a/src/cmd/8l/pass.c b/src/cmd/8l/pass.c index fa6d6a00fe..8a45f40a62 100644 --- a/src/cmd/8l/pass.c +++ b/src/cmd/8l/pass.c @@ -346,10 +346,10 @@ patch(void) switch(s->type) { default: /* diag prints TNAME first */ - diag("%s is undefined", s->name); + diag("undefined: %s", s->name); s->type = STEXT; s->value = vexit; - break; /* or fall through to set offset? */ + continue; // avoid more error messages case STEXT: p->to.offset = s->value; break;