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 /firmware/export/system.h | |
parent | 3136465c4263a11ee57a839308f669f1fab8c936 (diff) |
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
Diffstat (limited to 'firmware/export/system.h')
-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); #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 */ |