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.
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.
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_
Definition: libplatform.h:13