diff options
author | Russ Cox <rsc@golang.org> | 2009-07-13 16:48:09 -0700 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2009-07-13 16:48:09 -0700 |
commit | 2c1a08f090140bbcc82dcadc700215ae4523a5ad (patch) | |
tree | d577443da2aecdcc6f431b06a5026f0d83a245fc | |
parent | 2c0d93899e0661a93e14f674abbeafe6c82fec35 (diff) | |
download | golang-2c1a08f090140bbcc82dcadc700215ae4523a5ad.tar.gz |
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
-rw-r--r-- | src/cmd/5l/pass.c | 16 | ||||
-rw-r--r-- | src/cmd/6l/pass.c | 5 | ||||
-rw-r--r-- | src/cmd/8l/pass.c | 4 |
3 files changed, 13 insertions, 12 deletions
diff --git a/src/cmd/5l/pass.c b/src/cmd/5l/pass.c index 31af4468f..852a62048 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; i<NHASH; i++){ for(s = hash[i]; s != S; s = s->link){ 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 69b5c7115..3917ac542 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 fa6d6a00f..8a45f40a6 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; |