VirtualBox

Changeset 58961 in vbox for trunk/include/VBox


Ignore:
Timestamp:
Dec 2, 2015 10:18:30 PM (9 years ago)
Author:
vboxsync
Message:

VBox/vmm/hm_vmx.h: Added instruction information bit field defintions for the VMX_EXIT_XDTR_ACCESS and VMX_EXIT_TR_ACCESS exits.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/vmm/hm_vmx.h

    r58124 r58961  
    17631763/** @} */
    17641764
     1765/** @name VMX_XDTR_INSINFO_XXX - VMX_EXIT_XDTR_ACCESS instruction information
     1766 * Found in VMX_VMCS32_RO_EXIT_INSTR_INFO.
     1767 * @{
     1768 */
     1769/** Address calculation scaling field (powers of two). */
     1770#define VMX_XDTR_INSINFO_SCALE_SHIFT                            0
     1771#define VMX_XDTR_INSINFO_SCALE_MASK                             UINT32_C(0x00000003)
     1772/** Bits 2 thru 6 are undefined. */
     1773#define VMX_XDTR_INSINFO_UNDEF_2_6_SHIFT                        2
     1774#define VMX_XDTR_INSINFO_UNDEF_2_6_MASK                         UINT32_C(0x0000007c)
     1775/** Address size, only 0(=16), 1(=32) and 2(=64) are defined.
     1776 * @remarks anyone's guess why this is a 3 bit field...  */
     1777#define VMX_XDTR_INSINFO_ADDR_SIZE_SHIFT                        7
     1778#define VMX_XDTR_INSINFO_ADDR_SIZE_MASK                         UINT32_C(0x00000380)
     1779/** Bit 10 is defined as zero. */
     1780#define VMX_XDTR_INSINFO_ZERO_10_SHIFT                          10
     1781#define VMX_XDTR_INSINFO_ZERO_10_MASK                           UINT32_C(0x00000400)
     1782/** Operand size, either (1=)32-bit or (0=)16-bit, but get this, it's undefined
     1783 * for exits from 64-bit code as the operand size there is fixed. */
     1784#define VMX_XDTR_INSINFO_OP_SIZE_SHIFT                          11
     1785#define VMX_XDTR_INSINFO_OP_SIZE_MASK                           UINT32_C(0x00000800)
     1786/** Bits 12 thru 14 are undefined. */
     1787#define VMX_XDTR_INSINFO_UNDEF_12_14_SHIFT                      12
     1788#define VMX_XDTR_INSINFO_UNDEF_12_14_MASK                       UINT32_C(0x00007000)
     1789/** Applicable segment register (X86_SREG_XXX values). */
     1790#define VMX_XDTR_INSINFO_SREG_SHIFT                             15
     1791#define VMX_XDTR_INSINFO_SREG_MASK                              UINT32_C(0x00038000)
     1792/** Index register (X86_GREG_XXX values). Undefined if HAS_INDEX_REG is clear. */
     1793#define VMX_XDTR_INSINFO_INDEX_REG_SHIFT                        18
     1794#define VMX_XDTR_INSINFO_INDEX_REG_MASK                         UINT32_C(0x003c0000)
     1795/** Is VMX_XDTR_INSINFO_INDEX_REG_XXX valid (=1) or not (=0). */
     1796#define VMX_XDTR_INSINFO_HAS_INDEX_REG_SHIFT                    22
     1797#define VMX_XDTR_INSINFO_HAS_INDEX_REG_MASK                     UINT32_C(0x00400000)
     1798/** Base register (X86_GREG_XXX values). Undefined if HAS_BASE_REG is clear. */
     1799#define VMX_XDTR_INSINFO_BASE_REG_SHIFT                         23
     1800#define VMX_XDTR_INSINFO_BASE_REG_MASK                          UINT32_C(0x07800000)
     1801/** Is VMX_XDTR_INSINFO_BASE_REG_XXX valid (=1) or not (=0). */
     1802#define VMX_XDTR_INSINFO_HAS_BASE_REG_SHIFT                     27
     1803#define VMX_XDTR_INSINFO_HAS_BASE_REG_MASK                      UINT32_C(0x08000000)
     1804/** The instruction identity (VMX_XDTR_INSINFO_II_XXX values) */
     1805#define VMX_XDTR_INSINFO_INSTR_ID_SHIFT                         28
     1806#define VMX_XDTR_INSINFO_INSTR_ID_MASK                          UINT32_C(0x30000000)
     1807#define VMX_XDTR_INSINFO_II_SGDT                                0 /**< Instruction ID: SGDT */
     1808#define VMX_XDTR_INSINFO_II_SIDT                                1 /**< Instruction ID: SIDT */
     1809#define VMX_XDTR_INSINFO_II_LGDT                                2 /**< Instruction ID: LGDT */
     1810#define VMX_XDTR_INSINFO_II_LIDT                                3 /**< Instruction ID: LIDT */
     1811/** Bits 30 & 31 are undefined. */
     1812#define VMX_XDTR_INSINFO_UNDEF_30_31_SHIFT                      30
     1813#define VMX_XDTR_INSINFO_UNDEF_30_31_MASK                       UINT32_C(0xc0000000)
     1814RT_BF_ASSERT_COMPILE_CHECKS(VMX_XDTR_INSINFO_, UINT32_C(0), UINT32_MAX,
     1815                            (SCALE, UNDEF_2_6, ADDR_SIZE, ZERO_10, OP_SIZE, UNDEF_12_14, SREG, INDEX_REG, HAS_INDEX_REG,
     1816                             BASE_REG, HAS_BASE_REG, INSTR_ID, UNDEF_30_31));
     1817/** @} */
     1818
     1819
     1820/** @name VMX_YYTR_INSINFO_XXX - VMX_EXIT_TR_ACCESS instruction information
     1821 * Found in VMX_VMCS32_RO_EXIT_INSTR_INFO.
     1822 * This is similar to VMX_XDTR_INSINFO_XXX.
     1823 * @{
     1824 */
     1825/** Address calculation scaling field (powers of two). */
     1826#define VMX_YYTR_INSINFO_SCALE_SHIFT                            0
     1827#define VMX_YYTR_INSINFO_SCALE_MASK                             UINT32_C(0x00000003)
     1828/** Bit 2 is undefined. */
     1829#define VMX_YYTR_INSINFO_UNDEF_2_SHIFT                          2
     1830#define VMX_YYTR_INSINFO_UNDEF_2_MASK                           UINT32_C(0x00000004)
     1831/** Register operand 1. Undefined if VMX_YYTR_INSINFO_HAS_REG1 is clear. */
     1832#define VMX_YYTR_INSINFO_REG1_SHIFT                             3
     1833#define VMX_YYTR_INSINFO_REG1_MASK                              UINT32_C(0x00000078)
     1834/** Address size, only 0(=16), 1(=32) and 2(=64) are defined.
     1835 * @remarks anyone's guess why this is a 3 bit field...  */
     1836#define VMX_YYTR_INSINFO_ADDR_SIZE_SHIFT                        7
     1837#define VMX_YYTR_INSINFO_ADDR_SIZE_MASK                         UINT32_C(0x00000380)
     1838/** Is VMX_YYTR_INSINFO_REG1_XXX valid (=1) or not (=0). */
     1839#define VMX_YYTR_INSINFO_HAS_REG1_SHIFT                         10
     1840#define VMX_YYTR_INSINFO_HAS_REG1_MASK                          UINT32_C(0x00000400)
     1841/** Bits 11 thru 14 are undefined. */
     1842#define VMX_YYTR_INSINFO_UNDEF_11_14_SHIFT                      11
     1843#define VMX_YYTR_INSINFO_UNDEF_11_14_MASK                       UINT32_C(0x00007800)
     1844/** Applicable segment register (X86_SREG_XXX values). */
     1845#define VMX_YYTR_INSINFO_SREG_SHIFT                             15
     1846#define VMX_YYTR_INSINFO_SREG_MASK                              UINT32_C(0x00038000)
     1847/** Index register (X86_GREG_XXX values). Undefined if HAS_INDEX_REG is clear. */
     1848#define VMX_YYTR_INSINFO_INDEX_REG_SHIFT                        18
     1849#define VMX_YYTR_INSINFO_INDEX_REG_MASK                         UINT32_C(0x003c0000)
     1850/** Is VMX_YYTR_INSINFO_INDEX_REG_XXX valid (=1) or not (=0). */
     1851#define VMX_YYTR_INSINFO_HAS_INDEX_REG_SHIFT                    22
     1852#define VMX_YYTR_INSINFO_HAS_INDEX_REG_MASK                     UINT32_C(0x00400000)
     1853/** Base register (X86_GREG_XXX values). Undefined if HAS_BASE_REG is clear. */
     1854#define VMX_YYTR_INSINFO_BASE_REG_SHIFT                         23
     1855#define VMX_YYTR_INSINFO_BASE_REG_MASK                          UINT32_C(0x07800000)
     1856/** Is VMX_YYTR_INSINFO_BASE_REG_XXX valid (=1) or not (=0). */
     1857#define VMX_YYTR_INSINFO_HAS_BASE_REG_SHIFT                     27
     1858#define VMX_YYTR_INSINFO_HAS_BASE_REG_MASK                      UINT32_C(0x08000000)
     1859/** The instruction identity (VMX_YYTR_INSINFO_II_XXX values) */
     1860#define VMX_YYTR_INSINFO_INSTR_ID_SHIFT                         28
     1861#define VMX_YYTR_INSINFO_INSTR_ID_MASK                          UINT32_C(0x30000000)
     1862#define VMX_YYTR_INSINFO_II_SGDT                                0 /**< Instruction ID: SGDT */
     1863#define VMX_YYTR_INSINFO_II_SIDT                                1 /**< Instruction ID: SIDT */
     1864#define VMX_YYTR_INSINFO_II_LGDT                                2 /**< Instruction ID: LGDT */
     1865#define VMX_YYTR_INSINFO_II_LIDT                                3 /**< Instruction ID: LIDT */
     1866/** Bits 30 & 31 are undefined. */
     1867#define VMX_YYTR_INSINFO_UNDEF_30_31_SHIFT                      30
     1868#define VMX_YYTR_INSINFO_UNDEF_30_31_MASK                       UINT32_C(0xc0000000)
     1869RT_BF_ASSERT_COMPILE_CHECKS(VMX_YYTR_INSINFO_, UINT32_C(0), UINT32_MAX,
     1870                            (SCALE, UNDEF_2, REG1, ADDR_SIZE, HAS_REG1, UNDEF_11_14, SREG, INDEX_REG, HAS_INDEX_REG,
     1871                             BASE_REG, HAS_BASE_REG, INSTR_ID, UNDEF_30_31));
     1872/** @} */
     1873
    17651874
    17661875/** @name VMCS field encoding - Natural width guest state fields
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette