Index: src/objects-inl.h |
diff --git a/src/objects-inl.h b/src/objects-inl.h |
index 931a7ef9315fdce114e86de05059d16ed920a3cb..784fc8d205bb93e3579a1fda1f52a0685cffc2f4 100644 |
--- a/src/objects-inl.h |
+++ b/src/objects-inl.h |
@@ -4887,6 +4887,16 @@ inline bool Code::is_interpreter_trampoline_builtin() { |
this == *builtins->InterpreterMarkBaselineOnReturn(); |
} |
+inline bool Code::has_unwinding_info() const { |
+ return HasUnwindingInfoField::decode(READ_UINT32_FIELD(this, kFlagsOffset)); |
+} |
+ |
+inline void Code::set_has_unwinding_info(bool state) { |
+ uint32_t previous = READ_UINT32_FIELD(this, kFlagsOffset); |
+ uint32_t updated_value = HasUnwindingInfoField::update(previous, state); |
+ WRITE_UINT32_FIELD(this, kFlagsOffset, updated_value); |
+} |
+ |
inline void Code::set_is_crankshafted(bool value) { |
int previous = READ_UINT32_FIELD(this, kKindSpecificFlags2Offset); |
int updated = IsCrankshaftedField::update(previous, value); |
@@ -6409,7 +6419,6 @@ ACCESSORS(Code, deoptimization_data, FixedArray, kDeoptimizationDataOffset) |
ACCESSORS(Code, raw_type_feedback_info, Object, kTypeFeedbackInfoOffset) |
ACCESSORS(Code, next_code_link, Object, kNextCodeLinkOffset) |
- |
void Code::WipeOutHeader() { |
WRITE_FIELD(this, kRelocationInfoOffset, NULL); |
WRITE_FIELD(this, kHandlerTableOffset, NULL); |
@@ -6463,9 +6472,38 @@ byte* Code::instruction_end() { |
return instruction_start() + instruction_size(); |
} |
+int Code::GetUnwindingInfoSizeOffset() const { |
+ DCHECK(has_unwinding_info()); |
+ return RoundUp(kHeaderSize + instruction_size(), kInt64Size); |
+} |
+ |
+int Code::unwinding_info_size() const { |
+ DCHECK(has_unwinding_info()); |
+ return static_cast<int>( |
+ READ_UINT64_FIELD(this, GetUnwindingInfoSizeOffset())); |
+} |
+ |
+void Code::set_unwinding_info_size(int value) { |
+ DCHECK(has_unwinding_info()); |
+ WRITE_UINT64_FIELD(this, GetUnwindingInfoSizeOffset(), value); |
+} |
+ |
+byte* Code::unwinding_info_start() { |
+ DCHECK(has_unwinding_info()); |
+ return FIELD_ADDR(this, GetUnwindingInfoSizeOffset()) + kInt64Size; |
+} |
+ |
+byte* Code::unwinding_info_end() { |
+ DCHECK(has_unwinding_info()); |
+ return unwinding_info_start() + unwinding_info_size(); |
+} |
int Code::body_size() { |
- return RoundUp(instruction_size(), kObjectAlignment); |
+ int unpadded_body_size = |
+ has_unwinding_info() |
+ ? static_cast<int>(unwinding_info_end() - instruction_start()) |
+ : instruction_size(); |
+ return RoundUp(unpadded_body_size, kObjectAlignment); |
} |
int Code::SizeIncludingMetadata() { |