Bochs/bochs/cpu/msr.h
Stanislav Shwartsman f90e5f4f44 Add initial implementation of the CET (Control Flow Enforcement Technology) emulation according to SDM071
Only missing items (to be added soon):
  - Supervisor Shadow Stack EPT Control is not implemented yet
  - SMM placing for SSP
Currently have to be added manually to some CPUID model, for example to ICL-U
To enable configure with --enable-cet
2019-12-20 07:42:07 +00:00

160 lines
5.4 KiB
C

/////////////////////////////////////////////////////////////////////////
// $Id$
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2019 The Bochs Project
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA B 02110-1301 USA
/////////////////////////////////////////////////////////////////////////
#ifndef BX_MSR_H
#define BX_MSR_H
enum MSR_Register {
BX_MSR_TSC = 0x010,
BX_MSR_APICBASE = 0x01b,
BX_MSR_TSC_ADJUST = 0x03b,
BX_MSR_TSC_DEADLINE = 0x6E0,
BX_MSR_IA32_SPEC_CTRL = 0x048,
BX_MSR_IA32_PRED_CMD = 0x049,
BX_MSR_IA32_ARCH_CAPABILITIES = 0x10a,
BX_MSR_IA32_FLUSH_CMD = 0x10b,
#if BX_CPU_LEVEL >= 6
BX_MSR_SYSENTER_CS = 0x174,
BX_MSR_SYSENTER_ESP = 0x175,
BX_MSR_SYSENTER_EIP = 0x176,
#endif
BX_MSR_DEBUGCTLMSR = 0x1d9,
BX_MSR_LASTBRANCHFROMIP = 0x1db,
BX_MSR_LASTBRANCHTOIP = 0x1dc,
BX_MSR_LASTINTOIP = 0x1dd,
#if BX_CPU_LEVEL >= 6
BX_MSR_MTRRCAP = 0x0fe,
BX_MSR_MTRRPHYSBASE0 = 0x200,
BX_MSR_MTRRPHYSMASK0 = 0x201,
BX_MSR_MTRRPHYSBASE1 = 0x202,
BX_MSR_MTRRPHYSMASK1 = 0x203,
BX_MSR_MTRRPHYSBASE2 = 0x204,
BX_MSR_MTRRPHYSMASK2 = 0x205,
BX_MSR_MTRRPHYSBASE3 = 0x206,
BX_MSR_MTRRPHYSMASK3 = 0x207,
BX_MSR_MTRRPHYSBASE4 = 0x208,
BX_MSR_MTRRPHYSMASK4 = 0x209,
BX_MSR_MTRRPHYSBASE5 = 0x20a,
BX_MSR_MTRRPHYSMASK5 = 0x20b,
BX_MSR_MTRRPHYSBASE6 = 0x20c,
BX_MSR_MTRRPHYSMASK6 = 0x20d,
BX_MSR_MTRRPHYSBASE7 = 0x20e,
BX_MSR_MTRRPHYSMASK7 = 0x20f,
BX_MSR_MTRRFIX64K_00000 = 0x250,
BX_MSR_MTRRFIX16K_80000 = 0x258,
BX_MSR_MTRRFIX16K_A0000 = 0x259,
BX_MSR_MTRRFIX4K_C0000 = 0x268,
BX_MSR_MTRRFIX4K_C8000 = 0x269,
BX_MSR_MTRRFIX4K_D0000 = 0x26a,
BX_MSR_MTRRFIX4K_D8000 = 0x26b,
BX_MSR_MTRRFIX4K_E0000 = 0x26c,
BX_MSR_MTRRFIX4K_E8000 = 0x26d,
BX_MSR_MTRRFIX4K_F0000 = 0x26e,
BX_MSR_MTRRFIX4K_F8000 = 0x26f,
BX_MSR_PAT = 0x277,
BX_MSR_MTRR_DEFTYPE = 0x2ff,
#endif
#if BX_SUPPORT_PERFMON
BX_MSR_PMC0 = 0x0c1, /* PERFCTR0 */
BX_MSR_PMC1 = 0x0c2, /* PERFCTR1 */
BX_MSR_PMC2 = 0x0c3,
BX_MSR_PMC3 = 0x0c4,
BX_MSR_PMC4 = 0x0c5,
BX_MSR_PMC5 = 0x0c6,
BX_MSR_PMC6 = 0x0c7,
BX_MSR_PMC7 = 0x0c8,
BX_MSR_PERFEVTSEL0 = 0x186,
BX_MSR_PERFEVTSEL1 = 0x187,
BX_MSR_PERFEVTSEL2 = 0x188,
BX_MSR_PERFEVTSEL3 = 0x189,
BX_MSR_PERFEVTSEL4 = 0x18a,
BX_MSR_PERFEVTSEL5 = 0x18b,
BX_MSR_PERFEVTSEL6 = 0x18c,
BX_MSR_PERFEVTSEL7 = 0x18d,
BX_MSR_PERF_FIXED_CTR0 = 0x309, /* Fixed Performance Counter 0 (R/W): Counts Instr_Retired.Any */
BX_MSR_PERF_FIXED_CTR1 = 0x30a, /* Fixed Performance Counter 1 (R/W): Counts CPU_CLK_Unhalted.Core */
BX_MSR_PERF_FIXED_CTR2 = 0x30b, /* Fixed Performance Counter 2 (R/W): Counts CPU_CLK_Unhalted.Ref */
BX_MSR_FIXED_CTR_CTRL = 0x38d, /* Fixed Performance Counter Control (R/W) */
BX_MSR_PERF_GLOBAL_CTRL = 0x38f, /* Global Performance Counter Control */
#endif
#if BX_SUPPORT_VMX
BX_MSR_VMX_BASIC = 0x480,
BX_MSR_VMX_PINBASED_CTRLS = 0x481,
BX_MSR_VMX_PROCBASED_CTRLS = 0x482,
BX_MSR_VMX_VMEXIT_CTRLS = 0x483,
BX_MSR_VMX_VMENTRY_CTRLS = 0x484,
BX_MSR_VMX_MISC = 0x485,
BX_MSR_VMX_CR0_FIXED0 = 0x486,
BX_MSR_VMX_CR0_FIXED1 = 0x487,
BX_MSR_VMX_CR4_FIXED0 = 0x488,
BX_MSR_VMX_CR4_FIXED1 = 0x489,
BX_MSR_VMX_VMCS_ENUM = 0x48a,
BX_MSR_VMX_PROCBASED_CTRLS2 = 0x48b,
BX_MSR_VMX_EPT_VPID_CAP = 0x48c,
BX_MSR_VMX_TRUE_PINBASED_CTRLS = 0x48d,
BX_MSR_VMX_TRUE_PROCBASED_CTRLS = 0x48e,
BX_MSR_VMX_TRUE_VMEXIT_CTRLS = 0x48f,
BX_MSR_VMX_TRUE_VMENTRY_CTRLS = 0x490,
BX_MSR_VMX_VMFUNC = 0x491,
BX_MSR_IA32_FEATURE_CONTROL = 0x03A,
BX_MSR_IA32_SMM_MONITOR_CTL = 0x09B,
#endif
/* Shadow Stack */
BX_MSR_IA32_U_CET = 0x6A0,
BX_MSR_IA32_S_CET = 0x6A2,
BX_MSR_IA32_PL0_SSP = 0x6A4,
BX_MSR_IA32_PL1_SSP = 0x6A5,
BX_MSR_IA32_PL2_SSP = 0x6A6,
BX_MSR_IA32_PL3_SSP = 0x6A7,
BX_MSR_IA32_INTERRUPT_SSP_TABLE_ADDR = 0x6A8,
BX_MSR_XSS = 0xda0,
/* AMD MSRs */
BX_MSR_EFER = 0xc0000080,
BX_MSR_STAR = 0xc0000081,
BX_MSR_LSTAR = 0xc0000082,
BX_MSR_CSTAR = 0xc0000083,
BX_MSR_FMASK = 0xc0000084,
BX_MSR_FSBASE = 0xc0000100,
BX_MSR_GSBASE = 0xc0000101,
BX_MSR_KERNELGSBASE = 0xc0000102,
BX_MSR_TSC_AUX = 0xc0000103,
BX_SVM_VM_CR_MSR = 0xc0010114,
BX_SVM_IGNNE_MSR = 0xc0010115,
BX_SVM_SMM_CTL_MSR = 0xc0010116,
BX_SVM_HSAVE_PA_MSR = 0xc0010117,
};
const unsigned BX_NUM_VARIABLE_RANGE_MTRRS = 8;
#endif // #ifndef BX_MSR_H