From f75bbcdd45358ac00fdf07d0107c87390b28c4cb Mon Sep 17 00:00:00 2001 From: aiju Date: Fri, 28 Sep 2018 22:53:24 +0000 Subject: 5e: byte access incorrectly checked for long; brk has to round up addresses --- sys/src/cmd/5e/arm.c | 2 +- sys/src/cmd/5e/sys.c | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/sys/src/cmd/5e/arm.c b/sys/src/cmd/5e/arm.c index 2d4c5f2cb..a9acc748b 100644 --- a/sys/src/cmd/5e/arm.c +++ b/sys/src/cmd/5e/arm.c @@ -124,7 +124,7 @@ single(u32int instr) addr += offset; if((instr & fB) == 0) addr = evenaddr(addr, 3); - targ = vaddr(addr, 4, &seg); + targ = vaddr(addr, (instr & fB) == 0 ? 4 : 1, &seg); switch(instr & (fB | fL)) { case 0: *(u32int*) targ = *Rd; diff --git a/sys/src/cmd/5e/sys.c b/sys/src/cmd/5e/sys.c index e7fd7d755..1087116f8 100644 --- a/sys/src/cmd/5e/sys.c +++ b/sys/src/cmd/5e/sys.c @@ -254,6 +254,7 @@ sysbrk(void) v = arg(0); if(systrace) fprint(2, "brk(%#lux)\n", v); + v = v + 7 & -8; if(v >= P->S[SEGSTACK]->start) sysfatal("bss > stack, wtf?"); if(v < P->S[SEGBSS]->start) -- cgit v1.2.3