Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1512)

Unified Diff: src/wasm/wasm-module.h

Issue 2500443004: [wasm] OOB traps: build protected instruction list during codegen (Closed)
Patch Set: Fixing Windows better Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/wasm/wasm-module.h
diff --git a/src/wasm/wasm-module.h b/src/wasm/wasm-module.h
index 2b7f28063cd2325aa96592daa5df558a5212abde..dc5f0ec2b15b4bbca8325fc2e7521986cf2cf3f5 100644
--- a/src/wasm/wasm-module.h
+++ b/src/wasm/wasm-module.h
@@ -31,6 +31,17 @@ class WasmCompilationUnit;
namespace wasm {
class ErrorThrower;
+// TODO(eholk): Move this into trap-handler.h once those files land.
+struct ProtectedInstructionData {
titzer 2016/11/16 18:06:47 I think it'd be best to move this into the compile
Eric Holk 2016/11/18 02:19:46 Done.
+ /// The offset of this instruction from the start of its code object.
+ int32_t instr_offset;
+
+ /// The offset of the landing pad from the start of its code object.
+ //
+ // TODO(eholk): Using a single landing pad and store parameters here.
+ int32_t landing_offset;
+};
+
const size_t kMaxModuleSize = 1024 * 1024 * 1024;
const size_t kMaxFunctionSize = 128 * 1024;
const size_t kMaxStringSize = 256;
@@ -172,6 +183,8 @@ struct WasmExport {
enum ModuleOrigin { kWasmOrigin, kAsmJsOrigin };
+typedef std::vector<ProtectedInstructionData> ProtectedInstructionList;
+
// Static representation of a module.
struct V8_EXPORT_PRIVATE WasmModule {
static const uint32_t kPageSize = 0x10000; // Page size, 64kb.
@@ -180,6 +193,8 @@ struct V8_EXPORT_PRIVATE WasmModule {
static const size_t kSpecMaxPages = 65536; // Maximum according to the spec
static const size_t kV8MaxTableSize = 16 * 1024 * 1024;
+ enum TrapFields { kTrapCodeOffset, kTrapLandingOffset, kTrapDataSize };
+
Zone* owned_zone;
const byte* module_start = nullptr; // starting address for the module bytes
const byte* module_end = nullptr; // end address for the module bytes
@@ -261,6 +276,10 @@ struct V8_EXPORT_PRIVATE WasmModule {
Handle<JSReceiver> ffi,
Handle<JSArrayBuffer> memory);
+ Handle<FixedArray> PackProtectedInstructions(
+ const std::vector<ProtectedInstructionList>& protected_instructions,
+ Factory* factory) const;
+
MaybeHandle<WasmCompiledModule> CompileFunctions(
Isolate* isolate, Handle<Managed<WasmModule>> module_wrapper,
ErrorThrower* thrower) const;
@@ -278,6 +297,11 @@ struct WasmInstance {
Handle<JSArrayBuffer> globals_buffer; // Handle to array buffer of globals.
std::vector<Handle<FixedArray>> function_tables; // indirect function tables.
std::vector<Handle<Code>> function_code; // code objects for each function.
+ std::vector<ProtectedInstructionList> protected_instructions; // Instructions
titzer 2016/11/16 18:06:47 I think this should somehow be associated with the
Eric Holk 2016/11/18 02:19:46 Done.
+ // that are
+ // protected by
+ // the signal
+ // handler.
// -- raw memory ------------------------------------------------------------
byte* mem_start = nullptr; // start of linear memory.
uint32_t mem_size = 0; // size of the linear memory.
@@ -287,7 +311,8 @@ struct WasmInstance {
explicit WasmInstance(const WasmModule* m)
: module(m),
function_tables(m->function_tables.size()),
- function_code(m->functions.size()) {}
+ function_code(m->functions.size()),
+ protected_instructions(m->functions.size()) {}
};
// Interface provided to the decoder/graph builder which contains only

Powered by Google App Engine
This is Rietveld 408576698