summaryrefslogtreecommitdiff
path: root/sys/src/cmd/5e
diff options
context:
space:
mode:
authoraiju <devnull@localhost>2018-09-28 22:53:24 +0000
committeraiju <devnull@localhost>2018-09-28 22:53:24 +0000
commitf75bbcdd45358ac00fdf07d0107c87390b28c4cb (patch)
tree28bc794f8fdc630421a7797dc2fc42223e4d1309 /sys/src/cmd/5e
parent451b0c7976df9036ee84ad2e51f698dbe7562873 (diff)
5e: byte access incorrectly checked for long; brk has to round up addresses
Diffstat (limited to 'sys/src/cmd/5e')
-rw-r--r--sys/src/cmd/5e/arm.c2
-rw-r--r--sys/src/cmd/5e/sys.c1
2 files changed, 2 insertions, 1 deletions
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)