VirtualBox

儲存庫 vbox 的更動 12299


忽略:
時間撮記:
2008-9-9 下午02:31:16 (16 年 以前)
作者:
vboxsync
訊息:

Add option to REMR3State to flush all TBs. (currently not yet active)

位置:
trunk
檔案:
修改 4 筆資料

圖例:

未更動
新增
刪除
  • trunk/include/VBox/rem.h

    r10413 r12299  
    6868REMR3DECL(int)  REMR3BreakpointSet(PVM pVM, RTGCUINTPTR Address);
    6969REMR3DECL(int)  REMR3BreakpointClear(PVM pVM, RTGCUINTPTR Address);
    70 REMR3DECL(int)  REMR3State(PVM pVM);
     70REMR3DECL(int)  REMR3State(PVM pVM, bool fFlushTBs);
    7171REMR3DECL(int)  REMR3StateBack(PVM pVM);
    7272REMR3DECL(void) REMR3StateUpdate(PVM pVM);
  • trunk/src/VBox/VMM/EM.cpp

    r12079 r12299  
    723723     * Switch to REM, step instruction, switch back.
    724724     */
    725     int rc = REMR3State(pVM);
     725    int rc = REMR3State(pVM, true /* flush the TBs */);
    726726    if (VBOX_SUCCESS(rc))
    727727    {
     
    781781        {
    782782            STAM_PROFILE_START(&pVM->em.s.StatREMSync, b);
    783             rc = REMR3State(pVM);
     783            rc = REMR3State(pVM, true /* flush TBs */);
    784784            STAM_PROFILE_STOP(&pVM->em.s.StatREMSync, b);
    785785            if (VBOX_FAILURE(rc))
  • trunk/src/recompiler/VBoxREMWrapper.cpp

    r12296 r12299  
    333333static DECLCALLBACKPTR(int, pfnREMR3EmulateInstruction)(PVM);
    334334static DECLCALLBACKPTR(int, pfnREMR3Run)(PVM);
    335 static DECLCALLBACKPTR(int, pfnREMR3State)(PVM);
     335static DECLCALLBACKPTR(int, pfnREMR3State)(PVM, bool fFlushTBs);
    336336static DECLCALLBACKPTR(int, pfnREMR3StateBack)(PVM);
    337337static DECLCALLBACKPTR(void, pfnREMR3StateUpdate)(PVM);
     
    963963    { REMPARMDESC_FLAGS_INT,        sizeof(size_t), NULL }
    964964};
    965 
     965static const REMPARMDESC g_aArgsState[] =
     966{
     967    { REMPARMDESC_FLAGS_INT,        sizeof(PVM), NULL },
     968    { REMPARMDESC_FLAGS_INT,        sizeof(bool), NULL }
     969};
    966970
    967971/** @} */
     
    980984    { "REMR3EmulateInstruction",                (void *)&pfnREMR3EmulateInstruction,                &g_aArgsVM[0],                              RT_ELEMENTS(g_aArgsVM),                                REMFNDESC_FLAGS_RET_INT,    sizeof(int),    NULL },
    981985    { "REMR3Run",                               (void *)&pfnREMR3Run,                               &g_aArgsVM[0],                              RT_ELEMENTS(g_aArgsVM),                                REMFNDESC_FLAGS_RET_INT,    sizeof(int),    NULL },
    982     { "REMR3State",                             (void *)&pfnREMR3State,                             &g_aArgsVM[0],                              RT_ELEMENTS(g_aArgsVM),                                REMFNDESC_FLAGS_RET_INT,    sizeof(int),    NULL },
     986    { "REMR3State",                             (void *)&pfnREMR3State,                             &g_aArgsState[0],                           RT_ELEMENTS(g_aArgsState),                             REMFNDESC_FLAGS_RET_INT,    sizeof(int),    NULL },
    983987    { "REMR3StateBack",                         (void *)&pfnREMR3StateBack,                         &g_aArgsVM[0],                              RT_ELEMENTS(g_aArgsVM),                                REMFNDESC_FLAGS_RET_INT,    sizeof(int),    NULL },
    984988    { "REMR3StateUpdate",                       (void *)&pfnREMR3StateUpdate,                       &g_aArgsVM[0],                              RT_ELEMENTS(g_aArgsVM),                                REMFNDESC_FLAGS_RET_VOID,   0,              NULL },
     
    19561960}
    19571961
    1958 REMR3DECL(int) REMR3State(PVM pVM)
     1962REMR3DECL(int) REMR3State(PVM pVM, bool fFlushTBs)
    19591963{
    19601964#ifdef USE_REM_STUBS
     
    19621966#else
    19631967    Assert(VALID_PTR(pfnREMR3State));
    1964     return pfnREMR3State(pVM);
     1968    return pfnREMR3State(pVM, fFlushTBs);
    19651969#endif
    19661970}
  • trunk/src/recompiler/VBoxRecompiler.c

    r12023 r12299  
    736736     * Sync the state and enable single instruction / single stepping.
    737737     */
    738     int rc = REMR3State(pVM);
     738    int rc = REMR3State(pVM, false /* no need to flush the TBs; we always compile. */);
    739739    if (VBOX_SUCCESS(rc))
    740740    {
     
    13561356void remR3ProtectCode(CPUState *env, RTGCPTR GCPtr)
    13571357{
     1358#ifndef VBOX_REM_FLUSH_ALL_TBS
    13581359    Assert(env->pVM->rem.s.fInREM);
    13591360    if (     (env->cr[0] & X86_CR0_PG)                      /* paging must be enabled */
     
    13631364        &&  !HWACCMIsEnabled(env->pVM))
    13641365        CSAMR3MonitorPage(env->pVM, GCPtr, CSAM_TAG_REM);
     1366#endif
    13651367}
    13661368
     
    13741376{
    13751377    Assert(env->pVM->rem.s.fInREM);
     1378#ifndef VBOX_REM_FLUSH_ALL_TBS
    13761379    if (     (env->cr[0] & X86_CR0_PG)                      /* paging must be enabled */
    13771380        &&  !(env->state & CPU_EMULATE_SINGLE_INSTR)        /* ignore during single instruction execution */
     
    13801383        &&  !HWACCMIsEnabled(env->pVM))
    13811384        CSAMR3UnmonitorPage(env->pVM, GCPtr, CSAM_TAG_REM);
     1385#endif
    13821386}
    13831387
     
    15871591 *
    15881592 * @param   pVM         VM Handle.
     1593 * @param   fFlushTBs   Flush all translation blocks before executing code
    15891594 *
    15901595 * @remark  The caller has to check for important FFs before calling REMR3Run. REMR3State will
     
    15921597 *          pending that would immediatly interrupt execution.
    15931598 */
    1594 REMR3DECL(int) REMR3State(PVM pVM)
     1599REMR3DECL(int)  REMR3State(PVM pVM, bool fFlushTBs)
    15951600{
    15961601    Log2(("REMR3State:\n"));
     
    16021607    Assert(!pVM->rem.s.fInREM);
    16031608    pVM->rem.s.fInStateSync = true;
     1609
     1610#ifdef VBOX_REM_FLUSH_ALL_TBS
     1611    if (fFlushTBs)
     1612        tb_flush(&pVM->rem.s.Env);
     1613#endif
    16041614
    16051615    /*
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

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