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

Unified Diff: src/assembler.cc

Issue 2416543002: [wasm] Fix bounds check for zero initial memory. (Closed)
Patch Set: Created 4 years, 2 months 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/assembler.cc
diff --git a/src/assembler.cc b/src/assembler.cc
index b44bc06ba36aaff6cbd92c6a6f9a1f928e0f35a7..f34952fb07a3714658f522ec1925062b845f44c8 100644
--- a/src/assembler.cc
+++ b/src/assembler.cc
@@ -355,6 +355,22 @@ void RelocInfo::update_wasm_memory_reference(
uint32_t offset = old_size - current_size_reference;
DCHECK_GE(new_size, offset);
uint32_t updated_size_reference = new_size - offset;
+
+ if (old_size == 0) {
+ switch (rmode_) {
+ case RelocInfo::WASM_MEMORY_WORD_SIZE_REFERENCE:
+ updated_size_reference = updated_size_reference - 1;
+ break;
+ case RelocInfo::WASM_MEMORY_DWORD_SIZE_REFERENCE:
+ updated_size_reference = updated_size_reference - 3;
+ break;
+ case RelocInfo::WASM_MEMORY_QWORD_SIZE_REFERENCE:
+ updated_size_reference = updated_size_reference - 7;
+ break;
+ default:
+ DCHECK(rmode_ == RelocInfo::WASM_MEMORY_BYTE_SIZE_REFERENCE);
bradn 2016/10/12 18:50:45 Handle explicit and make default unreachable?
gdeepti 2016/10/13 08:42:59 Got rid of additional RelocInfo modes, code remove
+ }
+ }
unchecked_update_wasm_memory_size(updated_size_reference,
icache_flush_mode);
} else {
@@ -786,8 +802,14 @@ const char* RelocInfo::RelocModeName(RelocInfo::Mode rmode) {
return "generator continuation";
case WASM_MEMORY_REFERENCE:
return "wasm memory reference";
- case WASM_MEMORY_SIZE_REFERENCE:
- return "wasm memory size reference";
+ case WASM_MEMORY_BYTE_SIZE_REFERENCE:
+ return "wasm memory size byte reference";
+ case WASM_MEMORY_WORD_SIZE_REFERENCE:
+ return "wasm memory size word reference";
+ case WASM_MEMORY_DWORD_SIZE_REFERENCE:
+ return "wasm memory size dword reference";
+ case WASM_MEMORY_QWORD_SIZE_REFERENCE:
+ return "wasm memory size qword reference";
case WASM_GLOBAL_REFERENCE:
return "wasm global value reference";
case NUMBER_OF_MODES:
@@ -885,7 +907,10 @@ void RelocInfo::Verify(Isolate* isolate) {
case DEBUG_BREAK_SLOT_AT_TAIL_CALL:
case GENERATOR_CONTINUATION:
case WASM_MEMORY_REFERENCE:
- case WASM_MEMORY_SIZE_REFERENCE:
+ case WASM_MEMORY_BYTE_SIZE_REFERENCE:
+ case WASM_MEMORY_WORD_SIZE_REFERENCE:
+ case WASM_MEMORY_DWORD_SIZE_REFERENCE:
+ case WASM_MEMORY_QWORD_SIZE_REFERENCE:
case WASM_GLOBAL_REFERENCE:
case NONE32:
case NONE64:

Powered by Google App Engine
This is Rietveld 408576698