diff --git a/[refs] b/[refs] index fb65c63eaf69..9f0f0c30227d 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 1e6760c5c4589d02a6877fb256b99c33dd8f1ede +refs/heads/master: 4252c659a4e7f4260e4bdc87538578236c51ab2d diff --git a/trunk/arch/sh/kernel/traps_32.c b/trunk/arch/sh/kernel/traps_32.c index 7154a7b2135b..2e7dd2ebec9a 100644 --- a/trunk/arch/sh/kernel/traps_32.c +++ b/trunk/arch/sh/kernel/traps_32.c @@ -150,14 +150,24 @@ static int die_if_no_fixup(const char * str, struct pt_regs * regs, long err) static inline void sign_extend(unsigned int count, unsigned char *dst) { #ifdef __LITTLE_ENDIAN__ + if ((count == 1) && dst[0] & 0x80) { + dst[1] = 0xff; + dst[2] = 0xff; + dst[3] = 0xff; + } if ((count == 2) && dst[1] & 0x80) { dst[2] = 0xff; dst[3] = 0xff; } #else - if ((count == 2) && dst[2] & 0x80) { + if ((count == 1) && dst[3] & 0x80) { + dst[2] = 0xff; + dst[1] = 0xff; dst[0] = 0xff; + } + if ((count == 2) && dst[2] & 0x80) { dst[1] = 0xff; + dst[0] = 0xff; } #endif }