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(a)redhat.com
https://www.redhat.com/mailman/listinfo/crash-utility