Commit 94017021 by Rainer Orth Committed by Rainer Orth

init.c [sgi] (__gnat_error_handler): Update sigaction(2) citation.

	* init.c [sgi] (__gnat_error_handler): Update sigaction(2) citation.
	Correct argument types.
	Extract code from reason.
	(__gnat_install_handler): Assign to act.sa_sigaction.

From-SVN: r176619
parent 7e2fe488
2011-07-22 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* init.c [sgi] (__gnat_error_handler): Update sigaction(2) citation.
Correct argument types.
Extract code from reason.
(__gnat_install_handler): Assign to act.sa_sigaction.
2011-07-21 Eric Botcazou <ebotcazou@adacore.com> 2011-07-21 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/Make-lang.in (GNAT1_ADA_OBJS): Move ada/b_gnat1.o to... * gcc-interface/Make-lang.in (GNAT1_ADA_OBJS): Move ada/b_gnat1.o to...
......
...@@ -763,16 +763,31 @@ extern struct Exception_Data _abort_signal; ...@@ -763,16 +763,31 @@ extern struct Exception_Data _abort_signal;
connecting that handler, with the effects described in the sigaction connecting that handler, with the effects described in the sigaction
man page: man page:
SA_SIGINFO [...] SA_SIGINFO If set and the signal is caught, sig is passed as the
If cleared and the signal is caught, the first argument is first argument to the signal-catching function. If the
also the signal number but the second argument is the signal second argument is not equal to NULL, it points to a
code identifying the cause of the signal. The third argument siginfo_t structure containing the reason why the
points to a sigcontext_t structure containing the receiving signal was generated [see siginfo(5)]; the third
process's context when the signal was delivered. */ argument points to a ucontext_t structure containing
the receiving process's context when the signal was
delivered [see ucontext(5)]. If cleared and the signal
is caught, the first argument is also the signal number
but the second argument is the signal code identifying
the cause of the signal. The third argument points to a
sigcontext_t structure containing the receiving
process's context when the signal was delivered. This
is the default behavior (see signal(5) for more
details). Additionally, when SA_SIGINFO is set for a
signal, multiple occurrences of that signal will be
queued for delivery in FIFO order (see sigqueue(3) for
a more detailed explanation of this concept), if those
occurrences of that signal were generated using
sigqueue(3). */
static void static void
__gnat_error_handler (int sig, int code, sigcontext_t *sc ATTRIBUTE_UNUSED) __gnat_error_handler (int sig, siginfo_t *reason, void *uc ATTRIBUTE_UNUSED)
{ {
int code = reason == NULL ? 0 : reason->si_code;
struct Exception_Data *exception; struct Exception_Data *exception;
const char *msg; const char *msg;
...@@ -859,7 +874,7 @@ __gnat_install_handler (void) ...@@ -859,7 +874,7 @@ __gnat_install_handler (void)
exceptions. Make sure that the handler isn't interrupted by another exceptions. Make sure that the handler isn't interrupted by another
signal that might cause a scheduling event! */ signal that might cause a scheduling event! */
act.sa_handler = __gnat_error_handler; act.sa_sigaction = __gnat_error_handler;
act.sa_flags = SA_NODEFER + SA_RESTART; act.sa_flags = SA_NODEFER + SA_RESTART;
sigfillset (&act.sa_mask); sigfillset (&act.sa_mask);
sigemptyset (&act.sa_mask); sigemptyset (&act.sa_mask);
......
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