[PATCH] kexec/kexec.h: Bring put/get_unaligned() back from the dead.
Paul Mundt
lethal at linux-sh.org
Thu Sep 4 22:13:10 EDT 2008
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 at linux-sh.org>
---
kexec/kexec.h | 21 ++++++++++-----------
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;
More information about the kexec
mailing list