V8 API Reference, 7.2.502.16 (for Deno 0.2.4)
trap-handler-internal.h
1
// Copyright 2016 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_TRAP_HANDLER_TRAP_HANDLER_INTERNAL_H_
6
#define V8_TRAP_HANDLER_TRAP_HANDLER_INTERNAL_H_
7
8
// This file should not be included (even transitively) by files outside of
9
// src/trap-handler.
10
11
#include "src/trap-handler/trap-handler.h"
12
13
#include <atomic>
14
15
namespace
v8
{
16
namespace
internal {
17
namespace
trap_handler {
18
19
// This describes a chunk of code that the trap handler will be able to handle
20
// faults in. {base} points to the beginning of the chunk, and {size} is the
21
// number of bytes in the code chunk. The remainder of the struct is a list of
22
// protected memory access instructions and an offset to a landing pad to handle
23
// faults on that instruction.
24
struct
CodeProtectionInfo
{
25
Address
base;
26
size_t
size;
27
size_t
num_protected_instructions;
28
ProtectedInstructionData
instructions[1];
29
};
30
31
class
MetadataLock
{
32
static
std::atomic_flag spinlock_;
33
34
public
:
35
MetadataLock
();
36
~
MetadataLock
();
37
38
// We'd normally use DISALLOW_COPY_AND_ASSIGN, but we're avoiding a dependency
39
// on base/macros.h
40
MetadataLock
(
const
MetadataLock
&) =
delete
;
41
void
operator=(
const
MetadataLock
&) =
delete
;
42
};
43
44
// To enable constant time registration of handler data, we keep a free list of
45
// entries in the gCodeObjects table. Each entry contains a {next_free} field,
46
// which can be used to figure out where the next entry should be inserted.
47
// In order to avoid having to initialize all the links to start with, we use
48
// 0 to indicate that this is a fresh, never-used list entry and that therefore
49
// the next entry is known to be free. If {next_entry} is greater than zero,
50
// then {next_entry - 1} is the index that we should insert into next.
51
struct
CodeProtectionInfoListEntry
{
52
CodeProtectionInfo
* code_info;
53
size_t
next_free;
54
};
55
56
extern
size_t
gNumCodeObjects;
57
extern
CodeProtectionInfoListEntry
* gCodeObjects;
58
59
extern
std::atomic_size_t gRecoveredTrapCount;
60
61
// Searches the fault location table for an entry matching fault_addr. If found,
62
// returns true and sets landing_pad to the address of a fragment of code that
63
// can recover from this fault. Otherwise, returns false and leaves offset
64
// unchanged.
65
bool
TryFindLandingPad(
uintptr_t
fault_addr,
uintptr_t
* landing_pad);
66
67
}
// namespace trap_handler
68
}
// namespace internal
69
}
// namespace v8
70
71
#endif // V8_TRAP_HANDLER_TRAP_HANDLER_INTERNAL_H_
uintptr_t
v8
Definition:
libplatform.h:13
v8::internal::trap_handler::ProtectedInstructionData
Definition:
trap-handler.h:30
v8::internal::trap_handler::CodeProtectionInfo
Definition:
trap-handler-internal.h:24
v8::internal::trap_handler::MetadataLock
Definition:
trap-handler-internal.h:31
v8::internal::trap_handler::CodeProtectionInfoListEntry
Definition:
trap-handler-internal.h:51
v8
src
trap-handler
trap-handler-internal.h
Generated on Tue Dec 25 2018 14:39:56 by
1.8.14