Index: src/assembler.cc |
diff --git a/src/assembler.cc b/src/assembler.cc |
index 553e37da40e125c0c22f4d7de5eac3aacf44e5d4..67f30f20a09e7bf777474ada4ac56cea59bb23a1 100644 |
--- a/src/assembler.cc |
+++ b/src/assembler.cc |
@@ -415,6 +415,10 @@ void RelocInfoWriter::WriteMode(RelocInfo::Mode rmode) { |
*--pos_ = static_cast<int>((rmode << kTagBits) | kDefaultTag); |
} |
+void RelocInfoWriter::WriteModeNoAdvance(RelocInfo::Mode rmode) { |
+ STATIC_ASSERT(RelocInfo::NUMBER_OF_MODES <= (1 << kLongTagBits)); |
+ *pos_ = static_cast<int>((rmode << kTagBits) | kDefaultTag); |
+} |
void RelocInfoWriter::WriteModeAndPC(uint32_t pc_delta, RelocInfo::Mode rmode) { |
// Write two-byte tagged pc-delta, possibly preceded by var. length pc-jump. |
@@ -548,6 +552,7 @@ inline int RelocIterator::AdvanceGetTag() { |
inline RelocInfo::Mode RelocIterator::GetMode() { |
+ mode_pos_ = pos_; |
return static_cast<RelocInfo::Mode>((*pos_ >> kTagBits) & |
((1 << kLongTagBits) - 1)); |
} |
@@ -754,6 +759,7 @@ RelocIterator::RelocIterator(Code* code, int mode_mask) |
rinfo_.data_ = 0; |
// Relocation info is read backwards. |
pos_ = code->relocation_start() + code->relocation_size(); |
+ mode_pos_ = nullptr; |
end_ = code->relocation_start(); |
done_ = false; |
mode_mask_ = mode_mask; |
@@ -779,6 +785,7 @@ RelocIterator::RelocIterator(const CodeDesc& desc, int mode_mask) |
rinfo_.data_ = 0; |
// Relocation info is read backwards. |
pos_ = desc.buffer + desc.buffer_size; |
+ mode_pos_ = nullptr; |
end_ = pos_ - desc.reloc_size; |
done_ = false; |
mode_mask_ = mode_mask; |
@@ -867,6 +874,10 @@ const char* RelocInfo::RelocModeName(RelocInfo::Mode rmode) { |
return "wasm memory reference"; |
case WASM_MEMORY_SIZE_REFERENCE: |
return "wasm memory size reference"; |
+ case WASM_DIRECT_CALL: |
+ return "wasm direct call"; |
+ case WASM_IMPORT_CALL: |
+ return "wasm import call"; |
case NUMBER_OF_MODES: |
case PC_JUMP: |
UNREACHABLE(); |
@@ -966,6 +977,8 @@ void RelocInfo::Verify(Isolate* isolate) { |
case WASM_MEMORY_SIZE_REFERENCE: |
case NONE32: |
case NONE64: |
+ case WASM_DIRECT_CALL: |
+ case WASM_IMPORT_CALL: |
break; |
case NUMBER_OF_MODES: |
case PC_JUMP: |