v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
code-desc.cc
Go to the documentation of this file.
1// Copyright 2019 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
6
8
9namespace v8 {
10namespace internal {
11
12// static
14 int safepoint_table_offset, int handler_table_offset,
15 int constant_pool_offset, int code_comments_offset,
16 int builtin_jump_table_info_offset,
17 int reloc_info_offset) {
18 desc->buffer = assembler->buffer_start();
19 desc->buffer_size = assembler->buffer_size();
20 desc->instr_size = assembler->instruction_size();
21
22 desc->builtin_jump_table_info_offset = builtin_jump_table_info_offset;
23 desc->builtin_jump_table_info_size =
24 desc->instr_size - builtin_jump_table_info_offset;
25
26 desc->code_comments_offset = code_comments_offset;
27 desc->code_comments_size =
28 desc->builtin_jump_table_info_offset - code_comments_offset;
29
30 desc->constant_pool_offset = constant_pool_offset;
31 desc->constant_pool_size = desc->code_comments_offset - constant_pool_offset;
32
33 desc->handler_table_offset = handler_table_offset;
34 desc->handler_table_size = desc->constant_pool_offset - handler_table_offset;
35
36 desc->safepoint_table_offset = safepoint_table_offset;
37 desc->safepoint_table_size =
38 desc->handler_table_offset - safepoint_table_offset;
39
40 desc->reloc_offset = reloc_info_offset;
41 desc->reloc_size = desc->buffer_size - reloc_info_offset;
42
43 desc->unwinding_info_size = 0;
44 desc->unwinding_info = nullptr;
45
46 desc->origin = assembler;
47
48 CodeDesc::Verify(desc);
49}
50
51#ifdef DEBUG
52// static
53void CodeDesc::Verify(const CodeDesc* desc) {
54 // Zero-size code objects upset the system.
55 DCHECK_GT(desc->instr_size, 0);
56 DCHECK_NOT_NULL(desc->buffer);
57
58 // Instruction area layout invariants.
59 DCHECK_GE(desc->safepoint_table_size, 0);
60 DCHECK_EQ(desc->safepoint_table_size + desc->safepoint_table_offset,
61 desc->handler_table_offset);
62 DCHECK_GE(desc->handler_table_size, 0);
63 DCHECK_EQ(desc->handler_table_size + desc->handler_table_offset,
64 desc->constant_pool_offset);
65 DCHECK_GE(desc->constant_pool_size, 0);
66 DCHECK_EQ(desc->constant_pool_size + desc->constant_pool_offset,
67 desc->code_comments_offset);
68 DCHECK_GE(desc->code_comments_size, 0);
69 DCHECK_EQ(desc->code_comments_size + desc->code_comments_offset,
70 desc->builtin_jump_table_info_offset);
71 DCHECK_GE(desc->builtin_jump_table_info_size, 0);
73 desc->builtin_jump_table_info_size + desc->builtin_jump_table_info_offset,
74 desc->instr_size);
75
76 DCHECK_GE(desc->reloc_offset, 0);
77 DCHECK_GE(desc->reloc_size, 0);
78 DCHECK_GE(desc->unwinding_info_size, 0);
79}
80#endif
81
82} // namespace internal
83} // namespace v8
static void Initialize(CodeDesc *desc, Assembler *assembler, int safepoint_table_offset, int handler_table_offset, int constant_pool_offset, int code_comments_offset, int builtin_jump_table_info_offset, int reloc_info_offset)
Definition code-desc.cc:13
static void Verify(const CodeDesc *desc)
Definition code-desc.h:41
AssemblerT assembler
#define DCHECK_NOT_NULL(val)
Definition logging.h:492
#define DCHECK_GE(v1, v2)
Definition logging.h:488
#define DCHECK_EQ(v1, v2)
Definition logging.h:485
#define DCHECK_GT(v1, v2)
Definition logging.h:487