|
@@ -265,7 +265,10 @@ do { \
|
|
*/
|
|
*/
|
|
#define __get_user_asm_ll32(val, addr) \
|
|
#define __get_user_asm_ll32(val, addr) \
|
|
{ \
|
|
{ \
|
|
- unsigned long long __gu_tmp; \
|
|
|
|
|
|
+ union { \
|
|
|
|
+ unsigned long long l; \
|
|
|
|
+ __typeof__(*(addr)) t; \
|
|
|
|
+ } __gu_tmp; \
|
|
\
|
|
\
|
|
__asm__ __volatile__( \
|
|
__asm__ __volatile__( \
|
|
"1: lw %1, (%3) \n" \
|
|
"1: lw %1, (%3) \n" \
|
|
@@ -281,9 +284,10 @@ do { \
|
|
" " __UA_ADDR " 1b, 4b \n" \
|
|
" " __UA_ADDR " 1b, 4b \n" \
|
|
" " __UA_ADDR " 2b, 4b \n" \
|
|
" " __UA_ADDR " 2b, 4b \n" \
|
|
" .previous \n" \
|
|
" .previous \n" \
|
|
- : "=r" (__gu_err), "=&r" (__gu_tmp) \
|
|
|
|
|
|
+ : "=r" (__gu_err), "=&r" (__gu_tmp.l) \
|
|
: "0" (0), "r" (addr), "i" (-EFAULT)); \
|
|
: "0" (0), "r" (addr), "i" (-EFAULT)); \
|
|
- (val) = (__typeof__(*(addr))) __gu_tmp; \
|
|
|
|
|
|
+ \
|
|
|
|
+ (val) = __gu_tmp.t; \
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|