From 9cb9f763a947def480a943796d8dd9409b6f5b98 Mon Sep 17 00:00:00 2001 From: Thomas Martitz Date: Mon, 24 Mar 2014 09:32:51 +0100 Subject: 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 --- firmware/export/system.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'firmware/export/system.h') 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 */ -- cgit v1.2.3