Mercurial > illumos > illumos-gate
changeset 11948:350aa79a756e
6935835 pflags needs to report new signal sets
author | Roger A. Faulkner <Roger.Faulkner@Sun.COM> |
---|---|
date | Wed, 17 Mar 2010 18:26:34 -0700 |
parents | e9d33e5d3842 |
children | 61dabb368ae6 |
files | usr/src/cmd/ptools/pflags/pflags.c |
diffstat | 1 files changed, 56 insertions(+), 53 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/cmd/ptools/pflags/pflags.c Wed Mar 17 18:14:07 2010 -0700 +++ b/usr/src/cmd/ptools/pflags/pflags.c Wed Mar 17 18:26:34 2010 -0700 @@ -20,12 +20,10 @@ */ /* - * Copyright 2006 Sun Microsystems, Inc. All rights reserved. + * Copyright 2010 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ -#pragma ident "%Z%%M% %I% %E% SMI" - #include <stdio.h> #include <stdio_ext.h> #include <stdlib.h> @@ -135,8 +133,8 @@ fltset_t fltmask; sysset_t entryset; sysset_t exitset; - uint32_t sigtrace, sigtrace2, fltbits; - uint32_t sigpend, sigpend2; + uint32_t sigtrace, sigtrace1, sigtrace2, fltbits; + uint32_t sigpend, sigpend1, sigpend2; uint32_t *bits; char buf[PRSIGBUFSZ]; look_arg_t lookarg; @@ -151,7 +149,7 @@ return (0); } (void) fprintf(stderr, "%s: cannot examine %s: %s\n", - command, arg, Pgrab_error(gcode)); + command, arg, Pgrab_error(gcode)); return (1); } @@ -189,41 +187,50 @@ if (fltbits) (void) printf("\tflttrace = 0x%.8x\n", fltbits); +#if (MAXSIG > 2 * 32) && (MAXSIG <= 3 * 32) /* assumption */ sigtrace = *((uint32_t *)&sigmask); - sigtrace2 = *((uint32_t *)&sigmask + 1); - if (sigtrace | sigtrace2) { - (void) printf("\tsigtrace = 0x%.8x 0x%.8x\n\t %s\n", - sigtrace, sigtrace2, + sigtrace1 = *((uint32_t *)&sigmask + 1); + sigtrace2 = *((uint32_t *)&sigmask + 2); +#else +#error "fix me: MAXSIG out of bounds" +#endif + if (sigtrace | sigtrace1 | sigtrace2) + (void) printf("\tsigtrace = 0x%.8x 0x%.8x 0x%.8x\n\t %s\n", + sigtrace, sigtrace1, sigtrace2, proc_sigset2str(&sigmask, "|", 1, buf, sizeof (buf))); - } bits = ((uint32_t *)&entryset); if (bits[0] | bits[1] | bits[2] | bits[3] | bits[4] | bits[5] | bits[6] | bits[7]) (void) printf( - "\tentryset = " - "0x%.8x 0x%.8x 0x%.8x 0x%.8x\n" - "\t " - "0x%.8x 0x%.8x 0x%.8x 0x%.8x\n", - bits[0], bits[1], bits[2], bits[3], - bits[4], bits[5], bits[6], bits[7]); + "\tentryset = " + "0x%.8x 0x%.8x 0x%.8x 0x%.8x\n" + "\t " + "0x%.8x 0x%.8x 0x%.8x 0x%.8x\n", + bits[0], bits[1], bits[2], bits[3], + bits[4], bits[5], bits[6], bits[7]); bits = ((uint32_t *)&exitset); if (bits[0] | bits[1] | bits[2] | bits[3] | bits[4] | bits[5] | bits[6] | bits[7]) (void) printf( - "\texitset = " - "0x%.8x 0x%.8x 0x%.8x 0x%.8x\n" - "\t " - "0x%.8x 0x%.8x 0x%.8x 0x%.8x\n", - bits[0], bits[1], bits[2], bits[3], - bits[4], bits[5], bits[6], bits[7]); + "\texitset = " + "0x%.8x 0x%.8x 0x%.8x 0x%.8x\n" + "\t " + "0x%.8x 0x%.8x 0x%.8x 0x%.8x\n", + bits[0], bits[1], bits[2], bits[3], + bits[4], bits[5], bits[6], bits[7]); +#if (MAXSIG > 2 * 32) && (MAXSIG <= 3 * 32) /* assumption */ sigpend = *((uint32_t *)&pstatus.pr_sigpend); - sigpend2 = *((uint32_t *)&pstatus.pr_sigpend + 1); - if (sigpend | sigpend2) - (void) printf("\tsigpend = 0x%.8x,0x%.8x\n", - sigpend, sigpend2); + sigpend1 = *((uint32_t *)&pstatus.pr_sigpend + 1); + sigpend2 = *((uint32_t *)&pstatus.pr_sigpend + 2); +#else +#error "fix me: MAXSIG out of bounds" +#endif + if (sigpend | sigpend1 | sigpend2) + (void) printf("\tsigpend = 0x%.8x,0x%.8x,0x%.8x\n", + sigpend, sigpend1, sigpend2); lookarg.pflags = pstatus.pr_flags; lookarg.count = 0; @@ -249,8 +256,8 @@ lwplook(look_arg_t *arg, const lwpstatus_t *psp, const lwpsinfo_t *pip) { int flags; - uint32_t sighold, sighold2; - uint32_t sigpend, sigpend2; + uint32_t sighold, sighold1, sighold2; + uint32_t sigpend, sigpend1, sigpend2; int cursig; char buf[32]; @@ -298,35 +305,31 @@ if (psp->pr_why != PR_REQUESTED && psp->pr_why != PR_SUSPENDED) (void) printf(" what = %s", - prwhat(psp->pr_why, psp->pr_what)); + prwhat(psp->pr_why, psp->pr_what)); (void) printf("\n"); } +#if (MAXSIG > 2 * 32) && (MAXSIG <= 3 * 32) /* assumption */ sighold = *((uint32_t *)&psp->pr_lwphold); - sighold2 = *((uint32_t *)&psp->pr_lwphold + 1); + sighold1 = *((uint32_t *)&psp->pr_lwphold + 1); + sighold2 = *((uint32_t *)&psp->pr_lwphold + 2); sigpend = *((uint32_t *)&psp->pr_lwppend); - sigpend2 = *((uint32_t *)&psp->pr_lwppend + 1); + sigpend1 = *((uint32_t *)&psp->pr_lwppend + 1); + sigpend2 = *((uint32_t *)&psp->pr_lwppend + 2); +#else +#error "fix me: MAXSIG out of bounds" +#endif cursig = psp->pr_cursig; - if (sighold | sighold2 | sigpend | sigpend2 | cursig) { - (void) printf("\t"); - if (sighold | sighold2) { - (void) printf("sigmask = 0x%.8x,0x%.8x", - sighold, sighold2); - if (sigpend | sigpend2 | cursig) - (void) printf(" "); - } - if (sigpend | sigpend2) { - (void) printf("lwppend = 0x%.8x,0x%.8x", - sigpend, sigpend2); - if (cursig) - (void) printf(" "); - } - if (cursig) - (void) printf("cursig = %s", - proc_signame(cursig, buf, sizeof (buf))); - (void) printf("\n"); - } + if (sighold | sighold1 | sighold2) + (void) printf("\tsigmask = 0x%.8x,0x%.8x,0x%.8x\n", + sighold, sighold1, sighold2); + if (sigpend | sigpend1 | sigpend2) + (void) printf("\tlwppend = 0x%.8x,0x%.8x,0x%.8x\n", + sigpend, sigpend1, sigpend2); + if (cursig) + (void) printf("\tcursig = %s\n", + proc_signame(cursig, buf, sizeof (buf))); if (rflag) { if (Pstate(Pr) == PS_DEAD || (arg->pflags & PR_STOPPED)) { @@ -557,7 +560,7 @@ for (i = 0; i < NPRGREG32; i++) { (void) printf(" %s = 0x%.8X", - regname32[i], reg32[i]); + regname32[i], reg32[i]); if ((i+1) % 4 == 0) (void) putchar('\n'); } @@ -582,7 +585,7 @@ for (i = 0; i < NPRGREG; i++) { (void) printf(" %s = 0x%.*lX", - regname[i], width, (long)reg[i]); + regname[i], width, (long)reg[i]); if ((i+1) % cols == 0) (void) putchar('\n'); }