VirtualBox

Changeset 2959 in kBuild


Ignore:
Timestamp:
Sep 21, 2016 8:53:32 PM (8 years ago)
Author:
bird
Message:

kSubmit/kWorker: Added --no-pch-caching parameter to work around trouble with precompiled header file creation. Enabled pch caching in the 64-bit version of kWorker, not virtual memory problems there.

Location:
trunk/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kWorker/kWorker.c

    r2957 r2959  
    9696 * Keep history of the last jobs.  For debugging.  */
    9797#define WITH_HISTORY
     98
     99/** @def WITH_PCH_CACHING
     100 * Enables read caching of precompiled header files. */
     101#if K_ARCH_BITS >= 64
     102# define WITH_PCH_CACHING
     103#endif
    98104
    99105
     
    684690    /** Set if we're running. */
    685691    KBOOL       fRunning;
     692    /** Whether to disable caching of ".pch" files. */
     693    KBOOL       fNoPchCaching;
    686694
    687695    /** The command line.   */
     
    49654973        }
    49664974    }
    4967 #if 0 /* compiler does write+copy mapping, so forget it. */
     4975#ifdef WITH_PCH_CACHING
    49684976    /* Precompiled header: .pch */
    49694977    else if (wcFirst == 'p' || wcFirst == 'P')
     
    49724980        {
    49734981            if (wcThird == 'h' || wcThird == 'H')
    4974                 return K_TRUE;
     4982                return !g_Sandbox.fNoPchCaching;
    49754983        }
    49764984    }
     
    51075115        {
    51085116            if (   cbFile.QuadPart >= 0
     5117#ifdef WITH_PCH_CACHING
    51095118                && (   cbFile.QuadPart < 16*1024*1024
    5110                     || (   cbFile.QuadPart < 64*1024*1024
     5119                    || (   cbFile.QuadPart < 96*1024*1024
    51115120                        && pFsObj->cchName > 4
    5112                         && kHlpStrICompAscii(&pFsObj->pszName[pFsObj->cchName - 4], ".pch") == 0) ))
     5121                        && !g_Sandbox.fNoPchCaching
     5122                        && kHlpStrICompAscii(&pFsObj->pszName[pFsObj->cchName - 4], ".pch") == 0) )
     5123#endif
     5124               )
    51135125            {
    51145126                KU32 cbCache = (KU32)cbFile.QuadPart;
     
    57155727    }
    57165728
    5717     KWFS_LOG(("ReadFile(%p)\n", hFile));
     5729    KWFS_LOG(("ReadFile(%p,%p,%#x,,)\n", hFile, pvBuffer, cbToRead));
    57185730    return ReadFile(hFile, pvBuffer, cbToRead, pcbActuallyRead, pOverlapped);
    57195731}
     
    63006312                        else
    63016313                            hMapping = NULL;
    6302                         KWFS_LOG(("CreateFileMappingW(%p, %u) -> %p [temp]\n", hFile, fProtect, hMapping));
     6314                        KWFS_LOG(("CreateFileMappingW(%p, %u) -> %p [cached]\n", hFile, fProtect, hMapping));
    63036315                        return hMapping;
    63046316                    }
    6305                     kHlpAssertMsgFailed(("fProtect=%#x cb=%#x'%08x name=%p\n",
    6306                                          fProtect, dwMaximumSizeHigh, dwMaximumSizeLow, pwszName));
    6307                     SetLastError(ERROR_ACCESS_DENIED);
    6308                     return INVALID_HANDLE_VALUE;
    6309 
    6310 
     6317
     6318                    /* Do fallback (for .pch). */
     6319                    kHlpAssertMsg(fProtect == PAGE_WRITECOPY,
     6320                                  ("fProtect=%#x cb=%#x'%08x name=%p\n",
     6321                                   fProtect, dwMaximumSizeHigh, dwMaximumSizeLow, pwszName));
     6322
     6323                    hMapping = CreateFileMappingW(hFile, pSecAttrs, fProtect, dwMaximumSizeHigh, dwMaximumSizeLow, pwszName);
     6324                    KWFS_LOG(("CreateFileMappingW(%p, %p, %#x, %#x, %#x, %p) -> %p [cached-fallback]\n",
     6325                              hFile, pSecAttrs, fProtect, dwMaximumSizeHigh, dwMaximumSizeLow, pwszName, hMapping));
     6326                    return hMapping;
    63116327                }
    63126328
     
    87608776static int kwSandboxInit(PKWSANDBOX pSandbox, PKWTOOL pTool,
    87618777                         KU32 cArgs, const char **papszArgs, KBOOL fWatcomBrainDamange,
    8762                          KU32 cEnvVars, const char **papszEnvVars)
     8778                         KU32 cEnvVars, const char **papszEnvVars, KBOOL fNoPchCaching)
    87638779{
    87648780    PPEB pPeb = kwSandboxGetProcessEnvironmentBlock();
     
    87888804    pSandbox->Combined.cFlushes = 0;
    87898805#endif
     8806    pSandbox->fNoPchCaching = fNoPchCaching;
    87908807    pSandbox->cArgs         = cArgs;
    87918808    pSandbox->papszArgs     = (char **)papszArgs;
     
    92009217
    92019218static int kwSandboxExec(PKWSANDBOX pSandbox, PKWTOOL pTool, KU32 cArgs, const char **papszArgs, KBOOL fWatcomBrainDamange,
    9202                          KU32 cEnvVars, const char **papszEnvVars)
     9219                         KU32 cEnvVars, const char **papszEnvVars, KBOOL fNoPchCaching)
    92039220{
    92049221    int rcExit = 42;
     
    92089225     * Initialize the sandbox environment.
    92099226     */
    9210     rc = kwSandboxInit(&g_Sandbox, pTool, cArgs, papszArgs, fWatcomBrainDamange, cEnvVars, papszEnvVars);
     9227    rc = kwSandboxInit(&g_Sandbox, pTool, cArgs, papszArgs, fWatcomBrainDamange, cEnvVars, papszEnvVars, fNoPchCaching);
    92119228    if (rc == 0)
    92129229    {
     
    93429359 * @param   cEnvVars            The number of environment variables.
    93439360 * @param   papszEnvVars        The environment vector.
     9361 * @param   fNoPchCaching       Whether to disable precompiled header file
     9362 *                              caching.  Avoid trouble when creating them.
    93449363 * @param   cPostCmdArgs        Number of post command arguments (includes cmd).
    93459364 * @param   papszPostCmdArgs    The post command and its argument.
     
    93479366static int kSubmitHandleJobUnpacked(const char *pszExecutable, const char *pszCwd,
    93489367                                    KU32 cArgs, const char **papszArgs, KBOOL fWatcomBrainDamange,
    9349                                     KU32 cEnvVars, const char **papszEnvVars,
     9368                                    KU32 cEnvVars, const char **papszEnvVars, KBOOL fNoPchCaching,
    93509369                                    KU32 cPostCmdArgs, const char **papszPostCmdArgs)
    93519370{
     
    94039422                {
    94049423                    KW_LOG(("Sandboxing tool %s\n", pTool->pszPath));
    9405                     rcExit = kwSandboxExec(&g_Sandbox, pTool, cArgs, papszArgs, fWatcomBrainDamange, cEnvVars, papszEnvVars);
     9424                    rcExit = kwSandboxExec(&g_Sandbox, pTool, cArgs, papszArgs, fWatcomBrainDamange,
     9425                                           cEnvVars, papszEnvVars, fNoPchCaching);
    94069426                }
    94079427                else
     
    95379557                                papszEnvVars[cEnvVars] = 0;
    95389558
    9539                                 /* Flags (currently just watcom argument brain damanage). */
    9540                                 if (cbMsg >= sizeof(KU8))
     9559                                /* Flags (currently just watcom argument brain damage and no precompiled header caching). */
     9560                                if (cbMsg >= sizeof(KU8) * 2)
    95419561                                {
    95429562                                    KBOOL fWatcomBrainDamange = *pszMsg++;
    9543                                     cbMsg--;
     9563                                    KBOOL fNoPchCaching = *pszMsg++;
     9564                                    cbMsg -= 2;
    95449565
    95459566                                    /* Post command argument count (can be zero). */
     
    95779598                                                rcExit = kSubmitHandleJobUnpacked(pszExecutable, pszCwd,
    95789599                                                                                  cArgs, papszArgs, fWatcomBrainDamange,
    9579                                                                                   cEnvVars, papszEnvVars,
     9600                                                                                  cEnvVars, papszEnvVars, fNoPchCaching,
    95809601                                                                                  cPostCmdArgs, apszPostCmdArgs);
    95819602                                            }
     
    97189739    KU32        cEnvVars;
    97199740    KBOOL       fWatcomBrainDamange = K_FALSE;
     9741    KBOOL       fNoPchCaching = K_FALSE;
    97209742
    97219743    /*
     
    97539775        }
    97549776
     9777        /* Optional watcom flag directory change. */
     9778        if (   i < argc
     9779            && strcmp(argv[i], "--no-pch-caching") == 0)
     9780        {
     9781            fNoPchCaching = K_TRUE;
     9782            i++;
     9783        }
     9784
    97559785        /* Trigger breakpoint */
    97569786        if (   i < argc
     
    97879817        rcExit = kSubmitHandleJobUnpacked(argv[i], pszCwd,
    97889818                                          argc - i, &argv[i], fWatcomBrainDamange,
    9789                                           cEnvVars, environ,
     9819                                          cEnvVars, environ, fNoPchCaching,
    97909820                                          0, NULL);
    97919821        KW_LOG(("rcExit=%d\n", rcExit));
  • trunk/src/kmk/kmkbuiltin/kSubmit.c

    r2918 r2959  
    574574 * @param   pszCwd              The current directory.
    575575 * @param   fWatcomBrainDamage  The wcc/wcc386 workaround.
     576 * @param   fNoPchCaching       Whether to disable precompiled header caching.
    576577 * @param   papszPostCmdArgs    The post command and it's arguments.
    577578 * @param   cPostCmdArgs        Number of post command argument, including the
     
    580581 */
    581582static void *kSubmitComposeJobMessage(const char *pszExecutable, char **papszArgs, char **papszEnvVars,
    582                                       const char *pszCwd, int fWatcomBrainDamage,
     583                                      const char *pszCwd, int fWatcomBrainDamage, int fNoPchCaching,
    583584                                      char **papszPostCmdArgs, uint32_t cPostCmdArgs, uint32_t *pcbMsg)
    584585{
     
    615616    cEnvVars = i;
    616617
    617     cbMsg += 1;
     618    cbMsg += 1; /* fWatcomBrainDamage */
     619    cbMsg += 1; /* fNoPchCaching */
    618620
    619621    cbMsg += sizeof(cPostCmdArgs);
     
    667669    /* flags */
    668670    *pbCursor++ = fWatcomBrainDamage != 0;
     671    *pbCursor++ = fNoPchCaching != 0;
    669672
    670673    /* post command */
     
    11661169    fprintf(pOut,
    11671170            "usage: %s [-Z|--zap-env] [-E|--set <var=val>] [-U|--unset <var=val>]\n"
    1168             "           [-C|--chdir <dir>] [--wcc-brain-damage]\n"
     1171            "           [-C|--chdir <dir>] [--wcc-brain-damage] [--no-pch-caching]\n"
    11691172            "           [-3|--32-bit] [-6|--64-bit] [-v]\n"
    11701173            "           [-P|--post-cmd <cmd> [args]] -- <program> [args]\n"
     
    11891192            "    Works around wcc and wcc386 (Open Watcom) not following normal\n"
    11901193            "    quoting conventions on Windows, OS/2, and DOS.\n"
     1194            "  --no-pch-caching\n"
     1195            "    Do not cache precompiled header files because they're being created.\n"
    11911196            "  -v,--verbose\n"
    11921197            "    More verbose execution.\n"
     
    12191224    unsigned        cBitsWorker         = g_cArchBits;
    12201225    int             fWatcomBrainDamage  = 0;
     1226    int             fNoPchCaching       = 0;
    12211227    int             cVerbosity          = 0;
    12221228    size_t const    cbCwdBuf            = GET_PATH_MAX;
     
    12741280                {
    12751281                    fWatcomBrainDamage = 1;
     1282                    continue;
     1283                }
     1284
     1285                if (strcmp(pszArg, "no-pch-caching") == 0)
     1286                {
     1287                    fNoPchCaching = 1;
    12761288                    continue;
    12771289                }
     
    14131425        uint32_t        cbMsg;
    14141426        void           *pvMsg   = kSubmitComposeJobMessage(pszExecutable, &argv[iArg], papszEnv, szCwd,
    1415                                                            fWatcomBrainDamage, &argv[iPostCmd], cPostCmdArgs, &cbMsg);
     1427                                                           fWatcomBrainDamage, fNoPchCaching,
     1428                                                           &argv[iPostCmd], cPostCmdArgs, &cbMsg);
    14161429        PWORKERINSTANCE pWorker = kSubmitSelectWorkSpawnNewIfNecessary(cBitsWorker, cVerbosity);
    14171430        if (pWorker)
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