summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Metcalf <cmetcalf@tilera.com>2012-06-16 20:53:06 (GMT)
committerChris Metcalf <cmetcalf@tilera.com>2012-06-16 20:56:13 (GMT)
commit6699c8cda36f296e315068ed9bbe4f03e6ed4044 (patch)
tree5efaceb0e8cae2fee56c751e53c716b7859d0a13
parentcfaf025112d3856637ff34a767ef785ef5cf2ca9 (diff)
downloadlinux-3.10-6699c8cda36f296e315068ed9bbe4f03e6ed4044.zip
linux-3.10-6699c8cda36f296e315068ed9bbe4f03e6ed4044.tar.gz
linux-3.10-6699c8cda36f296e315068ed9bbe4f03e6ed4044.tar.bz2
tile: fix bug in get_user() for 4-byte values
The definition of 32-bit values in the 64-bit tilegx architecture is that they should be sign-extended regardless of whether they are considered signed or unsigned by the compiler. Accordingly, we need to use an "ld4s" rather than "ld4u" to load and sign-extend for get_user(). This fixes glibc bug 14238 (see http://sourceware.org/bugzilla), introduced during the 3.5 merge window. Signed-off-by: Chris Metcalf <cmetcalf@tilera.com>
-rw-r--r--arch/tile/include/asm/uaccess.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/tile/include/asm/uaccess.h b/arch/tile/include/asm/uaccess.h
index c3dd275..9ab078a 100644
--- a/arch/tile/include/asm/uaccess.h
+++ b/arch/tile/include/asm/uaccess.h
@@ -146,7 +146,7 @@ extern int fixup_exception(struct pt_regs *regs);
#ifdef __tilegx__
#define __get_user_1(x, ptr, ret) __get_user_asm(ld1u, x, ptr, ret)
#define __get_user_2(x, ptr, ret) __get_user_asm(ld2u, x, ptr, ret)
-#define __get_user_4(x, ptr, ret) __get_user_asm(ld4u, x, ptr, ret)
+#define __get_user_4(x, ptr, ret) __get_user_asm(ld4s, x, ptr, ret)
#define __get_user_8(x, ptr, ret) __get_user_asm(ld, x, ptr, ret)
#else
#define __get_user_1(x, ptr, ret) __get_user_asm(lb_u, x, ptr, ret)