node-linux-arm64 17.0.0 → 17.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. package/CHANGELOG.md +622 -178
  2. package/LICENSE +192 -94
  3. package/README.md +263 -255
  4. package/bin/node +0 -0
  5. package/include/node/common.gypi +5 -0
  6. package/include/node/config.gypi +6 -2
  7. package/include/node/js_native_api.h +11 -0
  8. package/include/node/node_version.h +1 -1
  9. package/include/node/openssl/archs/BSD-x86/asm/crypto/buildinf.h +1 -1
  10. package/include/node/openssl/archs/BSD-x86/asm/include/openssl/opensslv.h +5 -5
  11. package/include/node/openssl/archs/BSD-x86/asm_avx2/crypto/buildinf.h +1 -1
  12. package/include/node/openssl/archs/BSD-x86/asm_avx2/include/openssl/opensslv.h +5 -5
  13. package/include/node/openssl/archs/BSD-x86/no-asm/crypto/buildinf.h +1 -1
  14. package/include/node/openssl/archs/BSD-x86/no-asm/include/openssl/opensslv.h +5 -5
  15. package/include/node/openssl/archs/BSD-x86_64/asm/crypto/buildinf.h +1 -1
  16. package/include/node/openssl/archs/BSD-x86_64/asm/include/openssl/opensslv.h +5 -5
  17. package/include/node/openssl/archs/BSD-x86_64/asm_avx2/crypto/buildinf.h +1 -1
  18. package/include/node/openssl/archs/BSD-x86_64/asm_avx2/include/openssl/opensslv.h +5 -5
  19. package/include/node/openssl/archs/BSD-x86_64/no-asm/crypto/buildinf.h +1 -1
  20. package/include/node/openssl/archs/BSD-x86_64/no-asm/include/openssl/opensslv.h +5 -5
  21. package/include/node/openssl/archs/VC-WIN32/asm/crypto/buildinf.h +1 -1
  22. package/include/node/openssl/archs/VC-WIN32/asm/include/openssl/opensslv.h +5 -5
  23. package/include/node/openssl/archs/VC-WIN32/asm_avx2/crypto/buildinf.h +1 -1
  24. package/include/node/openssl/archs/VC-WIN32/asm_avx2/include/openssl/opensslv.h +5 -5
  25. package/include/node/openssl/archs/VC-WIN32/no-asm/crypto/buildinf.h +1 -1
  26. package/include/node/openssl/archs/VC-WIN32/no-asm/include/openssl/opensslv.h +5 -5
  27. package/include/node/openssl/archs/VC-WIN64-ARM/no-asm/crypto/buildinf.h +1 -1
  28. package/include/node/openssl/archs/VC-WIN64-ARM/no-asm/include/openssl/opensslv.h +5 -5
  29. package/include/node/openssl/archs/VC-WIN64A/asm/crypto/buildinf.h +1 -1
  30. package/include/node/openssl/archs/VC-WIN64A/asm/include/openssl/opensslv.h +5 -5
  31. package/include/node/openssl/archs/VC-WIN64A/asm_avx2/crypto/buildinf.h +1 -1
  32. package/include/node/openssl/archs/VC-WIN64A/asm_avx2/include/openssl/opensslv.h +5 -5
  33. package/include/node/openssl/archs/VC-WIN64A/no-asm/crypto/buildinf.h +1 -1
  34. package/include/node/openssl/archs/VC-WIN64A/no-asm/include/openssl/opensslv.h +5 -5
  35. package/include/node/openssl/archs/aix-gcc/asm/crypto/buildinf.h +1 -1
  36. package/include/node/openssl/archs/aix-gcc/asm/include/openssl/opensslv.h +5 -5
  37. package/include/node/openssl/archs/aix-gcc/asm_avx2/crypto/buildinf.h +1 -1
  38. package/include/node/openssl/archs/aix-gcc/asm_avx2/include/openssl/opensslv.h +5 -5
  39. package/include/node/openssl/archs/aix-gcc/no-asm/crypto/buildinf.h +1 -1
  40. package/include/node/openssl/archs/aix-gcc/no-asm/include/openssl/opensslv.h +5 -5
  41. package/include/node/openssl/archs/aix64-gcc-as/asm/crypto/buildinf.h +1 -1
  42. package/include/node/openssl/archs/aix64-gcc-as/asm/include/openssl/opensslv.h +5 -5
  43. package/include/node/openssl/archs/aix64-gcc-as/asm_avx2/crypto/buildinf.h +1 -1
  44. package/include/node/openssl/archs/aix64-gcc-as/asm_avx2/include/openssl/opensslv.h +5 -5
  45. package/include/node/openssl/archs/aix64-gcc-as/no-asm/crypto/buildinf.h +1 -1
  46. package/include/node/openssl/archs/aix64-gcc-as/no-asm/include/openssl/opensslv.h +5 -5
  47. package/include/node/openssl/archs/darwin-i386-cc/asm/crypto/buildinf.h +1 -1
  48. package/include/node/openssl/archs/darwin-i386-cc/asm/include/openssl/opensslv.h +5 -5
  49. package/include/node/openssl/archs/darwin-i386-cc/asm_avx2/crypto/buildinf.h +1 -1
  50. package/include/node/openssl/archs/darwin-i386-cc/asm_avx2/include/openssl/opensslv.h +5 -5
  51. package/include/node/openssl/archs/darwin-i386-cc/no-asm/crypto/buildinf.h +1 -1
  52. package/include/node/openssl/archs/darwin-i386-cc/no-asm/include/openssl/opensslv.h +5 -5
  53. package/include/node/openssl/archs/darwin64-arm64-cc/asm/crypto/buildinf.h +1 -1
  54. package/include/node/openssl/archs/darwin64-arm64-cc/asm/include/openssl/opensslv.h +5 -5
  55. package/include/node/openssl/archs/darwin64-arm64-cc/asm_avx2/crypto/buildinf.h +1 -1
  56. package/include/node/openssl/archs/darwin64-arm64-cc/asm_avx2/include/openssl/opensslv.h +5 -5
  57. package/include/node/openssl/archs/darwin64-arm64-cc/no-asm/crypto/buildinf.h +1 -1
  58. package/include/node/openssl/archs/darwin64-arm64-cc/no-asm/include/openssl/opensslv.h +5 -5
  59. package/include/node/openssl/archs/darwin64-x86_64-cc/asm/crypto/buildinf.h +1 -1
  60. package/include/node/openssl/archs/darwin64-x86_64-cc/asm/include/openssl/opensslv.h +5 -5
  61. package/include/node/openssl/archs/darwin64-x86_64-cc/asm_avx2/crypto/buildinf.h +1 -1
  62. package/include/node/openssl/archs/darwin64-x86_64-cc/asm_avx2/include/openssl/opensslv.h +5 -5
  63. package/include/node/openssl/archs/darwin64-x86_64-cc/no-asm/crypto/buildinf.h +1 -1
  64. package/include/node/openssl/archs/darwin64-x86_64-cc/no-asm/include/openssl/opensslv.h +5 -5
  65. package/include/node/openssl/archs/linux-aarch64/asm/crypto/buildinf.h +1 -1
  66. package/include/node/openssl/archs/linux-aarch64/asm/include/openssl/opensslv.h +5 -5
  67. package/include/node/openssl/archs/linux-aarch64/asm_avx2/crypto/buildinf.h +1 -1
  68. package/include/node/openssl/archs/linux-aarch64/asm_avx2/include/openssl/opensslv.h +5 -5
  69. package/include/node/openssl/archs/linux-aarch64/no-asm/crypto/buildinf.h +1 -1
  70. package/include/node/openssl/archs/linux-aarch64/no-asm/include/openssl/opensslv.h +5 -5
  71. package/include/node/openssl/archs/linux-armv4/asm/crypto/buildinf.h +1 -1
  72. package/include/node/openssl/archs/linux-armv4/asm/include/openssl/opensslv.h +5 -5
  73. package/include/node/openssl/archs/linux-armv4/asm_avx2/crypto/buildinf.h +1 -1
  74. package/include/node/openssl/archs/linux-armv4/asm_avx2/include/openssl/opensslv.h +5 -5
  75. package/include/node/openssl/archs/linux-armv4/no-asm/crypto/buildinf.h +1 -1
  76. package/include/node/openssl/archs/linux-armv4/no-asm/include/openssl/opensslv.h +5 -5
  77. package/include/node/openssl/archs/linux-elf/asm/crypto/buildinf.h +1 -1
  78. package/include/node/openssl/archs/linux-elf/asm/include/openssl/opensslv.h +5 -5
  79. package/include/node/openssl/archs/linux-elf/asm_avx2/crypto/buildinf.h +1 -1
  80. package/include/node/openssl/archs/linux-elf/asm_avx2/include/openssl/opensslv.h +5 -5
  81. package/include/node/openssl/archs/linux-elf/no-asm/crypto/buildinf.h +1 -1
  82. package/include/node/openssl/archs/linux-elf/no-asm/include/openssl/opensslv.h +5 -5
  83. package/include/node/openssl/archs/linux-ppc/asm/crypto/buildinf.h +1 -1
  84. package/include/node/openssl/archs/linux-ppc/asm/include/openssl/opensslv.h +5 -5
  85. package/include/node/openssl/archs/linux-ppc/asm_avx2/crypto/buildinf.h +1 -1
  86. package/include/node/openssl/archs/linux-ppc/asm_avx2/include/openssl/opensslv.h +5 -5
  87. package/include/node/openssl/archs/linux-ppc/no-asm/crypto/buildinf.h +1 -1
  88. package/include/node/openssl/archs/linux-ppc/no-asm/include/openssl/opensslv.h +5 -5
  89. package/include/node/openssl/archs/linux-ppc64/asm/crypto/buildinf.h +1 -1
  90. package/include/node/openssl/archs/linux-ppc64/asm/include/openssl/opensslv.h +5 -5
  91. package/include/node/openssl/archs/linux-ppc64/asm_avx2/crypto/buildinf.h +1 -1
  92. package/include/node/openssl/archs/linux-ppc64/asm_avx2/include/openssl/opensslv.h +5 -5
  93. package/include/node/openssl/archs/linux-ppc64/no-asm/crypto/buildinf.h +1 -1
  94. package/include/node/openssl/archs/linux-ppc64/no-asm/include/openssl/opensslv.h +5 -5
  95. package/include/node/openssl/archs/linux-ppc64le/asm/crypto/buildinf.h +1 -1
  96. package/include/node/openssl/archs/linux-ppc64le/asm/include/openssl/opensslv.h +5 -5
  97. package/include/node/openssl/archs/linux-ppc64le/asm_avx2/crypto/buildinf.h +1 -1
  98. package/include/node/openssl/archs/linux-ppc64le/asm_avx2/include/openssl/opensslv.h +5 -5
  99. package/include/node/openssl/archs/linux-ppc64le/no-asm/crypto/buildinf.h +1 -1
  100. package/include/node/openssl/archs/linux-ppc64le/no-asm/include/openssl/opensslv.h +5 -5
  101. package/include/node/openssl/archs/linux-x32/asm/crypto/buildinf.h +1 -1
  102. package/include/node/openssl/archs/linux-x32/asm/include/openssl/opensslv.h +5 -5
  103. package/include/node/openssl/archs/linux-x32/asm_avx2/crypto/buildinf.h +1 -1
  104. package/include/node/openssl/archs/linux-x32/asm_avx2/include/openssl/opensslv.h +5 -5
  105. package/include/node/openssl/archs/linux-x32/no-asm/crypto/buildinf.h +1 -1
  106. package/include/node/openssl/archs/linux-x32/no-asm/include/openssl/opensslv.h +5 -5
  107. package/include/node/openssl/archs/linux-x86_64/asm/crypto/buildinf.h +1 -1
  108. package/include/node/openssl/archs/linux-x86_64/asm/include/openssl/opensslv.h +5 -5
  109. package/include/node/openssl/archs/linux-x86_64/asm_avx2/crypto/buildinf.h +1 -1
  110. package/include/node/openssl/archs/linux-x86_64/asm_avx2/include/openssl/opensslv.h +5 -5
  111. package/include/node/openssl/archs/linux-x86_64/no-asm/crypto/buildinf.h +1 -1
  112. package/include/node/openssl/archs/linux-x86_64/no-asm/include/openssl/opensslv.h +5 -5
  113. package/include/node/openssl/archs/linux32-s390x/asm/crypto/buildinf.h +1 -1
  114. package/include/node/openssl/archs/linux32-s390x/asm/include/openssl/opensslv.h +5 -5
  115. package/include/node/openssl/archs/linux32-s390x/asm_avx2/crypto/buildinf.h +1 -1
  116. package/include/node/openssl/archs/linux32-s390x/asm_avx2/include/openssl/opensslv.h +5 -5
  117. package/include/node/openssl/archs/linux32-s390x/no-asm/crypto/buildinf.h +1 -1
  118. package/include/node/openssl/archs/linux32-s390x/no-asm/include/openssl/opensslv.h +5 -5
  119. package/include/node/openssl/archs/linux64-mips64/asm/crypto/buildinf.h +1 -1
  120. package/include/node/openssl/archs/linux64-mips64/asm/include/openssl/opensslv.h +5 -5
  121. package/include/node/openssl/archs/linux64-mips64/asm_avx2/crypto/buildinf.h +1 -1
  122. package/include/node/openssl/archs/linux64-mips64/asm_avx2/include/openssl/opensslv.h +5 -5
  123. package/include/node/openssl/archs/linux64-mips64/no-asm/crypto/buildinf.h +1 -1
  124. package/include/node/openssl/archs/linux64-mips64/no-asm/include/openssl/opensslv.h +5 -5
  125. package/include/node/openssl/archs/linux64-riscv64/no-asm/crypto/buildinf.h +1 -1
  126. package/include/node/openssl/archs/linux64-riscv64/no-asm/include/openssl/opensslv.h +5 -5
  127. package/include/node/openssl/archs/linux64-s390x/asm/crypto/buildinf.h +1 -1
  128. package/include/node/openssl/archs/linux64-s390x/asm/include/openssl/opensslv.h +5 -5
  129. package/include/node/openssl/archs/linux64-s390x/asm_avx2/crypto/buildinf.h +1 -1
  130. package/include/node/openssl/archs/linux64-s390x/asm_avx2/include/openssl/opensslv.h +5 -5
  131. package/include/node/openssl/archs/linux64-s390x/no-asm/crypto/buildinf.h +1 -1
  132. package/include/node/openssl/archs/linux64-s390x/no-asm/include/openssl/opensslv.h +5 -5
  133. package/include/node/openssl/archs/solaris-x86-gcc/asm/crypto/buildinf.h +1 -1
  134. package/include/node/openssl/archs/solaris-x86-gcc/asm/include/openssl/opensslv.h +5 -5
  135. package/include/node/openssl/archs/solaris-x86-gcc/asm_avx2/crypto/buildinf.h +1 -1
  136. package/include/node/openssl/archs/solaris-x86-gcc/asm_avx2/include/openssl/opensslv.h +5 -5
  137. package/include/node/openssl/archs/solaris-x86-gcc/no-asm/crypto/buildinf.h +1 -1
  138. package/include/node/openssl/archs/solaris-x86-gcc/no-asm/include/openssl/opensslv.h +5 -5
  139. package/include/node/openssl/archs/solaris64-x86_64-gcc/asm/crypto/buildinf.h +1 -1
  140. package/include/node/openssl/archs/solaris64-x86_64-gcc/asm/include/openssl/opensslv.h +5 -5
  141. package/include/node/openssl/archs/solaris64-x86_64-gcc/asm_avx2/crypto/buildinf.h +1 -1
  142. package/include/node/openssl/archs/solaris64-x86_64-gcc/asm_avx2/include/openssl/opensslv.h +5 -5
  143. package/include/node/openssl/archs/solaris64-x86_64-gcc/no-asm/crypto/buildinf.h +1 -1
  144. package/include/node/openssl/archs/solaris64-x86_64-gcc/no-asm/include/openssl/opensslv.h +5 -5
  145. package/include/node/openssl/core.h +1 -1
  146. package/include/node/openssl/cryptoerr.h +1 -0
  147. package/include/node/openssl/httperr.h +1 -0
  148. package/include/node/openssl/macros.h +1 -1
  149. package/include/node/v8-callbacks.h +377 -0
  150. package/include/node/v8-embedder-heap.h +238 -0
  151. package/include/node/v8-forward.h +81 -0
  152. package/include/node/v8-function-callback.h +475 -0
  153. package/include/node/v8-initialization.h +25 -9
  154. package/include/node/v8-internal.h +9 -20
  155. package/include/node/v8-isolate.h +3 -0
  156. package/include/node/v8-locker.h +7 -2
  157. package/include/node/v8-message.h +4 -1
  158. package/include/node/v8-template.h +1 -0
  159. package/include/node/v8-version.h +3 -3
  160. package/include/node/v8-weak-callback-info.h +73 -0
  161. package/package.json +1 -1
@@ -20,7 +20,7 @@
20
20
  # define OPENSSL_MSTR(x) OPENSSL_MSTR_HELPER(x)
21
21
 
22
22
  /*
23
- * Sometimes OPENSSSL_NO_xxx ends up with an empty file and some compilers
23
+ * Sometimes OPENSSL_NO_xxx ends up with an empty file and some compilers
24
24
  * don't like that. This will hopefully silence them.
25
25
  */
26
26
  # define NON_EMPTY_TRANSLATION_UNIT static void *dummy = &dummy;
@@ -0,0 +1,377 @@
1
+ // Copyright 2021 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 INCLUDE_V8_ISOLATE_CALLBACKS_H_
6
+ #define INCLUDE_V8_ISOLATE_CALLBACKS_H_
7
+
8
+ #include <stddef.h>
9
+
10
+ #include <string>
11
+
12
+ #include "cppgc/common.h"
13
+ #include "v8-data.h" // NOLINT(build/include_directory)
14
+ #include "v8-local-handle.h" // NOLINT(build/include_directory)
15
+ #include "v8config.h" // NOLINT(build/include_directory)
16
+
17
+ #if defined(V8_OS_WIN)
18
+ struct _EXCEPTION_POINTERS;
19
+ #endif
20
+
21
+ namespace v8 {
22
+
23
+ template <typename T>
24
+ class FunctionCallbackInfo;
25
+ class Isolate;
26
+ class Message;
27
+ class Module;
28
+ class Object;
29
+ class Promise;
30
+ class ScriptOrModule;
31
+ class String;
32
+ class UnboundScript;
33
+ class Value;
34
+
35
+ /**
36
+ * A JIT code event is issued each time code is added, moved or removed.
37
+ *
38
+ * \note removal events are not currently issued.
39
+ */
40
+ struct JitCodeEvent {
41
+ enum EventType {
42
+ CODE_ADDED,
43
+ CODE_MOVED,
44
+ CODE_REMOVED,
45
+ CODE_ADD_LINE_POS_INFO,
46
+ CODE_START_LINE_INFO_RECORDING,
47
+ CODE_END_LINE_INFO_RECORDING
48
+ };
49
+ // Definition of the code position type. The "POSITION" type means the place
50
+ // in the source code which are of interest when making stack traces to
51
+ // pin-point the source location of a stack frame as close as possible.
52
+ // The "STATEMENT_POSITION" means the place at the beginning of each
53
+ // statement, and is used to indicate possible break locations.
54
+ enum PositionType { POSITION, STATEMENT_POSITION };
55
+
56
+ // There are three different kinds of CodeType, one for JIT code generated
57
+ // by the optimizing compiler, one for byte code generated for the
58
+ // interpreter, and one for code generated from Wasm. For JIT_CODE and
59
+ // WASM_CODE, |code_start| points to the beginning of jitted assembly code,
60
+ // while for BYTE_CODE events, |code_start| points to the first bytecode of
61
+ // the interpreted function.
62
+ enum CodeType { BYTE_CODE, JIT_CODE, WASM_CODE };
63
+
64
+ // Type of event.
65
+ EventType type;
66
+ CodeType code_type;
67
+ // Start of the instructions.
68
+ void* code_start;
69
+ // Size of the instructions.
70
+ size_t code_len;
71
+ // Script info for CODE_ADDED event.
72
+ Local<UnboundScript> script;
73
+ // User-defined data for *_LINE_INFO_* event. It's used to hold the source
74
+ // code line information which is returned from the
75
+ // CODE_START_LINE_INFO_RECORDING event. And it's passed to subsequent
76
+ // CODE_ADD_LINE_POS_INFO and CODE_END_LINE_INFO_RECORDING events.
77
+ void* user_data;
78
+
79
+ struct name_t {
80
+ // Name of the object associated with the code, note that the string is not
81
+ // zero-terminated.
82
+ const char* str;
83
+ // Number of chars in str.
84
+ size_t len;
85
+ };
86
+
87
+ struct line_info_t {
88
+ // PC offset
89
+ size_t offset;
90
+ // Code position
91
+ size_t pos;
92
+ // The position type.
93
+ PositionType position_type;
94
+ };
95
+
96
+ struct wasm_source_info_t {
97
+ // Source file name.
98
+ const char* filename;
99
+ // Length of filename.
100
+ size_t filename_size;
101
+ // Line number table, which maps offsets of JITted code to line numbers of
102
+ // source file.
103
+ const line_info_t* line_number_table;
104
+ // Number of entries in the line number table.
105
+ size_t line_number_table_size;
106
+ };
107
+
108
+ wasm_source_info_t* wasm_source_info;
109
+
110
+ union {
111
+ // Only valid for CODE_ADDED.
112
+ struct name_t name;
113
+
114
+ // Only valid for CODE_ADD_LINE_POS_INFO
115
+ struct line_info_t line_info;
116
+
117
+ // New location of instructions. Only valid for CODE_MOVED.
118
+ void* new_code_start;
119
+ };
120
+
121
+ Isolate* isolate;
122
+ };
123
+
124
+ /**
125
+ * Option flags passed to the SetJitCodeEventHandler function.
126
+ */
127
+ enum JitCodeEventOptions {
128
+ kJitCodeEventDefault = 0,
129
+ // Generate callbacks for already existent code.
130
+ kJitCodeEventEnumExisting = 1
131
+ };
132
+
133
+ /**
134
+ * Callback function passed to SetJitCodeEventHandler.
135
+ *
136
+ * \param event code add, move or removal event.
137
+ */
138
+ using JitCodeEventHandler = void (*)(const JitCodeEvent* event);
139
+
140
+ // --- Garbage Collection Callbacks ---
141
+
142
+ /**
143
+ * Applications can register callback functions which will be called before and
144
+ * after certain garbage collection operations. Allocations are not allowed in
145
+ * the callback functions, you therefore cannot manipulate objects (set or
146
+ * delete properties for example) since it is possible such operations will
147
+ * result in the allocation of objects.
148
+ */
149
+ enum GCType {
150
+ kGCTypeScavenge = 1 << 0,
151
+ kGCTypeMarkSweepCompact = 1 << 1,
152
+ kGCTypeIncrementalMarking = 1 << 2,
153
+ kGCTypeProcessWeakCallbacks = 1 << 3,
154
+ kGCTypeAll = kGCTypeScavenge | kGCTypeMarkSweepCompact |
155
+ kGCTypeIncrementalMarking | kGCTypeProcessWeakCallbacks
156
+ };
157
+
158
+ /**
159
+ * GCCallbackFlags is used to notify additional information about the GC
160
+ * callback.
161
+ * - kGCCallbackFlagConstructRetainedObjectInfos: The GC callback is for
162
+ * constructing retained object infos.
163
+ * - kGCCallbackFlagForced: The GC callback is for a forced GC for testing.
164
+ * - kGCCallbackFlagSynchronousPhantomCallbackProcessing: The GC callback
165
+ * is called synchronously without getting posted to an idle task.
166
+ * - kGCCallbackFlagCollectAllAvailableGarbage: The GC callback is called
167
+ * in a phase where V8 is trying to collect all available garbage
168
+ * (e.g., handling a low memory notification).
169
+ * - kGCCallbackScheduleIdleGarbageCollection: The GC callback is called to
170
+ * trigger an idle garbage collection.
171
+ */
172
+ enum GCCallbackFlags {
173
+ kNoGCCallbackFlags = 0,
174
+ kGCCallbackFlagConstructRetainedObjectInfos = 1 << 1,
175
+ kGCCallbackFlagForced = 1 << 2,
176
+ kGCCallbackFlagSynchronousPhantomCallbackProcessing = 1 << 3,
177
+ kGCCallbackFlagCollectAllAvailableGarbage = 1 << 4,
178
+ kGCCallbackFlagCollectAllExternalMemory = 1 << 5,
179
+ kGCCallbackScheduleIdleGarbageCollection = 1 << 6,
180
+ };
181
+
182
+ using GCCallback = void (*)(GCType type, GCCallbackFlags flags);
183
+
184
+ using InterruptCallback = void (*)(Isolate* isolate, void* data);
185
+
186
+ /**
187
+ * This callback is invoked when the heap size is close to the heap limit and
188
+ * V8 is likely to abort with out-of-memory error.
189
+ * The callback can extend the heap limit by returning a value that is greater
190
+ * than the current_heap_limit. The initial heap limit is the limit that was
191
+ * set after heap setup.
192
+ */
193
+ using NearHeapLimitCallback = size_t (*)(void* data, size_t current_heap_limit,
194
+ size_t initial_heap_limit);
195
+
196
+ /**
197
+ * Callback function passed to SetUnhandledExceptionCallback.
198
+ */
199
+ #if defined(V8_OS_WIN)
200
+ using UnhandledExceptionCallback =
201
+ int (*)(_EXCEPTION_POINTERS* exception_pointers);
202
+ #endif
203
+
204
+ // --- Counters Callbacks ---
205
+
206
+ using CounterLookupCallback = int* (*)(const char* name);
207
+
208
+ using CreateHistogramCallback = void* (*)(const char* name, int min, int max,
209
+ size_t buckets);
210
+
211
+ using AddHistogramSampleCallback = void (*)(void* histogram, int sample);
212
+
213
+ // --- Exceptions ---
214
+
215
+ using FatalErrorCallback = void (*)(const char* location, const char* message);
216
+
217
+ using OOMErrorCallback = void (*)(const char* location, bool is_heap_oom);
218
+
219
+ using MessageCallback = void (*)(Local<Message> message, Local<Value> data);
220
+
221
+ // --- Tracing ---
222
+
223
+ enum LogEventStatus : int { kStart = 0, kEnd = 1, kStamp = 2 };
224
+ using LogEventCallback = void (*)(const char* name,
225
+ int /* LogEventStatus */ status);
226
+
227
+ // --- Crashkeys Callback ---
228
+ enum class CrashKeyId {
229
+ kIsolateAddress,
230
+ kReadonlySpaceFirstPageAddress,
231
+ kMapSpaceFirstPageAddress,
232
+ kCodeSpaceFirstPageAddress,
233
+ kDumpType,
234
+ };
235
+
236
+ using AddCrashKeyCallback = void (*)(CrashKeyId id, const std::string& value);
237
+
238
+ // --- Enter/Leave Script Callback ---
239
+ using BeforeCallEnteredCallback = void (*)(Isolate*);
240
+ using CallCompletedCallback = void (*)(Isolate*);
241
+
242
+ // --- AllowCodeGenerationFromStrings callbacks ---
243
+
244
+ /**
245
+ * Callback to check if code generation from strings is allowed. See
246
+ * Context::AllowCodeGenerationFromStrings.
247
+ */
248
+ using AllowCodeGenerationFromStringsCallback = bool (*)(Local<Context> context,
249
+ Local<String> source);
250
+
251
+ struct ModifyCodeGenerationFromStringsResult {
252
+ // If true, proceed with the codegen algorithm. Otherwise, block it.
253
+ bool codegen_allowed = false;
254
+ // Overwrite the original source with this string, if present.
255
+ // Use the original source if empty.
256
+ // This field is considered only if codegen_allowed is true.
257
+ MaybeLocal<String> modified_source;
258
+ };
259
+
260
+ /**
261
+ * Access type specification.
262
+ */
263
+ enum AccessType {
264
+ ACCESS_GET,
265
+ ACCESS_SET,
266
+ ACCESS_HAS,
267
+ ACCESS_DELETE,
268
+ ACCESS_KEYS
269
+ };
270
+
271
+ // --- Failed Access Check Callback ---
272
+
273
+ using FailedAccessCheckCallback = void (*)(Local<Object> target,
274
+ AccessType type, Local<Value> data);
275
+
276
+ /**
277
+ * Callback to check if codegen is allowed from a source object, and convert
278
+ * the source to string if necessary. See: ModifyCodeGenerationFromStrings.
279
+ */
280
+ using ModifyCodeGenerationFromStringsCallback =
281
+ ModifyCodeGenerationFromStringsResult (*)(Local<Context> context,
282
+ Local<Value> source);
283
+ using ModifyCodeGenerationFromStringsCallback2 =
284
+ ModifyCodeGenerationFromStringsResult (*)(Local<Context> context,
285
+ Local<Value> source,
286
+ bool is_code_like);
287
+
288
+ // --- WebAssembly compilation callbacks ---
289
+ using ExtensionCallback = bool (*)(const FunctionCallbackInfo<Value>&);
290
+
291
+ using AllowWasmCodeGenerationCallback = bool (*)(Local<Context> context,
292
+ Local<String> source);
293
+
294
+ // --- Callback for APIs defined on v8-supported objects, but implemented
295
+ // by the embedder. Example: WebAssembly.{compile|instantiate}Streaming ---
296
+ using ApiImplementationCallback = void (*)(const FunctionCallbackInfo<Value>&);
297
+
298
+ // --- Callback for WebAssembly.compileStreaming ---
299
+ using WasmStreamingCallback = void (*)(const FunctionCallbackInfo<Value>&);
300
+
301
+ // --- Callback for loading source map file for Wasm profiling support
302
+ using WasmLoadSourceMapCallback = Local<String> (*)(Isolate* isolate,
303
+ const char* name);
304
+
305
+ // --- Callback for checking if WebAssembly Simd is enabled ---
306
+ using WasmSimdEnabledCallback = bool (*)(Local<Context> context);
307
+
308
+ // --- Callback for checking if WebAssembly exceptions are enabled ---
309
+ using WasmExceptionsEnabledCallback = bool (*)(Local<Context> context);
310
+
311
+ // --- Callback for checking if WebAssembly dynamic tiering is enabled ---
312
+ using WasmDynamicTieringEnabledCallback = bool (*)(Local<Context> context);
313
+
314
+ // --- Callback for checking if the SharedArrayBuffer constructor is enabled ---
315
+ using SharedArrayBufferConstructorEnabledCallback =
316
+ bool (*)(Local<Context> context);
317
+
318
+ /**
319
+ * HostImportModuleDynamicallyWithImportAssertionsCallback is called when we
320
+ * require the embedder to load a module. This is used as part of the dynamic
321
+ * import syntax.
322
+ *
323
+ * The referrer contains metadata about the script/module that calls
324
+ * import.
325
+ *
326
+ * The specifier is the name of the module that should be imported.
327
+ *
328
+ * The import_assertions are import assertions for this request in the form:
329
+ * [key1, value1, key2, value2, ...] where the keys and values are of type
330
+ * v8::String. Note, unlike the FixedArray passed to ResolveModuleCallback and
331
+ * returned from ModuleRequest::GetImportAssertions(), this array does not
332
+ * contain the source Locations of the assertions.
333
+ *
334
+ * The embedder must compile, instantiate, evaluate the Module, and
335
+ * obtain its namespace object.
336
+ *
337
+ * The Promise returned from this function is forwarded to userland
338
+ * JavaScript. The embedder must resolve this promise with the module
339
+ * namespace object. In case of an exception, the embedder must reject
340
+ * this promise with the exception. If the promise creation itself
341
+ * fails (e.g. due to stack overflow), the embedder must propagate
342
+ * that exception by returning an empty MaybeLocal.
343
+ */
344
+ using HostImportModuleDynamicallyWithImportAssertionsCallback =
345
+ MaybeLocal<Promise> (*)(Local<Context> context,
346
+ Local<ScriptOrModule> referrer,
347
+ Local<String> specifier,
348
+ Local<FixedArray> import_assertions);
349
+
350
+ /**
351
+ * HostInitializeImportMetaObjectCallback is called the first time import.meta
352
+ * is accessed for a module. Subsequent access will reuse the same value.
353
+ *
354
+ * The method combines two implementation-defined abstract operations into one:
355
+ * HostGetImportMetaProperties and HostFinalizeImportMeta.
356
+ *
357
+ * The embedder should use v8::Object::CreateDataProperty to add properties on
358
+ * the meta object.
359
+ */
360
+ using HostInitializeImportMetaObjectCallback = void (*)(Local<Context> context,
361
+ Local<Module> module,
362
+ Local<Object> meta);
363
+
364
+ /**
365
+ * PrepareStackTraceCallback is called when the stack property of an error is
366
+ * first accessed. The return value will be used as the stack value. If this
367
+ * callback is registed, the |Error.prepareStackTrace| API will be disabled.
368
+ * |sites| is an array of call sites, specified in
369
+ * https://v8.dev/docs/stack-trace-api
370
+ */
371
+ using PrepareStackTraceCallback = MaybeLocal<Value> (*)(Local<Context> context,
372
+ Local<Value> error,
373
+ Local<Array> sites);
374
+
375
+ } // namespace v8
376
+
377
+ #endif // INCLUDE_V8_ISOLATE_CALLBACKS_H_
@@ -0,0 +1,238 @@
1
+ // Copyright 2021 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 INCLUDE_V8_EMBEDDER_HEAP_H_
6
+ #define INCLUDE_V8_EMBEDDER_HEAP_H_
7
+
8
+ #include <stddef.h>
9
+ #include <stdint.h>
10
+
11
+ #include <utility>
12
+ #include <vector>
13
+
14
+ #include "cppgc/common.h"
15
+ #include "v8-local-handle.h" // NOLINT(build/include_directory)
16
+ #include "v8-traced-handle.h" // NOLINT(build/include_directory)
17
+ #include "v8config.h" // NOLINT(build/include_directory)
18
+
19
+ namespace v8 {
20
+
21
+ class Data;
22
+ class Isolate;
23
+ class Value;
24
+
25
+ namespace internal {
26
+ class LocalEmbedderHeapTracer;
27
+ } // namespace internal
28
+
29
+ /**
30
+ * Handler for embedder roots on non-unified heap garbage collections.
31
+ */
32
+ class V8_EXPORT EmbedderRootsHandler {
33
+ public:
34
+ virtual ~EmbedderRootsHandler() = default;
35
+
36
+ /**
37
+ * Returns true if the TracedGlobal handle should be considered as root for
38
+ * the currently running non-tracing garbage collection and false otherwise.
39
+ * The default implementation will keep all TracedGlobal references as roots.
40
+ *
41
+ * If this returns false, then V8 may decide that the object referred to by
42
+ * such a handle is reclaimed. In that case:
43
+ * - No action is required if handles are used with destructors, i.e., by just
44
+ * using |TracedGlobal|.
45
+ * - When run without destructors, i.e., by using |TracedReference|, V8 calls
46
+ * |ResetRoot|.
47
+ *
48
+ * Note that the |handle| is different from the handle that the embedder holds
49
+ * for retaining the object. The embedder may use |WrapperClassId()| to
50
+ * distinguish cases where it wants handles to be treated as roots from not
51
+ * being treated as roots.
52
+ */
53
+ virtual bool IsRoot(const v8::TracedReference<v8::Value>& handle) = 0;
54
+ virtual bool IsRoot(const v8::TracedGlobal<v8::Value>& handle) = 0;
55
+
56
+ /**
57
+ * Used in combination with |IsRoot|. Called by V8 when an
58
+ * object that is backed by a handle is reclaimed by a non-tracing garbage
59
+ * collection. It is up to the embedder to reset the original handle.
60
+ *
61
+ * Note that the |handle| is different from the handle that the embedder holds
62
+ * for retaining the object. It is up to the embedder to find the original
63
+ * handle via the object or class id.
64
+ */
65
+ virtual void ResetRoot(const v8::TracedReference<v8::Value>& handle) = 0;
66
+ };
67
+
68
+ /**
69
+ * Interface for tracing through the embedder heap. During a V8 garbage
70
+ * collection, V8 collects hidden fields of all potential wrappers, and at the
71
+ * end of its marking phase iterates the collection and asks the embedder to
72
+ * trace through its heap and use reporter to report each JavaScript object
73
+ * reachable from any of the given wrappers.
74
+ */
75
+ class V8_EXPORT EmbedderHeapTracer {
76
+ public:
77
+ using EmbedderStackState = cppgc::EmbedderStackState;
78
+
79
+ enum TraceFlags : uint64_t {
80
+ kNoFlags = 0,
81
+ kReduceMemory = 1 << 0,
82
+ kForced = 1 << 2,
83
+ };
84
+
85
+ /**
86
+ * Interface for iterating through TracedGlobal handles.
87
+ */
88
+ class V8_EXPORT TracedGlobalHandleVisitor {
89
+ public:
90
+ virtual ~TracedGlobalHandleVisitor() = default;
91
+ virtual void VisitTracedGlobalHandle(const TracedGlobal<Value>& handle) {}
92
+ virtual void VisitTracedReference(const TracedReference<Value>& handle) {}
93
+ };
94
+
95
+ /**
96
+ * Summary of a garbage collection cycle. See |TraceEpilogue| on how the
97
+ * summary is reported.
98
+ */
99
+ struct TraceSummary {
100
+ /**
101
+ * Time spent managing the retained memory in milliseconds. This can e.g.
102
+ * include the time tracing through objects in the embedder.
103
+ */
104
+ double time = 0.0;
105
+
106
+ /**
107
+ * Memory retained by the embedder through the |EmbedderHeapTracer|
108
+ * mechanism in bytes.
109
+ */
110
+ size_t allocated_size = 0;
111
+ };
112
+
113
+ virtual ~EmbedderHeapTracer() = default;
114
+
115
+ /**
116
+ * Iterates all TracedGlobal handles created for the v8::Isolate the tracer is
117
+ * attached to.
118
+ */
119
+ void IterateTracedGlobalHandles(TracedGlobalHandleVisitor* visitor);
120
+
121
+ /**
122
+ * Called by the embedder to set the start of the stack which is e.g. used by
123
+ * V8 to determine whether handles are used from stack or heap.
124
+ */
125
+ void SetStackStart(void* stack_start);
126
+
127
+ /**
128
+ * Called by the embedder to notify V8 of an empty execution stack.
129
+ */
130
+ V8_DEPRECATE_SOON(
131
+ "This call only optimized internal caches which V8 is able to figure out "
132
+ "on its own now.")
133
+ void NotifyEmptyEmbedderStack();
134
+
135
+ /**
136
+ * Called by v8 to register internal fields of found wrappers.
137
+ *
138
+ * The embedder is expected to store them somewhere and trace reachable
139
+ * wrappers from them when called through |AdvanceTracing|.
140
+ */
141
+ virtual void RegisterV8References(
142
+ const std::vector<std::pair<void*, void*>>& embedder_fields) = 0;
143
+
144
+ void RegisterEmbedderReference(const BasicTracedReference<v8::Data>& ref);
145
+
146
+ /**
147
+ * Called at the beginning of a GC cycle.
148
+ */
149
+ virtual void TracePrologue(TraceFlags flags) {}
150
+
151
+ /**
152
+ * Called to advance tracing in the embedder.
153
+ *
154
+ * The embedder is expected to trace its heap starting from wrappers reported
155
+ * by RegisterV8References method, and report back all reachable wrappers.
156
+ * Furthermore, the embedder is expected to stop tracing by the given
157
+ * deadline. A deadline of infinity means that tracing should be finished.
158
+ *
159
+ * Returns |true| if tracing is done, and false otherwise.
160
+ */
161
+ virtual bool AdvanceTracing(double deadline_in_ms) = 0;
162
+
163
+ /*
164
+ * Returns true if there no more tracing work to be done (see AdvanceTracing)
165
+ * and false otherwise.
166
+ */
167
+ virtual bool IsTracingDone() = 0;
168
+
169
+ /**
170
+ * Called at the end of a GC cycle.
171
+ *
172
+ * Note that allocation is *not* allowed within |TraceEpilogue|. Can be
173
+ * overriden to fill a |TraceSummary| that is used by V8 to schedule future
174
+ * garbage collections.
175
+ */
176
+ virtual void TraceEpilogue(TraceSummary* trace_summary) {}
177
+
178
+ /**
179
+ * Called upon entering the final marking pause. No more incremental marking
180
+ * steps will follow this call.
181
+ */
182
+ virtual void EnterFinalPause(EmbedderStackState stack_state) = 0;
183
+
184
+ /*
185
+ * Called by the embedder to request immediate finalization of the currently
186
+ * running tracing phase that has been started with TracePrologue and not
187
+ * yet finished with TraceEpilogue.
188
+ *
189
+ * Will be a noop when currently not in tracing.
190
+ *
191
+ * This is an experimental feature.
192
+ */
193
+ void FinalizeTracing();
194
+
195
+ /**
196
+ * See documentation on EmbedderRootsHandler.
197
+ */
198
+ virtual bool IsRootForNonTracingGC(
199
+ const v8::TracedReference<v8::Value>& handle);
200
+ virtual bool IsRootForNonTracingGC(const v8::TracedGlobal<v8::Value>& handle);
201
+
202
+ /**
203
+ * See documentation on EmbedderRootsHandler.
204
+ */
205
+ virtual void ResetHandleInNonTracingGC(
206
+ const v8::TracedReference<v8::Value>& handle);
207
+
208
+ /*
209
+ * Called by the embedder to immediately perform a full garbage collection.
210
+ *
211
+ * Should only be used in testing code.
212
+ */
213
+ void GarbageCollectionForTesting(EmbedderStackState stack_state);
214
+
215
+ /*
216
+ * Called by the embedder to signal newly allocated or freed memory. Not bound
217
+ * to tracing phases. Embedders should trade off when increments are reported
218
+ * as V8 may consult global heuristics on whether to trigger garbage
219
+ * collection on this change.
220
+ */
221
+ void IncreaseAllocatedSize(size_t bytes);
222
+ void DecreaseAllocatedSize(size_t bytes);
223
+
224
+ /*
225
+ * Returns the v8::Isolate this tracer is attached too and |nullptr| if it
226
+ * is not attached to any v8::Isolate.
227
+ */
228
+ v8::Isolate* isolate() const { return isolate_; }
229
+
230
+ protected:
231
+ v8::Isolate* isolate_ = nullptr;
232
+
233
+ friend class internal::LocalEmbedderHeapTracer;
234
+ };
235
+
236
+ } // namespace v8
237
+
238
+ #endif // INCLUDE_V8_EMBEDDER_HEAP_H_
@@ -0,0 +1,81 @@
1
+ // Copyright 2021 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 INCLUDE_V8_FORWARD_H_
6
+ #define INCLUDE_V8_FORWARD_H_
7
+
8
+ // This header is intended to be used by headers that pass around V8 types,
9
+ // either by pointer or using Local<Type>. The full definitions can be included
10
+ // either via v8.h or the more fine-grained headers.
11
+
12
+ #include "v8-local-handle.h" // NOLINT(build/include_directory)
13
+
14
+ namespace v8 {
15
+
16
+ class AccessorSignature;
17
+ class Array;
18
+ class ArrayBuffer;
19
+ class ArrayBufferView;
20
+ class BigInt;
21
+ class BigInt64Array;
22
+ class BigIntObject;
23
+ class BigUint64Array;
24
+ class Boolean;
25
+ class BooleanObject;
26
+ class Context;
27
+ class DataView;
28
+ class Data;
29
+ class Date;
30
+ class Extension;
31
+ class External;
32
+ class FixedArray;
33
+ class Float32Array;
34
+ class Float64Array;
35
+ class Function;
36
+ template <class F>
37
+ class FunctionCallbackInfo;
38
+ class FunctionTemplate;
39
+ class Int16Array;
40
+ class Int32;
41
+ class Int32Array;
42
+ class Int8Array;
43
+ class Integer;
44
+ class Isolate;
45
+ class Map;
46
+ class Module;
47
+ class Name;
48
+ class Number;
49
+ class NumberObject;
50
+ class Object;
51
+ class ObjectTemplate;
52
+ class Platform;
53
+ class Primitive;
54
+ class Private;
55
+ class Promise;
56
+ class Proxy;
57
+ class RegExp;
58
+ class Script;
59
+ class Set;
60
+ class SharedArrayBuffer;
61
+ class Signature;
62
+ class String;
63
+ class StringObject;
64
+ class Symbol;
65
+ class SymbolObject;
66
+ class Template;
67
+ class TryCatch;
68
+ class TypedArray;
69
+ class Uint16Array;
70
+ class Uint32;
71
+ class Uint32Array;
72
+ class Uint8Array;
73
+ class Uint8ClampedArray;
74
+ class UnboundModuleScript;
75
+ class Value;
76
+ class WasmMemoryObject;
77
+ class WasmModuleObject;
78
+
79
+ } // namespace v8
80
+
81
+ #endif // INCLUDE_V8_FORWARD_H_