VirtualBox

Changeset 60185 in vbox for trunk/src/VBox/VMM/include


Ignore:
Timestamp:
Mar 24, 2016 5:39:40 PM (9 years ago)
Author:
vboxsync
Message:

IEM: Fixed a couple of edge cases and broken verification mode.

  • Update enmCpuMode after loading hidden CS flags (prep for recompiling).
  • Fixed retf in 64-bit mode where we would load CS.BASE with zero when returning to 16-bit or 32-bit code.
  • Fixed ESP/SP handling for protected mode exception injection.
  • Implemented the two string I/O notification functions that would assert in verification mode.
  • The IEMExec* methods must call iemUninitExec to undo poisoning of decoding data members as it will otherwise interfere with verification mode opcode fetching optimizations and other stuff.

The above makes the current bs3-cpu-basic-2 code work in --execute-all-in-iem mode.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/include/IEMInternal.h

    r58127 r60185  
    175175    IEMVERIFYEVENT_IOPORT_READ,
    176176    IEMVERIFYEVENT_IOPORT_WRITE,
     177    IEMVERIFYEVENT_IOPORT_STR_READ,
     178    IEMVERIFYEVENT_IOPORT_STR_WRITE,
    177179    IEMVERIFYEVENT_RAM_WRITE,
    178180    IEMVERIFYEVENT_RAM_READ
     
    198200        {
    199201            RTIOPORT    Port;
    200             uint32_t    cbValue;
     202            uint8_t     cbValue;
    201203        } IOPortRead;
    202204
     
    205207        {
    206208            RTIOPORT    Port;
    207             uint32_t    cbValue;
     209            uint8_t     cbValue;
    208210            uint32_t    u32Value;
    209211        } IOPortWrite;
     212
     213        /** IEMVERIFYEVENT_IOPORT_STR_READ */
     214        struct
     215        {
     216            RTIOPORT    Port;
     217            uint8_t     cbValue;
     218            RTGCUINTREG cTransfers;
     219        } IOPortStrRead;
     220
     221        /** IEMVERIFYEVENT_IOPORT_STR_WRITE */
     222        struct
     223        {
     224            RTIOPORT    Port;
     225            uint8_t     cbValue;
     226            RTGCUINTREG cTransfers;
     227        } IOPortStrWrite;
    210228
    211229        /** IEMVERIFYEVENT_RAM_READ */
     
    303321     * This is used to skip past really slow bits.  */
    304322    bool                    fNoRem;
     323    /** Saved fNoRem flag used by #iemInitExec and #iemUninitExec. */
     324    bool                    fNoRemSavedByExec;
    305325    /** Indicates that RAX and RDX differences should be ignored since RDTSC
    306326     *  and RDTSCP are timing sensitive.  */
     
    488508/** Used in aMemMappings to indicate that the entry is bounce buffered. */
    489509#define IEM_ACCESS_BOUNCE_BUFFERED      UINT32_C(0x00000200)
     510/** Valid bit mask. */
     511#define IEM_ACCESS_VALID_MASK           UINT32_C(0x000003ff)
    490512/** Read+write data alias. */
    491513#define IEM_ACCESS_DATA_RW              (IEM_ACCESS_TYPE_READ  | IEM_ACCESS_TYPE_WRITE | IEM_ACCESS_WHAT_DATA)
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