Skip to content

Commit fc51ff5

Browse files
committed
Wasm runtime: keep track of backtrace status
1 parent 9a22f7f commit fc51ff5

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

runtime/wasm/backtrace.wat

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@
1616
;; Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
1717

1818
(module
19+
(import "bindings" "backtrace_status"
20+
(func $backtrace_status (result (ref eq))))
21+
(import "bindings" "record_backtrace"
22+
(func $record_backtrace (param (ref eq))))
1923
(import "fail" "caml_invalid_argument"
2024
(func $caml_invalid_argument (param (ref eq))))
2125

@@ -28,7 +32,7 @@
2832

2933
(func (export "caml_backtrace_status")
3034
(param (ref eq)) (result (ref eq))
31-
(ref.i31 (i32.const 0)))
35+
(call $backtrace_status))
3236

3337
(func (export "caml_convert_raw_backtrace")
3438
(param (ref eq)) (result (ref eq))
@@ -62,6 +66,7 @@
6266
(param (ref eq)) (result (ref eq))
6367
(ref.i31 (i32.const 0)))
6468

65-
(func (export "caml_record_backtrace") (param (ref eq)) (result (ref eq))
69+
(func (export "caml_record_backtrace") (param $b (ref eq)) (result (ref eq))
70+
(call $record_backtrace (local.get $b))
6671
(ref.i31 (i32.const 0)))
6772
)

runtime/wasm/runtime.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,13 @@
148148
return globalThis.jsoo_env?.[n];
149149
}
150150

151+
let record_backtrace_flag = 0;
152+
153+
for (const l of getenv("OCAMLRUNPARAM")?.split(",") || []) {
154+
if (l === "b") record_backtrace_flag = 1;
155+
if (l.startsWith("b=")) record_backtrace_flag = +!!+l[i].slice(2);
156+
}
157+
151158
function alloc_stat(s, large) {
152159
var kind;
153160
if (s.isFile()) {
@@ -464,6 +471,8 @@
464471
argv: () => (isNode ? process.argv.slice(1) : ["a.out"]),
465472
on_windows: +on_windows,
466473
getenv,
474+
backtrace_status: () => record_backtrace_flag,
475+
record_backtrace: (b) => (record_backtrace_flag = b),
467476
system: (c) => {
468477
var res = require("node:child_process").spawnSync(c, {
469478
shell: true,

0 commit comments

Comments
 (0)