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/lib/libproc/common/libproc.h
          +++ new/usr/src/lib/libproc/common/libproc.h
↓ open down ↓ 21 lines elided ↑ open up ↑
  22   22  /*
  23   23   * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  24   24   * Use is subject to license terms.
  25   25   *
  26   26   * Portions Copyright 2007 Chad Mynhier
  27   27   * Copyright 2012 DEY Storage Systems, Inc.  All rights reserved.
  28   28   * Copyright 2019 Joyent, Inc.
  29   29   * Copyright (c) 2013 by Delphix. All rights reserved.
  30   30   * Copyright 2019, Carlos Neira <cneirabustos@gmail.com>
  31   31   * Copyright 2020 OmniOS Community Edition (OmniOSce) Association.
       32 + * Copyright 2023 Oxide Computer Company
  32   33   */
  33   34  
  34   35  /*
  35   36   * Interfaces available from the process control library, libproc.
  36   37   */
  37   38  
  38   39  #ifndef _LIBPROC_H
  39   40  #define _LIBPROC_H
  40   41  
  41   42  #include <stdlib.h>
↓ open down ↓ 284 lines elided ↑ open up ↑
 326  327  extern  int     Lclearsig(struct ps_lwphandle *);
 327  328  extern  int     Lclearfault(struct ps_lwphandle *);
 328  329  extern  int     Lxecbkpt(struct ps_lwphandle *, ulong_t);
 329  330  extern  int     Lxecwapt(struct ps_lwphandle *, const prwatch_t *);
 330  331  extern  void    Lsync(struct ps_lwphandle *);
 331  332  
 332  333  extern  int     Lstack(struct ps_lwphandle *, stack_t *);
 333  334  extern  int     Lmain_stack(struct ps_lwphandle *, stack_t *);
 334  335  extern  int     Lalt_stack(struct ps_lwphandle *, stack_t *);
 335  336  
      337 +extern int      Lgetregs(struct ps_lwphandle *, prgregset_t *);
      338 +extern int      Lsetregs(struct ps_lwphandle *, const prgregset_t *);
      339 +extern int      Lgetfpregs(struct ps_lwphandle *, prfpregset_t *);
      340 +extern int      Lsetfpregs(struct ps_lwphandle *, const prfpregset_t *);
      341 +extern int      Lgetxregs(struct ps_lwphandle *, prxregset_t **, size_t *);
      342 +extern int      Lsetxregs(struct ps_lwphandle *, const prxregset_t *, size_t);
      343 +
 336  344  /*
 337  345   * Function prototypes for system calls forced on the victim process.
 338  346   */
 339  347  extern  int     pr_open(struct ps_prochandle *, const char *, int, mode_t);
 340  348  extern  int     pr_creat(struct ps_prochandle *, const char *, mode_t);
 341  349  extern  int     pr_close(struct ps_prochandle *, int);
 342  350  extern  int     pr_access(struct ps_prochandle *, const char *, int);
 343  351  extern  int     pr_door_info(struct ps_prochandle *, int, struct door_info *);
 344  352  extern  void    *pr_mmap(struct ps_prochandle *,
 345  353                          void *, size_t, int, int, int, off_t);
↓ open down ↓ 66 lines elided ↑ open up ↑
 412  420  /*
 413  421   * Function prototypes for accessing per-LWP register information.
 414  422   */
 415  423  extern int Plwp_getregs(struct ps_prochandle *, lwpid_t, prgregset_t);
 416  424  extern int Plwp_setregs(struct ps_prochandle *, lwpid_t, const prgregset_t);
 417  425  
 418  426  extern int Plwp_getfpregs(struct ps_prochandle *, lwpid_t, prfpregset_t *);
 419  427  extern int Plwp_setfpregs(struct ps_prochandle *, lwpid_t,
 420  428      const prfpregset_t *);
 421  429  
 422      -#if defined(__sparc)
      430 +extern int Plwp_getxregs(struct ps_prochandle *, lwpid_t, prxregset_t **,
      431 +    size_t *);
      432 +extern void Plwp_freexregs(struct ps_prochandle *, prxregset_t *, size_t);
      433 +extern int Plwp_setxregs(struct ps_prochandle *, lwpid_t, const prxregset_t *,
      434 +    size_t);
 423  435  
 424      -extern int Plwp_getxregs(struct ps_prochandle *, lwpid_t, prxregset_t *);
 425      -extern int Plwp_setxregs(struct ps_prochandle *, lwpid_t, const prxregset_t *);
 426      -
      436 +#if defined(__sparc)
 427  437  extern int Plwp_getgwindows(struct ps_prochandle *, lwpid_t, gwindows_t *);
 428  438  
 429  439  #if defined(__sparcv9)
 430  440  extern int Plwp_getasrs(struct ps_prochandle *, lwpid_t, asrset_t);
 431  441  extern int Plwp_setasrs(struct ps_prochandle *, lwpid_t, const asrset_t);
 432  442  #endif  /* __sparcv9 */
 433  443  
 434  444  #endif  /* __sparc */
 435  445  
 436  446  #if defined(__i386) || defined(__amd64)
↓ open down ↓ 370 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX