blob: c4e3f8dd6e4fb2952fb4094827314b84294a82f6 [file]
// Print the label names that a wasm file has in its name section. This cannot
// be seen in the disassembly: when we do not write a name, reading the binary
// back simply generates one again, which looks the same in the output.
var filename = process.argv[2];
var bytes = new Uint8Array(require('fs').readFileSync(filename));
var module = new WebAssembly.Module(bytes);
var data = new Uint8Array(WebAssembly.Module.customSections(module, 'name')[0]);
var pos = 0;
function leb() {
var result = 0, shift = 0, byte;
do {
byte = data[pos++];
result |= (byte & 0x7f) << shift;
shift += 7;
} while (byte & 0x80);
return result;
}
function str() {
var len = leb();
var s = new TextDecoder('utf-8').decode(data.subarray(pos, pos + len));
pos += len;
return s;
}
var total = 0;
while (pos < data.length) {
var id = leb();
var end = leb() + pos;
// Subsection 3 holds the label names, as a map from function index to a map
// from label index to name.
if (id == 3) {
for (var funcs = leb(); funcs > 0; funcs--) {
var func = leb();
for (var labels = leb(); labels > 0; labels--) {
var label = leb();
console.log('function ' + func + ', label ' + label + ': ' + str());
total++;
}
}
}
pos = end;
}
console.log(total + ' label name' + (total == 1 ? '' : 's'));