1 /* 2 * This file and its contents are supplied under the terms of the 3 * Common Development and Distribution License ("CDDL"), version 1.0. 4 * You may only use this file in accordance with the terms of version 5 * 1.0 of the CDDL. 6 * 7 * A full copy of the text of the CDDL should have accompanied this 8 * source. A copy of the CDDL is also available via the Internet at 9 * http://www.illumos.org/license/CDDL. 10 */ 11 12 /* 13 * Copyright 2023 Oxide Computer Company 14 */ 15 16 #ifndef _PROC_X86UTIL_H 17 #define _PROC_X86UTIL_H 18 19 #include <mdb/mdb.h> 20 21 #include <procfs.h> 22 #include <sys/frame.h> 23 #include <sys/ucontext.h> 24 #include <sys/fp.h> 25 #include <ieeefp.h> 26 27 /* 28 * Common routines used for x86 proc targets. 29 */ 30 31 #ifdef __cplusplus 32 extern "C" { 33 #endif 34 35 typedef enum { 36 XMM, 37 YMM, 38 ZMM 39 } x86_vector_type_t; 40 41 typedef struct x86_xregs_info { 42 x86_vector_type_t xri_type; 43 const prxregset_xcr_t *xri_xcr; 44 const prxregset_xsave_t *xri_xsave; 45 const prxregset_ymm_t *xri_ymm; 46 const prxregset_opmask_t *xri_opmask; 47 const prxregset_zmm_t *xri_zmm; 48 const prxregset_hi_zmm_t *xri_hi_zmm; 49 } x86_xregs_info_t; 50 51 extern int x86_pt_fpregs_common(uintptr_t, uint_t, int, fpregset_t *); 52 extern void x86_pt_fpregs_sse_ctl(uint32_t, uint32_t, char *, size_t); 53 54 /* 55 * Utility functions for printing x87 / SSE state. 56 */ 57 extern const char *fpcw2str(uint32_t, char *, size_t); 58 extern const char *fpsw2str(uint32_t, char *, size_t); 59 extern const char *fpmxcsr2str(uint32_t, char *, size_t); 60 extern const char *fptag2str(uint32_t); 61 62 #ifdef __cplusplus 63 } 64 #endif 65 66 #endif /* _PROC_X86UTIL_H */ 67