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:
David Daney 2006-07-20 17:30:42 +00:00 committed by David Daney
parent b70f0f48c7
commit e0b103c659
2 changed files with 31 additions and 42 deletions

View file

@ -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.

View file

@ -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