Commit d1d5c836 by Alan Modra Committed by Alan Modra

linux64.h (MD_FALLBACK_FRAME_STATE_FOR): Don't bump retaddr here.

	* config/rs6000/linux64.h (MD_FALLBACK_FRAME_STATE_FOR): Don't
	bump retaddr here.

	* include/powerpc-signal.h: Revert 2004-01-21 change.
	(INIT_SEGV, INIT_FPE): Provide powerpc64 versions.  Check return
	from syscall for ppc32 versions.

From-SVN: r77601
parent 6ab36f91
2004-02-10 Alan Modra <amodra@bigpond.net.au>
* config/rs6000/linux64.h (MD_FALLBACK_FRAME_STATE_FOR): Don't
bump retaddr here.
2004-02-10 Paolo Bonzini <bonzini@gnu.org> 2004-02-10 Paolo Bonzini <bonzini@gnu.org>
* rtl.h (schedule_insns, schedule_ebbs, fix_sched_param, * rtl.h (schedule_insns, schedule_ebbs, fix_sched_param,
......
...@@ -643,15 +643,9 @@ enum { SIGNAL_FRAMESIZE = 64 }; ...@@ -643,15 +643,9 @@ enum { SIGNAL_FRAMESIZE = 64 };
(FS)->regs.reg[LINK_REGISTER_REGNUM].loc.offset \ (FS)->regs.reg[LINK_REGISTER_REGNUM].loc.offset \
= (long)&(sc_->regs->link) - new_cfa_; \ = (long)&(sc_->regs->link) - new_cfa_; \
\ \
/* The unwinder expects the IP to point to the following insn, \
whereas the kernel returns the address of the actual \
faulting insn. We store NIP+4 in an unused register slot to \
get the same result for multiple evaluation of the same signal \
frame. */ \
sc_->regs->gpr[47] = sc_->regs->nip + 4; \
(FS)->regs.reg[ARG_POINTER_REGNUM].how = REG_SAVED_OFFSET; \ (FS)->regs.reg[ARG_POINTER_REGNUM].how = REG_SAVED_OFFSET; \
(FS)->regs.reg[ARG_POINTER_REGNUM].loc.offset \ (FS)->regs.reg[ARG_POINTER_REGNUM].loc.offset \
= (long)&(sc_->regs->gpr[47]) - new_cfa_; \ = (long)&(sc_->regs->nip) - new_cfa_; \
(FS)->retaddr_column = ARG_POINTER_REGNUM; \ (FS)->retaddr_column = ARG_POINTER_REGNUM; \
goto SUCCESS; \ goto SUCCESS; \
} while (0) } while (0)
......
2004-02-10 Alan Modra <amodra@bigpond.net.au>
* include/powerpc-signal.h: Revert 2004-01-21 change.
(INIT_SEGV, INIT_FPE): Provide powerpc64 versions. Check return
from syscall for ppc32 versions.
2004-02-08 Per Bothner <per@bothner.com> 2004-02-08 Per Bothner <per@bothner.com>
* java/nio/ByteBuffer.java (shiftDown): New helper method. * java/nio/ByteBuffer.java (shiftDown): New helper method.
......
...@@ -11,17 +11,15 @@ details. */ ...@@ -11,17 +11,15 @@ details. */
#ifndef JAVA_SIGNAL_H #ifndef JAVA_SIGNAL_H
# define JAVA_SIGNAL_H 1 #define JAVA_SIGNAL_H 1
# ifndef __powerpc64__ #include <signal.h>
#include <sys/syscall.h>
# include <signal.h> #define HANDLE_SEGV 1
# include <sys/syscall.h> #undef HANDLE_FPE
# define HANDLE_SEGV 1 #define SIGNAL_HANDLER(_name) \
# undef HANDLE_FPE
# define SIGNAL_HANDLER(_name) \
static void _name (int /* _signal */, struct sigcontext *_sc) static void _name (int /* _signal */, struct sigcontext *_sc)
/* PPC either leaves PC pointing at a faulting instruction or the /* PPC either leaves PC pointing at a faulting instruction or the
...@@ -29,7 +27,7 @@ details. */ ...@@ -29,7 +27,7 @@ details. */
the former, so we adjust the saved PC to point to the following the former, so we adjust the saved PC to point to the following
instruction. This is what the handler in libgcc expects. */ instruction. This is what the handler in libgcc expects. */
# define MAKE_THROW_FRAME(_exception) \ #define MAKE_THROW_FRAME(_exception) \
do \ do \
{ \ { \
_sc->regs->nip += 4; \ _sc->regs->nip += 4; \
...@@ -53,6 +51,7 @@ while (0) ...@@ -53,6 +51,7 @@ while (0)
compatibility hacks in MAKE_THROW_FRAME, as the ucontext layout compatibility hacks in MAKE_THROW_FRAME, as the ucontext layout
on PPC changed during the 2.5 kernel series. */ on PPC changed during the 2.5 kernel series. */
#ifndef __powerpc64__
struct kernel_old_sigaction { struct kernel_old_sigaction {
void (*k_sa_handler) (int, struct sigcontext *); void (*k_sa_handler) (int, struct sigcontext *);
unsigned long k_sa_mask; unsigned long k_sa_mask;
...@@ -60,35 +59,61 @@ struct kernel_old_sigaction { ...@@ -60,35 +59,61 @@ struct kernel_old_sigaction {
void (*k_sa_restorer) (void); void (*k_sa_restorer) (void);
}; };
# define INIT_SEGV \ #define INIT_SEGV \
do \ do \
{ \ { \
struct kernel_old_sigaction kact; \ struct kernel_old_sigaction kact; \
kact.k_sa_handler = catch_segv; \ kact.k_sa_handler = catch_segv; \
kact.k_sa_mask = 0; \ kact.k_sa_mask = 0; \
kact.k_sa_flags = 0; \ kact.k_sa_flags = 0; \
syscall (SYS_sigaction, SIGSEGV, &kact, NULL); \ if (syscall (SYS_sigaction, SIGSEGV, &kact, NULL) != 0) \
__asm__ __volatile__ (".long 0"); \
} \ } \
while (0) while (0)
# define INIT_FPE \ #define INIT_FPE \
do \ do \
{ \ { \
struct kernel_old_sigaction kact; \ struct kernel_old_sigaction kact; \
kact.k_sa_handler = catch_fpe; \ kact.k_sa_handler = catch_fpe; \
kact.k_sa_mask = 0; \ kact.k_sa_mask = 0; \
kact.k_sa_flags = 0; \ kact.k_sa_flags = 0; \
syscall (SYS_sigaction, SIGFPE, &kact, NULL); \ if (syscall (SYS_sigaction, SIGFPE, &kact, NULL) != 0) \
__asm__ __volatile__ (".long 0"); \
} \ } \
while (0) while (0)
# else #else /* powerpc64 */
struct kernel_sigaction
{
void (*k_sa_handler) (int, struct sigcontext *);
unsigned long k_sa_flags;
void (*k_sa_restorer)(void);
unsigned long k_sa_mask;
};
# undef HANDLE_SEGV #define INIT_SEGV \
# undef HANDLE_FPE do \
{ \
struct kernel_sigaction kact; \
memset (&kact, 0, sizeof (kact)); \
kact.k_sa_handler = catch_segv; \
if (syscall (SYS_rt_sigaction, SIGSEGV, &kact, NULL, 8) != 0) \
__asm__ __volatile__ (".long 0"); \
} \
while (0)
# define INIT_SEGV do {} while (0) #define INIT_FPE \
# define INIT_FPE do {} while (0) do \
# endif { \
struct kernel_sigaction kact; \
memset (&kact, 0, sizeof (kact)); \
kact.k_sa_handler = catch_fpe; \
if (syscall (SYS_rt_sigaction, SIGFPE, &kact, NULL, 8) != 0) \
__asm__ __volatile__ (".long 0"); \
} \
while (0)
#endif
#endif /* JAVA_SIGNAL_H */ #endif /* JAVA_SIGNAL_H */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment