> +/* > + * FRED return instructions > + * > + * Replace with "ERETS"/"ERETU" once binutils support FRED return instructions. binutils version that supports these instructions goes here... > + */ > +#define ERETS _ASM_BYTES(0xf2,0x0f,0x01,0xca) > +#define ERETU _ASM_BYTES(0xf3,0x0f,0x01,0xca) > + > +/* > + * Event stack level macro for the FRED_STKLVLS MSR. > + * Usage example: FRED_STKLVL(X86_TRAP_DF, 3) > + * Multiple values can be ORd together. > + */ > +#define FRED_STKLVL(v,l) (_AT(unsigned long, l) << (2*(v))) > + > +/* FRED_CONFIG MSR */ > +#define FRED_CONFIG_CSL_MASK 0x3 > +#define FRED_CONFIG_SHADOW_STACK_SPACE _BITUL(3) > +#define FRED_CONFIG_REDZONE(b) __ALIGN_KERNEL_MASK((b), _UL(0x3f)) > +#define FRED_CONFIG_INT_STKLVL(l) (_AT(unsigned long, l) << 9) > +#define FRED_CONFIG_ENTRYPOINT(p) _AT(unsigned long, (p)) > + > +/* FRED event type and vector bit width and counts */ > +#define FRED_EVENT_TYPE_BITS 3 /* only 3 bits used in FRED 3.0 */ > +#define FRED_EVENT_TYPE_COUNT _BITUL(FRED_EVENT_TYPE_BITS) > +#define FRED_EVENT_VECTOR_BITS 8 > +#define FRED_EVENT_VECTOR_COUNT _BITUL(FRED_EVENT_VECTOR_BITS) > + > +/* FRED EVENT_TYPE_OTHER vector numbers */ > +#define FRED_SYSCALL 1 > +#define FRED_SYSENTER 2 > + > +/* Flags above the CS selector (regs->csl) */ > +#define FRED_CSL_ENABLE_NMI _BITUL(28) > +#define FRED_CSL_ALLOW_SINGLE_STEP _BITUL(25) > +#define FRED_CSL_INTERRUPT_SHADOW _BITUL(24) What's the state of IBT WAIT-FOR-ENDBR vs this? That really should also get a high CS bit.