VirtualBox

Changeset 28330 in vbox


Ignore:
Timestamp:
Apr 14, 2010 9:47:47 PM (15 years ago)
Author:
vboxsync
Message:

PDMR3LdrGetInterfaceSymbols related fixes.

Location:
trunk/src/VBox/VMM
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/PDMDevHlp.cpp

    r27254 r28330  
    17991799        if (pDevIns->pReg->fFlags & PDM_DEVREG_FLAGS_RC)
    18001800            rc = PDMR3LdrGetInterfaceSymbols(pDevIns->Internal.s.pVMR3, pvInterface, cbInterface,
    1801                                              pDevIns->pReg->szName, pszSymPrefix, pszSymList,
     1801                                             pDevIns->pReg->szRCMod, pszSymPrefix, pszSymList,
    18021802                                             false /*fRing0OrRC*/);
    18031803        else
     
    18351835        if (pDevIns->pReg->fFlags & PDM_DEVREG_FLAGS_R0)
    18361836            rc = PDMR3LdrGetInterfaceSymbols(pDevIns->Internal.s.pVMR3, pvInterface, cbInterface,
    1837                                              pDevIns->pReg->szName, pszSymPrefix, pszSymList,
     1837                                             pDevIns->pReg->szR0Mod, pszSymPrefix, pszSymList,
    18381838                                             true /*fRing0OrRC*/);
    18391839        else
  • trunk/src/VBox/VMM/PDMDriver.cpp

    r28327 r28330  
    12301230        if (pDrvIns->pReg->fFlags & PDM_DRVREG_FLAGS_RC)
    12311231            rc = PDMR3LdrGetInterfaceSymbols(pDrvIns->Internal.s.pVMR3, pvInterface, cbInterface,
    1232                                              pDrvIns->pReg->szName, pszSymPrefix, pszSymList,
     1232                                             pDrvIns->pReg->szRCMod, pszSymPrefix, pszSymList,
    12331233                                             false /*fRing0OrRC*/);
    12341234        else
     
    12661266        if (pDrvIns->pReg->fFlags & PDM_DRVREG_FLAGS_R0)
    12671267            rc = PDMR3LdrGetInterfaceSymbols(pDrvIns->Internal.s.pVMR3, pvInterface, cbInterface,
    1268                                              pDrvIns->pReg->szName, pszSymPrefix, pszSymList,
     1268                                             pDrvIns->pReg->szR0Mod, pszSymPrefix, pszSymList,
    12691269                                             true /*fRing0OrRC*/);
    12701270        else
  • trunk/src/VBox/VMM/PDMLdr.cpp

    r28317 r28330  
    13041304 *                              - GCPHYS:whatever,
    13051305 *                              - HCPHYS:whatever.
    1306  * @param   fRing0OrRC      Set if it's a ring-0 context interface, clear if
     1306 * @param   fRing0          Set if it's a ring-0 context interface, clear if
    13071307 *                          it's raw-mode context interface.
    13081308 */
    13091309VMMR3DECL(int) PDMR3LdrGetInterfaceSymbols(PVM pVM, void *pvInterface, size_t cbInterface,
    13101310                                           const char *pszModule, const char *pszSymPrefix,
    1311                                            const char *pszSymList, bool fRing0OrRC)
     1311                                           const char *pszSymList, bool fRing0)
    13121312{
    13131313    /*
     
    13161316    int     rc      = VINF_SUCCESS;
    13171317    PPDMMOD pModule = pdmR3LdrFindModule(pVM->pUVM,
    1318                                          pszModule ? pszModule : fRing0OrRC ? "VMMR0.r0" : "VMMGC.gc",
    1319                                          fRing0OrRC ? PDMMOD_TYPE_R0 : PDMMOD_TYPE_RC,
     1318                                         pszModule ? pszModule : fRing0 ? "VMMR0.r0" : "VMMGC.gc",
     1319                                         fRing0 ? PDMMOD_TYPE_R0 : PDMMOD_TYPE_RC,
    13201320                                         true /*fLazy*/);
    13211321    if (pModule)
     
    13241324        char            szSymbol[256];
    13251325        size_t const    cchSymPrefix = strlen(pszSymPrefix);
    1326         AssertReturn(cchSymPrefix + 5 >= sizeof(szSymbol), VERR_SYMBOL_NOT_FOUND);
     1326        AssertReturn(cchSymPrefix + 5 < sizeof(szSymbol), VERR_SYMBOL_NOT_FOUND);
    13271327        memcpy(szSymbol, pszSymPrefix, cchSymPrefix);
    13281328
     
    13941394                 */
    13951395                AssertReturn(cchSymPrefix + cchSym < sizeof(szSymbol), VERR_SYMBOL_NOT_FOUND);
    1396                 memcmp(&szSymbol[cchSymPrefix], pszCur, cchSym);
     1396                memcpy(&szSymbol[cchSymPrefix], pszCur, cchSym);
    13971397                szSymbol[cchSymPrefix + cchSym] = '\0';
    13981398
    1399                 RTUINTPTR Value;
    1400                 rc = RTLdrGetSymbolEx(pModule->hLdrMod, pModule->pvBits, pModule->ImageBase, szSymbol, &Value);
    1401                 AssertMsgRCBreak(rc, ("Couldn't find symbol '%s' in module '%s'\n", szSymbol, pModule->szName));
    1402 
    1403                 if (fRing0OrRC)
     1399                if (fRing0)
    14041400                {
     1401                    void *pvValue;
     1402                    rc = SUPR3GetSymbolR0((void *)(RTR0PTR)pModule->ImageBase, szSymbol, &pvValue);
     1403                    AssertMsgRCBreak(rc, ("Couldn't find symbol '%s' in module '%s'\n", szSymbol, pModule->szName));
     1404
    14051405                    PRTR0PTR pValue = (PRTR0PTR)((uintptr_t)pvInterface + offInterface);
    14061406                    AssertMsgBreakStmt(offInterface + sizeof(*pValue) <= cbInterface,
    14071407                                       ("off=%#x cb=%#x sym=%s\n", offInterface, cbInterface, szSymbol),
    14081408                                       rc = VERR_BUFFER_OVERFLOW);
    1409                     *pValue = (RTR0PTR)Value;
    1410                     Assert(*pValue == Value);
     1409                    *pValue = (RTR0PTR)pvValue;
     1410                    Assert((void *)*pValue == pvValue);
    14111411                    offInterface += sizeof(*pValue);
    14121412                }
    14131413                else
    14141414                {
     1415                    RTUINTPTR Value;
     1416                    rc = RTLdrGetSymbolEx(pModule->hLdrMod, pModule->pvBits, pModule->ImageBase, szSymbol, &Value);
     1417                    AssertMsgRCBreak(rc, ("Couldn't find symbol '%s' in module '%s'\n", szSymbol, pModule->szName));
     1418
    14151419                    PRTRCPTR pValue = (PRTRCPTR)((uintptr_t)pvInterface + offInterface);
    14161420                    AssertMsgBreakStmt(offInterface + sizeof(*pValue) <= cbInterface,
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