OLD | NEW |
1 // Copyright 2006-2008 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2008 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <errno.h> | 5 #include <errno.h> |
6 #include <signal.h> | 6 #include <signal.h> |
7 #include <stdio.h> | 7 #include <stdio.h> |
8 | 8 |
9 #include "include/libplatform/libplatform.h" | 9 #include "include/libplatform/libplatform.h" |
10 #include "src/assembler.h" | 10 #include "src/assembler.h" |
11 #include "src/base/platform/platform.h" | 11 #include "src/base/platform/platform.h" |
12 #include "src/flags.h" | 12 #include "src/flags.h" |
13 #include "src/list.h" | 13 #include "src/list.h" |
| 14 #include "src/msan.h" |
14 #include "src/snapshot/natives.h" | 15 #include "src/snapshot/natives.h" |
15 #include "src/snapshot/partial-serializer.h" | 16 #include "src/snapshot/partial-serializer.h" |
16 #include "src/snapshot/startup-serializer.h" | 17 #include "src/snapshot/startup-serializer.h" |
17 | 18 |
18 using namespace v8; | 19 using namespace v8; |
19 | 20 |
20 class SnapshotWriter { | 21 class SnapshotWriter { |
21 public: | 22 public: |
22 SnapshotWriter() : snapshot_cpp_path_(NULL), snapshot_blob_path_(NULL) {} | 23 SnapshotWriter() : snapshot_cpp_path_(NULL), snapshot_blob_path_(NULL) {} |
23 | 24 |
24 void SetSnapshotFile(const char* snapshot_cpp_file) { | 25 void SetSnapshotFile(const char* snapshot_cpp_file) { |
25 snapshot_cpp_path_ = snapshot_cpp_file; | 26 snapshot_cpp_path_ = snapshot_cpp_file; |
26 } | 27 } |
27 | 28 |
28 void SetStartupBlobFile(const char* snapshot_blob_file) { | 29 void SetStartupBlobFile(const char* snapshot_blob_file) { |
29 snapshot_blob_path_ = snapshot_blob_file; | 30 snapshot_blob_path_ = snapshot_blob_file; |
30 } | 31 } |
31 | 32 |
32 void WriteSnapshot(v8::StartupData blob) const { | 33 void WriteSnapshot(v8::StartupData blob) const { |
33 // TODO(crbug/633159): if we crash before the files have been fully created, | 34 // TODO(crbug/633159): if we crash before the files have been fully created, |
34 // we end up with a corrupted snapshot file. The build step would succeed, | 35 // we end up with a corrupted snapshot file. The build step would succeed, |
35 // but the build target is unusable. Ideally we would write out temporary | 36 // but the build target is unusable. Ideally we would write out temporary |
36 // files and only move them to the final destination as last step. | 37 // files and only move them to the final destination as last step. |
| 38 |
| 39 // Tell MSan to ignore uninitialized padding in the blob. |
| 40 MSAN_MEMORY_IS_INITIALIZED(blob.data, blob.raw_size); |
| 41 |
37 i::Vector<const i::byte> blob_vector( | 42 i::Vector<const i::byte> blob_vector( |
38 reinterpret_cast<const i::byte*>(blob.data), blob.raw_size); | 43 reinterpret_cast<const i::byte*>(blob.data), blob.raw_size); |
39 MaybeWriteSnapshotFile(blob_vector); | 44 MaybeWriteSnapshotFile(blob_vector); |
40 MaybeWriteStartupBlob(blob_vector); | 45 MaybeWriteStartupBlob(blob_vector); |
41 } | 46 } |
42 | 47 |
43 private: | 48 private: |
44 void MaybeWriteStartupBlob(const i::Vector<const i::byte>& blob) const { | 49 void MaybeWriteStartupBlob(const i::Vector<const i::byte>& blob) const { |
45 if (!snapshot_blob_path_) return; | 50 if (!snapshot_blob_path_) return; |
46 | 51 |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
181 CHECK(blob.data); | 186 CHECK(blob.data); |
182 writer.WriteSnapshot(blob); | 187 writer.WriteSnapshot(blob); |
183 delete[] blob.data; | 188 delete[] blob.data; |
184 } | 189 } |
185 | 190 |
186 V8::Dispose(); | 191 V8::Dispose(); |
187 V8::ShutdownPlatform(); | 192 V8::ShutdownPlatform(); |
188 delete platform; | 193 delete platform; |
189 return 0; | 194 return 0; |
190 } | 195 } |
OLD | NEW |