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

Unified Diff: src/compiler/arm64/unwinding-info-writer-arm64.h

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/arm64/unwinding-info-writer-arm64.h
diff --git a/src/compiler/arm64/unwinding-info-writer-arm64.h b/src/compiler/arm64/unwinding-info-writer-arm64.h
new file mode 100644
index 0000000000000000000000000000000000000000..5f49292578ad4c851117a3b01ed2cb46b9caed6e
--- /dev/null
+++ b/src/compiler/arm64/unwinding-info-writer-arm64.h
@@ -0,0 +1,54 @@
+// Copyright 2016 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef V8_COMPILER_ARM64_UNWINDING_INFO_WRITER_H_
+#define V8_COMPILER_ARM64_UNWINDING_INFO_WRITER_H_
+
+#include <unordered_map>
+#include "src/eh-frame.h"
+
+namespace v8 {
+namespace internal {
+namespace compiler {
+
+class InstructionBlock;
+
+class UnwindingInfoWriter {
+ public:
+ UnwindingInfoWriter() : saved_lr_(false), block_will_exit_(false) {}
+
+ void BeginInstructionBlock(int pc_offset, const InstructionBlock* block);
+ void EndInstructionBlock(const InstructionBlock* block);
+
+ void MarkLinkRegisterOnTopOfStack(int pc_offset);
+ void MarkPopLinkRegisterFromTopOfStack(int pc_offset);
+
+ void MarkFrameConstructed(int pc_base);
+ void MarkFrameDeconstructed(int pc_base);
+
+ void MarkBlockWillExit() { block_will_exit_ = true; }
+
+ void Finish(int code_size) { eh_frame_writer_.Finish(code_size); }
+
+ EhFrameWriter* eh_frame_writer() { return &eh_frame_writer_; }
+
+ private:
+ EhFrameWriter eh_frame_writer_;
+
+ struct BlockInitialState {
+ bool saved_lr_;
+ };
+
+ bool saved_lr_;
+ bool block_will_exit_;
+
+ std::unordered_map<int, BlockInitialState> block_initial_states_;
+ static_assert(kIntSize >= kInt32Size, "int too small to encode a RpoNumber");
+};
+
+} // namespace compiler
+} // namespace internal
+} // namespace v8
+
+#endif

Powered by Google App Engine
This is Rietveld 408576698