VirtualBox

Changeset 38364 in vbox for trunk/src/recompiler


Ignore:
Timestamp:
Aug 8, 2011 7:12:29 PM (13 years ago)
Author:
vboxsync
Message:

REM: Try fix the broken sysexit (and partially sysenter).

Location:
trunk/src/recompiler
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/recompiler/VBoxREMWrapper.cpp

    r38320 r38364  
    12011201    { "CPUMGetGuestCS",                         VMM_FN(CPUMGetGuestCS),                 &g_aArgsVMCPU[0],                           RT_ELEMENTS(g_aArgsVMCPU),                             REMFNDESC_FLAGS_RET_INT,    sizeof(RTSEL),      NULL },
    12021202    { "CPUMGetGuestSS",                         VMM_FN(CPUMGetGuestSS),                 &g_aArgsVMCPU[0],                           RT_ELEMENTS(g_aArgsVMCPU),                             REMFNDESC_FLAGS_RET_INT,    sizeof(RTSEL),      NULL },
     1203    { "CPUMGetGuestCpuVendor",                  VMM_FN(CPUMGetGuestCpuVendor),          &g_aArgsVM[0],                           RT_ELEMENTS(g_aArgsVMCPU),                                REMFNDESC_FLAGS_RET_INT, sizeof(CPUMCPUVENDOR), NULL },
    12031204    { "CPUMQueryGuestCtxPtr",                   VMM_FN(CPUMQueryGuestCtxPtr),           &g_aArgsCPUMQueryGuestCtxPtr[0],            RT_ELEMENTS(g_aArgsCPUMQueryGuestCtxPtr),              REMFNDESC_FLAGS_RET_INT,    sizeof(PCPUMCTX),   NULL },
    12041205    { "CSAMR3MonitorPage",                      VMM_FN(CSAMR3MonitorPage),              &g_aArgsCSAMR3MonitorPage[0],               RT_ELEMENTS(g_aArgsCSAMR3MonitorPage),                 REMFNDESC_FLAGS_RET_INT,    sizeof(int),        NULL },
  • trunk/src/recompiler/target-i386/translate.c

    r37689 r38364  
    5757#define REX_X(s) ((s)->rex_x)
    5858#define REX_B(s) ((s)->rex_b)
     59# ifdef VBOX
     60#  define IS_LONG_MODE(s)   ((s)->lma)
     61# endif
    5962/* XXX: gcc generates push/pop in some opcodes, so we cannot use them */
    6063#if 1
     
    6770#define REX_X(s) 0
    6871#define REX_B(s) 0
     72# ifdef VBOX
     73#  define IS_LONG_MODE(s)   0
     74# endif
    6975#endif
    7076
     
    72907296        if (CODE64(s) && cpu_single_env->cpuid_vendor1 != CPUID_VENDOR_INTEL_1)
    72917297#else
    7292             /** @todo: make things right */
    7293         if (CODE64(s))
     7298        if (   !(cpu_single_env->cpuid_features & CPUID_SEP)
     7299            || (   IS_LONG_MODE(s)
     7300                && CPUMGetGuestCpuVendor(cpu_single_env->pVM) != CPUMCPUVENDOR_INTEL))
    72947301#endif
    72957302            goto illegal_op;
     
    73087315        if (CODE64(s) && cpu_single_env->cpuid_vendor1 != CPUID_VENDOR_INTEL_1)
    73097316#else
    7310         /** @todo: make things right */
    7311         if (CODE64(s))
     7317        if (   !(cpu_single_env->cpuid_features & CPUID_SEP)
     7318            || (   IS_LONG_MODE(s)
     7319                && CPUMGetGuestCpuVendor(cpu_single_env->pVM) != CPUMCPUVENDOR_INTEL))
    73127320#endif
    73137321            goto illegal_op;
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