diff options
author | Thomas Martitz <kugel@rockbox.org> | 2014-03-24 09:32:51 +0100 |
---|---|---|
committer | Thomas Martitz <kugel@rockbox.org> | 2014-03-24 09:35:27 +0100 |
commit | 9cb9f763a947def480a943796d8dd9409b6f5b98 (patch) | |
tree | 1ae2118e757e33b8905ad59adf0ee49559cda5df | |
parent | 3136465c4263a11ee57a839308f669f1fab8c936 (diff) | |
download | rockbox-9cb9f763a947def480a943796d8dd9409b6f5b98.tar.gz rockbox-9cb9f763a947def480a943796d8dd9409b6f5b98.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.h | 2 |
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); | |||
114 | #define ALIGN_UP_P2(n, p2) ALIGN_DOWN_P2((n) + P2_M1(p2),p2) | 114 | #define ALIGN_UP_P2(n, p2) ALIGN_DOWN_P2((n) + P2_M1(p2),p2) |
115 | 115 | ||
116 | /* align up or down to nearest integer multiple of a */ | 116 | /* align up or down to nearest integer multiple of a */ |
117 | #define ALIGN_DOWN(n, a) ((typeof(n))((typeof(a))(n)/(a)*(a))) | 117 | #define ALIGN_DOWN(n, a) ((typeof(n))((uintptr_t)(n)/(a)*(a))) |
118 | #define ALIGN_UP(n, a) ALIGN_DOWN((n)+((a)-1),a) | 118 | #define ALIGN_UP(n, a) ALIGN_DOWN((n)+((a)-1),a) |
119 | 119 | ||
120 | /* align start and end of buffer to nearest integer multiple of a */ | 120 | /* align start and end of buffer to nearest integer multiple of a */ |