1// Copyright 2018 the V8 project authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef V8_CODEGEN_CODE_COMMENTS_H_ 6#define V8_CODEGEN_CODE_COMMENTS_H_ 7 8#include <ostream> 9#include <string> 10#include <vector> 11 12#include "include/v8-internal.h" 13#include "src/base/macros.h" 14 15namespace v8 { 16namespace internal { 17 18class Assembler; 19 20// Code comments section layout: 21// byte count content 22// ------------------------------------------------------------------------ 23// 4 size as uint32_t (only for a check) 24// [Inline array of CodeCommentEntry in increasing pc_offset order] 25// ┌ 4 pc_offset of entry as uint32_t 26// ├ 4 length of the comment including terminating '\0' 27// └ <variable length> characters of the comment including terminating '\0' 28 29struct CodeCommentEntry { 30 uint32_t pc_offset; 31 std::string comment; 32 uint32_t comment_length() const; 33 uint32_t size() const; 34}; 35 36class CodeCommentsWriter { 37 public: 38 V8_EXPORT_PRIVATE void Add(uint32_t pc_offset, std::string comment); 39 void Emit(Assembler* assm); 40 size_t entry_count() const; 41 uint32_t section_size() const; 42 43 private: 44 uint32_t byte_count_ = 0; 45 std::vector<CodeCommentEntry> comments_; 46}; 47 48class V8_EXPORT_PRIVATE CodeCommentsIterator { 49 public: 50 CodeCommentsIterator(Address code_comments_start, 51 uint32_t code_comments_size); 52 uint32_t size() const; 53 const char* GetComment() const; 54 uint32_t GetCommentSize() const; 55 uint32_t GetPCOffset() const; 56 void Next(); 57 bool HasCurrent() const; 58 59 private: 60 Address code_comments_start_; 61 uint32_t code_comments_size_; 62 Address current_entry_; 63}; 64 65} // namespace internal 66} // namespace v8 67 68#endif // V8_CODEGEN_CODE_COMMENTS_H_ 69