Skip to content

Commit

Permalink
Remap symbols from binaryen symbol map to their original java qualifi…
Browse files Browse the repository at this point in the history
…ed binary names.

PiperOrigin-RevId: 571127599
  • Loading branch information
mollyibot authored and copybara-github committed Oct 5, 2023
1 parent d77bd49 commit 05262fa
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 16 deletions.
25 changes: 23 additions & 2 deletions build_defs/internal_do_not_use/j2wasm_application.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,7 @@ def _impl_j2wasm_application(ctx):

input = ctx.outputs.wat
input_source_map = None
binaryen_symbolmap = ctx.actions.declare_file(ctx.label.name + ".binaryen.symbolmap")
stages = _extract_stages(ctx.attr.binaryen_args)
current_stage = 0
for stage_args in stages:
Expand Down Expand Up @@ -163,8 +164,8 @@ def _impl_j2wasm_application(ctx):
args.add("--output-source-map-url", source_map_base_url + "/" + ctx.outputs.srcmap.basename)

# SymbolMap flag must be after optimization passes to get the final symbol names.
args.add("--symbolmap=" + ctx.outputs.symbolmap.path)
outputs.append(ctx.outputs.symbolmap)
args.add("--symbolmap=" + binaryen_symbolmap.path)
outputs.append(binaryen_symbolmap)

# Always keep the embedded debug information if explicitly asked by user.
if ctx.attr.enable_debug_info or ctx.var.get("J2CL_APP_STYLE", "") == "PRETTY":
Expand Down Expand Up @@ -203,6 +204,8 @@ def _impl_j2wasm_application(ctx):
input = output
input_source_map = output_source_map

_remap_symbol_map(ctx, transpile_out, binaryen_symbolmap)

runfiles.append(ctx.outputs.wasm)

# Make the debugging data available in runfiles.
Expand Down Expand Up @@ -285,6 +288,24 @@ def _extract_stages(args):
def _trigger_javac_build(deps):
return depset(transitive = [d[J2wasmInfo]._private_.java_info.transitive_runtime_jars for d in deps])

def _remap_symbol_map(ctx, transpile_out, binaryen_symbolmap):
ctx.actions.run_shell(
inputs = [transpile_out, binaryen_symbolmap],
outputs = [ctx.outputs.symbolmap],
command =
"""awk 'BEGIN { FS = ":" } {
from = $1;
to = substr($0, length(from) + length(FS) + 1);
if (from ~ /^[0-9]+$/) {
symbols[from] = to in mapping ? mapping[to] : to
} else {
mapping[from] = to
}
} END {
for (i in symbols) print i":"symbols[i]
}' %s/namemap %s > %s""" % (transpile_out.path, binaryen_symbolmap.path, ctx.outputs.symbolmap.path),
)

_J2WASM_APP_ATTRS = {
"deps": attr.label_list(providers = [J2wasmInfo]),
"entry_points": attr.string_list(),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
java.lang.RuntimeException: __the_message__!
And second line!
at create(jre/java/super-wasm/exception_utils.js:26:13)
at m_createJsError__java_lang_Throwable__javaemul_internal_Exceptions_JsErrorWrapper@javaemul.internal.Exceptions(Exceptions.java:55)
at [email protected](RuntimeException.java:28)
at m_method3__void@com.google.j2cl.junit.integration.stacktrace.data.SimpleThrowingStacktraceTest(SimpleThrowingStacktraceTest.java:40)
at m_method2__void@com.google.j2cl.junit.integration.stacktrace.data.SimpleThrowingStacktraceTest(SimpleThrowingStacktraceTest.java:35)
at m_method1__void@com.google.j2cl.junit.integration.stacktrace.data.SimpleThrowingStacktraceTest(SimpleThrowingStacktraceTest.java:31)
at m_test__void@com.google.j2cl.junit.integration.stacktrace.data.SimpleThrowingStacktraceTest(SimpleThrowingStacktraceTest.java:27)
at m_testInSimpleThrowingStacktraceTest__void@javatests.com.google.j2cl.junit.integration.stacktrace.data.SimpleThrowingStacktraceTest_Adapter(SimpleThrowingStacktraceTest_Adapter.java:43)
at m_testInSimpleThrowingStacktraceTest__$export__void@javatests.com.google.j2cl.junit.integration.stacktrace.data.SimpleThrowingStacktraceTest_Adapter(SimpleThrowingStacktraceTest_Adapter.java:41)
at Object.test(junit/generator/javatests/com/google/j2cl/junit/integration/stacktrace/data/SimpleThrowingStacktraceTest-j2wasm_generated_suite.js.zip!/com/google/j2cl/junit/integration/stacktrace/data/SimpleThrowingStacktraceTest.js:37:59)
at javaemul.internal.Exceptions.createJsError(Exceptions.java:55)
at java.lang.RuntimeException.<synthetic: ctor_create>(RuntimeException.java:28)
at com.google.j2cl.junit.integration.stacktrace.data.SimpleThrowingStacktraceTest.method3(SimpleThrowingStacktraceTest.java:40)
at com.google.j2cl.junit.integration.stacktrace.data.SimpleThrowingStacktraceTest.method2(SimpleThrowingStacktraceTest.java:35)
at com.google.j2cl.junit.integration.stacktrace.data.SimpleThrowingStacktraceTest.method1(SimpleThrowingStacktraceTest.java:31)
at com.google.j2cl.junit.integration.stacktrace.data.SimpleThrowingStacktraceTest.test(SimpleThrowingStacktraceTest.java:27)
__OPTIONAL__ # Testing infra on J2CL
__OPTIONAL__ # Testing infra on J2CL
__OPTIONAL__ # Testing infra on J2CL
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
java.lang.RuntimeException: __the_message__!
And second line!
And second line!
at create(jre/java/super-wasm/exception_utils.js:26:13)
at m_createJsError__java_lang_Throwable__javaemul_internal_Exceptions_JsErrorWrapper@javaemul.internal.Exceptions(Exceptions.java:55)
at m_testInSimpleThrowingStacktraceTest__$export__void@javatests.com.google.j2cl.junit.integration.stacktrace.data.SimpleThrowingStacktraceTest_Adapter(RuntimeException.java:28)
at Object.test(junit/generator/javatests/com/google/j2cl/junit/integration/stacktrace/data/SimpleThrowingStacktraceTest-j2wasm_optimized_generated_suite.js.zip!/com/google/j2cl/junit/integration/stacktrace/data/SimpleThrowingStacktraceTest.js:37:59)
__OPTIONAL__ # Testing infra on J2CL
at javaemul.internal.Exceptions.createJsError(Exceptions.java:55)
at javatests.com.google.j2cl.junit.integration.stacktrace.data.SimpleThrowingStacktraceTest_Adapter.testInSimpleThrowingStacktraceTest__$export(RuntimeException.java:28)
__OPTIONAL__ # Testing infra on J2CL
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
*/
package com.google.j2cl.transpiler.backend.wasm;

import static com.google.common.base.Preconditions.checkState;
import static com.google.common.base.Predicates.not;
import static com.google.common.collect.ImmutableList.toImmutableList;
import static java.lang.String.format;
Expand Down Expand Up @@ -171,6 +172,7 @@ private void generateWasmModule(Library library) {
builder.newLine();
builder.append(")");
output.write("module.wat", builder.build());
output.write("namemap", emitNameMapping(library));
}

private void emitDataSegments(Library library) {
Expand Down Expand Up @@ -922,4 +924,25 @@ private void emitEndCodeComment(String commentId) {
private void generateJsImportsFile() {
JsImportsGenerator.generateOutputs(output, environment.getJsImports());
}

private String emitNameMapping(Library library) {
SourceBuilder builder = new SourceBuilder();
library.accept(
new AbstractVisitor() {
@Override
public void exitMethod(Method method) {
MethodDescriptor methodDescriptor = method.getDescriptor();
String methodImplementationName =
environment.getMethodImplementationName(methodDescriptor);
checkState(methodImplementationName.startsWith("$"));
builder.append(
String.format(
"%s:%s",
methodImplementationName.substring(1),
methodDescriptor.getQualifiedBinaryName()));
builder.newLine();
}
});
return builder.build();
}
}

0 comments on commit 05262fa

Please sign in to comment.