John Kacur/Toronto/IBM@IBMCA
jekacur@ca.ibm.com
(416) 448-2584 (phone)
778-2584 (tie line)
---------------------- Forwarded by John Kacur/Toronto/IBM on 01/25/2001
10:06 AM ---------------------------
John Kacur
01/24/2001 04:47 PM
To: aj@suse.de
cc: aj@arthur.inka.de
From: John Kacur/Toronto/IBM@IBMCA
Subject: Re: [Fwd: sigcontext on Linux-ppc in user space] (Document link:
John Kacur)
Thanks for your reply. Yes, you are right I shouldn't include kernel files
in user space programs, and signal.h will contain what I need anyway. But I
still can't get at the sigcontext.c on Linux Powerpc. For example, this
simple program gives me a segmentation fault. (Linux ppc, suse 6.4, kernel
2.2.14
#include <stdio.h>
#include <signal.h>
/* Function Prototypes */
void install_sigusr1_handler(void);
void sigusr_handler(int , siginfo_t *, struct sigcontext * scp);
int main(void)
{
install_sigusr1_handler();
printf("SIGUSR1 = %d\n", SIGUSR1);
raise(SIGUSR1);
exit(0);
}
void install_sigusr1_handler(void)
{
struct sigaction newAct;
if (sigemptyset(&newAct.sa_mask) != 0) {
fprintf(stderr, "Warning, sigemptyset failed.\n");
}
newAct.sa_flags = 0;
newAct.sa_flags |= SA_SIGINFO | SA_RESTART;
newAct.sa_sigaction = (void
(*)(int,siginfo_t*,void*))sigusr_handler;
if (sigaction(SIGUSR1, &newAct, NULL) != 0) {
fprintf(stderr, "Couldn't install SIGUSR1 handler.\n");
fprintf(stderr, "Exiting.\n");
exit(1);
}
}
void sigusr_handler(int signo, siginfo_t *siginfp, struct sigcontext * scp)
{
printf("scp = %08x\n", scp);
printf("scp->signal = %d\n", scp->signal);
}
Ultimately, I want to get at the regs, ie scp->pt_regs->nip for example.
Any ideas?
Thanks.
John Kacur/Toronto/IBM@IBMCA
jekacur@ca.ibm.com
(416) 448-2584 (phone)
778-2584 (tie line)
John Kacur <jkacur@home.com>@e1.ny.us.ibm.com on 01/24/2001 10:26:30 AM
Please respond to John Kacur <jkacur@home.com>
Sent by: jkacur@e1.ny.us.ibm.com
To: John Kacur/Toronto/IBM@IBMCA
cc:
Subject: [Fwd: sigcontext on Linux-ppc in user space]
----- Message from on -----
John Kacur <jkacur@home.com> writes:
> Does anyone know how to get at the struct sigcontext in a signal handler
> on Linux for powerpc? sigaction of course lets you create a signal
> handler as a function with the prototype void(*)(int, siginfo_t *, void
> *)
> where the last argument, a pointer to void, is the sigcontext. I believe
> that the last argument is NOT defined by POSIX and so is implementation
> dependent.
>
> On Intel it seems sufficient to use #include <asm/sigcontext.h>
> to get the definition of struct sigcontext, and then get the values
> you'd like out of the signal handler. But on Linux for powerpc, the same
> thing doesn't work. Does anyone know what the trick is here to
> accomplish this?
You should never include kernel headers in user space.
If you have a glibc 2.1 (or newer) based system, just include
<signal.h> which will include <bits/sigcontext.h> with the struct
(this works on all architectures).
Andreas
-- Andreas Jaeger SuSE Labs aj@suse.de private aj@arthur.inka.de http://www.suse.de/~aj - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/
This archive was generated by hypermail 2b29 : Wed Jan 31 2001 - 21:00:21 EST