From ebf85fb7b75f0bdc3cb27693641bc34c11ca7bed Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Wed, 1 Apr 2015 01:30:16 +0200 Subject: vl: prevent stack altering instructions to be hoisted above loads fixes bug with libmemdraw where the linker would hoist the final ADD $const, SP at the end over loads from the stack causing the front to fall off once a interrupt hits. --- sys/src/cmd/vl/sched.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/sys/src/cmd/vl/sched.c b/sys/src/cmd/vl/sched.c index efa88a755..7537cf1c6 100644 --- a/sys/src/cmd/vl/sched.c +++ b/sys/src/cmd/vl/sched.c @@ -85,7 +85,7 @@ sched(Prog *p0, Prog *pe) for(t=s+1; t<=se; t++) { if(!(t->p.mark & LOAD)) continue; - if(t->p.mark & BRANCH) + if(t->p.mark & BRANCH || t->set.ireg & (1<p.mark & BRANCH) + if(t->p.mark & BRANCH || t->set.ireg & (1< sch && conflict(s-1, t)) continue; @@ -634,7 +634,6 @@ offoverlap(Sch *sa, Sch *sb) int conflict(Sch *sa, Sch *sb) { - if(sa->set.ireg & sb->used.ireg) return 1; if(sa->set.freg & sb->used.freg) -- cgit v1.2.3