VirtualBox

Changeset 55895 in vbox


Ignore:
Timestamp:
May 17, 2015 7:42:38 PM (10 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
100352
Message:

Added pvUser to the raw-mode context virtual handler callbacks.

Location:
trunk
Files:
18 edited

Legend:

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

    r55891 r55895  
    178178 *
    179179 * @returns VBox status code (appropriate for GC return).
    180  * @param   pVM         VM Handle.
    181  * @param   uErrorCode   CPU Error code.
    182  * @param   pRegFrame   Trap register frame.
    183  * @param   pvFault     The fault address (cr2).
    184  * @param   pvRange     The base address of the handled virtual range.
    185  * @param   offRange    The offset of the access into this range.
    186  *                      (If it's a EIP range this is the EIP, if not it's pvFault.)
     180 * @param   pVM             VM Handle.
     181 * @param   uErrorCode      CPU Error code (X86_TRAP_PF_XXX).
     182 * @param   pRegFrame       Trap register frame.
     183 * @param   pvFault         The fault address (cr2).
     184 * @param   pvRange         The base address of the handled virtual range.
     185 * @param   offRange        The offset of the access into this range.
     186 *                          (If it's a EIP range this is the EIP, if not it's pvFault.)
     187 * @param   pvUser          User argument.
    187188 * @todo    Add pVCpu, possibly replacing pVM.
    188189 */
    189 typedef DECLCALLBACK(int) FNPGMRCVIRTHANDLER(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, RTGCPTR pvRange, uintptr_t offRange);
     190typedef DECLCALLBACK(int) FNPGMRCVIRTPFHANDLER(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault,
     191                                               RTGCPTR pvRange, uintptr_t offRange, void *pvUser);
    190192/** Pointer to PGM access callback. */
    191 typedef FNPGMRCVIRTHANDLER *PFNPGMRCVIRTHANDLER;
     193typedef FNPGMRCVIRTPFHANDLER *PFNPGMRCVIRTPFHANDLER;
    192194
    193195/**
     
    208210 * @todo    Add pVCpu, possibly replacing pVM.
    209211 */
    210 typedef DECLCALLBACK(int) FNPGMR3VIRTHANDLER(PVM pVM, RTGCPTR GCPtr, void *pvPtr, void *pvBuf, size_t cbBuf, PGMACCESSTYPE enmAccessType, void *pvUser);
     212typedef DECLCALLBACK(int) FNPGMR3VIRTHANDLER(PVM pVM, RTGCPTR GCPtr, void *pvPtr, void *pvBuf, size_t cbBuf,
     213                                             PGMACCESSTYPE enmAccessType, void *pvUser);
    211214/** Pointer to PGM access callback. */
    212215typedef FNPGMR3VIRTHANDLER *PFNPGMR3VIRTHANDLER;
     
    218221 * @param   pVM             VM Handle.
    219222 * @param   GCPtr           The virtual address the guest has changed.
    220  */
    221 typedef DECLCALLBACK(int) FNPGMR3VIRTINVALIDATE(PVM pVM, RTGCPTR GCPtr);
     223 * @param   pvUser          User argument.
     224 */
     225typedef DECLCALLBACK(int) FNPGMR3VIRTINVALIDATE(PVM pVM, RTGCPTR GCPtr, void *pvUser);
    222226/** Pointer to PGM invalidation callback. */
    223227typedef FNPGMR3VIRTINVALIDATE *PFNPGMR3VIRTINVALIDATE;
     
    546550                                                      PFNPGMR3VIRTINVALIDATE pfnInvalidateR3,
    547551                                                      PFNPGMR3VIRTHANDLER pfnHandlerR3,
    548                                                       RCPTRTYPE(PFNPGMRCVIRTHANDLER) pfnHandlerRC,
     552                                                      RCPTRTYPE(FNPGMRCVIRTPFHANDLER) pfnPfHandlerRC,
    549553                                                      const char *pszDesc, PPGMVIRTHANDLERTYPE phType);
    550554VMMR3_INT_DECL(int) PGMR3HandlerVirtualTypeRegister(PVM pVM, PGMVIRTHANDLERKIND enmKind, bool fRelocUserRC,
    551555                                                    PFNPGMR3VIRTINVALIDATE pfnInvalidateR3,
    552556                                                    PFNPGMR3VIRTHANDLER pfnHandlerR3,
    553                                                     const char *pszHandlerRC, const char *pszModRC, const char *pszDesc,
     557                                                    const char *pszPfHandlerRC, const char *pszModRC, const char *pszDesc,
    554558                                                    PPGMVIRTHANDLERTYPE phType);
    555559VMMR3_INT_DECL(int) PGMR3HandlerVirtualRegister(PVM pVM, PVMCPU pVCpu, PGMVIRTHANDLERTYPE hType, RTGCPTR GCPtr,
  • trunk/src/VBox/VMM/VMMAll/PGMAllBth.h

    r55889 r55895  
    334334#   ifdef IN_RC
    335335                STAM_PROFILE_START(&pCur->Stat, h);
    336                 RTGCPTR                     GCPtrStart = pCur->Core.Key;
    337                 CTX_MID(PFNPGM,VIRTHANDLER) pfnHandler = pCurType->CTX_SUFF(pfnHandler);
     336                RTGCPTR GCPtrStart = pCur->Core.Key;
    338337                pgmUnlock(pVM);
    339338                *pfLockTaken = false;
    340339
    341                 rc = pfnHandler(pVM, uErr, pRegFrame, pvFault, GCPtrStart, pvFault - GCPtrStart);
     340                rc = pCurType->CTX_SUFF(pfnPfHandler)(pVM, uErr, pRegFrame, pvFault, GCPtrStart, pvFault - GCPtrStart,
     341                                                      pCur->pvUserRC);
    342342
    343343#    ifdef VBOX_WITH_STATISTICS
     
    374374#   ifdef IN_RC
    375375                    STAM_PROFILE_START(&pCur->Stat, h);
    376                     RTGCPTR                     GCPtrStart = pCur->Core.Key;
    377                     CTX_MID(PFNPGM,VIRTHANDLER) pfnHandler = pCurType->CTX_SUFF(pfnHandler);
     376                    RTGCPTR GCPtrStart = pCur->Core.Key;
    378377                    pgmUnlock(pVM);
    379378                    *pfLockTaken = false;
     
    383382                                - (GCPtrStart & PAGE_OFFSET_MASK);
    384383                    Assert(off < pCur->cb);
    385                     rc = pfnHandler(pVM, uErr, pRegFrame, pvFault, GCPtrStart, off);
     384                    rc = pCurType->CTX_SUFF(pfnPfHandler)(pVM, uErr, pRegFrame, pvFault, GCPtrStart, off, pCur->pvUserRC);
    386385
    387386#    ifdef VBOX_WITH_STATISTICS
     
    718717                 * Check if the fault address is in a virtual page access handler range.
    719718                 */
    720                 PPGMVIRTHANDLER pCur = (PPGMVIRTHANDLER)RTAvlroGCPtrRangeGet(&pVM->pgm.s.CTX_SUFF(pTrees)->HyperVirtHandlers, pvFault);
     719                PPGMVIRTHANDLER pCur = (PPGMVIRTHANDLER)RTAvlroGCPtrRangeGet(&pVM->pgm.s.CTX_SUFF(pTrees)->HyperVirtHandlers,
     720                                                                             pvFault);
    721721                if (    pCur
    722722                    &&  pvFault - pCur->Core.Key < pCur->cb
     
    727727                    PPGMVIRTHANDLERTYPEINT pCurType = PGMVIRTANDLER_GET_TYPE(pVM, pCur);
    728728                    pgmUnlock(pVM);
    729                     rc = pCurType->CTX_SUFF(pfnHandler)(pVM, uErr, pRegFrame, pvFault, pCur->Core.Key, pvFault - pCur->Core.Key);
     729                    rc = pCurType->CTX_SUFF(pfnPfHandler)(pVM, uErr, pRegFrame, pvFault, pCur->Core.Key, pvFault - pCur->Core.Key,
     730                                                          pCur->pvUserRC);
    730731                    pgmLock(pVM);
    731732                    STAM_PROFILE_STOP(&pCur->Stat, h);
     
    821822                STAM_PROFILE_START(&pCur->Stat, h);
    822823                pgmUnlock(pVM);
    823                 rc = pCurType->CTX_SUFF(pfnHandler)(pVM, uErr, pRegFrame, pvFault, pCur->Core.Key, pvFault - pCur->Core.Key);
     824                rc = pCurType->CTX_SUFF(pfnPfHandler)(pVM, uErr, pRegFrame, pvFault, pCur->Core.Key, pvFault - pCur->Core.Key,
     825                                                      pCur->pvUserRC);
    824826                pgmLock(pVM);
    825827                STAM_PROFILE_STOP(&pCur->Stat, h);
  • trunk/src/VBox/VMM/VMMR3/CSAM.cpp

    r55889 r55895  
    7070*   Internal Functions                                                         *
    7171*******************************************************************************/
    72 static DECLCALLBACK(int) csamr3Save(PVM pVM, PSSMHANDLE pSSM);
    73 static DECLCALLBACK(int) csamr3Load(PVM pVM, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass);
    74 static DECLCALLBACK(int) CSAMCodePageWriteHandler(PVM pVM, RTGCPTR GCPtr, void *pvPtr, void *pvBuf, size_t cbBuf, PGMACCESSTYPE enmAccessType, void *pvUser);
    75 static DECLCALLBACK(int) CSAMCodePageInvalidate(PVM pVM, RTGCPTR GCPtr);
     72static DECLCALLBACK(int) csamR3Save(PVM pVM, PSSMHANDLE pSSM);
     73static DECLCALLBACK(int) csamR3Load(PVM pVM, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass);
     74static FNPGMR3VIRTHANDLER    csamR3CodePageWriteHandler;
     75static FNPGMR3VIRTINVALIDATE csamR3CodePageInvalidate;
    7676
    7777bool                csamIsCodeScanned(PVM pVM, RTRCPTR pInstr, PCSAMPAGE *pPage);
     
    8484                                          PFN_CSAMR3ANALYSE pfnCSAMR3Analyse, void *pUserData, PCSAMP2GLOOKUPREC pCacheRec);
    8585
    86 /** @todo Temporary for debugging. */
    87 static bool fInCSAMCodePageInvalidate = false;
     86/** @todo "Temporary" for debugging. */
     87static bool g_fInCsamR3CodePageInvalidate = false;
    8888
    8989#ifdef VBOX_WITH_DEBUGGER
     
    255255    rc = PGMR3HandlerVirtualTypeRegister(pVM, PGMVIRTHANDLERKIND_WRITE, false /*fRelocUserRC*/,
    256256                                         NULL /*pfnInvalidateR3 */,
    257                                          CSAMCodePageWriteHandler,
    258                                          "CSAMGCCodePageWriteHandler", NULL /*pszModRC*/,
     257                                         csamR3CodePageWriteHandler,
     258                                         "csamRCCodePageWritePfHandler", NULL /*pszModRC*/,
    259259                                         "CSAM code page write handler",
    260260                                         &pVM->csam.s.hCodePageWriteType);
    261261    AssertLogRelRCReturn(rc, rc);
    262262    rc = PGMR3HandlerVirtualTypeRegister(pVM, PGMVIRTHANDLERKIND_WRITE, false /*fRelocUserRC*/,
    263                                          CSAMCodePageInvalidate,
    264                                          CSAMCodePageWriteHandler,
    265                                          "CSAMGCCodePageWriteHandler", NULL /*pszModRC*/,
     263                                         csamR3CodePageInvalidate,
     264                                         csamR3CodePageWriteHandler,
     265                                         "csamRCCodePageWritePfHandler", NULL /*pszModRC*/,
    266266                                         "CSAM code page write and invlpg handler",
    267267                                         &pVM->csam.s.hCodePageWriteAndInvPgType);
     
    273273    rc = SSMR3RegisterInternal(pVM, "CSAM", 0, CSAM_SAVED_STATE_VERSION, sizeof(pVM->csam.s) + PAGE_SIZE*16,
    274274                               NULL, NULL, NULL,
    275                                NULL, csamr3Save, NULL,
    276                                NULL, csamr3Load, NULL);
     275                               NULL, csamR3Save, NULL,
     276                               NULL, csamR3Load, NULL);
    277277    AssertRCReturn(rc, rc);
    278278
     
    540540 * @param   pSSM            SSM operation handle.
    541541 */
    542 static DECLCALLBACK(int) csamr3Save(PVM pVM, PSSMHANDLE pSSM)
     542static DECLCALLBACK(int) csamR3Save(PVM pVM, PSSMHANDLE pSSM)
    543543{
    544544    CSAM csamInfo = pVM->csam.s;
     
    562562    AssertRCReturn(rc, rc);
    563563
    564     for (unsigned i=0;i<CSAM_PGDIRBMP_CHUNKS;i++)
     564    for (unsigned i = 0; i < CSAM_PGDIRBMP_CHUNKS; i++)
    565565    {
    566566        if(csamInfo.pPDBitmapHC[i])
     
    592592 * @param   uPass           The data pass.
    593593 */
    594 static DECLCALLBACK(int) csamr3Load(PVM pVM, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass)
     594static DECLCALLBACK(int) csamR3Load(PVM pVM, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass)
    595595{
    596596    int  rc;
     
    18671867
    18681868#ifdef CSAM_MONITOR_CODE_PAGES
    1869     AssertRelease(!fInCSAMCodePageInvalidate);
     1869    AssertRelease(!g_fInCsamR3CodePageInvalidate);
    18701870
    18711871    switch (enmTag)
     
    21122112             * if this happens often, then reuse it instead!!!
    21132113             */
    2114             Assert(!fInCSAMCodePageInvalidate);
     2114            Assert(!g_fInCsamR3CodePageInvalidate);
    21152115            STAM_COUNTER_DEC(&pVM->csam.s.StatPageMonitor);
    21162116            PGMHandlerVirtualDeregister(pVM, pVCpu, GCPtr, false /*fHypervisor*/);
     
    21792179 * @param   pvUser          User argument.
    21802180 */
    2181 static DECLCALLBACK(int) CSAMCodePageWriteHandler(PVM pVM, RTGCPTR GCPtr, void *pvPtr, void *pvBuf, size_t cbBuf, PGMACCESSTYPE enmAccessType, void *pvUser)
     2181static DECLCALLBACK(int) csamR3CodePageWriteHandler(PVM pVM, RTGCPTR GCPtr, void *pvPtr, void *pvBuf, size_t cbBuf,
     2182                                                    PGMACCESSTYPE enmAccessType, void *pvUser)
    21822183{
    21832184    int rc;
    21842185
    21852186    Assert(enmAccessType == PGMACCESSTYPE_WRITE); NOREF(enmAccessType);
    2186     Log(("CSAMCodePageWriteHandler: write to %RGv size=%zu\n", GCPtr, cbBuf));
     2187    Log(("csamR3CodePageWriteHandler: write to %RGv size=%zu\n", GCPtr, cbBuf));
    21872188    NOREF(pvUser);
    21882189
     
    21902191         && !memcmp(pvPtr, pvBuf, cbBuf))
    21912192    {
    2192         Log(("CSAMCodePageWriteHandler: dummy write -> ignore\n"));
     2193        Log(("csamR3CodePageWriteHandler: dummy write -> ignore\n"));
    21932194        return VINF_PGM_HANDLER_DO_DEFAULT;
    21942195    }
     
    22022203         *        (if it writes the same data as the patch jump and we replace it with obsolete opcodes)
    22032204         */
    2204         Log(("CSAMCodePageWriteHandler: delayed write!\n"));
     2205        Log(("csamR3CodePageWriteHandler: delayed write!\n"));
    22052206        AssertCompileSize(RTRCPTR, 4);
    22062207        rc = VMR3ReqCallVoidNoWait(pVM, VMCPUID_ANY, (PFNRT)CSAMDelayedWriteHandler, 3, pVM, (RTRCPTR)GCPtr, cbBuf);
     
    22172218 * @param   GCPtr           The virtual address the guest has changed.
    22182219 */
    2219 static DECLCALLBACK(int) CSAMCodePageInvalidate(PVM pVM, RTGCPTR GCPtr)
    2220 {
    2221     fInCSAMCodePageInvalidate = true;
    2222     LogFlow(("CSAMCodePageInvalidate %RGv\n", GCPtr));
     2220static DECLCALLBACK(int) csamR3CodePageInvalidate(PVM pVM, RTGCPTR GCPtr, void *pvUser)
     2221{
     2222    g_fInCsamR3CodePageInvalidate = true;
     2223    LogFlow(("csamR3CodePageInvalidate %RGv\n", GCPtr));
    22232224    /** @todo We can't remove the page (which unregisters the virtual handler) as we are called from a DoWithAll on the virtual handler tree. Argh. */
    22242225    csamFlushPage(pVM, GCPtr, false /* don't remove page! */);
    2225     fInCSAMCodePageInvalidate = false;
     2226    g_fInCsamR3CodePageInvalidate = false;
    22262227    return VINF_SUCCESS;
    22272228}
  • trunk/src/VBox/VMM/VMMR3/PATM.cpp

    r55889 r55895  
    9292*   Internal Functions                                                         *
    9393*******************************************************************************/
     94static FNPGMR3VIRTHANDLER patmR3VirtPageHandler;
    9495
    9596static int          patmDisableUnusablePatch(PVM pVM, RTRCPTR pInstrGC, RTRCPTR pConflictAddr, PPATCHINFO pPatch);
     
    217218    if (RT_FAILURE(rc))
    218219        return rc;
     220
     221    /*
     222     * Register the virtual page access handler type.
     223     */
     224    rc = PGMR3HandlerVirtualTypeRegister(pVM, PGMVIRTHANDLERKIND_ALL, false /*fRelocUserRC*/,
     225                                         NULL /*pfnInvalidateR3*/,
     226                                         patmR3VirtPageHandler,
     227                                         "patmRCVirtPagePfHandler", NULL /*pszModRC*/,
     228                                         "PATMMonitorPatchJump", &pVM->patm.s.hMonitorPageType);
     229    AssertRCReturn(rc, rc);
    219230
    220231    /*
     
    368379                          VERR_INTERNAL_ERROR_4);
    369380
    370 
    371     /*
    372      * Register the virtual page access handler type.
    373      */
    374     rc = PGMR3HandlerVirtualTypeRegister(pVM, PGMVIRTHANDLERKIND_ALL, false /*fRelocUserRC*/,
    375                                          NULL /*pfnInvalidateR3*/,
    376                                          patmVirtPageHandler,
    377                                          "PATMGCMonitorPage", NULL /*pszModRC*/,
    378                                          "PATMMonitorPatchJump", &pVM->patm.s.hMonitorPageType);
    379     AssertRCReturn(rc, rc);
    380381
    381382    return VINF_SUCCESS;
     
    990991 * @param   pvUser          User argument.
    991992 */
    992 DECLCALLBACK(int) patmVirtPageHandler(PVM pVM, RTGCPTR GCPtr, void *pvPtr, void *pvBuf, size_t cbBuf,
    993                                       PGMACCESSTYPE enmAccessType, void *pvUser)
     993static DECLCALLBACK(int) patmR3VirtPageHandler(PVM pVM, RTGCPTR GCPtr, void *pvPtr, void *pvBuf, size_t cbBuf,
     994                                               PGMACCESSTYPE enmAccessType, void *pvUser)
    994995{
    995996    Assert(enmAccessType == PGMACCESSTYPE_WRITE); NOREF(enmAccessType);
  • trunk/src/VBox/VMM/VMMR3/PGM.cpp

    r55889 r55895  
    24402440    RTListOff32ForEach(&pVM->pgm.s.pTreesR3->HeadVirtHandlerTypes, pCurVirtType, PGMVIRTHANDLERTYPEINT, ListNode)
    24412441    {
    2442         if (pCurVirtType->pfnHandlerRC != NIL_RTRCPTR)
    2443             pCurVirtType->pfnHandlerRC += offDelta;
     2442        if (pCurVirtType->pfnPfHandlerRC != NIL_RTRCPTR)
     2443            pCurVirtType->pfnPfHandlerRC += offDelta;
    24442444    }
    24452445
  • trunk/src/VBox/VMM/VMMR3/PGMHandler.cpp

    r55890 r55895  
    291291                                                      PFNPGMR3VIRTINVALIDATE pfnInvalidateR3,
    292292                                                      PFNPGMR3VIRTHANDLER pfnHandlerR3,
    293                                                       RCPTRTYPE(PFNPGMRCVIRTHANDLER) pfnHandlerRC,
     293                                                      RCPTRTYPE(FNPGMRCVIRTPFHANDLER) pfnPfHandlerRC,
    294294                                                      const char *pszDesc, PPGMVIRTHANDLERTYPE phType)
    295295{
     
    297297    AssertReturn(RT_VALID_PTR(pfnHandlerR3) || enmKind == PGMVIRTHANDLERKIND_HYPERVISOR, VERR_INVALID_POINTER);
    298298    AssertPtrNullReturn(pfnInvalidateR3, VERR_INVALID_POINTER);
    299     AssertReturn(pfnHandlerRC != NIL_RTRCPTR, VERR_INVALID_POINTER);
     299    AssertReturn(pfnPfHandlerRC != NIL_RTRCPTR, VERR_INVALID_POINTER);
    300300    AssertPtrReturn(pszDesc, VERR_INVALID_POINTER);
    301301    AssertReturn(   enmKind == PGMVIRTHANDLERKIND_WRITE
     
    316316        pType->pfnInvalidateR3  = pfnInvalidateR3;
    317317        pType->pfnHandlerR3     = pfnHandlerR3;
    318         pType->pfnHandlerRC     = pfnHandlerRC;
     318        pType->pfnPfHandlerRC   = pfnPfHandlerRC;
    319319        pType->pszDesc          = pszDesc;
    320320
     
    324324
    325325        *phType = MMHyperHeapPtrToOffset(pVM, pType);
    326         LogFlow(("PGMR3HandlerVirtualTypeRegisterEx: %p/%#x: enmKind=%d pfnInvalidateR3=%RHv pfnHandlerR3=%RHv pfnHandlerRC=%RRv pszDesc=%s\n",
    327                  pType, *phType, enmKind, pfnInvalidateR3, pfnHandlerR3, pfnHandlerRC, pszDesc));
     326        LogFlow(("PGMR3HandlerVirtualTypeRegisterEx: %p/%#x: enmKind=%d pfnInvalidateR3=%RHv pfnHandlerR3=%RHv pfnPfHandlerRC=%RRv pszDesc=%s\n",
     327                 pType, *phType, enmKind, pfnInvalidateR3, pfnHandlerR3, pfnPfHandlerRC, pszDesc));
    328328        return VINF_SUCCESS;
    329329    }
     
    346346 * @param   pszModRC        The name of the raw-mode context module, NULL is an
    347347 *                          alias for the main RC module.
    348  * @param   pszHandlerRC    The name of the raw-mode context handler, NULL if
     348 * @param   pszPfHandlerRC  The name of the raw-mode context handler, NULL if
    349349 *                          the ring-3 handler should be called.
    350350 * @param   pszDesc         The type description.
     
    356356                                                    PFNPGMR3VIRTINVALIDATE pfnInvalidateR3,
    357357                                                    PFNPGMR3VIRTHANDLER pfnHandlerR3,
    358                                                     const char *pszHandlerRC, const char *pszModRC, const char *pszDesc,
     358                                                    const char *pszPfHandlerRC, const char *pszModRC, const char *pszDesc,
    359359                                                    PPGMVIRTHANDLERTYPE phType)
    360360{
    361     LogFlow(("PGMR3HandlerVirtualTypeRegister: enmKind=%d pfnInvalidateR3=%RHv pfnHandlerR3=%RHv pszModRC=%s pszHandlerRC=%s pszDesc=%s\n",
    362              enmKind, pfnInvalidateR3, pfnHandlerR3, pszHandlerRC, pszModRC, pszDesc));
     361    LogFlow(("PGMR3HandlerVirtualTypeRegister: enmKind=%d pfnInvalidateR3=%RHv pfnHandlerR3=%RHv pszModRC=%s pszPfHandlerRC=%s pszDesc=%s\n",
     362             enmKind, pfnInvalidateR3, pfnHandlerR3, pszPfHandlerRC, pszModRC, pszDesc));
    363363
    364364    /*
     
    367367    if (!pszModRC)
    368368        pszModRC = VMMGC_MAIN_MODULE_NAME;
    369     if (!pszHandlerRC)
    370         pszHandlerRC = "pgmVirtHandlerRedirectToHC";
    371     AssertPtrReturn(pszHandlerRC, VERR_INVALID_POINTER);
     369    AssertPtrReturn(pszPfHandlerRC, VERR_INVALID_POINTER);
    372370
    373371    /*
    374372     * Resolve the GC handler.
    375373     */
    376     RTRCPTR pfnHandlerRC = NIL_RTRCPTR;
    377     int rc = PDMR3LdrGetSymbolRCLazy(pVM, pszModRC, NULL /*pszSearchPath*/, pszHandlerRC, &pfnHandlerRC);
     374    RTRCPTR pfnPfHandlerRC = NIL_RTRCPTR;
     375    int rc = PDMR3LdrGetSymbolRCLazy(pVM, pszModRC, NULL /*pszSearchPath*/, pszPfHandlerRC, &pfnPfHandlerRC);
    378376    if (RT_SUCCESS(rc))
    379377        return PGMR3HandlerVirtualTypeRegisterEx(pVM, enmKind, fRelocUserRC,
    380378                                                 pfnInvalidateR3, pfnHandlerR3,
    381                                                  pfnHandlerRC,
     379                                                 pfnPfHandlerRC,
    382380                                                 pszDesc, phType);
    383381
    384     AssertMsgFailed(("Failed to resolve %s.%s, rc=%Rrc.\n", pszModRC, pszHandlerRC, rc));
     382    AssertMsgFailed(("Failed to resolve %s.%s, rc=%Rrc.\n", pszModRC, pszPfHandlerRC, rc));
    385383    return rc;
    386384}
     
    756754    }
    757755    pHlp->pfnPrintf(pHlp, "%RGv - %RGv  %RHv  %RRv  %s  %s\n",
    758         pCur->Core.Key, pCur->Core.KeyLast, pCurType->pfnHandlerR3, pCurType->pfnHandlerRC, pszType, pCur->pszDesc);
     756        pCur->Core.Key, pCur->Core.KeyLast, pCurType->pfnHandlerR3, pCurType->pfnPfHandlerRC, pszType, pCur->pszDesc);
    759757#ifdef VBOX_WITH_STATISTICS
    760758    if (pArgs->fStats)
  • trunk/src/VBox/VMM/VMMR3/SELM.cpp

    r55892 r55895  
    9595static DECLCALLBACK(int)  selmR3Load(PVM pVM, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass);
    9696static DECLCALLBACK(int)  selmR3LoadDone(PVM pVM, PSSMHANDLE pSSM);
    97 static DECLCALLBACK(int)  selmR3GuestGDTWriteHandler(PVM pVM, RTGCPTR GCPtr, void *pvPhys, void *pvBuf, size_t cbBuf, PGMACCESSTYPE enmAccessType, void *pvUser);
    98 static DECLCALLBACK(int)  selmR3GuestLDTWriteHandler(PVM pVM, RTGCPTR GCPtr, void *pvPhys, void *pvBuf, size_t cbBuf, PGMACCESSTYPE enmAccessType, void *pvUser);
    99 static DECLCALLBACK(int)  selmR3GuestTSSWriteHandler(PVM pVM, RTGCPTR GCPtr, void *pvPhys, void *pvBuf, size_t cbBuf, PGMACCESSTYPE enmAccessType, void *pvUser);
     97static FNPGMR3VIRTHANDLER selmR3GuestGDTWriteHandler;
     98static FNPGMR3VIRTHANDLER selmR3GuestLDTWriteHandler;
     99static FNPGMR3VIRTHANDLER selmR3GuestTSSWriteHandler;
    100100static DECLCALLBACK(void) selmR3InfoGdt(PVM pVM, PCDBGFINFOHLP pHlp, const char *pszArgs);
    101101static DECLCALLBACK(void) selmR3InfoGdtGuest(PVM pVM, PCDBGFINFOHLP pHlp, const char *pszArgs);
     
    203203        rc = PGMR3HandlerVirtualTypeRegister(pVM, PGMVIRTHANDLERKIND_HYPERVISOR, false /*fRelocUserRC*/,
    204204                                             NULL /*pfnInvalidateR3*/, NULL /*pfnHandlerR3*/,
    205                                              "selmRCShadowGDTWriteHandler", NULL /*pszModRC*/,
     205                                             "selmRCShadowGDTWritePfHandler", NULL /*pszModRC*/,
    206206                                             "Shadow GDT write access handler", &pVM->selm.s.hShadowGdtWriteHandlerType);
    207207        AssertRCReturn(rc, rc);
     
    210210        rc = PGMR3HandlerVirtualTypeRegister(pVM, PGMVIRTHANDLERKIND_HYPERVISOR, false /*fRelocUserRC*/,
    211211                                             NULL /*pfnInvalidateR3*/, NULL /*pfnHandlerR3*/,
    212                                              "selmRCShadowTSSWriteHandler", NULL /*pszModRC*/,
     212                                             "selmRCShadowTSSWritePfHandler", NULL /*pszModRC*/,
    213213                                             "Shadow TSS write access handler", &pVM->selm.s.hShadowTssWriteHandlerType);
    214214        AssertRCReturn(rc, rc);
     
    217217        rc = PGMR3HandlerVirtualTypeRegister(pVM, PGMVIRTHANDLERKIND_HYPERVISOR, false /*fRelocUserRC*/,
    218218                                             NULL /*pfnInvalidateR3*/, NULL /*pfnHandlerR3*/,
    219                                              "selmRCShadowLDTWriteHandler", NULL /*pszModRC*/,
     219                                             "selmRCShadowLDTWritePfHandler", NULL /*pszModRC*/,
    220220                                             "Shadow LDT write access handler", &pVM->selm.s.hShadowLdtWriteHandlerType);
    221221        AssertRCReturn(rc, rc);
     
    223223        rc = PGMR3HandlerVirtualTypeRegister(pVM, PGMVIRTHANDLERKIND_WRITE, false /*fRelocUserRC*/,
    224224                                             NULL /*pfnInvalidateR3*/, selmR3GuestGDTWriteHandler,
    225                                              "selmRCGuestGDTWriteHandler", NULL /*pszModRC*/,
     225                                             "selmRCGuestGDTWritePfHandler", NULL /*pszModRC*/,
    226226                                             "Guest GDT write access handler", &pVM->selm.s.hGuestGdtWriteHandlerType);
    227227        AssertRCReturn(rc, rc);
    228228        rc = PGMR3HandlerVirtualTypeRegister(pVM, PGMVIRTHANDLERKIND_WRITE, false /*fRelocUserRC*/,
    229229                                             NULL /*pfnInvalidateR3*/, selmR3GuestLDTWriteHandler,
    230                                              "selmRCGuestLDTWriteHandler", NULL /*pszModRC*/,
     230                                             "selmRCGuestLDTWritePfHandler", NULL /*pszModRC*/,
    231231                                             "Guest LDT write access handler", &pVM->selm.s.hGuestLdtWriteHandlerType);
    232232        AssertRCReturn(rc, rc);
    233233        rc = PGMR3HandlerVirtualTypeRegister(pVM, PGMVIRTHANDLERKIND_WRITE, false /*fRelocUserRC*/,
    234234                                             NULL /*pfnInvalidateR3*/, selmR3GuestTSSWriteHandler,
    235                                              "selmRCGuestTSSWriteHandler", NULL /*pszModRC*/,
     235                                             "selmRCGuestTSSWritePfHandler", NULL /*pszModRC*/,
    236236                                             "Guest TSS write access handler", &pVM->selm.s.hGuestTssWriteHandlerType);
    237237        AssertRCReturn(rc, rc);
  • trunk/src/VBox/VMM/VMMR3/TRPM.cpp

    r55893 r55895  
    518518        rc = PGMR3HandlerVirtualTypeRegister(pVM, PGMVIRTHANDLERKIND_HYPERVISOR, false /*fRelocUserRC*/,
    519519                                             NULL /*pfnInvalidateR3*/, NULL /*pfnHandlerR3*/,
    520                                              "trpmRCShadowIDTWriteHandler", NULL /*pszModRC*/,
     520                                             "trpmRCShadowIDTWritePfHandler", NULL /*pszModRC*/,
    521521                                             "Shadow IDT write access handler", &pVM->trpm.s.hShadowIdtWriteHandlerType);
    522522        AssertRCReturn(rc, rc);
     
    524524        rc = PGMR3HandlerVirtualTypeRegister(pVM, PGMVIRTHANDLERKIND_WRITE, false /*fRelocUserRC*/,
    525525                                             NULL /*pfnInvalidateR3*/, trpmR3GuestIDTWriteHandler,
    526                                              "trpmRCGuestIDTWriteHandler", NULL /*pszModRC*/,
     526                                             "trpmRCGuestIDTWritePfHandler", NULL /*pszModRC*/,
    527527                                             "Guest IDT write access handler", &pVM->trpm.s.hGuestIdtWriteHandlerType);
    528528        AssertRCReturn(rc, rc);
  • trunk/src/VBox/VMM/VMMRC/CSAMRC.cpp

    r45620 r55895  
    4646#include <iprt/string.h>
    4747
     48
     49
    4850/**
    4951 * \#PF Handler callback for virtual access handler ranges. (CSAM self-modifying
     
    6163 * @param   offRange    The offset of the access into this range.
    6264 *                      (If it's a EIP range this is the EIP, if not it's pvFault.)
     65 * @param   pvUser      Ignored.
    6366 */
    64 VMMRCDECL(int) CSAMGCCodePageWriteHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, RTGCPTR pvRange, uintptr_t offRange)
     67DECLEXPORT(int) csamRCCodePageWritePfHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault,
     68                                             RTGCPTR pvRange, uintptr_t offRange, void *pvUser)
    6569{
    6670    PPATMGCSTATE pPATMGCState;
     
    8185
    8286    Assert(pPATMGCState->fPIF || fPatchCode);
    83     /** When patch code is executing instructions that must complete, then we must *never* interrupt it. */
     87    /* When patch code is executing instructions that must complete, then we must *never* interrupt it. */
    8488    if (!pPATMGCState->fPIF && fPatchCode)
    8589    {
    86         Log(("CSAMGCCodePageWriteHandler: fPIF=0 -> stack fault in patch generated code at %08RX32!\n", pRegFrame->eip));
     90        Log(("csamRCCodePageWriteHandler: fPIF=0 -> stack fault in patch generated code at %08RX32!\n", pRegFrame->eip));
    8791        /** @note there are cases when pages previously used for code are now used for stack; patch generated code will fault (pushf))
    8892         *  Just make the page r/w and continue.
     
    104108        cpl = (pRegFrame->ss.Sel & X86_SEL_RPL);
    105109
    106     Log(("CSAMGCCodePageWriteHandler: code page write at %RGv original address %RGv (cpl=%d)\n", pvFault, (RTGCUINTPTR)pvRange + offRange, cpl));
     110    Log(("csamRCCodePageWriteHandler: code page write at %RGv original address %RGv (cpl=%d)\n", pvFault, (RTGCUINTPTR)pvRange + offRange, cpl));
    107111
    108112    /* If user code is modifying one of our monitored pages, then we can safely make it r/w as it's no longer being used for supervisor code. */
     
    131135     * Make this particular page R/W. The VM_FF_CSAM_FLUSH_DIRTY_PAGE handler will reset it to readonly again.
    132136     */
    133     Log(("CSAMGCCodePageWriteHandler: enabled r/w for page %RGv\n", pvFault));
     137    Log(("csamRCCodePageWriteHandler: enabled r/w for page %RGv\n", pvFault));
    134138    rc = PGMShwMakePageWritable(pVCpu, pvFault, PGM_MK_PG_IS_WRITE_FAULT);
    135139    AssertMsgRC(rc, ("PGMShwModifyPage -> rc=%Rrc\n", rc));
  • trunk/src/VBox/VMM/VMMRC/PATMRC.cpp

    r45485 r55895  
    5757 *                      (If it's a EIP range this is the EIP, if not it's pvFault.)
    5858 */
    59 VMMRCDECL(int) PATMGCMonitorPage(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, RTGCPTR pvRange, uintptr_t offRange)
     59DECLEXPORT(int) patmRCVirtPagePfHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault,
     60                                        RTGCPTR pvRange, uintptr_t offRange, void *pvUser)
    6061{
    6162    NOREF(uErrorCode); NOREF(pRegFrame); NOREF(pvFault); NOREF(pvRange); NOREF(offRange);
  • trunk/src/VBox/VMM/VMMRC/SELMRC.cpp

    r49914 r55895  
    223223
    224224
    225 
    226225/**
    227226 * \#PF Virtual Handler callback for Guest write access to the Guest's own GDT.
     
    236235 *                      (If it's a EIP range this is the EIP, if not it's pvFault.)
    237236 */
    238 VMMRCDECL(int) selmRCGuestGDTWriteHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, RTGCPTR pvRange, uintptr_t offRange)
     237DECLEXPORT(int) selmRCGuestGDTWritePfHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault,
     238                                             RTGCPTR pvRange, uintptr_t offRange, void *pvUser)
    239239{
    240240    PVMCPU pVCpu = VMMGetCpu0(pVM);
    241     LogFlow(("selmRCGuestGDTWriteHandler errcode=%x fault=%RGv offRange=%08x\n", (uint32_t)uErrorCode, pvFault, offRange));
    242     NOREF(pvRange);
     241    LogFlow(("selmRCGuestGDTWritePfHandler errcode=%x fault=%RGv offRange=%08x\n", (uint32_t)uErrorCode, pvFault, offRange));
     242    NOREF(pvRange); NOREF(pvUser);
    243243
    244244    /*
     
    328328 * @param   offRange    The offset of the access into this range.
    329329 *                      (If it's a EIP range this is the EIP, if not it's pvFault.)
    330  */
    331 VMMRCDECL(int) selmRCGuestLDTWriteHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, RTGCPTR pvRange, uintptr_t offRange)
     330 * @param   pvUser      Unused.
     331 */
     332DECLEXPORT(int) selmRCGuestLDTWritePfHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault,
     333                                             RTGCPTR pvRange, uintptr_t offRange, void *pvUser)
    332334{
    333335    /** @todo To be implemented. */
    334336    ////LogCom(("selmRCGuestLDTWriteHandler: eip=%08X pvFault=%RGv pvRange=%RGv\r\n", pRegFrame->eip, pvFault, pvRange));
    335     NOREF(uErrorCode); NOREF(pRegFrame); NOREF(pvFault); NOREF(pvRange); NOREF(offRange);
     337    NOREF(uErrorCode); NOREF(pRegFrame); NOREF(pvFault); NOREF(pvRange); NOREF(offRange); NOREF(pvUser);
    336338
    337339    VMCPU_FF_SET(VMMGetCpu0(pVM), VMCPU_FF_SELM_SYNC_LDT);
     
    381383 * @param   offRange    The offset of the access into this range.
    382384 *                      (If it's a EIP range this is the EIP, if not it's pvFault.)
    383  */
    384 VMMRCDECL(int) selmRCGuestTSSWriteHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, RTGCPTR pvRange, uintptr_t offRange)
     385 * @param   pvUser      Unused.
     386 */
     387DECLEXPORT(int) selmRCGuestTSSWritePfHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault,
     388                                             RTGCPTR pvRange, uintptr_t offRange, void *pvUser)
    385389{
    386390    PVMCPU pVCpu = VMMGetCpu0(pVM);
    387     LogFlow(("selmRCGuestTSSWriteHandler errcode=%x fault=%RGv offRange=%08x\n", (uint32_t)uErrorCode, pvFault, offRange));
    388     NOREF(pvRange);
     391    LogFlow(("selmRCGuestTSSWritePfHandler errcode=%x fault=%RGv offRange=%08x\n", (uint32_t)uErrorCode, pvFault, offRange));
     392    NOREF(pvRange); NOREF(pvUser);
    389393
    390394    /*
     
    409413           )
    410414        {
    411             Log(("selmRCGuestTSSWriteHandler: R0 stack: %RTsel:%RGv -> %RTsel:%RGv\n",
     415            Log(("selmRCGuestTSSWritePfHandler: R0 stack: %RTsel:%RGv -> %RTsel:%RGv\n",
    412416                 (RTSEL)(pVM->selm.s.Tss.ss1 & ~1), (RTGCPTR)pVM->selm.s.Tss.esp1, (RTSEL)pGuestTss->ss0, (RTGCPTR)pGuestTss->esp0));
    413417            pVM->selm.s.Tss.esp1 = pGuestTss->esp0;
     
    423427                )
    424428        {
    425             Log(("selmRCGuestTSSWriteHandler: R1 stack: %RTsel:%RGv -> %RTsel:%RGv\n",
     429            Log(("selmRCGuestTSSWritePfHandler: R1 stack: %RTsel:%RGv -> %RTsel:%RGv\n",
    426430                 (RTSEL)((pVM->selm.s.Tss.ss2 & ~2) | 1), (RTGCPTR)pVM->selm.s.Tss.esp2, (RTSEL)pGuestTss->ss1, (RTGCPTR)pGuestTss->esp1));
    427431            pVM->selm.s.Tss.esp2 = pGuestTss->esp1;
     
    447451               )
    448452            {
    449                 Log(("selmRCGuestTSSWriteHandler: R0 stack: %RTsel:%RGv -> %RTsel:%RGv [x-page]\n",
     453                Log(("selmRCGuestTSSWritePfHandler: R0 stack: %RTsel:%RGv -> %RTsel:%RGv [x-page]\n",
    450454                     (RTSEL)(pVM->selm.s.Tss.ss1 & ~1), (RTGCPTR)pVM->selm.s.Tss.esp1, (RTSEL)s.ss0, (RTGCPTR)s.esp0));
    451455                pVM->selm.s.Tss.esp1 = s.esp0;
     
    534538 * @param   offRange    The offset of the access into this range.
    535539 *                      (If it's a EIP range this is the EIP, if not it's pvFault.)
    536  */
    537 VMMRCDECL(int) selmRCShadowGDTWriteHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, RTGCPTR pvRange, uintptr_t offRange)
    538 {
    539     LogRel(("FATAL ERROR: selmRCShadowGDTWriteHandler: eip=%08X pvFault=%RGv pvRange=%RGv\r\n", pRegFrame->eip, pvFault, pvRange));
    540     NOREF(pVM); NOREF(uErrorCode); NOREF(pRegFrame); NOREF(pvFault); NOREF(pvRange); NOREF(offRange);
     540 * @param   pvUser      Unused.
     541 */
     542DECLEXPORT(int) selmRCShadowGDTWritePfHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault,
     543                                              RTGCPTR pvRange, uintptr_t offRange, void *pvUser)
     544{
     545    LogRel(("FATAL ERROR: selmRCShadowGDTWritePfHandler: eip=%08X pvFault=%RGv pvRange=%RGv\r\n", pRegFrame->eip, pvFault, pvRange));
     546    NOREF(pVM); NOREF(uErrorCode); NOREF(pRegFrame); NOREF(pvFault); NOREF(pvRange); NOREF(offRange); NOREF(pvUser);
    541547    return VERR_SELM_SHADOW_GDT_WRITE;
    542548}
     
    556562 * @param   offRange    The offset of the access into this range.
    557563 *                      (If it's a EIP range this is the EIP, if not it's pvFault.)
    558  */
    559 VMMRCDECL(int) selmRCShadowLDTWriteHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, RTGCPTR pvRange, uintptr_t offRange)
    560 {
    561     LogRel(("FATAL ERROR: selmRCShadowLDTWriteHandler: eip=%08X pvFault=%RGv pvRange=%RGv\r\n", pRegFrame->eip, pvFault, pvRange));
     564 * @param   pvUser      Unused.
     565 */
     566DECLEXPORT(int) selmRCShadowLDTWritePfHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault,
     567                                              RTGCPTR pvRange, uintptr_t offRange, void *pvUser)
     568{
     569    LogRel(("FATAL ERROR: selmRCShadowLDTWritePfHandler: eip=%08X pvFault=%RGv pvRange=%RGv\r\n", pRegFrame->eip, pvFault, pvRange));
    562570    Assert(pvFault - (uintptr_t)pVM->selm.s.pvLdtRC < (unsigned)(65536U + PAGE_SIZE));
    563     NOREF(pVM); NOREF(uErrorCode); NOREF(pRegFrame); NOREF(pvFault); NOREF(pvRange); NOREF(offRange);
     571    NOREF(pVM); NOREF(uErrorCode); NOREF(pRegFrame); NOREF(pvFault); NOREF(pvRange); NOREF(offRange); NOREF(pvUser);
    564572    return VERR_SELM_SHADOW_LDT_WRITE;
    565573}
     
    579587 * @param   offRange    The offset of the access into this range.
    580588 *                      (If it's a EIP range this is the EIP, if not it's pvFault.)
    581  */
    582 VMMRCDECL(int) selmRCShadowTSSWriteHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, RTGCPTR pvRange, uintptr_t offRange)
    583 {
    584     LogRel(("FATAL ERROR: selmRCShadowTSSWriteHandler: eip=%08X pvFault=%RGv pvRange=%RGv\r\n", pRegFrame->eip, pvFault, pvRange));
    585     NOREF(pVM); NOREF(uErrorCode); NOREF(pRegFrame); NOREF(pvFault); NOREF(pvRange); NOREF(offRange);
     589 * @param   pvUser      Unused.
     590 */
     591DECLEXPORT(int) selmRCShadowTSSWritePfHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault,
     592                                              RTGCPTR pvRange, uintptr_t offRange, void *pvUser)
     593{
     594    LogRel(("FATAL ERROR: selmRCShadowTSSWritePfHandler: eip=%08X pvFault=%RGv pvRange=%RGv\r\n", pRegFrame->eip, pvFault, pvRange));
     595    NOREF(pVM); NOREF(uErrorCode); NOREF(pRegFrame); NOREF(pvFault); NOREF(pvRange); NOREF(offRange); NOREF(pvUser);
    586596    return VERR_SELM_SHADOW_TSS_WRITE;
    587597}
  • trunk/src/VBox/VMM/VMMRC/TRPMRC.cpp

    r44528 r55895  
    101101 * @param   offRange    The offset of the access into this range.
    102102 *                      (If it's a EIP range this is the EIP, if not it's pvFault.)
     103 * @param   pvUser      Unused.
    103104 */
    104 VMMRCDECL(int) trpmRCGuestIDTWriteHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, RTGCPTR pvRange, uintptr_t offRange)
     105DECLEXPORT(int) trpmRCGuestIDTWritePfHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault,
     106                                             RTGCPTR pvRange, uintptr_t offRange, void *pvUser)
    105107{
    106108    PVMCPU      pVCpu = VMMGetCpu0(pVM);
     
    114116    AssertMsg(offRange < (uint32_t)cbIDT+1, ("pvFault=%RGv GCPtrIDT=%RGv-%RGv pvRange=%RGv\n", pvFault, GCPtrIDT, GCPtrIDTEnd, pvRange));
    115117    Assert((RTGCPTR)(RTRCUINTPTR)pvRange == GCPtrIDT);
    116     NOREF(uErrorCode);
     118    NOREF(uErrorCode); NOREF(pvUser);
    117119
    118120#if 0
     
    143145#endif
    144146
    145     Log(("trpmRCGuestIDTWriteHandler: eip=%RGv write to gate %x offset %x\n", pRegFrame->eip, iGate, offRange));
     147    Log(("trpmRCGuestIDTWritePfHandler: eip=%RGv write to gate %x offset %x\n", pRegFrame->eip, iGate, offRange));
    146148
    147149    /** @todo Check which IDT entry and keep the update cost low in TRPMR3SyncIDT() and CSAMCheckGates(). */
     
    164166 * @param   offRange    The offset of the access into this range.
    165167 *                      (If it's a EIP range this is the EIP, if not it's pvFault.)
     168 * @param   pvUser      Unused.
    166169 */
    167 VMMRCDECL(int) trpmRCShadowIDTWriteHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, RTGCPTR pvRange, uintptr_t offRange)
     170DECLEXPORT(int) trpmRCShadowIDTWritePfHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault,
     171                                              RTGCPTR pvRange, uintptr_t offRange, void *pvUser)
    168172{
    169173    PVMCPU pVCpu = VMMGetCpu0(pVM);
    170     LogRel(("FATAL ERROR: trpmRCShadowIDTWriteHandler: eip=%08X pvFault=%RGv pvRange=%08RGv\r\n", pRegFrame->eip, pvFault, pvRange));
    171     NOREF(uErrorCode); NOREF(offRange);
     174    LogRel(("FATAL ERROR: trpmRCShadowIDTWritePfHandler: eip=%08X pvFault=%RGv pvRange=%08RGv\r\n", pRegFrame->eip, pvFault, pvRange));
     175    NOREF(uErrorCode); NOREF(offRange); NOREF(pvUser);
    172176
    173177    /*
  • trunk/src/VBox/VMM/include/CSAMInternal.h

    r55889 r55895  
    283283
    284284RT_C_DECLS_BEGIN
    285 VMMRCDECL(int) CSAMGCCodePageWriteHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, RTGCPTR pvRange, uintptr_t offRange);
     285DECLEXPORT(FNPGMRCVIRTPFHANDLER) csamRCCodePageWritePfHandler;
    286286RT_C_DECLS_END
    287287
  • trunk/src/VBox/VMM/include/PATMInternal.h

    r55889 r55895  
    599599
    600600
    601 DECLCALLBACK(int) patmVirtPageHandler(PVM pVM, RTGCPTR GCPtr, void *pvPtr, void *pvBuf, size_t cbBuf, PGMACCESSTYPE enmAccessType, void *pvUser);
    602 
    603601DECLCALLBACK(int) patmR3Save(PVM pVM, PSSMHANDLE pSSM);
    604602DECLCALLBACK(int) patmR3Load(PVM pVM, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass);
     
    639637
    640638RT_C_DECLS_BEGIN
    641 /**
    642  * #PF Virtual Handler callback for Guest access a page monitored by PATM
    643  *
    644  * @returns VBox status code (appropriate for trap handling and GC return).
    645  * @param   pVM         Pointer to the VM.
    646  * @param   uErrorCode   CPU Error code.
    647  * @param   pRegFrame   Trap register frame.
    648  * @param   pvFault     The fault address (cr2).
    649  * @param   pvRange     The base address of the handled virtual range.
    650  * @param   offRange    The offset of the access into this range.
    651  *                      (If it's a EIP range this is the EIP, if not it's pvFault.)
    652  */
    653 VMMRCDECL(int) PATMGCMonitorPage(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, RTGCPTR pvRange, uintptr_t offRange);
    654 
     639DECLEXPORT(FNPGMRCVIRTPFHANDLER) patmRCVirtPagePfHandler;
    655640RT_C_DECLS_END
    656641
  • trunk/src/VBox/VMM/include/PGMInternal.h

    r55889 r55895  
    711711    bool                                afPadding[3];
    712712    /** Pointer to RC callback function. */
    713     RCPTRTYPE(PFNPGMRCVIRTHANDLER)      pfnHandlerRC;
     713    RCPTRTYPE(PFNPGMRCVIRTPFHANDLER)    pfnPfHandlerRC;
    714714    /** Pointer to the R3 callback function for invalidation. */
    715715    R3PTRTYPE(PFNPGMR3VIRTINVALIDATE)   pfnInvalidateR3;
  • trunk/src/VBox/VMM/include/SELMInternal.h

    r55894 r55895  
    230230RT_C_DECLS_BEGIN
    231231
    232 VMMRCDECL(int) selmRCGuestGDTWriteHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, RTGCPTR pvRange, uintptr_t offRange);
    233 VMMRCDECL(int) selmRCGuestLDTWriteHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, RTGCPTR pvRange, uintptr_t offRange);
    234 VMMRCDECL(int) selmRCGuestTSSWriteHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, RTGCPTR pvRange, uintptr_t offRange);
    235 
    236 VMMRCDECL(int) selmRCShadowGDTWriteHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, RTGCPTR pvRange, uintptr_t offRange);
    237 VMMRCDECL(int) selmRCShadowLDTWriteHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, RTGCPTR pvRange, uintptr_t offRange);
    238 VMMRCDECL(int) selmRCShadowTSSWriteHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, RTGCPTR pvRange, uintptr_t offRange);
     232DECLEXPORT(FNPGMRCVIRTPFHANDLER) selmRCGuestGDTWritePfHandler;
     233DECLEXPORT(FNPGMRCVIRTPFHANDLER) selmRCGuestLDTWritePfHandler;
     234DECLEXPORT(FNPGMRCVIRTPFHANDLER) selmRCGuestTSSWritePfHandler;
     235DECLEXPORT(FNPGMRCVIRTPFHANDLER) selmRCShadowGDTWritePfHandler;
     236DECLEXPORT(FNPGMRCVIRTPFHANDLER) selmRCShadowLDTWritePfHandler;
     237DECLEXPORT(FNPGMRCVIRTPFHANDLER) selmRCShadowTSSWritePfHandler;
    239238
    240239void           selmSetRing1Stack(PVM pVM, uint32_t ss, RTGCPTR32 esp);
  • trunk/src/VBox/VMM/include/TRPMInternal.h

    r55889 r55895  
    249249
    250250
    251 VMMRCDECL(int) trpmRCGuestIDTWriteHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, RTGCPTR pvRange, uintptr_t offRange);
    252 VMMRCDECL(int) trpmRCShadowIDTWriteHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, RTGCPTR pvRange, uintptr_t offRange);
     251DECLEXPORT(FNPGMRCVIRTPFHANDLER) trpmRCGuestIDTWritePfHandler;
     252DECLEXPORT(FNPGMRCVIRTPFHANDLER) trpmRCShadowIDTWritePfHandler;
    253253
    254254/**
  • trunk/src/VBox/VMM/testcase/tstVMStruct.h

    r55889 r55895  
    811811    GEN_CHECK_OFF(PGMVIRTHANDLERTYPEINT, uState);
    812812    GEN_CHECK_OFF(PGMVIRTHANDLERTYPEINT, fRelocUserRC);
    813     GEN_CHECK_OFF(PGMVIRTHANDLERTYPEINT, pfnHandlerRC);
     813    GEN_CHECK_OFF(PGMVIRTHANDLERTYPEINT, pfnPfHandlerRC);
    814814    GEN_CHECK_OFF(PGMVIRTHANDLERTYPEINT, pfnInvalidateR3);
    815815    GEN_CHECK_OFF(PGMVIRTHANDLERTYPEINT, pfnHandlerR3);
Note: See TracChangeset for help on using the changeset viewer.

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