On Thu, Jan 31, 2013 at 1:50 PM, Peter Maydell <peter.mayd...@linaro.org> wrote: > Commit 658f2dc97 accidentally dropped the cast to the target type of > the value loaded by get_user(). The most visible effect of this would > be that the sequence "uint64_t v; get_user_u32(v, addr)" would sign > extend the 32 bit loaded value into v rather than zero extending as > would be expected for a _u32 accessor. Put the cast back again to > restore the old behaviour.
This fixes the issue I mentioned a week ago, thanks. Reviewed-by: Laurent Desnogues <laurent.desnog...@gmail.com> Laurent > Signed-off-by: Peter Maydell <peter.mayd...@linaro.org> > --- > linux-user/qemu.h | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/linux-user/qemu.h b/linux-user/qemu.h > index 31a220a..b10e957 100644 > --- a/linux-user/qemu.h > +++ b/linux-user/qemu.h > @@ -306,12 +306,12 @@ static inline int access_ok(int type, abi_ulong addr, > abi_ulong size) > ((hptr), (x)), 0) > > #define __get_user_e(x, hptr, e) \ > - ((x) = \ > + ((x) = (typeof(*hptr))( \ > __builtin_choose_expr(sizeof(*(hptr)) == 1, ldub_p, \ > __builtin_choose_expr(sizeof(*(hptr)) == 2, lduw_##e##_p, \ > __builtin_choose_expr(sizeof(*(hptr)) == 4, ldl_##e##_p, \ > __builtin_choose_expr(sizeof(*(hptr)) == 8, ldq_##e##_p, abort)))) \ > - (hptr), 0) > + (hptr)), 0) > > #ifdef TARGET_WORDS_BIGENDIAN > # define __put_user(x, hptr) __put_user_e(x, hptr, be) > -- > 1.7.9.5 >