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
        
*** 25,35 ****
  /*
   * Copyright 2012 DEY Storage Systems, Inc.  All rights reserved.
   * Copyright (c) 2013 by Delphix. All rights reserved.
   * Copyright 2018 Joyent, Inc.
   * Copyright 2020 OmniOS Community Edition (OmniOSce) Association.
!  * Copyright 2021 Oxide Computer Company
   */
  
  #ifndef _PCONTROL_H
  #define _PCONTROL_H
  
--- 25,35 ----
  /*
   * Copyright 2012 DEY Storage Systems, Inc.  All rights reserved.
   * Copyright (c) 2013 by Delphix. All rights reserved.
   * Copyright 2018 Joyent, Inc.
   * Copyright 2020 OmniOS Community Edition (OmniOSce) Association.
!  * Copyright 2023 Oxide Computer Company
   */
  
  #ifndef _PCONTROL_H
  #define _PCONTROL_H
  
*** 142,154 ****
          list_node_t lwp_list;   /* linked list */
          lwpid_t lwp_id;         /* lwp identifier */
          lwpsinfo_t lwp_psinfo;  /* /proc/<pid>/lwp/<lwpid>/lwpsinfo data */
          lwpstatus_t lwp_status; /* /proc/<pid>/lwp/<lwpid>/lwpstatus data */
          char lwp_name[THREAD_NAME_MAX];
  #if defined(sparc) || defined(__sparc)
          gwindows_t *lwp_gwins;  /* /proc/<pid>/lwp/<lwpid>/gwindows data */
-         prxregset_t *lwp_xregs; /* /proc/<pid>/lwp/<lwpid>/xregs data */
          int64_t *lwp_asrs;      /* /proc/<pid>/lwp/<lwpid>/asrs data */
  #endif
  } lwp_info_t;
  
  typedef struct fd_info {
--- 142,155 ----
          list_node_t lwp_list;   /* linked list */
          lwpid_t lwp_id;         /* lwp identifier */
          lwpsinfo_t lwp_psinfo;  /* /proc/<pid>/lwp/<lwpid>/lwpsinfo data */
          lwpstatus_t lwp_status; /* /proc/<pid>/lwp/<lwpid>/lwpstatus data */
          char lwp_name[THREAD_NAME_MAX];
+         prxregset_t *lwp_xregs; /* /proc/<pid>/lwp/<lwpid>/xregs data */
+         size_t lwp_xregsize;
  #if defined(sparc) || defined(__sparc)
          gwindows_t *lwp_gwins;  /* /proc/<pid>/lwp/<lwpid>/gwindows data */
          int64_t *lwp_asrs;      /* /proc/<pid>/lwp/<lwpid>/asrs data */
  #endif
  } lwp_info_t;
  
  typedef struct fd_info {
*** 296,305 ****
--- 297,308 ----
          size_t);
  
  extern  int     Padd_mapping(struct ps_prochandle *, off64_t, file_info_t *,
      prmap_t *);
  extern  void    Psort_mappings(struct ps_prochandle *);
+ extern  struct ps_lwphandle *Lfind(struct ps_prochandle *, lwpid_t);
+ extern  int     Lstopstatus(struct ps_lwphandle *, long, uint_t);
  
  extern char     procfs_path[PATH_MAX];
  
  /*
   * Architecture-dependent definition of the breakpoint instruction.