Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(71)

Side by Side Diff: src/trap-handler/trap-handler-internal.h

Issue 2371833007: [wasm] Initial signal handler (Closed)
Patch Set: Make sure guard pages get set up when resizing from 0 to more than 0 Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/trap-handler/trap-handler.h ('k') | src/v8.gyp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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 TRAP_HANDLER_INTERNAL_H_
6 #define 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 signal 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 void* 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 #if V8_TRAP_HANDLER_SUPPORTED
45 void HandleSignal(int signum, siginfo_t* info, void* context);
46 #endif
47
48 // To enable constant time registration of handler data, we keep a free list of
49 // entries in the gCodeObjects table. Each entry contains a {next_free} field,
50 // which can be used to figure out where the next entry should be inserted.
51 // In order to avoid having to initialize all the links to start with, we use
52 // 0 to indicate that this is a fresh, never-used list entry and that therefore
53 // the next entry is known to be free. If {next_entry} is greater than zero,
54 // then {next_entry - 1} is the index that we should insert into next.
55 struct CodeProtectionInfoListEntry {
56 CodeProtectionInfo* code_info;
57 size_t next_free;
58 };
59
60 extern size_t gNumCodeObjects;
61 extern CodeProtectionInfoListEntry* gCodeObjects;
62
63 } // namespace trap_handler
64 } // namespace internal
65 } // namespace v8
66
67 #endif // TRAP_HANDLER_INTERNAL_H_
OLDNEW
« no previous file with comments | « src/trap-handler/trap-handler.h ('k') | src/v8.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698