Skip to content
This repository was archived by the owner on Jun 24, 2022. It is now read-only.

Commit 32e4305

Browse files
[JSC] Support WebAssembly in SamplingProfiler
https://bugs.webkit.org/show_bug.cgi?id=200329 Reviewed by Saam Barati. JSTests: * stress/sampling-profiler-wasm-name-section.js: Added. (const.compile): (platformSupportsSamplingProfiler.vm.isWasmSupported.wasmEntry): (platformSupportsSamplingProfiler.vm.isWasmSupported): * stress/sampling-profiler-wasm.js: Added. (platformSupportsSamplingProfiler.vm.isWasmSupported.wasmEntry): (platformSupportsSamplingProfiler.vm.isWasmSupported): * stress/sampling-profiler/loop.wasm: Added. * stress/sampling-profiler/loop.wast: Added. * stress/sampling-profiler/nameSection.wasm: Added. Source/JavaScriptCore: The sampling profiler support is critical to investigate what is actually time-consuming. This patch adds the sampling profiler support for Wasm functions to list up hot Wasm functions with compilation mode (BBQ or OMG). This allows us to investigate the hot functions in JetStream2 wasm tests. In order to retrieve wasm function information from the sampling profiler safely, we need to know whether the given Wasm CalleeBits is valid in the call frame. To achieve this, we start collecting valid Wasm::Callee pointers in a global hash set. Previously, each Wasm::Callee registered its code region to a hash set for wasm fault signal handler to know whether the faulted program-counter is in wasm region. We reuse and change this mechanism. Instead of registering code region, we register Wasm::Callee* to a hash set. The sampling profiler reuses this hash set to determine whether the given bits is a valid Wasm::Callee. The sampling profiler retrieves the information safely from valid Wasm::Callee* pointer. It is possible that this Wasm::Callee is about to be dead: ref-count is 0, now in the middle of the destructor of Wasm::Callee. Even in that case, fields of Wasm::Callee are still valid and can be accessed since destroying these fields happens after we unregister Wasm::Callee from the global hash set. We retrieve Wasm::IndexOrName and Wasm::CompilationMode. Copying them does not involve any allocations, locking etc. So we can safely copy them while some of threads are suspended. This patch also fixes the issue that we never called `unregisterCode` while every Wasm::Calllee registers its code region through `registerCode`. * CMakeLists.txt: * JavaScriptCore.xcodeproj/project.pbxproj: * Sources.txt: * runtime/InitializeThreading.cpp: (JSC::initializeThreading): * runtime/SamplingProfiler.cpp: (JSC::FrameWalker::FrameWalker): (JSC::FrameWalker::recordJSFrame): (JSC::CFrameWalker::CFrameWalker): (JSC::SamplingProfiler::takeSample): (JSC::SamplingProfiler::processUnverifiedStackTraces): (JSC::SamplingProfiler::StackFrame::displayName): (JSC::SamplingProfiler::StackFrame::displayNameForJSONTests): (JSC::SamplingProfiler::StackFrame::functionStartLine): (JSC::SamplingProfiler::StackFrame::functionStartColumn): (JSC::SamplingProfiler::StackFrame::sourceID): (JSC::SamplingProfiler::StackFrame::url): (JSC::SamplingProfiler::reportTopBytecodes): (WTF::printInternal): * runtime/SamplingProfiler.h: * tools/JSDollarVM.cpp: (JSC::functionIsWasmSupported): (JSC::JSDollarVM::finishCreation): * wasm/WasmB3IRGenerator.h: * wasm/WasmBBQPlan.cpp: (JSC::Wasm::BBQPlan::complete): * wasm/WasmBBQPlanInlines.h: (JSC::Wasm::BBQPlan::initializeCallees): * wasm/WasmCallee.cpp: (JSC::Wasm::Callee::Callee): (JSC::Wasm::Callee::~Callee): * wasm/WasmCallee.h: (JSC::Wasm::Callee::create): Deleted. (JSC::Wasm::Callee::entrypoint const): Deleted. (JSC::Wasm::Callee::calleeSaveRegisters): Deleted. (JSC::Wasm::Callee::indexOrName const): Deleted. * wasm/WasmCalleeRegistry.cpp: Copied from Source/JavaScriptCore/wasm/WasmFaultSignalHandler.h. (JSC::Wasm::CalleeRegistry::initialize): (JSC::Wasm::CalleeRegistry::singleton): * wasm/WasmCalleeRegistry.h: Copied from Source/JavaScriptCore/wasm/WasmCallee.cpp. (JSC::Wasm::CalleeRegistry::getLock): (JSC::Wasm::CalleeRegistry::registerCallee): (JSC::Wasm::CalleeRegistry::unregisterCallee): (JSC::Wasm::CalleeRegistry::isValidCallee): * wasm/WasmCompilationMode.cpp: Copied from Source/JavaScriptCore/wasm/WasmFaultSignalHandler.h. (JSC::Wasm::makeString): * wasm/WasmCompilationMode.h: Copied from Source/JavaScriptCore/wasm/WasmFaultSignalHandler.h. * wasm/WasmFaultSignalHandler.cpp: (JSC::Wasm::trapHandler): (JSC::Wasm::enableFastMemory): (JSC::Wasm::registerCode): Deleted. (JSC::Wasm::unregisterCode): Deleted. * wasm/WasmFaultSignalHandler.h: * wasm/WasmIndexOrName.h: * wasm/WasmOMGPlan.cpp: (JSC::Wasm::OMGPlan::work): git-svn-id: http://svn.webkit.org/repository/webkit/trunk@248187 268f45cc-cd09-0410-ab3c-d52691b4dbfc
1 parent b1b8bb6 commit 32e4305

27 files changed

+663
-120
lines changed

JSTests/ChangeLog

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,21 @@
1+
2019-08-02 Yusuke Suzuki <[email protected]>
2+
3+
[JSC] Support WebAssembly in SamplingProfiler
4+
https://bugs.webkit.org/show_bug.cgi?id=200329
5+
6+
Reviewed by Saam Barati.
7+
8+
* stress/sampling-profiler-wasm-name-section.js: Added.
9+
(const.compile):
10+
(platformSupportsSamplingProfiler.vm.isWasmSupported.wasmEntry):
11+
(platformSupportsSamplingProfiler.vm.isWasmSupported):
12+
* stress/sampling-profiler-wasm.js: Added.
13+
(platformSupportsSamplingProfiler.vm.isWasmSupported.wasmEntry):
14+
(platformSupportsSamplingProfiler.vm.isWasmSupported):
15+
* stress/sampling-profiler/loop.wasm: Added.
16+
* stress/sampling-profiler/loop.wast: Added.
17+
* stress/sampling-profiler/nameSection.wasm: Added.
18+
119
2019-08-02 Yusuke Suzuki <[email protected]>
220

321
[JSC] LazyJSValue should be robust for empty JSValue
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
//@ runDefault
2+
3+
/*
4+
This test loads a WebAssembly file compiled by Emscripten with:
5+
./emsdk-portable/emscripten/incoming/em++ ./nameSection.cc -O2 -g4 -s WASM=1 -o nameSection.js -s EXPORTED_FUNCTIONS="['_parrot']"
6+
7+
From the following C++ source file:
8+
extern "C" {
9+
int silly(int);
10+
__attribute__((noinline)) int eggs(int i) { return silly(i); }
11+
__attribute__((noinline)) int bacon(int i) { return eggs(i); }
12+
__attribute__((noinline)) int spam(int i) { return bacon(i); }
13+
__attribute__((noinline)) int parrot(int i) { return spam(i); }
14+
}
15+
*/
16+
17+
if (platformSupportsSamplingProfiler() && $vm.isWasmSupported()) {
18+
const verbose = false;
19+
const wasmFile = './sampling-profiler/nameSection.wasm';
20+
21+
const compile = (location, importObject = {}) => {
22+
if (verbose)
23+
print(`Processing ${location}`);
24+
let buf = typeof readbuffer !== "undefined"? readbuffer(location) : read(location, 'binary');
25+
if (verbose)
26+
print(` Size: ${buf.byteLength}`);
27+
28+
let t0 = Date.now();
29+
let module = new WebAssembly.Module(buf);
30+
let t1 = Date.now();
31+
if (verbose)
32+
print(`new WebAssembly.Module(buf) took ${t1-t0} ms.`);
33+
34+
if (verbose)
35+
print(`Creating fake import object with ${WebAssembly.Module.imports(module).length} imports`);
36+
for (let imp of WebAssembly.Module.imports(module)) {
37+
if (typeof importObject[imp.module] === "undefined")
38+
importObject[imp.module] = {};
39+
if (typeof importObject[imp.module][imp.name] === "undefined") {
40+
switch (imp.kind) {
41+
case "function": importObject[imp.module][imp.name] = () => {}; break;
42+
case "table": importObject[imp.module][imp.name] = new WebAssembly.Table({ initial: 6, maximum: 6, element: "funcref" }); break;
43+
case "memory": importObject[imp.module][imp.name] = new WebAssembly.Memory({ initial: 16777216 / (64 * 1024), maximum: 16777216 / (64 * 1024) }); break;
44+
case "global": importObject[imp.module][imp.name] = 0; break;
45+
}
46+
}
47+
48+
}
49+
50+
let t2 = Date.now();
51+
let instance = new WebAssembly.Instance(module, importObject);
52+
let t3 = Date.now();
53+
if (verbose)
54+
print(`new WebAssembly.Module(buf) took ${t3-t2} ms.`);
55+
56+
return instance;
57+
};
58+
59+
const importObject = { env: { _silly: i => {
60+
var result = 0;
61+
for (var i = 0; i < 100000; ++i)
62+
result++;
63+
return result;
64+
} } };
65+
const instance = compile(wasmFile, importObject);
66+
const result = instance.exports._parrot(1);
67+
68+
load("./sampling-profiler/samplingProfiler.js");
69+
var wasmEntry = function() {
70+
return instance.exports._parrot(1);
71+
};
72+
runTest(wasmEntry, ["_silly", "(unknown)", "<?>.wasm-function[_eggs]", "<?>.wasm-function[_bacon]", "<?>.wasm-function[_spam]", "<?>.wasm-function[_parrot]", "wasm-stub", "_parrot", "wasmEntry"]);
73+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
//@ runDefault
2+
3+
if (platformSupportsSamplingProfiler() && $vm.isWasmSupported()) {
4+
load("./sampling-profiler/samplingProfiler.js");
5+
let buf = read("./sampling-profiler/loop.wasm", "binary");
6+
let module = new WebAssembly.Module(buf);
7+
let instance = new WebAssembly.Instance(module);
8+
var wasmEntry = function() {
9+
return instance.exports.loop(10000000);
10+
};
11+
runTest(wasmEntry, ["<?>.wasm-function[0]", "wasm-stub", "loop", "wasmEntry"]);
12+
}
82 Bytes
Binary file not shown.
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
(module
2+
(memory 1)
3+
4+
(func (export "loop") (param i32) (result i32)
5+
(local i32 i32)
6+
(local.set 1 (i32.const 1))
7+
(local.set 2 (i32.const 2))
8+
(block
9+
(loop
10+
(br_if 1 (i32.gt_u (local.get 2) (local.get 0)))
11+
(local.set 1 (i32.mul (local.get 1) (local.get 2)))
12+
(local.set 2 (i32.add (local.get 2) (i32.const 1)))
13+
(br 0)
14+
)
15+
)
16+
(local.get 1)
17+
)
18+
)
Binary file not shown.

Source/JavaScriptCore/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -997,6 +997,7 @@ set(JavaScriptCore_PRIVATE_FRAMEWORK_HEADERS
997997

998998
wasm/WasmCapabilities.h
999999
wasm/WasmCodeBlock.h
1000+
wasm/WasmCompilationMode.h
10001001
wasm/WasmContext.h
10011002
wasm/WasmEmbedder.h
10021003
wasm/WasmExceptionType.h

Source/JavaScriptCore/ChangeLog

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,83 @@
1+
2019-08-02 Yusuke Suzuki <[email protected]>
2+
3+
[JSC] Support WebAssembly in SamplingProfiler
4+
https://bugs.webkit.org/show_bug.cgi?id=200329
5+
6+
Reviewed by Saam Barati.
7+
8+
The sampling profiler support is critical to investigate what is actually time-consuming. This patch adds the sampling profiler support for Wasm functions
9+
to list up hot Wasm functions with compilation mode (BBQ or OMG). This allows us to investigate the hot functions in JetStream2 wasm tests.
10+
11+
In order to retrieve wasm function information from the sampling profiler safely, we need to know whether the given Wasm CalleeBits is valid in the call frame.
12+
To achieve this, we start collecting valid Wasm::Callee pointers in a global hash set. Previously, each Wasm::Callee registered its code region to a hash set
13+
for wasm fault signal handler to know whether the faulted program-counter is in wasm region. We reuse and change this mechanism. Instead of registering code region,
14+
we register Wasm::Callee* to a hash set. The sampling profiler reuses this hash set to determine whether the given bits is a valid Wasm::Callee.
15+
16+
The sampling profiler retrieves the information safely from valid Wasm::Callee* pointer. It is possible that this Wasm::Callee is about to be dead: ref-count is 0,
17+
now in the middle of the destructor of Wasm::Callee. Even in that case, fields of Wasm::Callee are still valid and can be accessed since destroying these fields happens
18+
after we unregister Wasm::Callee from the global hash set.
19+
20+
We retrieve Wasm::IndexOrName and Wasm::CompilationMode. Copying them does not involve any allocations, locking etc. So we can safely copy them while some of threads are suspended.
21+
22+
This patch also fixes the issue that we never called `unregisterCode` while every Wasm::Calllee registers its code region through `registerCode`.
23+
24+
* CMakeLists.txt:
25+
* JavaScriptCore.xcodeproj/project.pbxproj:
26+
* Sources.txt:
27+
* runtime/InitializeThreading.cpp:
28+
(JSC::initializeThreading):
29+
* runtime/SamplingProfiler.cpp:
30+
(JSC::FrameWalker::FrameWalker):
31+
(JSC::FrameWalker::recordJSFrame):
32+
(JSC::CFrameWalker::CFrameWalker):
33+
(JSC::SamplingProfiler::takeSample):
34+
(JSC::SamplingProfiler::processUnverifiedStackTraces):
35+
(JSC::SamplingProfiler::StackFrame::displayName):
36+
(JSC::SamplingProfiler::StackFrame::displayNameForJSONTests):
37+
(JSC::SamplingProfiler::StackFrame::functionStartLine):
38+
(JSC::SamplingProfiler::StackFrame::functionStartColumn):
39+
(JSC::SamplingProfiler::StackFrame::sourceID):
40+
(JSC::SamplingProfiler::StackFrame::url):
41+
(JSC::SamplingProfiler::reportTopBytecodes):
42+
(WTF::printInternal):
43+
* runtime/SamplingProfiler.h:
44+
* tools/JSDollarVM.cpp:
45+
(JSC::functionIsWasmSupported):
46+
(JSC::JSDollarVM::finishCreation):
47+
* wasm/WasmB3IRGenerator.h:
48+
* wasm/WasmBBQPlan.cpp:
49+
(JSC::Wasm::BBQPlan::complete):
50+
* wasm/WasmBBQPlanInlines.h:
51+
(JSC::Wasm::BBQPlan::initializeCallees):
52+
* wasm/WasmCallee.cpp:
53+
(JSC::Wasm::Callee::Callee):
54+
(JSC::Wasm::Callee::~Callee):
55+
* wasm/WasmCallee.h:
56+
(JSC::Wasm::Callee::create): Deleted.
57+
(JSC::Wasm::Callee::entrypoint const): Deleted.
58+
(JSC::Wasm::Callee::calleeSaveRegisters): Deleted.
59+
(JSC::Wasm::Callee::indexOrName const): Deleted.
60+
* wasm/WasmCalleeRegistry.cpp: Copied from Source/JavaScriptCore/wasm/WasmFaultSignalHandler.h.
61+
(JSC::Wasm::CalleeRegistry::initialize):
62+
(JSC::Wasm::CalleeRegistry::singleton):
63+
* wasm/WasmCalleeRegistry.h: Copied from Source/JavaScriptCore/wasm/WasmCallee.cpp.
64+
(JSC::Wasm::CalleeRegistry::getLock):
65+
(JSC::Wasm::CalleeRegistry::registerCallee):
66+
(JSC::Wasm::CalleeRegistry::unregisterCallee):
67+
(JSC::Wasm::CalleeRegistry::isValidCallee):
68+
* wasm/WasmCompilationMode.cpp: Copied from Source/JavaScriptCore/wasm/WasmFaultSignalHandler.h.
69+
(JSC::Wasm::makeString):
70+
* wasm/WasmCompilationMode.h: Copied from Source/JavaScriptCore/wasm/WasmFaultSignalHandler.h.
71+
* wasm/WasmFaultSignalHandler.cpp:
72+
(JSC::Wasm::trapHandler):
73+
(JSC::Wasm::enableFastMemory):
74+
(JSC::Wasm::registerCode): Deleted.
75+
(JSC::Wasm::unregisterCode): Deleted.
76+
* wasm/WasmFaultSignalHandler.h:
77+
* wasm/WasmIndexOrName.h:
78+
* wasm/WasmOMGPlan.cpp:
79+
(JSC::Wasm::OMGPlan::work):
80+
181
2019-08-02 Yusuke Suzuki <[email protected]>
282

383
[JSC] LazyJSValue should be robust for empty JSValue

Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1815,6 +1815,7 @@
18151815
E3A32BC71FC83147007D7E76 /* WeakMapImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = E3A32BC61FC8312E007D7E76 /* WeakMapImpl.h */; };
18161816
E3A421431D6F58930007C617 /* PreciseJumpTargetsInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = E3A421421D6F588F0007C617 /* PreciseJumpTargetsInlines.h */; settings = {ATTRIBUTES = (Private, ); }; };
18171817
E3AC277721FDB4940024452C /* RegExpCachedResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 86F75EFC151C062F007C9BA3 /* RegExpCachedResult.h */; settings = {ATTRIBUTES = (Private, ); }; };
1818+
E3BD2B7622F275020011765C /* WasmCompilationMode.h in Headers */ = {isa = PBXBuildFile; fileRef = E3BD2B7522F275020011765C /* WasmCompilationMode.h */; settings = {ATTRIBUTES = (Private, ); }; };
18181819
E3BFA5D021E853A1009C0EBA /* DFGDesiredGlobalProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = E3BFA5CD21E853A1009C0EBA /* DFGDesiredGlobalProperty.h */; };
18191820
E3BFD0BC1DAF808E0065DEA2 /* AccessCaseSnippetParams.h in Headers */ = {isa = PBXBuildFile; fileRef = E3BFD0BA1DAF807C0065DEA2 /* AccessCaseSnippetParams.h */; };
18201821
E3C295DD1ED2CBDA00D3016F /* ObjectPropertyChangeAdaptiveWatchpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = E3C295DC1ED2CBAA00D3016F /* ObjectPropertyChangeAdaptiveWatchpoint.h */; };
@@ -1826,6 +1827,7 @@
18261827
E3F23A801ECF13F500978D99 /* SnippetReg.h in Headers */ = {isa = PBXBuildFile; fileRef = E3F23A7D1ECF13E500978D99 /* SnippetReg.h */; settings = {ATTRIBUTES = (Private, ); }; };
18271828
E3F23A811ECF13FA00978D99 /* SnippetParams.h in Headers */ = {isa = PBXBuildFile; fileRef = E3F23A7C1ECF13E500978D99 /* SnippetParams.h */; settings = {ATTRIBUTES = (Private, ); }; };
18281829
E3F23A821ECF13FE00978D99 /* Snippet.h in Headers */ = {isa = PBXBuildFile; fileRef = E3F23A7B1ECF13E500978D99 /* Snippet.h */; settings = {ATTRIBUTES = (Private, ); }; };
1830+
E3FB853A22F3667B008F90ED /* WasmCalleeRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = E3FB853822F36674008F90ED /* WasmCalleeRegistry.h */; };
18291831
E3FF75331D9CEA1800C7E16D /* DOMJITGetterSetter.h in Headers */ = {isa = PBXBuildFile; fileRef = E3FF752F1D9CEA1200C7E16D /* DOMJITGetterSetter.h */; settings = {ATTRIBUTES = (Private, ); }; };
18301832
E49DC16C12EF294E00184A1F /* SourceProviderCache.h in Headers */ = {isa = PBXBuildFile; fileRef = E49DC15112EF272200184A1F /* SourceProviderCache.h */; settings = {ATTRIBUTES = (Private, ); }; };
18311833
E49DC16D12EF295300184A1F /* SourceProviderCacheItem.h in Headers */ = {isa = PBXBuildFile; fileRef = E49DC14912EF261A00184A1F /* SourceProviderCacheItem.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -4815,6 +4817,7 @@
48154817
E36CC9462086314F0051FFD6 /* WasmCreationMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WasmCreationMode.h; sourceTree = "<group>"; };
48164818
E3794E731B77EB97005543AE /* ModuleAnalyzer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ModuleAnalyzer.cpp; sourceTree = "<group>"; };
48174819
E3794E741B77EB97005543AE /* ModuleAnalyzer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ModuleAnalyzer.h; sourceTree = "<group>"; };
4820+
E37CFB2D22F27C57009A7B38 /* WasmCompilationMode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = WasmCompilationMode.cpp; sourceTree = "<group>"; };
48184821
E380A76B1DCD7195000F89E6 /* MacroAssemblerHelpers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MacroAssemblerHelpers.h; sourceTree = "<group>"; };
48194822
E380D66B1F19249D00A59095 /* BuiltinNames.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BuiltinNames.cpp; sourceTree = "<group>"; };
48204823
E3850B14226ED63E009ABF9C /* DFGMinifiedIDInlines.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = DFGMinifiedIDInlines.h; path = dfg/DFGMinifiedIDInlines.h; sourceTree = "<group>"; };
@@ -4841,6 +4844,7 @@
48414844
E3A32BC51FC8312D007D7E76 /* WeakMapImpl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WeakMapImpl.cpp; sourceTree = "<group>"; };
48424845
E3A32BC61FC8312E007D7E76 /* WeakMapImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WeakMapImpl.h; sourceTree = "<group>"; };
48434846
E3A421421D6F588F0007C617 /* PreciseJumpTargetsInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PreciseJumpTargetsInlines.h; sourceTree = "<group>"; };
4847+
E3BD2B7522F275020011765C /* WasmCompilationMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WasmCompilationMode.h; sourceTree = "<group>"; };
48444848
E3BFA5CB21E853A0009C0EBA /* DFGDesiredGlobalProperties.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DFGDesiredGlobalProperties.cpp; path = dfg/DFGDesiredGlobalProperties.cpp; sourceTree = "<group>"; };
48454849
E3BFA5CC21E853A0009C0EBA /* DFGDesiredGlobalProperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DFGDesiredGlobalProperties.h; path = dfg/DFGDesiredGlobalProperties.h; sourceTree = "<group>"; };
48464850
E3BFA5CD21E853A1009C0EBA /* DFGDesiredGlobalProperty.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DFGDesiredGlobalProperty.h; path = dfg/DFGDesiredGlobalProperty.h; sourceTree = "<group>"; };
@@ -4863,6 +4867,8 @@
48634867
E3F23A7C1ECF13E500978D99 /* SnippetParams.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SnippetParams.h; sourceTree = "<group>"; };
48644868
E3F23A7D1ECF13E500978D99 /* SnippetReg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SnippetReg.h; sourceTree = "<group>"; };
48654869
E3F23A7E1ECF13E500978D99 /* SnippetSlowPathCalls.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SnippetSlowPathCalls.h; sourceTree = "<group>"; };
4870+
E3FB853822F36674008F90ED /* WasmCalleeRegistry.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WasmCalleeRegistry.h; sourceTree = "<group>"; };
4871+
E3FB853922F36674008F90ED /* WasmCalleeRegistry.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = WasmCalleeRegistry.cpp; sourceTree = "<group>"; };
48664872
E3FC25102256ECF400583518 /* DoublePredictionFuzzerAgent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = DoublePredictionFuzzerAgent.cpp; sourceTree = "<group>"; };
48674873
E3FC25112256ECF400583518 /* DoublePredictionFuzzerAgent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DoublePredictionFuzzerAgent.h; sourceTree = "<group>"; };
48684874
E3FF752F1D9CEA1200C7E16D /* DOMJITGetterSetter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMJITGetterSetter.h; sourceTree = "<group>"; };
@@ -6605,11 +6611,15 @@
66056611
AD4B1DF81DF244D70071AE32 /* WasmBinding.h */,
66066612
525C0DD71E935847002184CD /* WasmCallee.cpp */,
66076613
525C0DD81E935847002184CD /* WasmCallee.h */,
6614+
E3FB853922F36674008F90ED /* WasmCalleeRegistry.cpp */,
6615+
E3FB853822F36674008F90ED /* WasmCalleeRegistry.h */,
66086616
53FD04D11D7AB187003287D3 /* WasmCallingConvention.cpp */,
66096617
53FD04D21D7AB187003287D3 /* WasmCallingConvention.h */,
66106618
E337B966224324E50093A820 /* WasmCapabilities.h */,
66116619
526AC4B41E977C5D003500E1 /* WasmCodeBlock.cpp */,
66126620
526AC4B51E977C5D003500E1 /* WasmCodeBlock.h */,
6621+
E37CFB2D22F27C57009A7B38 /* WasmCompilationMode.cpp */,
6622+
E3BD2B7522F275020011765C /* WasmCompilationMode.h */,
66136623
AD412B321E7B2E8A008AF157 /* WasmContext.h */,
66146624
A27958D7FA1142B0AC9E364D /* WasmContextInlines.h */,
66156625
E36CC9462086314F0051FFD6 /* WasmCreationMode.h */,
@@ -10008,9 +10018,11 @@
1000810018
53F8D2001E8387D400D21116 /* WasmBBQPlanInlines.h in Headers */,
1000910019
AD4B1DFA1DF244E20071AE32 /* WasmBinding.h in Headers */,
1001010020
525C0DDA1E935847002184CD /* WasmCallee.h in Headers */,
10021+
E3FB853A22F3667B008F90ED /* WasmCalleeRegistry.h in Headers */,
1001110022
53FD04D41D7AB291003287D3 /* WasmCallingConvention.h in Headers */,
1001210023
E337B967224324EA0093A820 /* WasmCapabilities.h in Headers */,
1001310024
526AC4B71E977C5D003500E1 /* WasmCodeBlock.h in Headers */,
10025+
E3BD2B7622F275020011765C /* WasmCompilationMode.h in Headers */,
1001410026
AD412B341E7B2E9E008AF157 /* WasmContext.h in Headers */,
1001510027
7593C898BE714A64BE93A6E7 /* WasmContextInlines.h in Headers */,
1001610028
E36CC9472086314F0051FFD6 /* WasmCreationMode.h in Headers */,

Source/JavaScriptCore/Sources.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -996,8 +996,10 @@ wasm/WasmB3IRGenerator.cpp
996996
wasm/WasmBBQPlan.cpp
997997
wasm/WasmBinding.cpp
998998
wasm/WasmCallee.cpp
999+
wasm/WasmCalleeRegistry.cpp
9991000
wasm/WasmCallingConvention.cpp
10001001
wasm/WasmCodeBlock.cpp
1002+
wasm/WasmCompilationMode.cpp
10011003
wasm/WasmEmbedder.h
10021004
wasm/WasmFaultSignalHandler.cpp
10031005
wasm/WasmFormat.cpp

0 commit comments

Comments
 (0)