summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Mundt <lethal@linux-sh.org>2008-09-05 11:13:10 +0900
committerSimon Horman <horms@verge.net.au>2008-09-05 16:21:19 +1000
commit0723defb5308ac7fce296f8b596bff4df6803f01 (patch)
treed2a274864e2d8874cfac04a790c16269f5b509ce
parente534a0c9fed2066ed3636a082e67f6fafa779019 (diff)
kexec/kexec.h: Bring put/get_unaligned() back from the dead.
This re-enables the fairly generic put/get_unaligned() routines in kexec.h, while tidying up the variable shadowing clash that results when using it in places like machine_apply_elf_rel(). Needed for SH ELF relocations. IA64 still does its own put_unaligned64(), which should likely also be converted over to using put_unaligned() directly. Signed-off-by: Paul Mundt <lethal@linux-sh.org> Signed-off-by: Simon Horman <horms@verge.net.au>
-rw-r--r--kexec/kexec.h21
1 files changed, 10 insertions, 11 deletions
diff --git a/kexec/kexec.h b/kexec/kexec.h
index 7db8227..8421c29 100644
--- a/kexec/kexec.h
+++ b/kexec/kexec.h
@@ -6,6 +6,7 @@
#include <sys/types.h>
#include <stdio.h>
#include <stdint.h>
+#include <string.h>
#define USE_BSD
#include <byteswap.h>
#include <endian.h>
@@ -56,43 +57,41 @@
#endif
-#if 0
/*
- * This function doesn't actually exist. The idea is that when someone uses the macros
- * below with an unsupported size (datatype), the linker will alert us to the problem via
- * an unresolved reference error.
+ * This function doesn't actually exist. The idea is that when someone
+ * uses the macros below with an unsupported size (datatype), the linker
+ * will alert us to the problem via an unresolved reference error.
*/
extern unsigned long bad_unaligned_access_length (void);
#define get_unaligned(loc) \
({ \
- __typeof__(*(loc)) value; \
+ __typeof__(*(loc)) _v; \
size_t size = sizeof(*(loc)); \
switch(size) { \
case 1: case 2: case 4: case 8: \
- memcpy(&value, (loc), size); \
+ memcpy(&_v, (loc), size); \
break; \
default: \
- value = bad_unaligned_access_length(); \
+ _v = bad_unaligned_access_length(); \
break; \
} \
- value; \
+ _v; \
})
#define put_unaligned(value, loc) \
do { \
size_t size = sizeof(*(loc)); \
- __typeof__(*(loc)) val = value; \
+ __typeof__(*(loc)) _v = value; \
switch(size) { \
case 1: case 2: case 4: case 8: \
- memcpy((loc), &val, size); \
+ memcpy((loc), &_v, size); \
break; \
default: \
bad_unaligned_access_length(); \
break; \
} \
} while(0)
-#endif
extern unsigned long long mem_min, mem_max;