| Index: src/compiler/arm/unwinding-info-writer-arm.h | 
| diff --git a/src/compiler/arm/unwinding-info-writer-arm.h b/src/compiler/arm/unwinding-info-writer-arm.h | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..d47ca083ae077d84039f9c6c42b15dd602cbd0d3 | 
| --- /dev/null | 
| +++ b/src/compiler/arm/unwinding-info-writer-arm.h | 
| @@ -0,0 +1,72 @@ | 
| +// 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_ARM_UNWINDING_INFO_WRITER_H_ | 
| +#define V8_COMPILER_ARM_UNWINDING_INFO_WRITER_H_ | 
| + | 
| +#include "src/eh-frame.h" | 
| + | 
| +namespace v8 { | 
| +namespace internal { | 
| +namespace compiler { | 
| + | 
| +class InstructionBlock; | 
| + | 
| +class UnwindingInfoWriter { | 
| + public: | 
| +  explicit UnwindingInfoWriter(Zone* zone) | 
| +      : zone_(zone), | 
| +        eh_frame_writer_(zone), | 
| +        saved_lr_(false), | 
| +        block_will_exit_(false), | 
| +        block_initial_states_(zone) { | 
| +    if (enabled()) eh_frame_writer_.Initialize(); | 
| +  } | 
| + | 
| +  void SetNumberOfInstructionBlocks(int number) { | 
| +    if (enabled()) block_initial_states_.resize(number); | 
| +  } | 
| + | 
| +  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 at_pc); | 
| +  void MarkFrameDeconstructed(int at_pc); | 
| + | 
| +  void MarkBlockWillExit() { block_will_exit_ = true; } | 
| + | 
| +  void Finish(int code_size) { | 
| +    if (enabled()) eh_frame_writer_.Finish(code_size); | 
| +  } | 
| + | 
| +  EhFrameWriter* eh_frame_writer() { | 
| +    return enabled() ? &eh_frame_writer_ : nullptr; | 
| +  } | 
| + | 
| + private: | 
| +  bool enabled() const { return FLAG_perf_prof_unwinding_info; } | 
| + | 
| +  class BlockInitialState : public ZoneObject { | 
| +   public: | 
| +    explicit BlockInitialState(bool saved_lr) : saved_lr_(saved_lr) {} | 
| + | 
| +    bool saved_lr_; | 
| +  }; | 
| + | 
| +  Zone* zone_; | 
| +  EhFrameWriter eh_frame_writer_; | 
| +  bool saved_lr_; | 
| +  bool block_will_exit_; | 
| + | 
| +  ZoneVector<const BlockInitialState*> block_initial_states_; | 
| +}; | 
| + | 
| +}  // namespace compiler | 
| +}  // namespace internal | 
| +}  // namespace v8 | 
| + | 
| +#endif | 
|  |