powerpc-signal.h: New File.
2003-06-17 Franz Sirl <Franz.Sirl-kernel@lauterbach.com> * include/powerpc-signal.h: New File. * configure.in: Use it. * configure: Regenerated. From-SVN: r68088
This commit is contained in:
parent
7cf6c9279e
commit
beea232412
@ -1,3 +1,9 @@
|
||||
2003-06-17 Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
|
||||
|
||||
* include/powerpc-signal.h: New File.
|
||||
* configure.in: Use it.
|
||||
* configure: Regenerated.
|
||||
|
||||
2003-06-17 Michael Koch <konqueror@gmx.de>
|
||||
|
||||
* java/util/Locale.java
|
||||
|
2
libjava/configure
vendored
2
libjava/configure
vendored
@ -8618,7 +8618,7 @@ case "${host}" in
|
||||
SIGNAL_HANDLER=include/dwarf2-signal.h
|
||||
;;
|
||||
powerpc-*-linux*)
|
||||
SIGNAL_HANDLER=include/dwarf2-signal.h
|
||||
SIGNAL_HANDLER=include/powerpc-signal.h
|
||||
;;
|
||||
alpha*-*-linux*)
|
||||
SIGNAL_HANDLER=include/dwarf2-signal.h
|
||||
|
@ -1004,7 +1004,7 @@ case "${host}" in
|
||||
SIGNAL_HANDLER=include/dwarf2-signal.h
|
||||
;;
|
||||
powerpc-*-linux*)
|
||||
SIGNAL_HANDLER=include/dwarf2-signal.h
|
||||
SIGNAL_HANDLER=include/powerpc-signal.h
|
||||
;;
|
||||
alpha*-*-linux*)
|
||||
SIGNAL_HANDLER=include/dwarf2-signal.h
|
||||
|
87
libjava/include/powerpc-signal.h
Normal file
87
libjava/include/powerpc-signal.h
Normal file
@ -0,0 +1,87 @@
|
||||
// powerpc-signal.h - Catch runtime signals and turn them into exceptions
|
||||
// on a powerpc based Linux system.
|
||||
|
||||
/* Copyright (C) 2003 Free Software Foundation
|
||||
|
||||
This file is part of libgcj.
|
||||
|
||||
This software is copyrighted work licensed under the terms of the
|
||||
Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
|
||||
details. */
|
||||
|
||||
|
||||
#ifndef JAVA_SIGNAL_H
|
||||
# define JAVA_SIGNAL_H 1
|
||||
|
||||
# include <signal.h>
|
||||
# include <sys/syscall.h>
|
||||
|
||||
# define HANDLE_SEGV 1
|
||||
# undef HANDLE_FPE
|
||||
|
||||
# define SIGNAL_HANDLER(_name) \
|
||||
static void _name (int /* _signal */, struct sigcontext *_sc)
|
||||
|
||||
/* PPC either leaves PC pointing at a faulting instruction or the
|
||||
following instruction, depending on the signal. SEGV always does
|
||||
the former, so we adjust the saved PC to point to the following
|
||||
instruction. This is what the handler in libgcc expects. */
|
||||
|
||||
# define MAKE_THROW_FRAME(_exception) \
|
||||
do \
|
||||
{ \
|
||||
_sc->regs->nip += 4; \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
/* For an explanation why we cannot simply use sigaction to
|
||||
install the handlers, see i386-signal.h. */
|
||||
|
||||
/* We use kernel_old_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.
|
||||
|
||||
Note that we explicitly avoid the SA_SIGINFO flag in INIT_SEGV and
|
||||
INIT_FPE below. Using the ucontext pointer passed as 3rd argument
|
||||
of a SA_SIGINFO type handler would need complicated backwards
|
||||
compatibility hacks in MAKE_THROW_FRAME, as the ucontext layout
|
||||
on PPC changed during the 2.5 kernel series. */
|
||||
|
||||
struct kernel_old_sigaction {
|
||||
void (*k_sa_handler) (int, struct sigcontext *);
|
||||
unsigned long k_sa_mask;
|
||||
unsigned long k_sa_flags;
|
||||
void (*k_sa_restorer) (void);
|
||||
};
|
||||
|
||||
# define INIT_SEGV \
|
||||
do \
|
||||
{ \
|
||||
nullp = new java::lang::NullPointerException (); \
|
||||
struct kernel_old_sigaction kact; \
|
||||
kact.k_sa_handler = catch_segv; \
|
||||
kact.k_sa_mask = 0; \
|
||||
kact.k_sa_flags = 0; \
|
||||
syscall (SYS_sigaction, SIGSEGV, &kact, NULL); \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
# define INIT_FPE \
|
||||
do \
|
||||
{ \
|
||||
arithexception = new java::lang::ArithmeticException \
|
||||
(JvNewStringLatin1 ("/ by zero")); \
|
||||
struct kernel_old_sigaction kact; \
|
||||
kact.k_sa_handler = catch_fpe; \
|
||||
kact.k_sa_mask = 0; \
|
||||
kact.k_sa_flags = 0; \
|
||||
syscall (SYS_sigaction, SIGFPE, &kact, NULL); \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
#endif /* JAVA_SIGNAL_H */
|
||||
|
Loading…
Reference in New Issue
Block a user