mips-signal.h: Update copyright.
* include/mips-signal.h: Update copyright. (struct kernel_sigaction): Removed. (SIGNAL_HANDLER): Changed prototype. (MAKE_THROW_FRAME): Added cast. (INIT_SEGV): Use sigaction instead of syscall. (INIT_FPE): Likewise. From-SVN: r115624
This commit is contained in:
parent
b70f0f48c7
commit
e0b103c659
2 changed files with 31 additions and 42 deletions
|
@ -1,3 +1,12 @@
|
|||
2006-07-20 David Daney <ddaney@avtrex.com>
|
||||
|
||||
* include/mips-signal.h: Update copyright.
|
||||
(struct kernel_sigaction): Removed.
|
||||
(SIGNAL_HANDLER): Changed prototype.
|
||||
(MAKE_THROW_FRAME): Added cast.
|
||||
(INIT_SEGV): Use sigaction instead of syscall.
|
||||
(INIT_FPE): Likewise.
|
||||
|
||||
2006-07-18 Paolo Bonzini <bonzini@gnu.org>
|
||||
|
||||
* configure: Regenerate.
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
// mips-signal.h - Catch runtime signals and turn them into exceptions
|
||||
// on an mips based Linux system.
|
||||
|
||||
/* Copyright (C) 1998, 1999, 2001, 2002, 2003, 2004 Free Software Foundation
|
||||
/* Copyright (C) 1998, 1999, 2001, 2002, 2003, 2004, 2006
|
||||
Free Software Foundation
|
||||
|
||||
This file is part of libgcj.
|
||||
|
||||
|
@ -35,28 +36,10 @@ typedef struct _sig_ucontext {
|
|||
sigset_t uc_sigmask;
|
||||
} sig_ucontext_t;
|
||||
|
||||
/* We use kernel_sigaction here because we're calling the kernel
|
||||
directly rather than via glibc. The sigaction structure that the
|
||||
syscall uses is a different shape from the one in userland and not
|
||||
visible to us in a header file so we define it here.
|
||||
Additionally we want a proper prototype for the handler function
|
||||
with the struct sigcontext pointer passed by the kernel as the 2nd
|
||||
argument, which isn't there in userland headers. */
|
||||
|
||||
struct kernel_sigaction {
|
||||
unsigned int k_sa_flags;
|
||||
void (*k_sa_handler) (int, siginfo_t *, sig_ucontext_t *);
|
||||
sigset_t k_sa_mask;
|
||||
void (*k_sa_restorer)(void);
|
||||
int k_sa_resv[1]; /* reserved */
|
||||
};
|
||||
|
||||
|
||||
|
||||
#define SIGNAL_HANDLER(_name) \
|
||||
static void _name (int _dummy __attribute__ ((__unused__)), \
|
||||
siginfo_t *_info __attribute__ ((__unused__)), \
|
||||
sig_ucontext_t *_arg __attribute__ ((__unused__)))
|
||||
void *_arg __attribute__ ((__unused__)))
|
||||
|
||||
/*
|
||||
* MIPS leaves pc pointing at the faulting instruction, but the
|
||||
|
@ -66,35 +49,32 @@ static void _name (int _dummy __attribute__ ((__unused__)), \
|
|||
#define MAKE_THROW_FRAME(_exception) \
|
||||
do \
|
||||
{ \
|
||||
_arg->uc_mcontext.sc_pc += 4; \
|
||||
((sig_ucontext_t *)_arg)->uc_mcontext.sc_pc += 4; \
|
||||
(void)_dummy; \
|
||||
(void)_info; \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
/* For an explanation why we cannot simply use sigaction to
|
||||
install the handlers, see i386-signal.h. */
|
||||
|
||||
#define INIT_SEGV \
|
||||
do \
|
||||
{ \
|
||||
struct kernel_sigaction kact; \
|
||||
kact.k_sa_handler = catch_segv; \
|
||||
kact.k_sa_flags = SA_SIGINFO | SA_NODEFER; \
|
||||
sigemptyset (&kact.k_sa_mask); \
|
||||
syscall (SYS_sigaction, SIGSEGV, &kact, NULL); \
|
||||
} \
|
||||
#define INIT_SEGV \
|
||||
do \
|
||||
{ \
|
||||
struct sigaction act; \
|
||||
act.sa_sigaction = catch_segv; \
|
||||
act.sa_flags = SA_SIGINFO | SA_NODEFER; \
|
||||
sigemptyset (&act.sa_mask); \
|
||||
sigaction(SIGSEGV, &act, NULL); \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
#define INIT_FPE \
|
||||
do \
|
||||
{ \
|
||||
struct kernel_sigaction kact; \
|
||||
kact.k_sa_handler = catch_fpe; \
|
||||
kact.k_sa_flags = SA_SIGINFO | SA_NODEFER; \
|
||||
sigemptyset (&kact.k_sa_mask); \
|
||||
syscall (SYS_sigaction, SIGFPE, &kact, NULL); \
|
||||
} \
|
||||
#define INIT_FPE \
|
||||
do \
|
||||
{ \
|
||||
struct sigaction act; \
|
||||
act.sa_sigaction = catch_fpe; \
|
||||
act.sa_flags = SA_SIGINFO | SA_NODEFER; \
|
||||
sigemptyset (&act.sa_mask); \
|
||||
sigaction(SIGFPE, &act, NULL); \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
#undef HANDLE_DIVIDE_OVERFLOW
|
||||
|
|
Loading…
Add table
Reference in a new issue