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/proc_service.3proc.man.txt
          +++ new/usr/src/man/man3proc/proc_service.3proc.man.txt
   1    1  PROC_SERVICE(3PROC)    Process Control Library Functions   PROC_SERVICE(3PROC)
   2    2  
   3    3  NAME
   4    4         proc_service - process service interfaces
   5    5  
   6    6  SYNOPSIS
   7    7         #include <proc_service.h>
   8    8  
   9    9         ps_err_e ps_pdmodel(struct ps_prochandle *ph,
  10   10              int *data_model);
  11   11  
  12   12  
  13   13         ps_err_e ps_pglobal_lookup(struct ps_prochandle *ph,
  14   14              const char *object_name, const char *sym_name,
  15   15              psaddr_t *sym_addr);
  16   16  
  17   17  
  18   18         ps_err_e ps_pglobal_sym(struct ps_prochandle *ph,
  19   19              const char *object_name, const char *sym_name,
  20   20              ps_sym_t *sym);
  21   21  
  22   22  
  23   23         ps_err_e ps_pread(struct ps_prochandle *ph, psaddr_t addr,
  24   24              void *buf, size_t size);
  25   25  
  26   26  
  27   27         ps_err_e ps_pwrite(struct ps_prochandle *ph, psaddr_t addr,
  28   28              const void *buf, size_t size);
  29   29  
  30   30  
  31   31         ps_err_e ps_pdread(struct ps_prochandle *ph, psaddr_t addr,
  32   32              void *buf, size_t size);
  33   33  
  34   34  
  35   35         ps_err_e ps_pdwrite(struct ps_prochandle *ph, psaddr_t addr,
  36   36              const void *buf, size_t size);
  37   37  
  38   38  
  39   39         ps_err_e ps_ptread(struct ps_prochandle *ph, psaddr_t addr,
  40   40              void *buf, size_t size);
  41   41  
  42   42  
  43   43         ps_err_e ps_ptwrite(struct ps_prochandle *ph, psaddr_t addr,
  44   44              const void *buf, size_t size);
  45   45  
  46   46  
  47   47         ps_err_e ps_pstop(struct ps_prochandle *ph);
  48   48  
  49   49  
  50   50         ps_err_e ps_pcontinue(struct ps_prochandle *ph);
  51   51  
  52   52  
  53   53         ps_err_e ps_lstop(struct ps_prochandle *ph, lwpid_t lwpid);
  54   54  
  55   55  
  56   56         ps_err_e ps_lcontinue(struct ps_prochandle *ph, lwpid_t lwpid);
  57   57  
  58   58  
  59   59         ps_err_e ps_lgetregs(struct ps_prochandle *ph, lwpid_t lwpid,
  60   60              prgregset_t gregset);
  61   61  
  62   62  
  63   63         ps_err_e ps_lsetregs(struct ps_prochandle *ph, lwpid_t lwpid,
  64   64              const prgregset_t gregset);
  65   65  
  66   66  
  67   67         ps_err_e ps_lgetfpregs(struct ps_prochandle *ph, lwpid_t lwpid,
  68   68              prfpregset_t *fpregset);
  69   69  
  70   70  
  71   71         ps_err_e ps_lsetfpregs(struct ps_prochandle *ph, lwpid_t lwpid,
  72   72              const prfpregset_t *fpregset);
  73   73  
  74   74  
  75   75         ps_err_e ps_pauxv(struct ps_prochandle *ph,
  76   76              const auxv_t **auxp);
  77   77  
  78   78  
  
    | 
      ↓ open down ↓ | 
    78 lines elided | 
    
      ↑ open up ↑ | 
  
  79   79         ps_err_e ps_kill(struct ps_prochandle *ph, int sig);
  80   80  
  81   81  
  82   82         ps_err_e ps_lrolltoaddr(struct ps_prochandle *ph,
  83   83              lwpid_t lwpid, psaddr_t go_addr, psaddr_t stop_addr);
  84   84  
  85   85  
  86   86         void ps_plog(const char *fmt);
  87   87  
  88   88  
  89      -   SPARC
  90   89         ps_err_e ps_lgetxregsize(struct ps_prochandle *ph,
  91   90              lwpid_t lwpid, int *xregsize);
  92   91  
  93   92  
  94   93         ps_err_e ps_lgetxregs(struct ps_prochandle *ph,
  95   94              lwpid_t lwpid, caddr_t xregset);
  96   95  
  97   96  
  98   97         ps_err_e ps_lsetxregs(struct ps_prochandle *ph,
  99   98              lwpid_t lwpid, caddr_t xregset);
 100   99  
 101  100  
 102  101     x86
 103  102         ps_err_e ps_lgetLDT(struct ps_prochandle *ph, lwpid_t lwpid,
 104  103              struct ssd *ldt);
 105  104  
 106  105  
 107  106  DESCRIPTION
 108  107         Every program that links libthread_db or librtld_db must provide a set
 109  108         of process control primitives that allow libthread_db and librtld_db to
 110  109         access memory and registers in the target process, to start and to stop
 111  110         the target process, and to look up symbols in the target process.  See
 112  111         libc_db(3LIB). For information on librtld_db, refer to the Linker and
 113  112         Libraries Guide.
 114  113  
 115  114  
 116  115         Refer to the individual reference manual pages that describe these
 117  116         routines for a functional specification that clients of libthread_db
 118  117         and librtld_db can use to implement this required interface. The
 119  118         <proc_service.h> header lists the C declarations of these routines.
 120  119  
 121  120  FUNCTIONS
 122  121         ps_pdmodel()
 123  122                                Returns the data model of the target process.
 124  123  
 125  124  
 126  125         ps_pglobal_lookup()
 127  126                                Looks up the symbol in the symbol table of the
 128  127                                load object in the target process and returns
 129  128                                its address.
 130  129  
 131  130  
 132  131         ps_pglobal_sym()
 133  132                                Looks up the symbol in the symbol table of the
 134  133                                load object in the target process and returns
 135  134                                its symbol table entry.
 136  135  
 137  136  
 138  137         ps_pread()
 139  138                                Copies size bytes from the target process to the
 140  139                                controlling process.
 141  140  
 142  141  
 143  142         ps_pwrite()
 144  143                                Copies size bytes from the controlling process
 145  144                                to the target process.
 146  145  
 147  146  
 148  147         ps_pdread()
 149  148                                Identical to ps_pread().
 150  149  
 151  150  
 152  151         ps_pdwrite()
 153  152                                Identical to ps_pwrite().
 154  153  
 155  154  
 156  155         ps_ptread()
 157  156                                Identical to ps_pread().
 158  157  
 159  158  
 160  159         ps_ptwrite()
 161  160                                Identical to ps_pwrite().
 162  161  
 163  162  
 164  163         ps_pstop()
 165  164                                Stops the target process.
 166  165  
 167  166  
 168  167         ps_pcontinue()
 169  168                                Resumes target process.
 170  169  
 171  170  
 172  171         ps_lstop()
 173  172                                Stops a single lightweight process ( LWP )
 174  173                                within the target process.
 175  174  
 176  175  
 177  176         ps_lcontinue()
 178  177                                Resumes a single LWP within the target process.
 179  178  
 180  179  
 181  180         ps_lgetregs()
 182  181                                Gets the general registers of the LWP.
 183  182  
 184  183  
 185  184         ps_lsetregs()
 186  185                                Sets the general registers of the LWP.
 187  186  
 188  187  
 189  188         ps_lgetfpregs()
 190  189                                Gets the LWP`s floating point register set.
 191  190  
 192  191  
 193  192         ps_lsetfpregs()
 194  193                                Sets the LWP`s floating point register set.
 195  194  
 196  195  
 197  196         ps_pauxv()
 198  197                                Returns a pointer to a read-only copy of the
 199  198                                auxiliary vector of the target process.
 200  199  
 201  200  
 202  201         ps_kill()
 203  202                                Sends signal to target process.
  
    | 
      ↓ open down ↓ | 
    104 lines elided | 
    
      ↑ open up ↑ | 
  
 204  203  
 205  204  
 206  205         ps_lrolltoaddr()
 207  206                                Rolls the LWP out of a critical section when the
 208  207                                process is stopped.
 209  208  
 210  209  
 211  210         ps_plog()
 212  211                                Logs a message.
 213  212  
 214      -
 215      -   SPARC
 216  213         ps_lgetxregsize()
 217  214                              Returns the size of the architecture-dependent
 218  215                              extra state registers.
 219  216  
 220  217  
 221  218         ps_lgetxregs()
 222  219                              Gets the extra state registers of the LWP.
 223  220  
 224  221  
 225  222         ps_lsetxregs()
 226  223                              Sets the extra state registers of the LWP.
 227  224  
 228  225  
 229  226     x86
 230  227         ps_lgetLDT()
 231  228                         Reads the local descriptor table of the LWP.
 232  229  
 233  230  
 234  231  ATTRIBUTES
 235  232         See attributes(7) for description of the following attributes:
 236  233  
 237  234  
 238  235  
 239  236  
 240  237         +---------------+-----------------+
 241  238         |ATTRIBUTE TYPE | ATTRIBUTE VALUE |
 242  239         +---------------+-----------------+
  
    | 
      ↓ open down ↓ | 
    17 lines elided | 
    
      ↑ open up ↑ | 
  
 243  240         |MT Level       | Safe            |
 244  241         +---------------+-----------------+
 245  242  
 246  243  SEE ALSO
 247  244         rtld_db(3EXT), libc_db(3LIB), librtld_db(3LIB), ps_pread(3PROC),
 248  245         attributes(7)
 249  246  
 250  247  
 251  248         Linker and Libraries Guide
 252  249  
 253      -                               October 12, 2007            PROC_SERVICE(3PROC)
      250 +                               January 23, 2023            PROC_SERVICE(3PROC)
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX