Print this page
15254 %ymm registers not restored after signal handler
15367 x86 getfpregs() summons corrupting %xmm ghosts
15333 want x86 /proc xregs support (libc_db, libproc, mdb, etc.)
15336 want libc functions for extended ucontext_t
15334 want ps_lwphandle-specific reg routines
15328 FPU_CW_INIT mistreats reserved bit
15335 i86pc fpu_subr.c isn't really platform-specific
15332 setcontext(2) isn't actually noreturn
15331 need <sys/stdalign.h>
Change-Id: I7060aa86042dfb989f77fc3323c065ea2eafa9ad
Conflicts:
usr/src/uts/common/fs/proc/prcontrol.c
usr/src/uts/intel/os/archdep.c
usr/src/uts/intel/sys/ucontext.h
usr/src/uts/intel/syscall/getcontext.c
*** 51,63 ****
static int lwplook(look_arg_t *, const lwpstatus_t *, const lwpsinfo_t *);
static char *prflags(int);
static char *prwhy(int);
static char *prwhat(int, int);
static void dumpregs(const prgregset_t, int);
- #if defined(__sparc) && defined(_ILP32)
- static void dumpregs_v8p(const prgregset_t, const prxregset_t *, int);
- #endif
static char *command;
static struct ps_prochandle *Pr;
static int is64; /* Is current process 64-bit? */
--- 51,60 ----
*** 347,373 ****
(int)ps.pr_pid, ps.pr_psargs, t);
}
if (rflag) {
if (Pstate(Pr) == PS_DEAD || (arg->pflags & PR_STOPPED)) {
- #if defined(__sparc) && defined(_ILP32)
- /*
- * If we're SPARC/32-bit, see if we can get extra
- * register state for this lwp. If it's a v8plus
- * program, print the 64-bit register values.
- */
- prxregset_t prx;
-
- if (Plwp_getxregs(Pr, psp->pr_lwpid, &prx) == 0 &&
- prx.pr_type == XR_TYPE_V8P)
- dumpregs_v8p(psp->pr_reg, &prx, is64);
- else
- #endif /* __sparc && _ILP32 */
dumpregs(psp->pr_reg, is64);
! } else
(void) printf("\tNot stopped, can't show registers\n");
}
return (0);
}
static char *
--- 344,358 ----
(int)ps.pr_pid, ps.pr_psargs, t);
}
if (rflag) {
if (Pstate(Pr) == PS_DEAD || (arg->pflags & PR_STOPPED)) {
dumpregs(psp->pr_reg, is64);
! } else {
(void) printf("\tNot stopped, can't show registers\n");
}
+ }
return (0);
}
static char *
*** 505,528 ****
}
return (str);
}
- #if defined(__sparc)
- static const char * const regname[NPRGREG] = {
- " %g0", " %g1", " %g2", " %g3", " %g4", " %g5", " %g6", " %g7",
- " %o0", " %o1", " %o2", " %o3", " %o4", " %o5", " %sp", " %o7",
- " %l0", " %l1", " %l2", " %l3", " %l4", " %l5", " %l6", " %l7",
- " %i0", " %i1", " %i2", " %i3", " %i4", " %i5", " %fp", " %i7",
- #ifdef __sparcv9
- "%ccr", " %pc", "%npc", " %y", "%asi", "%fprs"
- #else
- "%psr", " %pc", "%npc", " %y", "%wim", "%tbr"
- #endif
- };
- #endif /* __sparc */
-
#if defined(__amd64)
static const char * const regname[NPRGREG] = {
"%r15", "%r14", "%r13", "%r12", "%r11", "%r10", " %r9", " %r8",
"%rdi", "%rsi", "%rbp", "%rbx", "%rdx", "%rcx", "%rax", "%trapno",
"%err", "%rip", " %cs", "%rfl", "%rsp", " %ss", " %fs", " %gs",
--- 490,499 ----
*** 609,655 ****
(void) putchar('\n');
}
if (i % cols != 0)
(void) putchar('\n');
}
-
- #if defined(__sparc) && defined(_ILP32)
- static void
- dumpregs_v8p(const prgregset_t reg, const prxregset_t *xreg, int is64)
- {
- static const uint32_t zero[8] = { 0 };
- int gr, xr, cols = 2;
- uint64_t xval;
-
- if (memcmp(xreg->pr_un.pr_v8p.pr_xg, zero, sizeof (zero)) == 0 &&
- memcmp(xreg->pr_un.pr_v8p.pr_xo, zero, sizeof (zero)) == 0) {
- dumpregs(reg, is64);
- return;
- }
-
- for (gr = R_G0, xr = XR_G0; gr <= R_G7; gr++, xr++) {
- xval = (uint64_t)xreg->pr_un.pr_v8p.pr_xg[xr] << 32 |
- (uint64_t)(uint32_t)reg[gr];
- (void) printf(" %s = 0x%.16" PRIX64, regname[gr], xval);
- if ((gr + 1) % cols == 0)
- (void) putchar('\n');
- }
-
- for (gr = R_O0, xr = XR_O0; gr <= R_O7; gr++, xr++) {
- xval = (uint64_t)xreg->pr_un.pr_v8p.pr_xo[xr] << 32 |
- (uint64_t)(uint32_t)reg[gr];
- (void) printf(" %s = 0x%.16" PRIX64, regname[gr], xval);
- if ((gr + 1) % cols == 0)
- (void) putchar('\n');
- }
-
- for (gr = R_L0; gr < NPRGREG; gr++) {
- (void) printf(" %s = 0x%.8lX",
- regname[gr], (long)reg[gr]);
- if ((gr + 1) % cols == 0)
- (void) putchar('\n');
- }
-
- if (gr % cols != 0)
- (void) putchar('\n');
- }
- #endif /* __sparc && _ILP32 */
--- 580,584 ----