diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2019-08-28 21:01:16 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2019-08-28 21:01:16 +0200 |
commit | e988d56a2f6b87531a12559a336b5de4471605b4 (patch) | |
tree | 27bdf737abf7d19502101492889f0fda27b65263 | |
parent | d9fec3c70aebe9e9139429235b881bf5b32dbe41 (diff) |
8l, 6l: fix "unknown relation: TEXT" xfol() bug (thanks mischief)
mischief reports:
this assembler input assembles with 6a but makes 6l crash.
// 6a l.s
// 6l l.6
// _intrr: unknown relation: TEXT in _intrr
// 6l 511: suicide: sys: trap: fault write addr=0x18 pc=0x20789c
TEXT noteret(SB), 1, $-4
CLI
JMP _intrestore // works when commented
TEXT _intrr(SB), 1, $-4
_intrestore:
RET
TEXT _main(SB), 1, $-4
RET
-rw-r--r-- | sys/src/cmd/6l/pass.c | 2 | ||||
-rw-r--r-- | sys/src/cmd/8l/pass.c | 2 |
2 files changed, 2 insertions, 2 deletions
diff --git a/sys/src/cmd/6l/pass.c b/sys/src/cmd/6l/pass.c index 2062eed5c..a00c52d89 100644 --- a/sys/src/cmd/6l/pass.c +++ b/sys/src/cmd/6l/pass.c @@ -233,7 +233,7 @@ loop: if(a != ACALL) { q = brchain(p->link); if(q != P && q->mark) - if(a != ALOOP) { + if(a != ALOOP && a != ATEXT) { p->as = relinv(a); p->link = p->pcond; p->pcond = q; diff --git a/sys/src/cmd/8l/pass.c b/sys/src/cmd/8l/pass.c index 26cbe30c6..297ccdfc4 100644 --- a/sys/src/cmd/8l/pass.c +++ b/sys/src/cmd/8l/pass.c @@ -217,7 +217,7 @@ loop: if(a != ACALL) { q = brchain(p->link); if(q != P && q->mark) - if(a != ALOOP) { + if(a != ALOOP && a != ATEXT) { p->as = relinv(a); p->link = p->pcond; p->pcond = q; |