Index: src/ia32/lithium-codegen-ia32.h |
=================================================================== |
--- src/ia32/lithium-codegen-ia32.h (revision 6848) |
+++ src/ia32/lithium-codegen-ia32.h (working copy) |
@@ -60,6 +60,7 @@ |
status_(UNUSED), |
deferred_(8), |
osr_pc_offset_(-1), |
+ deoptimization_reloc_size(), |
resolver_(this) { |
PopulateDeoptimizationLiteralsWithInlinedFunctions(); |
} |
@@ -102,6 +103,8 @@ |
// Emit frame translation commands for an environment. |
void WriteTranslation(LEnvironment* environment, Translation* translation); |
+ void EnsureRelocSpaceForDeoptimization(); |
+ |
// Declare methods that deal with the individual node types. |
#define DECLARE_DO(type) void Do##type(L##type* node); |
LITHIUM_CONCRETE_INSTRUCTION_LIST(DECLARE_DO) |
@@ -151,6 +154,9 @@ |
bool GeneratePrologue(); |
bool GenerateBody(); |
bool GenerateDeferredCode(); |
+ // Pad the reloc info to ensure that we have enough space to patch during |
+ // deoptimization. |
+ bool GenerateRelocPadding(); |
bool GenerateSafepointTable(); |
void CallCode(Handle<Code> code, RelocInfo::Mode mode, LInstruction* instr, |
@@ -251,6 +257,13 @@ |
ZoneList<LDeferredCode*> deferred_; |
int osr_pc_offset_; |
+ struct DeoptimizationRelocSize { |
+ int min_size; |
+ int last_pc_offset; |
+ }; |
+ |
+ DeoptimizationRelocSize deoptimization_reloc_size; |
+ |
// Builder that keeps track of safepoints in the code. The table |
// itself is emitted at the end of the generated code. |
SafepointTableBuilder safepoints_; |