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 ----