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

Split Close
Expand all
Collapse all
          --- old/usr/src/cmd/ptools/pflags/pflags.c
          +++ new/usr/src/cmd/ptools/pflags/pflags.c
↓ open down ↓ 45 lines elided ↑ open up ↑
  46   46          const char *lwps;
  47   47          int count;
  48   48  } look_arg_t;
  49   49  
  50   50  static  int     look(char *);
  51   51  static  int     lwplook(look_arg_t *, const lwpstatus_t *, const lwpsinfo_t *);
  52   52  static  char    *prflags(int);
  53   53  static  char    *prwhy(int);
  54   54  static  char    *prwhat(int, int);
  55   55  static  void    dumpregs(const prgregset_t, int);
  56      -#if defined(__sparc) && defined(_ILP32)
  57      -static  void    dumpregs_v8p(const prgregset_t, const prxregset_t *, int);
  58      -#endif
  59   56  
  60   57  static  char    *command;
  61   58  static  struct  ps_prochandle *Pr;
  62   59  
  63   60  static  int     is64;   /* Is current process 64-bit? */
  64   61  static  int     rflag;  /* Show registers? */
  65   62  
  66   63  #define LWPFLAGS        \
  67   64          (PR_STOPPED|PR_ISTOP|PR_DSTOP|PR_ASLEEP|PR_PCINVAL|PR_STEP \
  68   65          |PR_AGENT|PR_DETACH|PR_DAEMON)
↓ open down ↓ 273 lines elided ↑ open up ↑
 342  339                  char t[64];
 343  340  
 344  341                  (void) strftime(t, sizeof (t), "%F:%H.%M.%S", localtime(&time));
 345  342  
 346  343                  (void) printf("\tspymaster = pid %d, \"%s\" at %s\n",
 347  344                      (int)ps.pr_pid, ps.pr_psargs, t);
 348  345          }
 349  346  
 350  347          if (rflag) {
 351  348                  if (Pstate(Pr) == PS_DEAD || (arg->pflags & PR_STOPPED)) {
 352      -#if defined(__sparc) && defined(_ILP32)
 353      -                        /*
 354      -                         * If we're SPARC/32-bit, see if we can get extra
 355      -                         * register state for this lwp.  If it's a v8plus
 356      -                         * program, print the 64-bit register values.
 357      -                         */
 358      -                        prxregset_t prx;
 359      -
 360      -                        if (Plwp_getxregs(Pr, psp->pr_lwpid, &prx) == 0 &&
 361      -                            prx.pr_type == XR_TYPE_V8P)
 362      -                                dumpregs_v8p(psp->pr_reg, &prx, is64);
 363      -                        else
 364      -#endif  /* __sparc && _ILP32 */
 365      -                                dumpregs(psp->pr_reg, is64);
 366      -                } else
      349 +                        dumpregs(psp->pr_reg, is64);
      350 +                } else {
 367  351                          (void) printf("\tNot stopped, can't show registers\n");
      352 +                }
 368  353          }
 369  354  
 370  355          return (0);
 371  356  }
 372  357  
 373  358  static char *
 374  359  prflags(int arg)
 375  360  {
 376  361          static char code_buf[200];
 377  362          char *str = code_buf;
↓ open down ↓ 122 lines elided ↑ open up ↑
 500  485                  str = proc_fltname(what, buf, sizeof (buf));
 501  486                  break;
 502  487          default:
 503  488                  (void) sprintf(str = buf, "%d", what);
 504  489                  break;
 505  490          }
 506  491  
 507  492          return (str);
 508  493  }
 509  494  
 510      -#if defined(__sparc)
 511      -static const char * const regname[NPRGREG] = {
 512      -        " %g0", " %g1", " %g2", " %g3", " %g4", " %g5", " %g6", " %g7",
 513      -        " %o0", " %o1", " %o2", " %o3", " %o4", " %o5", " %sp", " %o7",
 514      -        " %l0", " %l1", " %l2", " %l3", " %l4", " %l5", " %l6", " %l7",
 515      -        " %i0", " %i1", " %i2", " %i3", " %i4", " %i5", " %fp", " %i7",
 516      -#ifdef __sparcv9
 517      -        "%ccr", " %pc", "%npc", "  %y", "%asi", "%fprs"
 518      -#else
 519      -        "%psr", " %pc", "%npc", "  %y", "%wim", "%tbr"
 520      -#endif
 521      -};
 522      -#endif  /* __sparc */
 523      -
 524  495  #if defined(__amd64)
 525  496  static const char * const regname[NPRGREG] = {
 526  497          "%r15", "%r14", "%r13", "%r12", "%r11", "%r10", " %r9", " %r8",
 527  498          "%rdi", "%rsi", "%rbp", "%rbx", "%rdx", "%rcx", "%rax", "%trapno",
 528  499          "%err", "%rip", " %cs", "%rfl", "%rsp", " %ss", " %fs", " %gs",
 529  500          " %es", " %ds", "%fsbase", "%gsbase"
 530  501  };
 531  502  
 532  503  static const char * const regname32[NPRGREG32] = {
 533  504          " %gs", " %fs", " %es", " %ds", "%edi", "%esi", "%ebp", "%esp",
↓ open down ↓ 70 lines elided ↑ open up ↑
 604  575  
 605  576          for (i = 0; i < NPRGREG; i++) {
 606  577                  (void) printf("  %s = 0x%.*lX",
 607  578                      regname[i], width, (long)reg[i]);
 608  579                  if ((i+1) % cols == 0)
 609  580                          (void) putchar('\n');
 610  581          }
 611  582          if (i % cols != 0)
 612  583                  (void) putchar('\n');
 613  584  }
 614      -
 615      -#if defined(__sparc) && defined(_ILP32)
 616      -static void
 617      -dumpregs_v8p(const prgregset_t reg, const prxregset_t *xreg, int is64)
 618      -{
 619      -        static const uint32_t zero[8] = { 0 };
 620      -        int gr, xr, cols = 2;
 621      -        uint64_t xval;
 622      -
 623      -        if (memcmp(xreg->pr_un.pr_v8p.pr_xg, zero, sizeof (zero)) == 0 &&
 624      -            memcmp(xreg->pr_un.pr_v8p.pr_xo, zero, sizeof (zero)) == 0) {
 625      -                dumpregs(reg, is64);
 626      -                return;
 627      -        }
 628      -
 629      -        for (gr = R_G0, xr = XR_G0; gr <= R_G7; gr++, xr++) {
 630      -                xval = (uint64_t)xreg->pr_un.pr_v8p.pr_xg[xr] << 32 |
 631      -                    (uint64_t)(uint32_t)reg[gr];
 632      -                (void) printf("  %s = 0x%.16" PRIX64, regname[gr], xval);
 633      -                if ((gr + 1) % cols == 0)
 634      -                        (void) putchar('\n');
 635      -        }
 636      -
 637      -        for (gr = R_O0, xr = XR_O0; gr <= R_O7; gr++, xr++) {
 638      -                xval = (uint64_t)xreg->pr_un.pr_v8p.pr_xo[xr] << 32 |
 639      -                    (uint64_t)(uint32_t)reg[gr];
 640      -                (void) printf("  %s = 0x%.16" PRIX64, regname[gr], xval);
 641      -                if ((gr + 1) % cols == 0)
 642      -                        (void) putchar('\n');
 643      -        }
 644      -
 645      -        for (gr = R_L0; gr < NPRGREG; gr++) {
 646      -                (void) printf("  %s =         0x%.8lX",
 647      -                    regname[gr], (long)reg[gr]);
 648      -                if ((gr + 1) % cols == 0)
 649      -                        (void) putchar('\n');
 650      -        }
 651      -
 652      -        if (gr % cols != 0)
 653      -                (void) putchar('\n');
 654      -}
 655      -#endif  /* __sparc && _ILP32 */
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX