Skip to content

Commit bc46254

Browse files
authored
Add some tracing to wasm-emscripten-finalize (#2505)
Also fix, but in splitting the names of the trace channels. Obviously I can't write string.split correctly in C first time around.
1 parent c6f5f16 commit bc46254

3 files changed

Lines changed: 30 additions & 9 deletions

File tree

src/support/debug.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ void wasm::setDebugEnabled(const char* types) {
4545
if (type_end == nullptr) {
4646
type_end = types + end;
4747
}
48-
size_t type_size = type_end - types + start;
48+
size_t type_size = type_end - (types + start);
4949
std::string type(types + start, type_size);
5050
debugTypesEnabled.insert(type);
5151
start += type_size + 1;

src/tools/wasm-emscripten-finalize.cpp

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#include "abi/js.h"
2525
#include "ir/trapping.h"
2626
#include "support/colors.h"
27+
#include "support/debug.h"
2728
#include "support/file.h"
2829
#include "tool-options.h"
2930
#include "wasm-binary.h"
@@ -32,6 +33,8 @@
3233
#include "wasm-printing.h"
3334
#include "wasm-validator.h"
3435

36+
#define DEBUG_TYPE "emscripten"
37+
3538
using namespace cashew;
3639
using namespace wasm;
3740

@@ -175,10 +178,9 @@ int main(int argc, const char* argv[]) {
175178

176179
options.applyFeatures(wasm);
177180

178-
if (options.debug) {
179-
std::cerr << "Module before:\n";
180-
WasmPrinter::printModule(&wasm, std::cerr);
181-
}
181+
BYN_TRACE_WITH_TYPE("emscripten-dump", "Module before:\n");
182+
BYN_DEBUG_WITH_TYPE("emscripten-dump",
183+
WasmPrinter::printModule(&wasm, std::cerr));
182184

183185
uint32_t dataSize = 0;
184186

@@ -226,9 +228,11 @@ int main(int argc, const char* argv[]) {
226228
}
227229

228230
if (isSideModule) {
231+
BYN_TRACE("finalizing as side module\n");
229232
generator.replaceStackPointerGlobal();
230233
generator.generatePostInstantiateFunction();
231234
} else {
235+
BYN_TRACE("finalizing as regular module\n");
232236
generator.generateRuntimeFunctions();
233237
generator.internalizeStackPointerGlobal();
234238
generator.generateMemoryGrowthFunction();
@@ -260,6 +264,7 @@ int main(int argc, const char* argv[]) {
260264

261265
// Legalize the wasm.
262266
{
267+
BYN_TRACE("legalizing types\n");
263268
PassRunner passRunner(&wasm);
264269
passRunner.setOptions(options.passOptions);
265270
passRunner.setDebug(options.debug);
@@ -270,6 +275,7 @@ int main(int argc, const char* argv[]) {
270275
passRunner.run();
271276
}
272277

278+
BYN_TRACE("generated metadata\n");
273279
// Substantial changes to the wasm are done, enough to create the metadata.
274280
std::string metadata =
275281
generator.generateEmscriptenMetadata(dataSize, initializerFunctions);
@@ -284,10 +290,9 @@ int main(int argc, const char* argv[]) {
284290
generator.separateDataSegments(&memInitFile, globalBase);
285291
}
286292

287-
if (options.debug) {
288-
std::cerr << "Module after:\n";
289-
WasmPrinter::printModule(&wasm, std::cerr);
290-
}
293+
BYN_TRACE_WITH_TYPE("emscripten-dump", "Module after:\n");
294+
BYN_DEBUG_WITH_TYPE("emscripten-dump",
295+
WasmPrinter::printModule(&wasm, std::cerr));
291296

292297
// Strip target features section (its information is in the metadata)
293298
{

src/wasm/wasm-emscripten.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,13 @@
2525
#include "ir/literal-utils.h"
2626
#include "ir/module-utils.h"
2727
#include "shared-constants.h"
28+
#include "support/debug.h"
2829
#include "wasm-builder.h"
2930
#include "wasm-traversal.h"
3031
#include "wasm.h"
3132

33+
#define DEBUG_TYPE "emscripten"
34+
3235
namespace wasm {
3336

3437
cashew::IString EM_ASM_PREFIX("emscripten_asm_const");
@@ -122,6 +125,7 @@ inline Expression* stackBoundsCheck(Builder& builder,
122125
Expression*
123126
EmscriptenGlueGenerator::generateStoreStackPointer(Function* func,
124127
Expression* value) {
128+
BYN_TRACE("generateStoreStackPointer\n");
125129
if (!useStackPointerGlobal) {
126130
return builder.makeStore(
127131
/* bytes =*/4,
@@ -147,6 +151,7 @@ EmscriptenGlueGenerator::generateStoreStackPointer(Function* func,
147151
}
148152

149153
void EmscriptenGlueGenerator::generateStackSaveFunction() {
154+
BYN_TRACE("generateStackSaveFunction\n");
150155
std::vector<NameType> params{};
151156
Function* function =
152157
builder.makeFunction(STACK_SAVE, std::move(params), i32, {});
@@ -157,6 +162,7 @@ void EmscriptenGlueGenerator::generateStackSaveFunction() {
157162
}
158163

159164
void EmscriptenGlueGenerator::generateStackAllocFunction() {
165+
BYN_TRACE("generateStackAllocFunction\n");
160166
std::vector<NameType> params{{"0", i32}};
161167
Function* function =
162168
builder.makeFunction(STACK_ALLOC, std::move(params), i32, {{"1", i32}});
@@ -181,6 +187,7 @@ void EmscriptenGlueGenerator::generateStackAllocFunction() {
181187
}
182188

183189
void EmscriptenGlueGenerator::generateStackRestoreFunction() {
190+
BYN_TRACE("generateStackRestoreFunction\n");
184191
std::vector<NameType> params{{"0", i32}};
185192
Function* function =
186193
builder.makeFunction(STACK_RESTORE, std::move(params), none, {});
@@ -193,6 +200,7 @@ void EmscriptenGlueGenerator::generateStackRestoreFunction() {
193200
}
194201

195202
void EmscriptenGlueGenerator::generateRuntimeFunctions() {
203+
BYN_TRACE("generateRuntimeFunctions\n");
196204
generateStackSaveFunction();
197205
generateStackAllocFunction();
198206
generateStackRestoreFunction();
@@ -229,6 +237,7 @@ ensureFunctionImport(Module* module, Name name, std::string sig) {
229237
// Here we internalize all such wasm globals and generte code that sets their
230238
// value based on the result of call `g$foo` and `fp$bar` functions at runtime.
231239
Function* EmscriptenGlueGenerator::generateAssignGOTEntriesFunction() {
240+
BYN_TRACE("generateAssignGOTEntriesFunction\n");
232241
std::vector<Global*> gotFuncEntries;
233242
std::vector<Global*> gotMemEntries;
234243
for (auto& g : wasm.globals) {
@@ -307,6 +316,7 @@ Function* EmscriptenGlueGenerator::generateAssignGOTEntriesFunction() {
307316
// The later is the constructor function generaed by lld which performs any
308317
// fixups on the memory section and calls static constructors.
309318
void EmscriptenGlueGenerator::generatePostInstantiateFunction() {
319+
BYN_TRACE("generatePostInstantiateFunction\n");
310320
Builder builder(wasm);
311321
Function* post_instantiate =
312322
builder.makeFunction(POST_INSTANTIATE, std::vector<NameType>{}, none, {});
@@ -1039,6 +1049,7 @@ struct FixInvokeFunctionNamesWalker
10391049
}
10401050

10411051
assert(importRenames.count(curr->name) == 0);
1052+
BYN_TRACE("renaming: " << curr->name << " -> " << newname << "\n");
10421053
importRenames[curr->name] = newname;
10431054
// Either rename or remove the existing import
10441055
if (wasm.getFunctionOrNull(newname) || !newImports.insert(newname).second) {
@@ -1065,8 +1076,10 @@ struct FixInvokeFunctionNamesWalker
10651076
};
10661077

10671078
void EmscriptenGlueGenerator::fixInvokeFunctionNames() {
1079+
BYN_TRACE("fixInvokeFunctionNames\n");
10681080
FixInvokeFunctionNamesWalker walker(wasm);
10691081
walker.walkModule(&wasm);
1082+
BYN_TRACE("generating dyncall thunks\n");
10701083
for (auto sig : walker.invokeSigs) {
10711084
generateDynCallThunk(sig);
10721085
}
@@ -1275,12 +1288,15 @@ void EmscriptenGlueGenerator::exportWasiStart() {
12751288
// If main exists, export a function to call it per the wasi standard.
12761289
Name main = "main";
12771290
if (!wasm.getFunctionOrNull(main)) {
1291+
BYN_TRACE("exportWasiStart: main not found\n");
12781292
return;
12791293
}
12801294
Name _start = "_start";
12811295
if (wasm.getExportOrNull(_start)) {
1296+
BYN_TRACE("exportWasiStart: _start already present\n");
12821297
return;
12831298
}
1299+
BYN_TRACE("exportWasiStart\n");
12841300
Builder builder(wasm);
12851301
auto* body = builder.makeDrop(builder.makeCall(
12861302
main,

0 commit comments

Comments
 (0)