i386-signal.h (RESTORE): New.

2003-07-08  Andrew Haley  <aph@redhat.com>

        * include/i386-signal.h (RESTORE): New.
        (INIT_SEGV): Set restorer.
        (INIT_FPE): Likewise.

From-SVN: r69957
This commit is contained in:
Andrew Haley 2003-07-30 14:50:02 +00:00 committed by Andrew Haley
parent 48b3222dcc
commit cf68fdb19b
2 changed files with 35 additions and 14 deletions

View File

@ -1,3 +1,9 @@
2003-07-08 Andrew Haley <aph@redhat.com>
* include/i386-signal.h (RESTORE): New.
(INIT_SEGV): Set restorer.
(INIT_FPE): Likewise.
2003-07-29 Thomas Fitzsimmons <fitzsim@redhat.com>
* gnu/java/awt/peer/gtk/GtkButtonPeer.java: Call getName rather

View File

@ -108,26 +108,44 @@ struct old_i386_kernel_sigaction {
void (*sa_restorer) (void);
};
#define RESTORE(name, syscall) RESTORE2 (name, syscall)
# define RESTORE2(name, syscall) \
asm \
( \
".text\n" \
".byte 0 # Yes, this really is necessary\n" \
" .align 8\n" \
"__" #name ":\n" \
" popl %eax\n" \
" movl $" #syscall ", %eax\n" \
" int $0x80" \
);
RESTORE (restore, __NR_sigreturn)
static void restore (void) asm ("__restore");
#define INIT_SEGV \
do \
{ \
struct old_i386_kernel_sigaction kact; \
kact.k_sa_handler = catch_segv; \
kact.k_sa_mask = 0; \
kact.k_sa_flags = 0; \
kact.k_sa_flags = 0x4000000; \
kact.sa_restorer = restore; \
syscall (SYS_sigaction, SIGSEGV, &kact, NULL); \
} \
while (0)
#define INIT_FPE \
do \
{ \
struct old_i386_kernel_sigaction kact; \
kact.k_sa_handler = catch_fpe; \
kact.k_sa_mask = 0; \
kact.k_sa_flags = 0; \
syscall (SYS_sigaction, SIGFPE, &kact, NULL); \
} \
#define INIT_FPE \
do \
{ \
struct old_i386_kernel_sigaction kact; \
kact.k_sa_handler = catch_fpe; \
kact.k_sa_mask = 0; \
kact.k_sa_flags = 0x4000000; \
kact.sa_restorer = restore; \
syscall (SYS_sigaction, SIGFPE, &kact, NULL); \
} \
while (0)
/* You might wonder why we use syscall(SYS_sigaction) in INIT_FPE
@ -144,10 +162,7 @@ while (0)
* Also, there is at the present time no unwind info in the
* linuxthreads library's signal handlers and so we can't unwind
* through them anyway.
* Finally, the code that glibc uses to return from a signal handler
* is subject to change. */
* through them anyway. */
#endif /* JAVA_SIGNAL_H */