5 #include "src/startup-data-util.h" 10 #include "src/base/file-utils.h" 11 #include "src/base/logging.h" 12 #include "src/base/platform/platform.h" 13 #include "src/flags.h" 14 #include "src/utils.h" 20 #ifdef V8_USE_EXTERNAL_STARTUP_DATA 24 v8::StartupData g_natives;
25 v8::StartupData g_snapshot;
28 void ClearStartupData(v8::StartupData* data) {
34 void DeleteStartupData(v8::StartupData* data) {
36 ClearStartupData(data);
40 void FreeStartupData() {
41 DeleteStartupData(&g_natives);
42 DeleteStartupData(&g_snapshot);
46 void Load(
const char* blob_file, v8::StartupData* startup_data,
47 void (*setter_fn)(v8::StartupData*)) {
48 ClearStartupData(startup_data);
52 FILE* file = fopen(blob_file,
"rb");
54 PrintF(stderr,
"Failed to open startup resource '%s'.\n", blob_file);
58 fseek(file, 0, SEEK_END);
59 startup_data->raw_size =
static_cast<int>(ftell(file));
62 startup_data->data =
new char[startup_data->raw_size];
63 int read_size =
static_cast<int>(fread(const_cast<char*>(startup_data->data),
64 1, startup_data->raw_size, file));
67 if (startup_data->raw_size == read_size) {
68 (*setter_fn)(startup_data);
70 PrintF(stderr,
"Corrupted startup resource '%s'.\n", blob_file);
75 void LoadFromFiles(
const char* natives_blob,
const char* snapshot_blob) {
76 Load(natives_blob, &g_natives, v8::V8::SetNativesDataBlob);
77 Load(snapshot_blob, &g_snapshot, v8::V8::SetSnapshotDataBlob);
79 atexit(&FreeStartupData);
83 #endif // V8_USE_EXTERNAL_STARTUP_DATA 86 void InitializeExternalStartupData(
const char* directory_path) {
87 #ifdef V8_USE_EXTERNAL_STARTUP_DATA 90 const char* snapshot_name =
"snapshot_blob.bin";
91 #ifdef V8_MULTI_SNAPSHOTS 92 if (!FLAG_untrusted_code_mitigations) {
93 snapshot_name =
"snapshot_blob_trusted.bin";
97 base::RelativePath(&natives, directory_path,
"natives_blob.bin"),
98 base::RelativePath(&snapshot, directory_path, snapshot_name));
101 #endif // V8_USE_EXTERNAL_STARTUP_DATA 105 void InitializeExternalStartupData(
const char* natives_blob,
106 const char* snapshot_blob) {
107 #ifdef V8_USE_EXTERNAL_STARTUP_DATA 108 LoadFromFiles(natives_blob, snapshot_blob);
109 #endif // V8_USE_EXTERNAL_STARTUP_DATA