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/man/man3proc/ps_lgetregs.3proc.man.txt
          +++ new/usr/src/man/man3proc/ps_lgetregs.3proc.man.txt
   1    1  PS_LGETREGS(3PROC)     Process Control Library Functions    PS_LGETREGS(3PROC)
   2    2  
   3    3  NAME
   4    4         ps_lgetregs, ps_lsetregs, ps_lgetfpregs, ps_lsetfpregs,
   5    5         ps_lgetxregsize, ps_lgetxregs, ps_lsetxregs - routines that access the
   6    6         target process register in libthread_db
   7    7  
   8    8  SYNOPSIS
   9    9         #include <proc_service.h>
  10   10  
  11   11         ps_err_e ps_lgetregs(struct ps_prochandle *ph, lwpid_t lid,
  12   12              prgregset_t gregset);
  13   13  
  14   14  
  15   15         ps_err_e ps_lsetregs(struct ps_prochandle *ph, lwpid_t lid,
  16   16              static prgregset_t gregset);
  17   17  
  18   18  
  19   19         ps_err_e ps_lgetfpregs(struct ps_prochandle *ph, lwpid_t lid,
  20   20              prfpregset_t *fpregs);
  21   21  
  22   22  
  23   23         ps_err_e ps_lsetfpregs(struct ps_prochandle *ph, lwpid_t lid,
  24   24              static prfpregset_t *fpregs);
  25   25  
  26   26  
  27   27         ps_err_e ps_lgetxregsize(struct ps_prochandle *ph, lwpid_t lid,
  28   28              int *xregsize);
  29   29  
  30   30  
  31   31         ps_err_e ps_lgetxregs(struct ps_prochandle *ph, lwpid_t lid,
  32   32              caddr_t xregset);
  33   33  
  34   34  
  35   35         ps_err_e ps_lsetxregs(struct ps_prochandle *ph, lwpid_t lid,
  36   36              caddr_t xregset);
  37   37  
  
    | 
      ↓ open down ↓ | 
    37 lines elided | 
    
      ↑ open up ↑ | 
  
  38   38  
  39   39  DESCRIPTION
  40   40         ps_lgetregs(), ps_lsetregs(), ps_lgetfpregs(), ps_lsetfpregs(),
  41   41         ps_lgetxregsize(), ps_lgetxregs(), ps_lsetxregs() read and write
  42   42         register sets from lightweight processes (LWPs) within the target
  43   43         process identified by ph.  ps_lgetregs() gets the general registers of
  44   44         the LWP identified by lid, and ps_lsetregs() sets them. ps_lgetfpregs()
  45   45         gets the LWP's floating point register set, while ps_lsetfpregs() sets
  46   46         it.
  47   47  
  48      -   SPARC Only
  49      -       ps_lgetxregsize(), ps_lgetxregs(), and ps_lsetxregs() are SPARC-
  50      -       specific. They do not need to be defined by a controlling process on
  51      -       non-SPARC architecture. ps_lgetxregsize() returns in *xregsize the size
  52      -       of the architecture-dependent extra state registers. ps_lgetxregs()
  53      -       gets the extra state registers, and ps_lsetxregs() sets them.
       48 +       ps_lgetxregsize(), ps_lgetxregs(), and ps_lsetxregs() are used to get
       49 +       and set the extended register set. Support for an extended register set
       50 +       depends on the instruction-set archicture. On platforms without support
       51 +       for these, controlling processes wlil still need to define them;
       52 +       however, they are allowed to simply return errors.
  54   53  
       54 +       ps_lgetxregsize() returns in *xregsize the size of the architecture-
       55 +       dependent extra state registers. ps_lgetxregs() gets the extra state
       56 +       registers, and ps_lsetxregs() sets them. When getting the registers,
       57 +       the size of xregset must be at least the size returned by
       58 +       ps_lgetxregsize().
       59 +
  55   60  RETURN VALUES
  56   61         PS_OK
  57   62                         The call returned successfully.
  58   63  
  59   64  
  60      -       PS_NOFPREGS
       65 +       PS_NOFREGS
  61   66                         Floating point registers are neither available for this
  62   67                         architecture nor for this process.
  63   68  
  64   69  
  65   70         PS_NOXREGS
  66   71                         Extra state registers are not available on this
  67   72                         architecture.
  68   73  
  69   74  
  70   75         PS_ERR
  71   76                         The function did not return successfully.
  72   77  
  73   78  
  74   79  ATTRIBUTES
  75   80         See attributes(7) for description of the following attributes:
  76   81  
  77   82  
  78   83  
  
    | 
      ↓ open down ↓ | 
    8 lines elided | 
    
      ↑ open up ↑ | 
  
  79   84  
  80   85         +---------------+-----------------+
  81   86         |ATTRIBUTE TYPE | ATTRIBUTE VALUE |
  82   87         +---------------+-----------------+
  83   88         |MT Level       | Safe            |
  84   89         +---------------+-----------------+
  85   90  
  86   91  SEE ALSO
  87   92         libc_db(3LIB), proc_service(3PROC), attributes(7), threads(7)
  88   93  
  89      -                              September 12, 2020            PS_LGETREGS(3PROC)
       94 +                               January 23, 2023             PS_LGETREGS(3PROC)
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX