File Explorer

/proc/2/root/proc/4/root/var/lang/include/node

This explorer reads the filesystem of the server it runs on, so /workspace/user isn't present here. Browsing and the terminal still work against this server's own disk from /.

3 dirs
66 files
v8-initialization.h11.0 KB · 315 lines
// Copyright 2021 the V8 project authors. All rights reserved.// Use of this source code is governed by a BSD-style license that can be// found in the LICENSE file. #ifndef INCLUDE_V8_INITIALIZATION_H_#define INCLUDE_V8_INITIALIZATION_H_ #include <stddef.h>#include <stdint.h> #include "v8-callbacks.h"  // NOLINT(build/include_directory)#include "v8-internal.h"   // NOLINT(build/include_directory)#include "v8-isolate.h"    // NOLINT(build/include_directory)#include "v8-platform.h"   // NOLINT(build/include_directory)#include "v8config.h"      // NOLINT(build/include_directory) // We reserve the V8_* prefix for macros defined in V8 public API and// assume there are no name conflicts with the embedder's code. /** * The v8 JavaScript engine. */namespace v8 { class PageAllocator;class Platform;template <class K, class V, class T>class PersistentValueMapBase; /** * EntropySource is used as a callback function when v8 needs a source * of entropy. */using EntropySource = bool (*)(unsigned char* buffer, size_t length); /** * ReturnAddressLocationResolver is used as a callback function when v8 is * resolving the location of a return address on the stack. Profilers that * change the return address on the stack can use this to resolve the stack * location to wherever the profiler stashed the original return address. * * \param return_addr_location A location on stack where a machine *    return address resides. * \returns Either return_addr_location, or else a pointer to the profiler's *    copy of the original return address. * * \note The resolver function must not cause garbage collection. */using ReturnAddressLocationResolver =    uintptr_t (*)(uintptr_t return_addr_location); using DcheckErrorCallback = void (*)(const char* file, int line,                                     const char* message); using V8FatalErrorCallback = void (*)(const char* file, int line,                                      const char* message); /** * Container class for static utility functions. */class V8_EXPORT V8 { public:  /**   * Hand startup data to V8, in case the embedder has chosen to build   * V8 with external startup data.   *   * Note:   * - By default the startup data is linked into the V8 library, in which   *   case this function is not meaningful.   * - If this needs to be called, it needs to be called before V8   *   tries to make use of its built-ins.   * - To avoid unnecessary copies of data, V8 will point directly into the   *   given data blob, so pretty please keep it around until V8 exit.   * - Compression of the startup blob might be useful, but needs to   *   handled entirely on the embedders' side.   * - The call will abort if the data is invalid.   */  static void SetSnapshotDataBlob(StartupData* startup_blob);   /** Set the callback to invoke in case of Dcheck failures. */  static void SetDcheckErrorHandler(DcheckErrorCallback that);   /** Set the callback to invoke in the case of CHECK failures or fatal   * errors. This is distinct from Isolate::SetFatalErrorHandler, which   * is invoked in response to API usage failures.   * */  static void SetFatalErrorHandler(V8FatalErrorCallback that);   /**   * Sets V8 flags from a string.   */  static void SetFlagsFromString(const char* str);  static void SetFlagsFromString(const char* str, size_t length);   /**   * Sets V8 flags from the command line.   */  static void SetFlagsFromCommandLine(int* argc, char** argv,                                      bool remove_flags);   /** Get the version string. */  static const char* GetVersion();   /**   * Initializes V8. This function needs to be called before the first Isolate   * is created. It always returns true.   */  V8_INLINE static bool Initialize() {#ifdef V8_TARGET_OS_ANDROID    const bool kV8TargetOsIsAndroid = true;#else    const bool kV8TargetOsIsAndroid = false;#endif #ifdef V8_ENABLE_CHECKS    const bool kV8EnableChecks = true;#else    const bool kV8EnableChecks = false;#endif     const int kBuildConfiguration =        (internal::PointerCompressionIsEnabled() ? kPointerCompression : 0) |        (internal::SmiValuesAre31Bits() ? k31BitSmis : 0) |        (internal::SandboxIsEnabled() ? kSandbox : 0) |        (kV8TargetOsIsAndroid ? kTargetOsIsAndroid : 0) |        (kV8EnableChecks ? kEnableChecks : 0);    return Initialize(kBuildConfiguration);  }   /**   * Allows the host application to provide a callback which can be used   * as a source of entropy for random number generators.   */  static void SetEntropySource(EntropySource source);   /**   * Allows the host application to provide a callback that allows v8 to   * cooperate with a profiler that rewrites return addresses on stack.   */  static void SetReturnAddressLocationResolver(      ReturnAddressLocationResolver return_address_resolver);   /**   * Releases any resources used by v8 and stops any utility threads   * that may be running.  Note that disposing v8 is permanent, it   * cannot be reinitialized.   *   * It should generally not be necessary to dispose v8 before exiting   * a process, this should happen automatically.  It is only necessary   * to use if the process needs the resources taken up by v8.   */  static bool Dispose();   /**   * Initialize the ICU library bundled with V8. The embedder should only   * invoke this method when using the bundled ICU. Returns true on success.   *   * If V8 was compiled with the ICU data in an external file, the location   * of the data file has to be provided.   */  static bool InitializeICU(const char* icu_data_file = nullptr);   /**   * Initialize the ICU library bundled with V8. The embedder should only   * invoke this method when using the bundled ICU. If V8 was compiled with   * the ICU data in an external file and when the default location of that   * file should be used, a path to the executable must be provided.   * Returns true on success.   *   * The default is a file called icudtl.dat side-by-side with the executable.   *   * Optionally, the location of the data file can be provided to override the   * default.   */  static bool InitializeICUDefaultLocation(const char* exec_path,                                           const char* icu_data_file = nullptr);   /**   * Initialize the external startup data. The embedder only needs to   * invoke this method when external startup data was enabled in a build.   *   * If V8 was compiled with the startup data in an external file, then   * V8 needs to be given those external files during startup. There are   * three ways to do this:   * - InitializeExternalStartupData(const char*)   *   This will look in the given directory for the file "snapshot_blob.bin".   * - InitializeExternalStartupDataFromFile(const char*)   *   As above, but will directly use the given file name.   * - Call SetSnapshotDataBlob.   *   This will read the blobs from the given data structure and will   *   not perform any file IO.   */  static void InitializeExternalStartupData(const char* directory_path);  static void InitializeExternalStartupDataFromFile(const char* snapshot_blob);   /**   * Sets the v8::Platform to use. This should be invoked before V8 is   * initialized.   */  static void InitializePlatform(Platform* platform);   /**   * Clears all references to the v8::Platform. This should be invoked after   * V8 was disposed.   */  static void DisposePlatform(); #if defined(V8_ENABLE_SANDBOX)  /**   * Returns true if the sandbox is configured securely.   *   * If V8 cannot create a regular sandbox during initialization, for example   * because not enough virtual address space can be reserved, it will instead   * create a fallback sandbox that still allows it to function normally but   * does not have the same security properties as a regular sandbox. This API   * can be used to determine if such a fallback sandbox is being used, in   * which case it will return false.   */  static bool IsSandboxConfiguredSecurely();   /**   * Provides access to the virtual address subspace backing the sandbox.   *   * This can be used to allocate pages inside the sandbox, for example to   * obtain virtual memory for ArrayBuffer backing stores, which must be   * located inside the sandbox.   *   * It should be assumed that an attacker can corrupt data inside the sandbox,   * and so in particular the contents of pages allocagted in this virtual   * address space, arbitrarily and concurrently. Due to this, it is   * recommended to to only place pure data buffers in them.   */  static VirtualAddressSpace* GetSandboxAddressSpace();   /**   * Returns the size of the sandbox in bytes.   *   * This represents the size of the address space that V8 can directly address   * and in which it allocates its objects.   */  static size_t GetSandboxSizeInBytes();   /**   * Returns the size of the address space reservation backing the sandbox.   *   * This may be larger than the sandbox (i.e. |GetSandboxSizeInBytes()|) due   * to surrounding guard regions, or may be smaller than the sandbox in case a   * fallback sandbox is being used, which will use a smaller virtual address   * space reservation. In the latter case this will also be different from   * |GetSandboxAddressSpace()->size()| as that will cover a larger part of the   * address space than what has actually been reserved.   */  static size_t GetSandboxReservationSizeInBytes();#endif  // V8_ENABLE_SANDBOX   /**   * Activate trap-based bounds checking for WebAssembly.   *   * \param use_v8_signal_handler Whether V8 should install its own signal   * handler or rely on the embedder's.   */  static bool EnableWebAssemblyTrapHandler(bool use_v8_signal_handler); #if defined(V8_OS_WIN)  /**   * On Win64, by default V8 does not emit unwinding data for jitted code,   * which means the OS cannot walk the stack frames and the system Structured   * Exception Handling (SEH) cannot unwind through V8-generated code:   * https://code.google.com/p/v8/issues/detail?id=3598.   *   * This function allows embedders to register a custom exception handler for   * exceptions in V8-generated code.   */  static void SetUnhandledExceptionCallback(      UnhandledExceptionCallback callback);#endif   /**   * Allows the host application to provide a callback that will be called when   * v8 has encountered a fatal failure to allocate memory and is about to   * terminate.   */  static void SetFatalMemoryErrorCallback(OOMErrorCallback callback);   /**   * Get statistics about the shared memory usage.   */  static void GetSharedMemoryStatistics(SharedMemoryStatistics* statistics);  private:  V8();   enum BuildConfigurationFeatures {    kPointerCompression = 1 << 0,    k31BitSmis = 1 << 1,    kSandbox = 1 << 2,    kTargetOsIsAndroid = 1 << 3,    kEnableChecks = 1 << 4,  };   /**   * Checks that the embedder build configuration is compatible with   * the V8 binary and if so initializes V8.   */  static bool Initialize(int build_config);   friend class Context;  template <class K, class V, class T>  friend class PersistentValueMapBase;}; }  // namespace v8 #endif  // INCLUDE_V8_INITIALIZATION_H_