mirror of
https://sourceware.org/git/glibc.git
synced 2025-08-07 06:43:00 +03:00
* sysdeps/unix/sysv/linux/mips/kernel_sigaction.h (_KERNEL_NSIG_BPW): Define in terms of _MIPS_SZLONG. * sysdeps/unix/sysv/linux/mips/sigaction.c: Define restore and restore_rt functions. Use them.
* sysdeps/unix/sysv/linux/mips/kernel_sigaction.h (_KERNEL_NSIG_BPW): Define in terms of _MIPS_SZLONG. * sysdeps/unix/sysv/linux/mips/sigaction.c: Define restore and restore_rt functions. Use them.
This commit is contained in:
@@ -1,5 +1,10 @@
|
|||||||
2003-03-14 Alexandre Oliva <aoliva@redhat.com>
|
2003-03-14 Alexandre Oliva <aoliva@redhat.com>
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/mips/kernel_sigaction.h
|
||||||
|
(_KERNEL_NSIG_BPW): Define in terms of _MIPS_SZLONG.
|
||||||
|
* sysdeps/unix/sysv/linux/mips/sigaction.c: Define restore and
|
||||||
|
restore_rt functions. Use them.
|
||||||
|
|
||||||
* sysdeps/unix/sysv/linux/mips/sys/tas.h (_test_and_set): Don't
|
* sysdeps/unix/sysv/linux/mips/sys/tas.h (_test_and_set): Don't
|
||||||
.set mips2 on new abis.
|
.set mips2 on new abis.
|
||||||
|
|
||||||
|
@@ -23,7 +23,7 @@ struct old_kernel_sigaction {
|
|||||||
|
|
||||||
|
|
||||||
#define _KERNEL_NSIG 128
|
#define _KERNEL_NSIG 128
|
||||||
#define _KERNEL_NSIG_BPW 32
|
#define _KERNEL_NSIG_BPW _MIPS_SZLONG
|
||||||
#define _KERNEL_NSIG_WORDS (_KERNEL_NSIG / _KERNEL_NSIG_BPW)
|
#define _KERNEL_NSIG_WORDS (_KERNEL_NSIG / _KERNEL_NSIG_BPW)
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@@ -41,6 +41,15 @@ extern int __syscall_sigaction (int, const struct old_kernel_sigaction *__unboun
|
|||||||
extern int __syscall_rt_sigaction (int, const struct kernel_sigaction *__unbounded,
|
extern int __syscall_rt_sigaction (int, const struct kernel_sigaction *__unbounded,
|
||||||
struct kernel_sigaction *__unbounded, size_t);
|
struct kernel_sigaction *__unbounded, size_t);
|
||||||
|
|
||||||
|
#if _MIPS_SIM != _MIPS_SIM_ABI32
|
||||||
|
|
||||||
|
# ifdef __NR_rt_sigreturn
|
||||||
|
static void restore_rt (void) asm ("__restore_rt");
|
||||||
|
# endif
|
||||||
|
# ifdef __NR_sigreturn
|
||||||
|
static void restore (void) asm ("__restore");
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
/* If ACT is not NULL, change the action for SIG to *ACT.
|
/* If ACT is not NULL, change the action for SIG to *ACT.
|
||||||
If OACT is not NULL, put the old action for SIG in *OACT. */
|
If OACT is not NULL, put the old action for SIG in *OACT. */
|
||||||
@@ -74,7 +83,11 @@ __libc_sigaction (sig, act, oact)
|
|||||||
memcpy (&kact.sa_mask, &act->sa_mask, sizeof (kernel_sigset_t));
|
memcpy (&kact.sa_mask, &act->sa_mask, sizeof (kernel_sigset_t));
|
||||||
kact.sa_flags = act->sa_flags;
|
kact.sa_flags = act->sa_flags;
|
||||||
# ifdef HAVE_SA_RESTORER
|
# ifdef HAVE_SA_RESTORER
|
||||||
|
# if _MIPS_SIM == _MIPS_SIM_ABI32
|
||||||
kact.sa_restorer = act->sa_restorer;
|
kact.sa_restorer = act->sa_restorer;
|
||||||
|
# else
|
||||||
|
kact.sa_restorer = &restore_rt;
|
||||||
|
# endif
|
||||||
# endif
|
# endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -128,7 +141,11 @@ __libc_sigaction (sig, act, oact)
|
|||||||
oact->sa_mask.__val[0] = k_osigact.sa_mask;
|
oact->sa_mask.__val[0] = k_osigact.sa_mask;
|
||||||
oact->sa_flags = k_osigact.sa_flags;
|
oact->sa_flags = k_osigact.sa_flags;
|
||||||
# ifdef HAVE_SA_RESTORER
|
# ifdef HAVE_SA_RESTORER
|
||||||
|
# if _MIPS_SIM == _MIPS_SIM_ABI32
|
||||||
oact->sa_restorer = k_osigact.sa_restorer;
|
oact->sa_restorer = k_osigact.sa_restorer;
|
||||||
|
# else
|
||||||
|
oact->sa_restorer = &restore;
|
||||||
|
# endif
|
||||||
# endif
|
# endif
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
@@ -141,3 +158,31 @@ weak_alias (__libc_sigaction, __sigaction)
|
|||||||
libc_hidden_weak (__sigaction)
|
libc_hidden_weak (__sigaction)
|
||||||
weak_alias (__libc_sigaction, sigaction)
|
weak_alias (__libc_sigaction, sigaction)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* NOTE: Please think twice before making any changes to the bits of
|
||||||
|
code below. GDB needs some intimate knowledge about it to
|
||||||
|
recognize them as signal trampolines, and make backtraces through
|
||||||
|
signal handlers work right. Important are both the names
|
||||||
|
(__restore_rt) and the exact instruction sequence.
|
||||||
|
If you ever feel the need to make any changes, please notify the
|
||||||
|
appropriate GDB maintainer. */
|
||||||
|
|
||||||
|
#define RESTORE(name, syscall) RESTORE2 (name, syscall)
|
||||||
|
#define RESTORE2(name, syscall) \
|
||||||
|
asm \
|
||||||
|
( \
|
||||||
|
".align 4\n" \
|
||||||
|
"__" #name ":\n" \
|
||||||
|
" li $2, " #syscall "\n" \
|
||||||
|
" syscall\n" \
|
||||||
|
);
|
||||||
|
|
||||||
|
/* The return code for realtime-signals. */
|
||||||
|
#if _MIPS_SIM != _MIPS_SIM_ABI32
|
||||||
|
# ifdef __NR_rt_sigreturn
|
||||||
|
RESTORE (restore_rt, __NR_rt_sigreturn)
|
||||||
|
# endif
|
||||||
|
# ifdef __NR_sigreturn
|
||||||
|
RESTORE (restore, __NR_sigreturn)
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
Reference in New Issue
Block a user