mn10300: fix kernel build failures when using gcc-4.x
Fix some build failures when using gcc-4.x for MN10300. Firstly, __get_user() fails to build because the pointer points to a const and __gu_val ends up being read-only: In file included from include/linux/mempolicy.h:62, from init/main.c:50: include/linux/pagemap.h: In function 'fault_in_pages_readable': include/linux/pagemap.h:394: error: read-only variable '__gu_val' used as 'asm' output include/linux/pagemap.h:394: error: read-only variable '__gu_val' used as 'asm' output include/linux/pagemap.h:394: error: read-only variable '__gu_val' used as 'asm' output include/linux/pagemap.h:400: error: read-only variable '__gu_val' used as 'asm' output include/linux/pagemap.h:400: error: read-only variable '__gu_val' used as 'asm' output include/linux/pagemap.h:400: error: read-only variable '__gu_val' used as 'asm' output make[1]: *** [init/main.o] Error 1 Secondly, gcc-4 doesn't allow casts of lvalues: UPD include/linux/compile.h arch/mn10300/kernel/rtc.c: In function 'calibrate_clock': arch/mn10300/kernel/rtc.c:170: error: lvalue required as left operand of assignment arch/mn10300/kernel/rtc.c:172: error: lvalue required as left operand of assignment make[1]: *** [arch/mn10300/kernel/rtc.o] Error 1 These are seen with gcc 4.2.1. Signed-off-by: Mark Salter <msalter@redhat.com> Signed-off-by: David Howells <dhowells@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
933d35f00c
commit
d22a001bf6
@@ -129,42 +129,47 @@ extern int fixup_exception(struct pt_regs *regs);
|
|||||||
struct __large_struct { unsigned long buf[100]; };
|
struct __large_struct { unsigned long buf[100]; };
|
||||||
#define __m(x) (*(struct __large_struct *)(x))
|
#define __m(x) (*(struct __large_struct *)(x))
|
||||||
|
|
||||||
#define __get_user_nocheck(x, ptr, size) \
|
#define __get_user_nocheck(x, ptr, size) \
|
||||||
({ \
|
({ \
|
||||||
__typeof(*(ptr)) __gu_val; \
|
unsigned long __gu_addr; \
|
||||||
unsigned long __gu_addr; \
|
int __gu_err; \
|
||||||
int __gu_err; \
|
__gu_addr = (unsigned long) (ptr); \
|
||||||
__gu_addr = (unsigned long) (ptr); \
|
switch (size) { \
|
||||||
switch (size) { \
|
case 1: { \
|
||||||
case 1: __get_user_asm("bu"); break; \
|
unsigned char __gu_val; \
|
||||||
case 2: __get_user_asm("hu"); break; \
|
__get_user_asm("bu"); \
|
||||||
case 4: __get_user_asm("" ); break; \
|
(x) = *(__force __typeof__(*(ptr))*) &__gu_val; \
|
||||||
default: __get_user_unknown(); break; \
|
break; \
|
||||||
} \
|
} \
|
||||||
x = (__typeof__(*(ptr))) __gu_val; \
|
case 2: { \
|
||||||
__gu_err; \
|
unsigned short __gu_val; \
|
||||||
|
__get_user_asm("hu"); \
|
||||||
|
(x) = *(__force __typeof__(*(ptr))*) &__gu_val; \
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
|
case 4: { \
|
||||||
|
unsigned int __gu_val; \
|
||||||
|
__get_user_asm(""); \
|
||||||
|
(x) = *(__force __typeof__(*(ptr))*) &__gu_val; \
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
|
default: \
|
||||||
|
__get_user_unknown(); \
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
|
__gu_err; \
|
||||||
})
|
})
|
||||||
|
|
||||||
#define __get_user_check(x, ptr, size) \
|
#define __get_user_check(x, ptr, size) \
|
||||||
({ \
|
({ \
|
||||||
__typeof__(*(ptr)) __gu_val; \
|
int _e; \
|
||||||
unsigned long __gu_addr; \
|
if (likely(__access_ok((unsigned long) (ptr), (size)))) \
|
||||||
int __gu_err; \
|
_e = __get_user_nocheck((x), (ptr), (size)); \
|
||||||
__gu_addr = (unsigned long) (ptr); \
|
else { \
|
||||||
if (likely(__access_ok(__gu_addr,size))) { \
|
_e = -EFAULT; \
|
||||||
switch (size) { \
|
(x) = (__typeof__(x))0; \
|
||||||
case 1: __get_user_asm("bu"); break; \
|
} \
|
||||||
case 2: __get_user_asm("hu"); break; \
|
_e; \
|
||||||
case 4: __get_user_asm("" ); break; \
|
|
||||||
default: __get_user_unknown(); break; \
|
|
||||||
} \
|
|
||||||
} \
|
|
||||||
else { \
|
|
||||||
__gu_err = -EFAULT; \
|
|
||||||
__gu_val = 0; \
|
|
||||||
} \
|
|
||||||
x = (__typeof__(*(ptr))) __gu_val; \
|
|
||||||
__gu_err; \
|
|
||||||
})
|
})
|
||||||
|
|
||||||
#define __get_user_asm(INSN) \
|
#define __get_user_asm(INSN) \
|
||||||
|
@@ -20,9 +20,9 @@ extern unsigned long mn10300_ioclk; /* IOCLK (crystal speed) in HZ */
|
|||||||
extern unsigned long mn10300_iobclk;
|
extern unsigned long mn10300_iobclk;
|
||||||
extern unsigned long mn10300_tsc_per_HZ;
|
extern unsigned long mn10300_tsc_per_HZ;
|
||||||
|
|
||||||
#define MN10300_IOCLK ((unsigned long)mn10300_ioclk)
|
#define MN10300_IOCLK mn10300_ioclk
|
||||||
/* If this processors has a another clock, uncomment the below. */
|
/* If this processors has a another clock, uncomment the below. */
|
||||||
/* #define MN10300_IOBCLK ((unsigned long)mn10300_iobclk) */
|
/* #define MN10300_IOBCLK mn10300_iobclk */
|
||||||
|
|
||||||
#else /* !CONFIG_MN10300_RTC */
|
#else /* !CONFIG_MN10300_RTC */
|
||||||
|
|
||||||
@@ -35,7 +35,7 @@ extern unsigned long mn10300_tsc_per_HZ;
|
|||||||
#define MN10300_TSCCLK MN10300_IOCLK
|
#define MN10300_TSCCLK MN10300_IOCLK
|
||||||
|
|
||||||
#ifdef CONFIG_MN10300_RTC
|
#ifdef CONFIG_MN10300_RTC
|
||||||
#define MN10300_TSC_PER_HZ ((unsigned long)mn10300_tsc_per_HZ)
|
#define MN10300_TSC_PER_HZ mn10300_tsc_per_HZ
|
||||||
#else /* !CONFIG_MN10300_RTC */
|
#else /* !CONFIG_MN10300_RTC */
|
||||||
#define MN10300_TSC_PER_HZ (MN10300_TSCCLK/HZ)
|
#define MN10300_TSC_PER_HZ (MN10300_TSCCLK/HZ)
|
||||||
#endif /* !CONFIG_MN10300_RTC */
|
#endif /* !CONFIG_MN10300_RTC */
|
||||||
|
@@ -20,9 +20,9 @@ extern unsigned long mn10300_ioclk; /* IOCLK (crystal speed) in HZ */
|
|||||||
extern unsigned long mn10300_iobclk;
|
extern unsigned long mn10300_iobclk;
|
||||||
extern unsigned long mn10300_tsc_per_HZ;
|
extern unsigned long mn10300_tsc_per_HZ;
|
||||||
|
|
||||||
#define MN10300_IOCLK ((unsigned long)mn10300_ioclk)
|
#define MN10300_IOCLK mn10300_ioclk
|
||||||
/* If this processors has a another clock, uncomment the below. */
|
/* If this processors has a another clock, uncomment the below. */
|
||||||
/* #define MN10300_IOBCLK ((unsigned long)mn10300_iobclk) */
|
/* #define MN10300_IOBCLK mn10300_iobclk */
|
||||||
|
|
||||||
#else /* !CONFIG_MN10300_RTC */
|
#else /* !CONFIG_MN10300_RTC */
|
||||||
|
|
||||||
@@ -35,7 +35,7 @@ extern unsigned long mn10300_tsc_per_HZ;
|
|||||||
#define MN10300_TSCCLK MN10300_IOCLK
|
#define MN10300_TSCCLK MN10300_IOCLK
|
||||||
|
|
||||||
#ifdef CONFIG_MN10300_RTC
|
#ifdef CONFIG_MN10300_RTC
|
||||||
#define MN10300_TSC_PER_HZ ((unsigned long)mn10300_tsc_per_HZ)
|
#define MN10300_TSC_PER_HZ mn10300_tsc_per_HZ
|
||||||
#else /* !CONFIG_MN10300_RTC */
|
#else /* !CONFIG_MN10300_RTC */
|
||||||
#define MN10300_TSC_PER_HZ (MN10300_TSCCLK/HZ)
|
#define MN10300_TSC_PER_HZ (MN10300_TSCCLK/HZ)
|
||||||
#endif /* !CONFIG_MN10300_RTC */
|
#endif /* !CONFIG_MN10300_RTC */
|
||||||
|
Reference in New Issue
Block a user