summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main.rs2
-rw-r--r--src/snapshot.cc18
-rw-r--r--src/snapshot.rs18
3 files changed, 17 insertions, 21 deletions
diff --git a/src/main.rs b/src/main.rs
index 7c6806d5d..1224d2af2 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -97,7 +97,7 @@ fn main() {
});
let state = Arc::new(isolate::IsolateState::new(flags, rest_argv));
- let snapshot = unsafe { snapshot::deno_snapshot.clone() };
+ let snapshot = snapshot::deno_snapshot();
let mut isolate = isolate::Isolate::new(snapshot, state, ops::dispatch);
tokio_util::init(|| {
isolate
diff --git a/src/snapshot.cc b/src/snapshot.cc
deleted file mode 100644
index b0945d319..000000000
--- a/src/snapshot.cc
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright 2018 the Deno authors. All rights reserved. MIT license.
-
-#include "deno.h"
-
-extern "C" {
-
-extern const char snapshot_start asm("snapshot_start");
-extern const char snapshot_end asm("snapshot_end");
-asm(".data\n"
- "snapshot_start: .incbin \"gen/snapshot_deno.bin\"\n"
- "snapshot_end:\n"
- ".globl snapshot_start;\n"
- ".globl snapshot_end;");
-extern const deno_buf deno_snapshot = {
- nullptr, 0, reinterpret_cast<uint8_t*>(const_cast<char*>(&snapshot_start)),
- static_cast<size_t>(&snapshot_end - &snapshot_start)};
-
-}
diff --git a/src/snapshot.rs b/src/snapshot.rs
index 52c8df47d..4774ba43f 100644
--- a/src/snapshot.rs
+++ b/src/snapshot.rs
@@ -1,5 +1,19 @@
// Copyright 2018 the Deno authors. All rights reserved. MIT license.
use libdeno::deno_buf;
-extern "C" {
- pub static deno_snapshot: deno_buf;
+use std;
+
+pub fn deno_snapshot() -> deno_buf {
+ let data =
+ include_bytes!(concat!(env!("GN_OUT_DIR"), "/gen/snapshot_deno.bin"));
+ let ptr = data.as_ptr();
+ // TODO The cast is not necessary here. deno_buf specifies mutable
+ // pointers when it doesn't necessarally need mutable. So maybe the deno_buf
+ // type should be broken into a mutable and non-mutable version?
+ let ptr_mut = ptr as *mut u8;
+ deno_buf {
+ alloc_ptr: std::ptr::null_mut(),
+ alloc_len: 0,
+ data_ptr: ptr_mut,
+ data_len: data.len(),
+ }
}