|  | //===- subzero/src/main.cpp - Entry point for bitcode translation ---------===// | 
|  | // | 
|  | //                        The Subzero Code Generator | 
|  | // | 
|  | // This file is distributed under the University of Illinois Open Source | 
|  | // License. See LICENSE.TXT for details. | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  | /// | 
|  | /// \file | 
|  | /// \brief Defines the entry point for translating PNaCl bitcode into native | 
|  | /// code. | 
|  | /// | 
|  | //===----------------------------------------------------------------------===// | 
|  |  | 
|  | #include "IceBrowserCompileServer.h" | 
|  | #include "IceBuildDefs.h" | 
|  | #include "IceCompileServer.h" | 
|  |  | 
|  | #ifdef __pnacl__ | 
|  | #include <malloc.h> | 
|  | #endif // __pnacl__ | 
|  |  | 
|  | /// Depending on whether we are building the compiler for the browser or | 
|  | /// standalone, we will end up creating a Ice::BrowserCompileServer or | 
|  | /// Ice::CLCompileServer object. Method | 
|  | /// Ice::CompileServer::runAndReturnErrorCode is used for the invocation. | 
|  | /// There are no real commandline arguments in the browser case. They are | 
|  | /// supplied via IPC so argc, and argv are not used in that case. | 
|  | /// We can only compile the Ice::BrowserCompileServer object with the PNaCl | 
|  | /// compiler toolchain, when building Subzero as a sandboxed translator. | 
|  | int main(int argc, char **argv) { | 
|  | #ifdef __pnacl__ | 
|  | #define M_GRANULARITY (-2) | 
|  | // PNaCl's default malloc implementation grabs small chunks of memory with | 
|  | // mmap at a time, hence causing significant slowdowns. This call ensures that | 
|  | // mmap is used to allocate 16MB at a time, to amortize the system call cost. | 
|  | mallopt(M_GRANULARITY, 16 * 1024 * 1024); | 
|  | #undef M_GRANULARITY | 
|  | #endif // __pnacl__ | 
|  |  | 
|  | if (Ice::BuildDefs::browser()) { | 
|  | assert(argc == 1); | 
|  | return Ice::BrowserCompileServer().runAndReturnErrorCode(); | 
|  | } | 
|  | return Ice::CLCompileServer(argc, argv).runAndReturnErrorCode(); | 
|  | } |