summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFranklin Wei <me@fwei.tk>2017-07-27 00:00:51 -0400
committerFranklin Wei <me@fwei.tk>2017-07-27 00:03:09 -0400
commit5a5bd0d6d1e77b1d94c18e3d4ce1a52b05dc2967 (patch)
tree4da596c5a693e3043e3bcf6eabd1bcc1b4cf3236
parent56dd2eaaf2ccee6f682d30e29b3b6babe1dc49ef (diff)
downloadrockbox-5a5bd0d6d1e77b1d94c18e3d4ce1a52b05dc2967.zip
rockbox-5a5bd0d6d1e77b1d94c18e3d4ce1a52b05dc2967.tar.gz
rockbox-5a5bd0d6d1e77b1d94c18e3d4ce1a52b05dc2967.tar.bz2
rockbox-5a5bd0d6d1e77b1d94c18e3d4ce1a52b05dc2967.tar.xz
Fix arm memset() handling of negative arguments
This fixes the sgt-mines plugin. Same issue was present in an old glibc as well: https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=a7ed1adbecb6aac49af75aae3b3498798cf63abc
-rw-r--r--firmware/asm/arm/memset.S1
1 files changed, 1 insertions, 0 deletions
diff --git a/firmware/asm/arm/memset.S b/firmware/asm/arm/memset.S
index 682da87..64cd95c 100644
--- a/firmware/asm/arm/memset.S
+++ b/firmware/asm/arm/memset.S
@@ -50,6 +50,7 @@ memset:
/*
* we know that the pointer in r0 is aligned to a word boundary.
*/
+ and r1, r1, #255 @ clear sign bits
orr r1, r1, r1, lsl #8
orr r1, r1, r1, lsl #16
mov r3, r1