VirtualBox

Changeset 33269 in vbox for trunk/src/recompiler


Ignore:
Timestamp:
Oct 20, 2010 3:42:28 PM (14 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
66829
Message:

IPRT: A quick replacement of the RTMemPage* and RTMemExec* APIs on posix. (Turned out to be a bit more work than expected because of the electric fence heap and init dependencies.)

File:
1 edited

Legend:

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

    r31636 r33269  
    339339/** Pointer to the memory containing the loaded REM2 object/DLL. */
    340340static void    *g_pvREM2 = NULL;
     341/** The size of the memory g_pvREM2 is pointing to. */
     342static size_t   g_cbREM2 = 0;
    341343# ifdef VBOX_WITHOUT_REM_LDR_CYCLE
    342344/** Loader handle of the VBoxVMM DLL. */
     
    402404    { REMPARMDESC_FLAGS_INT,        sizeof(const char *),       NULL }
    403405};
     406static const REMPARMDESC g_aArgsPTR_SIZE_T[] =
     407{
     408    { REMPARMDESC_FLAGS_INT,        sizeof(void *),             NULL },
     409    { REMPARMDESC_FLAGS_INT,        sizeof(size_t),             NULL }
     410};
    404411static const REMPARMDESC g_aArgsVM[] =
    405412{
     
    10851092    { REMPARMDESC_FLAGS_INT,        sizeof(size_t),             NULL },
    10861093    { REMPARMDESC_FLAGS_INT,        sizeof(unsigned),           NULL }
    1087 };
    1088 static const REMPARMDESC g_aArgsRTMemPageFree[] =
    1089 {
    1090     { REMPARMDESC_FLAGS_INT,        sizeof(void *),             NULL },
    1091     { REMPARMDESC_FLAGS_INT,        sizeof(size_t),             NULL }
    10921094};
    10931095static const REMPARMDESC g_aArgsRTStrPrintf[] =
     
    13201322    { "RTMemReallocTag",                        (void *)(uintptr_t)&RTMemReallocTag,                &g_aArgsRTMemReallocTag[0],                 RT_ELEMENTS(g_aArgsRTMemReallocTag),                   REMFNDESC_FLAGS_RET_INT,    sizeof(void *),     NULL },
    13211323    { "RTMemExecAllocTag",                      (void *)(uintptr_t)&RTMemExecAllocTag,              &g_aArgsSIZE_TTag[0],                       RT_ELEMENTS(g_aArgsSIZE_TTag),                         REMFNDESC_FLAGS_RET_INT,    sizeof(void *),     NULL },
    1322     { "RTMemExecFree",                          (void *)(uintptr_t)&RTMemExecFree,                  &g_aArgsPTR[0],                             RT_ELEMENTS(g_aArgsPTR),                               REMFNDESC_FLAGS_RET_VOID,   0,                  NULL },
     1324    { "RTMemExecFree",                          (void *)(uintptr_t)&RTMemExecFree,                  &g_aArgsPTR_SIZE_T[0],                      RT_ELEMENTS(g_aArgsPTR_SIZE_T),                        REMFNDESC_FLAGS_RET_VOID,   0,                  NULL },
    13231325    { "RTMemFree",                              (void *)(uintptr_t)&RTMemFree,                      &g_aArgsPTR[0],                             RT_ELEMENTS(g_aArgsPTR),                               REMFNDESC_FLAGS_RET_VOID,   0,                  NULL },
    13241326    { "RTMemPageAllocTag",                      (void *)(uintptr_t)&RTMemPageAllocTag,              &g_aArgsSIZE_TTag[0],                       RT_ELEMENTS(g_aArgsSIZE_TTag),                         REMFNDESC_FLAGS_RET_INT,    sizeof(void *),     NULL },
    1325     { "RTMemPageFree",                          (void *)(uintptr_t)&RTMemPageFree,                  &g_aArgsRTMemPageFree[0],                   RT_ELEMENTS(g_aArgsRTMemPageFree),                     REMFNDESC_FLAGS_RET_VOID,   0,                  NULL },
     1327    { "RTMemPageFree",                          (void *)(uintptr_t)&RTMemPageFree,                  &g_aArgsPTR_SIZE_T[0],                      RT_ELEMENTS(g_aArgsPTR_SIZE_T),                        REMFNDESC_FLAGS_RET_VOID,   0,                  NULL },
    13261328    { "RTMemProtect",                           (void *)(uintptr_t)&RTMemProtect,                   &g_aArgsRTMemProtect[0],                    RT_ELEMENTS(g_aArgsRTMemProtect),                      REMFNDESC_FLAGS_RET_INT,    sizeof(int),        NULL },
    13271329    { "RTStrPrintf",                            (void *)(uintptr_t)&RTStrPrintf,                    &g_aArgsRTStrPrintf[0],                     RT_ELEMENTS(g_aArgsRTStrPrintf),                       REMFNDESC_FLAGS_RET_INT | REMFNDESC_FLAGS_ELLIPSIS, sizeof(size_t), NULL },
     
    19982000    if (RT_SUCCESS(rc))
    19992001    {
    2000         g_pvREM2 = RTMemExecAlloc(RTLdrSize(g_ModREM2));
     2002        g_cbREM2 = RTLdrSize(g_ModREM2);
     2003        g_pvREM2 = RTMemExecAlloc(g_cbREM);
    20012004        if (g_pvREM2)
    20022005        {
     
    20282031                return rc;
    20292032            }
    2030             RTMemExecFree(g_pvREM2);
     2033
     2034            RTMemExecFree(g_pvREM2, g_cbREM2);
     2035            g_pvREM2 = NULL;
    20312036        }
     2037        g_cbREM2 = 0;
    20322038        RTLdrClose(g_ModREM2);
    20332039        g_ModREM2 = NIL_RTLDRMOD;
     
    20492055    RTLdrClose(g_ModREM2);
    20502056    g_ModREM2 = NIL_RTLDRMOD;
    2051     RTMemExecFree(g_pvREM2);
     2057    RTMemExecFree(g_pvREM2, g_cbREM2);
    20522058    g_pvREM2 = NULL;
     2059    g_cbREM2 = 0;
    20532060
    20542061    /* clear the pointers. */
     
    20692076        g_pExecMemHead = pCur->pNext;
    20702077        memset(pCur, 0xcc, pCur->cb);
    2071         RTMemExecFree(pCur);
     2078        RTMemExecFree(pCur, pCur->cb);
    20722079    }
    20732080#  endif
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