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

Unified Diff: src/compiler/code-generator.cc

Issue 2026313002: Emit unwinding information for TurboFan code. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@eh-frame
Patch Set: Clarify assumptions on frame ction/dtion routines in arm/arm64. Created 4 years, 5 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/compiler/code-generator.cc
diff --git a/src/compiler/code-generator.cc b/src/compiler/code-generator.cc
index 71c6418ecc6aa4d3af50e757afed41c2bdc61771..1b1654117e0cdd87101003e0f7efe4050a9f750f 100644
--- a/src/compiler/code-generator.cc
+++ b/src/compiler/code-generator.cc
@@ -59,6 +59,9 @@ CodeGenerator::CodeGenerator(Frame* frame, Linkage* linkage,
new (&labels_[i]) Label;
}
CreateFrameAccessState(frame);
+ if (FLAG_perf_prof_unwinding_info) {
+ unwinding_info_writer_.Reset(new UnwindingInfoWriter);
+ }
}
void CodeGenerator::CreateFrameAccessState(Frame* frame) {
@@ -112,6 +115,10 @@ Handle<Code> CodeGenerator::GenerateCode() {
if (block->IsHandler()) EnsureSpaceForLazyDeopt();
// Bind a label for a block.
current_block_ = block->rpo_number();
+ if (!unwinding_info_writer_.is_empty()) {
+ unwinding_info_writer_->BeginInstructionBlock(masm()->pc_offset(),
+ block);
+ }
if (FLAG_code_comments) {
// TODO(titzer): these code comments are a giant memory leak.
Vector<char> buffer = Vector<char>::New(200);
@@ -162,6 +169,9 @@ Handle<Code> CodeGenerator::GenerateCode() {
result = AssembleBlock(block);
}
if (result != kSuccess) return Handle<Code>();
+ if (!unwinding_info_writer_.is_empty()) {
+ unwinding_info_writer_->EndInstructionBlock(block);
+ }
}
}
@@ -202,8 +212,14 @@ Handle<Code> CodeGenerator::GenerateCode() {
safepoints()->Emit(masm(), frame()->GetTotalFrameSlotCount());
- Handle<Code> result =
- v8::internal::CodeGenerator::MakeCodeEpilogue(masm(), nullptr, info);
+ EhFrameWriter* eh_frame_writer = nullptr;
+ if (!unwinding_info_writer_.is_empty()) {
+ unwinding_info_writer_->Finish(masm()->pc_offset());
+ eh_frame_writer = unwinding_info_writer_->eh_frame_writer();
+ }
+
+ Handle<Code> result = v8::internal::CodeGenerator::MakeCodeEpilogue(
+ masm(), eh_frame_writer, info);
result->set_is_turbofanned(true);
result->set_stack_slots(frame()->GetTotalFrameSlotCount());
result->set_safepoint_table_offset(safepoints()->GetCodeOffset());

Powered by Google App Engine
This is Rietveld 408576698