summaryrefslogtreecommitdiff
path: root/usr/src/uts/intel/sys/pcb.h
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/uts/intel/sys/pcb.h')
-rw-r--r--usr/src/uts/intel/sys/pcb.h18
1 files changed, 16 insertions, 2 deletions
diff --git a/usr/src/uts/intel/sys/pcb.h b/usr/src/uts/intel/sys/pcb.h
index defd116eba..e7e2e2cdce 100644
--- a/usr/src/uts/intel/sys/pcb.h
+++ b/usr/src/uts/intel/sys/pcb.h
@@ -21,6 +21,7 @@
/*
* Copyright (c) 1992, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, Joyent, Inc.
*/
#ifndef _SYS_PCB_H
@@ -51,7 +52,6 @@ typedef struct pcb {
uint_t pcb_flags; /* state flags; cleared on fork */
greg_t pcb_drstat; /* status debug register (%dr6) */
unsigned char pcb_instr; /* /proc: instruction at stop */
-#if defined(__amd64)
unsigned char pcb_rupdate; /* new register values in pcb -> regs */
uintptr_t pcb_fsbase;
uintptr_t pcb_gsbase;
@@ -59,7 +59,6 @@ typedef struct pcb {
selector_t pcb_es;
selector_t pcb_fs;
selector_t pcb_gs;
-#endif /* __amd64 */
user_desc_t pcb_fsdesc; /* private per-lwp %fs descriptors */
user_desc_t pcb_gsdesc; /* private per-lwp %gs descriptors */
} pcb_t;
@@ -77,6 +76,21 @@ typedef struct pcb {
#define REQUEST_NOSTEP 0x200 /* request pending to disable single-step */
#define ASYNC_HWERR 0x400 /* hardware error has corrupted context */
+/* pcb_rupdate values */
+#define PCB_UPDATE_SEGS 0x01 /* Update segment registers */
+#define PCB_UPDATE_FPU 0x02 /* Update FPU registers */
+
+#define PCB_SET_UPDATE_SEGS(pcb) ((pcb)->pcb_rupdate |= PCB_UPDATE_SEGS)
+#define PCB_SET_UPDATE_FPU(pcb) ((pcb)->pcb_rupdate |= PCB_UPDATE_FPU)
+#define PCB_NEED_UPDATE_SEGS(pcb) \
+ (((pcb)->pcb_rupdate & PCB_UPDATE_SEGS) != 0)
+#define PCB_NEED_UPDATE_FPU(pcb) \
+ (((pcb)->pcb_rupdate & PCB_UPDATE_FPU) != 0)
+#define PCB_NEED_UPDATE(pcb) \
+ (PCB_NEED_UPDATE_FPU(pcb) || PCB_NEED_UPDATE_SEGS(pcb))
+#define PCB_CLEAR_UPDATE_SEGS(pcb) ((pcb)->pcb_rupdate &= ~PCB_UPDATE_SEGS)
+#define PCB_CLEAR_UPDATE_FPU(pcb) ((pcb)->pcb_rupdate &= ~PCB_UPDATE_FPU)
+
/* fpu_flags */
#define FPU_EN 0x1 /* flag signifying fpu in use */
#define FPU_VALID 0x2 /* fpu_regs has valid fpu state */