summary refs log tree commit diff
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2014-06-26 23:55:46 +0000
committerJoseph Myers <joseph@codesourcery.com>2014-06-26 23:55:46 +0000
commitb351d85aa284f81271bc93e11301e1c2466b7c82 (patch)
treebbde7ff8a6d9beb8ea914d9617b1209ef8b8fc3a
parent3cb4de474155c315003746f3de9c408b824abc5e (diff)
downloadglibc-b351d85aa284f81271bc93e11301e1c2466b7c82.tar.gz
glibc-b351d85aa284f81271bc93e11301e1c2466b7c82.tar.xz
glibc-b351d85aa284f81271bc93e11301e1c2466b7c82.zip
Fix MIPS64 *_nocancel gp setup.
The 64-bit MIPS ABIs involve the caller setting up t9 ($25) to the
address of the called function, and the called function then using
this in a .cpsetup directive to compute gp.  The .cpsetup directive
needs to name the function to which t9 points for this purpose.  In
the definition of *_nocancel functions, the directive pointed to the
normal entry point rather than the _nocancel one, resulting in
segfaults when the _nocancel functions were used.  This patch corrects
the function name used in the directive.  (It seems the bug was latent
until Roland's not-cancel.h unification, with the _nocancel entry
points not previously being used - so not user-visible in a release,
so no Bugzilla entry required.)

Tested mips64 sufficiently to confirm the previously seen segfaults
are fixed.

	* sysdeps/unix/sysv/linux/mips/mips64/nptl/sysdep-cancel.h
	[__PIC__] (PSEUDO): Use name of _nocancel entry point in
	corresponding .cpsetup call.
-rw-r--r--ChangeLog6
-rw-r--r--sysdeps/unix/sysv/linux/mips/mips64/nptl/sysdep-cancel.h2
2 files changed, 7 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 85e4c25a85..83ef754740 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2014-06-26  Joseph Myers  <joseph@codesourcery.com>
+
+	* sysdeps/unix/sysv/linux/mips/mips64/nptl/sysdep-cancel.h
+	[__PIC__] (PSEUDO): Use name of _nocancel entry point in
+	corresponding .cpsetup call.
+
 2014-06-26  Roland McGrath  <roland@hack.frob.com>
 
 	* sysdeps/unix/sysv/linux/arm/libc-aeabi_read_tp.S: Moved ...
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/nptl/sysdep-cancel.h b/sysdeps/unix/sysv/linux/mips/mips64/nptl/sysdep-cancel.h
index d9e7236a37..341b9a0ba0 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/nptl/sysdep-cancel.h
+++ b/sysdeps/unix/sysv/linux/mips/mips64/nptl/sysdep-cancel.h
@@ -47,7 +47,7 @@
   .globl __##syscall_name##_nocancel;					      \
   __##syscall_name##_nocancel:						      \
     SAVESTK;								      \
-    .cpsetup t9, STKOFF_GP, name;					      \
+    .cpsetup t9, STKOFF_GP, __##syscall_name##_nocancel;		      \
     cfi_rel_offset (gp, STKOFF_GP);					      \
     li v0, SYS_ify(syscall_name);					      \
     syscall;								      \