summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Martitz <kugel@rockbox.org>2014-03-24 09:32:51 +0100
committerThomas Martitz <kugel@rockbox.org>2014-03-24 09:35:27 +0100
commit9cb9f763a947def480a943796d8dd9409b6f5b98 (patch)
tree1ae2118e757e33b8905ad59adf0ee49559cda5df
parent3136465c4263a11ee57a839308f669f1fab8c936 (diff)
downloadrockbox-9cb9f76.tar.gz
rockbox-9cb9f76.zip
Fix ALIGN_DOWN() macro on 64bit.
When the align parameter was a 32bit value (like all default integer literals), and the to-be-aligned value is a pointer the upper 32bit got corrupted because the value was casted down to 32bit. Note: This hasnt been a problem because apparently the sim always gets 32bit addresses (I found this when compiling Rockbox as a library). Change-Id: I0d2d3fd8bfa210326b27162bb22c059da97d207a
-rw-r--r--firmware/export/system.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/firmware/export/system.h b/firmware/export/system.h
index 1dab352071..f6d441ef2a 100644
--- a/firmware/export/system.h
+++ b/firmware/export/system.h
@@ -114,7 +114,7 @@ int get_cpu_boost_counter(void);
#define ALIGN_UP_P2(n, p2) ALIGN_DOWN_P2((n) + P2_M1(p2),p2)
/* align up or down to nearest integer multiple of a */
-#define ALIGN_DOWN(n, a) ((typeof(n))((typeof(a))(n)/(a)*(a)))
+#define ALIGN_DOWN(n, a) ((typeof(n))((uintptr_t)(n)/(a)*(a)))
#define ALIGN_UP(n, a) ALIGN_DOWN((n)+((a)-1),a)
/* align start and end of buffer to nearest integer multiple of a */