[Crash-utility] An other patch for command sig
Dave Anderson
anderson at redhat.com
Mon Aug 28 13:36:25 UTC 2006
Olivier Daudel wrote:
> Hi Dave,
> I think we have an other small problem with sig :
>
> crash> sig
> PID: 14836 TASK: f7d89020 CPU: 1 COMMAND: "crash"
> SIGPENDING: no
> SIGNAL: 0000000000000000
> BLOCKED: 0000000000000000
> SIGNAL_STRUCT: c1e7ae00 COUNT: 1
> SIG SIGACTION HANDLER MASK FLAGS [1] f5129804 817af58
> 0000000000000001 10000000 (SA_RESTART)
> [...]
> [63] f5129cdc SIG_DFL 0000000000000000 0 SIGQUEUE: (empty)
>
> The last slot should be 64 ?
>
I might be missing something, as I'm not particularly clear on this one.
In 2.4 kernels, SIGRTMAX was:
#define SIGRTMAX (_NSIG-1)
and now in 2.6.17 I see this:
#define SIGRTMAX _NSIG
But SIGRTMAX is rarely used, and I don't see how a signal "64" can fit
into a sigset_t.
Dave
>
> The patch is supposed to fix this problem.
>
> I also indtroduce RT signals. I know this is trivial because the names
> are SIGRTMIN+x (or SIGRTMAX-x). The motivation is the command sig -s.
> By the way, there is a decision to enforce : do we leave the (null) to
> remember that signals 32 and 33 don't exist (if i am correct) or do we
> discard them ?
> crash> sig -s ffffffffffffffff
> SIGHUP SIGINT SIGQUIT SIGILL SIGTRAP SIGABRT SIGBUS SIGFPE SIGKILL SIGUSR1
> SIGSEGV SIGUSR2 SIGPIPE SIGALRM SIGTERM SIGSTKFLT SIGCHLD SIGCONT SIGSTOP
> SIGTSTP SIGTTIN SIGTTOU SIGURG SIGXCPU SIGXFSZ SIGVTALRM SIGPROF
> SIGWINCH SIGIO
> SIGPWR SIGSYS (null) (null) SIGRTMIN SIGRTMIN+1 SIGRTMIN+2 SIGRTMIN+3
> SIGRTMIN+4
> SIGRTMIN+5 SIGRTMIN+6 SIGRTMIN+7 SIGRTMIN+8 SIGRTMIN+9 SIGRTMIN+10 SIGRTMIN+11
> SIGRTMIN+12 SIGRTMIN+13 SIGRTMIN+14 SIGRTMIN+15 SIGRTMAX-14 SIGRTMAX-13
> SIGRTMAX-12 SIGRTMAX-11 SIGRTMAX-10 SIGRTMAX-9 SIGRTMAX-8 SIGRTMAX-7
> SIGRTMAX-6
> SIGRTMAX-5 SIGRTMAX-4 SIGRTMAX-3 SIGRTMAX-2 SIGRTMAX-1 SIGRTMAX
>
> =================================================================
> --- crash-4.0-3.2/task.c 2006-08-25 23:55:20.000000000 +0200
> +++ crash-4.0-3.2-patch/task.c 2006-08-26 00:21:19.000000000 +0200
> @@ -5522,7 +5522,6 @@
> char *name;
> char *altname;
> } signame[_NSIG] = {
> - /* 0 */ {NULL, NULL},
> /* 1 */ {"SIGHUP", NULL},
> /* 2 */ {"SIGINT", NULL},
> /* 3 */ {"SIGQUIT", NULL},
> @@ -5553,8 +5552,40 @@
> /* 28 */ {"SIGWINCH", NULL},
> /* 29 */ {"SIGIO", "SIGPOLL"},
> /* 30 */ {"SIGPWR", NULL},
> - /* 31 */ {"SIGSYS", NULL},
> - {NULL, NULL}, /* Real time signals start here. */
> + /* 31 */ {"SIGSYS", "SIGUNUSED"},
> + /* 32 */ {NULL, NULL}, /* Real time signals start here. */
> + /* 33 */ {NULL, NULL},
> + /* 34 */ {"SIGRTMIN", NULL},
> + /* 35 */ {"SIGRTMIN+1", NULL},
> + /* 36 */ {"SIGRTMIN+2", NULL},
> + /* 37 */ {"SIGRTMIN+3", NULL},
> + /* 38 */ {"SIGRTMIN+4", NULL},
> + /* 39 */ {"SIGRTMIN+5", NULL},
> + /* 40 */ {"SIGRTMIN+6", NULL},
> + /* 41 */ {"SIGRTMIN+7", NULL},
> + /* 42 */ {"SIGRTMIN+8", NULL},
> + /* 43 */ {"SIGRTMIN+9", NULL},
> + /* 44 */ {"SIGRTMIN+10", NULL},
> + /* 45 */ {"SIGRTMIN+11", NULL},
> + /* 46 */ {"SIGRTMIN+12", NULL},
> + /* 47 */ {"SIGRTMIN+13", NULL},
> + /* 48 */ {"SIGRTMIN+14", NULL},
> + /* 49 */ {"SIGRTMIN+15", NULL},
> + /* 50 */ {"SIGRTMAX-14", NULL},
> + /* 51 */ {"SIGRTMAX-13", NULL},
> + /* 52 */ {"SIGRTMAX-12", NULL},
> + /* 53 */ {"SIGRTMAX-11", NULL},
> + /* 54 */ {"SIGRTMAX-10", NULL},
> + /* 55 */ {"SIGRTMAX-9", NULL},
> + /* 56 */ {"SIGRTMAX-8", NULL},
> + /* 57 */ {"SIGRTMAX-7", NULL},
> + /* 58 */ {"SIGRTMAX-6", NULL},
> + /* 59 */ {"SIGRTMAX-5", NULL},
> + /* 60 */ {"SIGRTMAX-4", NULL},
> + /* 61 */ {"SIGRTMAX-3", NULL},
> + /* 62 */ {"SIGRTMAX-2", NULL},
> + /* 63 */ {"SIGRTMAX-1", NULL},
> + /* 64 */ {"SIGRTMAX", NULL},
> };
>
> static void
> @@ -5566,8 +5597,8 @@
> if (!signame[i].name)
> continue;
>
> - fprintf(fp, "%s[%d] %s", i < 10 ? " " : "", -
> i, signame[i].name);
> + fprintf(fp, "%s[%d] %s", i+1 < 10 ? " " : "", +
> i+1, signame[i].name);
> if (signame[i].altname)
> fprintf(fp, "/%s", signame[i].altname);
> fprintf(fp, "\n");
> @@ -5591,12 +5622,12 @@
>
> len = 0;
>
> - for (i = c = 0; i < (_NSIG/2); i++) {
> - mask = (ulong)(1) << i;
> + for (i = c = 0; i < (_NSIG); i++) {
> + mask = (ulonglong)(1) << i;
> if ((sig = (sigset & mask))) {
> - bit = ffs((int)sig);
> + /* bit = ffs((int)sig); */
> sprintf(buf, "%s%s", c++ ? " " : "", -
> signame[bit].name);
> + signame[i].name);
> if ((len + strlen(buf)) > 80) {
> shift_string_left(buf, 1);
> fprintf(fp, "\n");
> @@ -5827,19 +5858,19 @@
> } else
> use_sighand = FALSE;
>
> - for (i = 1; i < _NSIG; i++) {
> - fprintf(fp, "%s[%d] ", i < 10 ? " " : "", i);
> + for (i = 0; i < _NSIG; i++) {
> + fprintf(fp, "%s[%d] ", i+1 < 10 ? " " : "", i+1);
>
> if (use_sighand) {
> kaddr = sighand_struct +
> OFFSET(sighand_struct_action) +
> - ((i-1) * SIZE(k_sigaction));
> + ((i) * SIZE(k_sigaction));
> uaddr = signal_buf + OFFSET(sighand_struct_action) +
> - ((i-1) * SIZE(k_sigaction));
> + ((i) * SIZE(k_sigaction));
> } else {
> kaddr = signal_struct + OFFSET(signal_struct_action) +
> - ((i-1) * SIZE(k_sigaction));
> + ((i) * SIZE(k_sigaction));
> uaddr = signal_buf + OFFSET(signal_struct_action) +
> - ((i-1) * SIZE(k_sigaction));
> + ((i) * SIZE(k_sigaction));
> }
>
> handler = ULONG(uaddr + OFFSET(sigaction_sa_handler));
>
> ----------------------------------------------------------------
> Ce message a ete envoye par IMP, grace a l'Universite Paris 10 Nanterre
>
> --
> Crash-utility mailing list
> Crash-utility at redhat.com
> https://www.redhat.com/mailman/listinfo/crash-utility
More information about the Crash-utility
mailing list