Index: src/compiler/x64/code-generator-x64.cc |
diff --git a/src/compiler/x64/code-generator-x64.cc b/src/compiler/x64/code-generator-x64.cc |
index 745ac5084166e80b649898fbd5f163ac57ce0af4..b61f89f3c282fe9583e84605ef93e17a8cef281b 100644 |
--- a/src/compiler/x64/code-generator-x64.cc |
+++ b/src/compiler/x64/code-generator-x64.cc |
@@ -270,18 +270,21 @@ class OutOfLineRecordWrite final : public OutOfLineCode { |
class WasmOutOfLineTrap final : public OutOfLineCode { |
public: |
- WasmOutOfLineTrap(CodeGenerator* gen, Address pc, bool frame_elided, |
+ WasmOutOfLineTrap(CodeGenerator* gen, int pc, bool frame_elided, |
Register context, int32_t position) |
: OutOfLineCode(gen), |
+ gen_(gen), |
pc_(pc), |
frame_elided_(frame_elided), |
context_(context), |
position_(position) {} |
+ // TODO(eholk): Refactor this method to take the code generator as a |
+ // parameter. |
void Generate() final { |
- // TODO(eholk): record pc_ and the current pc in a table so that |
- // the signal handler can find it. |
- USE(pc_); |
+ int current_pc = __ pc_offset(); |
+ |
+ gen_->AddProtectedInstruction(pc_, current_pc); |
if (frame_elided_) { |
__ EnterFrame(StackFrame::WASM); |
@@ -296,7 +299,8 @@ class WasmOutOfLineTrap final : public OutOfLineCode { |
} |
private: |
- Address pc_; |
+ CodeGenerator* gen_; |
+ int pc_; |
bool frame_elided_; |
Register context_; |
int32_t position_; |
@@ -1897,7 +1901,7 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
__ movl(i.OutputRegister(), i.InputOperand(0)); |
} |
} else { |
- Address pc = __ pc(); |
+ int pc = __ pc_offset(); |
__ movl(i.OutputRegister(), i.MemoryOperand()); |
if (arch_opcode == kX64TrapMovl) { |