From b351d85aa284f81271bc93e11301e1c2466b7c82 Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Thu, 26 Jun 2014 23:55:46 +0000 Subject: [PATCH] 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. --- ChangeLog | 6 ++++++ sysdeps/unix/sysv/linux/mips/mips64/nptl/sysdep-cancel.h | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 85e4c25..83ef754 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2014-06-26 Joseph Myers + + * 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 * 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 d9e7236..341b9a0 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; \ -- 2.7.4