security: shrink native export surface

ober

fdf29f0f2fb5000e1f70367cb91622982caeb7f7

diff --git a/docs/ffi-audit.md b/docs/ffi-audit.md
index 2b37cbe..63404e9 100644
--- a/docs/ffi-audit.md
+++ b/docs/ffi-audit.md
@@ -39,12 +39,12 @@ Latest summary from `tools/ffi-audit-report.ss`:
   (native
     (rust-file-count 29)
     (c-file-count 5)
-    (no-mangle-exports 231)
+    (no-mangle-exports 196)
     (unsafe-sites 438)
     (unsafe-sites-with-nearby-safety-comment 5)
     (unsafe-sites-without-nearby-safety-comment 433)
     (unsafe-comment-review-sites 433)
-    (export-review-sites 231))
+    (export-review-sites 196))
   (vendor
     (jsqlite (path "vendor/jsqlite") (status accepted-risk-cve-gated)))
   (verdict needs-per-binding-review))
@@ -58,9 +58,10 @@ C/Rust files, Rust C ABI exports, pointer/width-sensitive bindings, blocking
 candidate calls, and unsafe Rust sites. `make native-export-review-check`
 keeps the actual C ABI export/caller map in
 `docs/reviews/2026-07-27-native-export-review.sexp` fresh; the current map has
-225 actual exported functions, 183 tracked Scheme references, and 42 exports
-with no tracked Scheme reference. The companion decision file marks 7 of those
-as retained standalone C/binary-tooling exports and 35 as removal candidates.
+190 actual exported functions, 183 tracked Scheme references, and 7 exports
+with no tracked Scheme reference. The companion decision file marks all 7 as
+retained standalone C/binary-tooling exports; the 35 prior removal candidates
+had their C ABI export markers removed.
 The full report appends a provisional
 `hazards` list and `verdict` to every Scheme and Rust site. Scheme verdicts
 separate blocking calls missing `__collect_safe`, pointer/GC/ownership or
@@ -82,7 +83,6 @@ Remaining work before closing K3-P1-01:
 - Add targeted scanner rules for null-return checks, integer width confusion,
   caller-supplied length trust, and bytevector pointer lifetime hazards.
 - Add `SAFETY:` invariant comments near Rust unsafe sites.
-- Remove or wrap the 35 native export-review removal candidates.
 - Keep `vendor/jsqlite` in the TCB until consumers move to the Rust sqlite
   path. The accepted-risk decision is now recorded in
   `docs/reviews/2026-07-27-vendor-jsqlite-tcb.md`, and `make audit` runs
diff --git a/docs/kimi3-security-recommmendations.md b/docs/kimi3-security-recommmendations.md
index f5206be..319356a 100644
--- a/docs/kimi3-security-recommmendations.md
+++ b/docs/kimi3-security-recommmendations.md
@@ -616,8 +616,10 @@ not started."
   `docs/reviews/2026-07-27-native-export-review.sexp` plus
   `docs/reviews/2026-07-27-native-export-decisions.sexp`, to keep the Rust C
   ABI export/caller map current and require a decision for each zero-caller
-  export. Remaining work: unsafe invariant comments and removing or wrapping
-  the 35 exports marked removal candidates.
+  export. The 35 exports previously marked removal candidates had their C ABI
+  export markers removed; the remaining zero-caller exports are the 7
+  standalone C/binary-tooling helpers explicitly retained in the decision
+  file. Remaining work: unsafe invariant comments.
 
 ### K3-P1-02 — TOCTOU-safe filesystem capability checks
 **Serves:** G2. **Effort:** 1 week.
diff --git a/docs/reviews/2026-07-27-native-export-decisions.sexp b/docs/reviews/2026-07-27-native-export-decisions.sexp
index 7869f83..dac75b9 100644
--- a/docs/reviews/2026-07-27-native-export-decisions.sexp
+++ b/docs/reviews/2026-07-27-native-export-decisions.sexp
@@ -9,39 +9,4 @@
     (export (symbol "embed_encrypt") (decision retain-standalone-c-abi) (reason "binary embedding and encrypted-boot support API, intentionally consumed outside Scheme source"))
     (export (symbol "embed_pbkdf2_sha256") (decision retain-standalone-c-abi) (reason "binary embedding and encrypted-boot support API, intentionally consumed outside Scheme source"))
     (export (symbol "embed_random_bytes") (decision retain-standalone-c-abi) (reason "binary embedding and encrypted-boot support API, intentionally consumed outside Scheme source"))
-    (export (symbol "embed_read_passphrase") (decision retain-standalone-c-abi) (reason "binary embedding and encrypted-boot support API, intentionally consumed outside Scheme source"))
-    (export (symbol "jerboa_aproc_close") (decision removal-candidate) (reason "no tracked Scheme caller; remove or add a wrapper before closing P1-01"))
-    (export (symbol "jerboa_aproc_dup") (decision removal-candidate) (reason "no tracked Scheme caller; remove or add a wrapper before closing P1-01"))
-    (export (symbol "jerboa_freebsd_is_traced") (decision removal-candidate) (reason "no tracked Scheme caller; keep only if FreeBSD hardening wrapper lands"))
-    (export (symbol "jerboa_freebsd_process_count") (decision removal-candidate) (reason "no tracked Scheme caller; keep only if FreeBSD hardening wrapper lands"))
-    (export (symbol "jerboa_hkdf_sha256") (decision removal-candidate) (reason "no tracked Scheme caller; keep only if X25519 key-agreement wrapper lands"))
-    (export (symbol "jerboa_kill_probe") (decision removal-candidate) (reason "no tracked Scheme caller; keep only if process-control wrapper lands"))
-    (export (symbol "jerboa_md5") (decision removal-candidate) (reason "legacy digest export with no tracked Scheme caller"))
-    (export (symbol "jerboa_mlockall") (decision removal-candidate) (reason "no tracked Scheme caller; keep only if process-control wrapper lands"))
-    (export (symbol "jerboa_prctl_set_name") (decision removal-candidate) (reason "no tracked Scheme caller; keep only if process-control wrapper lands"))
-    (export (symbol "jerboa_proc_self_exe") (decision removal-candidate) (reason "no tracked Scheme caller; keep only if process-control wrapper lands"))
-    (export (symbol "jerboa_regex_compile_ex") (decision removal-candidate) (reason "no tracked Scheme caller; verify extended regex API need before retaining"))
-    (export (symbol "jerboa_setproctitle") (decision removal-candidate) (reason "no tracked Scheme caller; keep only if FreeBSD process-title wrapper lands"))
-    (export (symbol "jerboa_sha256_ctx_final") (decision removal-candidate) (reason "streaming SHA-256 context API has no tracked Scheme caller"))
-    (export (symbol "jerboa_sha256_ctx_free") (decision removal-candidate) (reason "streaming SHA-256 context API has no tracked Scheme caller"))
-    (export (symbol "jerboa_sha256_ctx_new") (decision removal-candidate) (reason "streaming SHA-256 context API has no tracked Scheme caller"))
-    (export (symbol "jerboa_sha256_ctx_update") (decision removal-candidate) (reason "streaming SHA-256 context API has no tracked Scheme caller"))
-    (export (symbol "jerboa_sm_fuel_remaining") (decision removal-candidate) (reason "SpiderMonkey/WASM support export has no tracked Scheme caller"))
-    (export (symbol "jerboa_sm_memory_read") (decision removal-candidate) (reason "SpiderMonkey/WASM support export has no tracked Scheme caller"))
-    (export (symbol "jerboa_sm_memory_size") (decision removal-candidate) (reason "SpiderMonkey/WASM support export has no tracked Scheme caller"))
-    (export (symbol "jerboa_sm_memory_write") (decision removal-candidate) (reason "SpiderMonkey/WASM support export has no tracked Scheme caller"))
-    (export (symbol "jerboa_socks5_server_port") (decision removal-candidate) (reason "SOCKS5 proxy export has no tracked Scheme caller"))
-    (export (symbol "jerboa_socks5_server_start") (decision removal-candidate) (reason "SOCKS5 proxy export has no tracked Scheme caller"))
-    (export (symbol "jerboa_socks5_server_stats") (decision removal-candidate) (reason "SOCKS5 proxy export has no tracked Scheme caller"))
-    (export (symbol "jerboa_socks5_server_stop") (decision removal-candidate) (reason "SOCKS5 proxy export has no tracked Scheme caller"))
-    (export (symbol "jerboa_tls_connect_mtls_mem") (decision removal-candidate) (reason "mTLS memory-buffer variant has no tracked Scheme caller"))
-    (export (symbol "jerboa_tls_connect_mtls_pem_ca") (decision removal-candidate) (reason "mTLS PEM-CA variant has no tracked Scheme caller"))
-    (export (symbol "jerboa_tls_server_new_mtls_pem") (decision removal-candidate) (reason "TLS server mTLS constructor has no tracked Scheme caller"))
-    (export (symbol "jerboa_tls_server_new_pem") (decision removal-candidate) (reason "TLS server PEM constructor has no tracked Scheme caller"))
-    (export (symbol "jerboa_wasm_allow_cdb_dir") (decision removal-candidate) (reason "WASM host permission export has no tracked Scheme caller"))
-    (export (symbol "jerboa_wasm_set_socket") (decision removal-candidate) (reason "WASM socket injection export has no tracked Scheme caller"))
-    (export (symbol "jerboa_x25519_diffie_hellman") (decision removal-candidate) (reason "X25519 export has no tracked Scheme caller"))
-    (export (symbol "jerboa_x25519_generate_keypair") (decision removal-candidate) (reason "X25519 export has no tracked Scheme caller"))
-    (export (symbol "jerboa_x25519_public_from_private") (decision removal-candidate) (reason "X25519 export has no tracked Scheme caller"))
-    (export (symbol "jerboa_x509_generate_self_signed_mem") (decision removal-candidate) (reason "memory-buffer X.509 variant has no tracked Scheme caller"))
-    (export (symbol "jerboa_x509_generate_signed_by_ca_mem") (decision removal-candidate) (reason "memory-buffer X.509 CA-signing variant has no tracked Scheme caller"))))
+    (export (symbol "embed_read_passphrase") (decision retain-standalone-c-abi) (reason "binary embedding and encrypted-boot support API, intentionally consumed outside Scheme source"))))
diff --git a/docs/reviews/2026-07-27-native-export-review.md b/docs/reviews/2026-07-27-native-export-review.md
index 0106e29..f4e5b53 100644
--- a/docs/reviews/2026-07-27-native-export-review.md
+++ b/docs/reviews/2026-07-27-native-export-review.md
@@ -11,11 +11,15 @@ fails review instead of becoming stale prose.
 
 Current summary:
 
-- Actual Rust C ABI exports: 225
+- Actual Rust C ABI exports: 190
 - Exports referenced by tracked Scheme source: 183
-- Exports with no tracked Scheme reference: 42
+- Exports with no tracked Scheme reference: 7
 - Zero-caller exports explicitly retained for standalone C/binary tooling: 7
-- Zero-caller exports marked as removal candidates: 35
+- Zero-caller exports marked as removal candidates: 0
+
+This pass removed the C ABI export marker from the 35 prior removal
+candidates. They remain ordinary Rust functions where still useful internally,
+but no longer enlarge the native symbol surface.
 
 The broader FFI audit still reports raw `no_mangle` marker sites separately;
 this review counts only actual exported Rust functions.
diff --git a/docs/reviews/2026-07-27-native-export-review.sexp b/docs/reviews/2026-07-27-native-export-review.sexp
index cebb8e0..bad6245 100644
--- a/docs/reviews/2026-07-27-native-export-review.sexp
+++ b/docs/reviews/2026-07-27-native-export-review.sexp
@@ -2,7 +2,7 @@
   (schema "jerboa.native-export-review/1")
   (generated-by "support/check-native-export-review.sh")
   (policy scheme-callers-or-documented)
-  (summary (exports 225) (scheme-referenced 183) (no-scheme-reference 42))
+  (summary (exports 190) (scheme-referenced 183) (no-scheme-reference 7))
   (exports
     (export (symbol "ed25519_derive_pubkey_standalone") (file "jerboa-native-rs/src/ed25519.rs") (line 44) (scheme-callers 0 (none)))
     (export (symbol "ed25519_sign_standalone") (file "jerboa-native-rs/src/ed25519.rs") (line 9) (scheme-callers 0 (none)))
@@ -11,25 +11,23 @@
     (export (symbol "embed_pbkdf2_sha256") (file "jerboa-native-rs/src/embed_crypto.rs") (line 19) (scheme-callers 0 (none)))
     (export (symbol "embed_random_bytes") (file "jerboa-native-rs/src/embed_crypto.rs") (line 157) (scheme-callers 0 (none)))
     (export (symbol "embed_read_passphrase") (file "jerboa-native-rs/src/embed_crypto.rs") (line 180) (scheme-callers 0 (none)))
-    (export (symbol "jerboa_aead_open") (file "jerboa-native-rs/src/crypto.rs") (line 388) (scheme-callers 1 (caller (file "lib/std/crypto/native-rust.ss") (line 161))))
-    (export (symbol "jerboa_aead_seal") (file "jerboa-native-rs/src/crypto.rs") (line 318) (scheme-callers 1 (caller (file "lib/std/crypto/native-rust.ss") (line 140))))
+    (export (symbol "jerboa_aead_open") (file "jerboa-native-rs/src/crypto.rs") (line 383) (scheme-callers 1 (caller (file "lib/std/crypto/native-rust.ss") (line 161))))
+    (export (symbol "jerboa_aead_seal") (file "jerboa-native-rs/src/crypto.rs") (line 313) (scheme-callers 1 (caller (file "lib/std/crypto/native-rust.ss") (line 140))))
     (export (symbol "jerboa_antidebug_check_all") (file "jerboa-native-rs/src/antidebug.rs") (line 147) (scheme-callers 1 (caller (file "lib/std/os/antidebug.ss") (line 46))))
     (export (symbol "jerboa_antidebug_check_breakpoint") (file "jerboa-native-rs/src/antidebug.rs") (line 98) (scheme-callers 1 (caller (file "lib/std/os/antidebug.ss") (line 42))))
     (export (symbol "jerboa_antidebug_check_ld_preload") (file "jerboa-native-rs/src/antidebug.rs") (line 60) (scheme-callers 1 (caller (file "lib/std/os/antidebug.ss") (line 40))))
     (export (symbol "jerboa_antidebug_check_tracer") (file "jerboa-native-rs/src/antidebug.rs") (line 30) (scheme-callers 1 (caller (file "lib/std/os/antidebug.ss") (line 38))))
     (export (symbol "jerboa_antidebug_ptrace") (file "jerboa-native-rs/src/antidebug.rs") (line 8) (scheme-callers 1 (caller (file "lib/std/os/antidebug.ss") (line 36))))
     (export (symbol "jerboa_antidebug_timing_check") (file "jerboa-native-rs/src/antidebug.rs") (line 119) (scheme-callers 1 (caller (file "lib/std/os/antidebug.ss") (line 44))))
-    (export (symbol "jerboa_aproc_close") (file "jerboa-native-rs/src/aproc.rs") (line 581) (scheme-callers 0 (none)))
-    (export (symbol "jerboa_aproc_dup") (file "jerboa-native-rs/src/aproc.rs") (line 565) (scheme-callers 0 (none)))
-    (export (symbol "jerboa_aproc_killpg") (file "jerboa-native-rs/src/aproc.rs") (line 616) (scheme-callers 1 (caller (file "lib/std/os/aproc.ss") (line 154))))
-    (export (symbol "jerboa_aproc_set_nonblock") (file "jerboa-native-rs/src/aproc.rs") (line 588) (scheme-callers 1 (caller (file "lib/std/os/aproc.ss") (line 150))))
+    (export (symbol "jerboa_aproc_killpg") (file "jerboa-native-rs/src/aproc.rs") (line 614) (scheme-callers 1 (caller (file "lib/std/os/aproc.ss") (line 154))))
+    (export (symbol "jerboa_aproc_set_nonblock") (file "jerboa-native-rs/src/aproc.rs") (line 586) (scheme-callers 1 (caller (file "lib/std/os/aproc.ss") (line 150))))
     (export (symbol "jerboa_aproc_spawn") (file "jerboa-native-rs/src/aproc.rs") (line 132) (scheme-callers 2 (caller (file "lib/std/os/aproc.ss") (line 126)) (caller (file "lib/std/os/aproc.ss") (line 141))))
     (export (symbol "jerboa_aproc_spawn_pty") (file "jerboa-native-rs/src/aproc.rs") (line 340) (scheme-callers 1 (caller (file "lib/std/os/aproc.ss") (line 141))))
-    (export (symbol "jerboa_aproc_wait4") (file "jerboa-native-rs/src/aproc.rs") (line 630) (scheme-callers 1 (caller (file "lib/std/os/aproc.ss") (line 158))))
-    (export (symbol "jerboa_argon2id_hash") (file "jerboa-native-rs/src/crypto.rs") (line 714) (scheme-callers 2 (caller (file "lib/std/crypto/native-rust.ss") (line 276)) (caller (file "lib/std/crypto/password.ss") (line 35))))
-    (export (symbol "jerboa_argon2id_verify") (file "jerboa-native-rs/src/crypto.rs") (line 763) (scheme-callers 2 (caller (file "lib/std/crypto/native-rust.ss") (line 296)) (caller (file "lib/std/crypto/password.ss") (line 42))))
-    (export (symbol "jerboa_chacha20_open") (file "jerboa-native-rs/src/crypto.rs") (line 531) (scheme-callers 1 (caller (file "lib/std/crypto/native-rust.ss") (line 204))))
-    (export (symbol "jerboa_chacha20_seal") (file "jerboa-native-rs/src/crypto.rs") (line 462) (scheme-callers 1 (caller (file "lib/std/crypto/native-rust.ss") (line 182))))
+    (export (symbol "jerboa_aproc_wait4") (file "jerboa-native-rs/src/aproc.rs") (line 628) (scheme-callers 1 (caller (file "lib/std/os/aproc.ss") (line 158))))
+    (export (symbol "jerboa_argon2id_hash") (file "jerboa-native-rs/src/crypto.rs") (line 709) (scheme-callers 2 (caller (file "lib/std/crypto/native-rust.ss") (line 276)) (caller (file "lib/std/crypto/password.ss") (line 35))))
+    (export (symbol "jerboa_argon2id_verify") (file "jerboa-native-rs/src/crypto.rs") (line 758) (scheme-callers 2 (caller (file "lib/std/crypto/native-rust.ss") (line 296)) (caller (file "lib/std/crypto/password.ss") (line 42))))
+    (export (symbol "jerboa_chacha20_open") (file "jerboa-native-rs/src/crypto.rs") (line 526) (scheme-callers 1 (caller (file "lib/std/crypto/native-rust.ss") (line 204))))
+    (export (symbol "jerboa_chacha20_seal") (file "jerboa-native-rs/src/crypto.rs") (line 457) (scheme-callers 1 (caller (file "lib/std/crypto/native-rust.ss") (line 182))))
     (export (symbol "jerboa_deflate") (file "jerboa-native-rs/src/compress.rs") (line 9) (scheme-callers 1 (caller (file "lib/std/compress/native-rust.ss") (line 30))))
     (export (symbol "jerboa_duckdb_bind_blob") (file "jerboa-native-rs/src/duckdb_native.rs") (line 334) (scheme-callers 1 (caller (file "lib/std/db/duckdb-native.ss") (line 62))))
     (export (symbol "jerboa_duckdb_bind_bool") (file "jerboa-native-rs/src/duckdb_native.rs") (line 386) (scheme-callers 1 (caller (file "lib/std/db/duckdb-native.ss") (line 66))))
@@ -63,13 +61,10 @@
     (export (symbol "jerboa_eventfd_create") (file "jerboa-native-rs/src/epoll.rs") (line 94) (scheme-callers 1 (caller (file "lib/std/os/epoll-native.ss") (line 293))))
     (export (symbol "jerboa_eventfd_drain") (file "jerboa-native-rs/src/epoll.rs") (line 120) (scheme-callers 1 (caller (file "lib/std/os/epoll-native.ss") (line 299))))
     (export (symbol "jerboa_eventfd_signal") (file "jerboa-native-rs/src/epoll.rs") (line 106) (scheme-callers 1 (caller (file "lib/std/os/epoll-native.ss") (line 296))))
-    (export (symbol "jerboa_freebsd_is_traced") (file "jerboa-native-rs/src/process_ctl.rs") (line 98) (scheme-callers 0 (none)))
-    (export (symbol "jerboa_freebsd_process_count") (file "jerboa-native-rs/src/process_ctl.rs") (line 139) (scheme-callers 0 (none)))
     (export (symbol "jerboa_gunzip") (file "jerboa-native-rs/src/compress.rs") (line 137) (scheme-callers 1 (caller (file "lib/std/compress/native-rust.ss") (line 39))))
     (export (symbol "jerboa_gzip") (file "jerboa-native-rs/src/compress.rs") (line 97) (scheme-callers 1 (caller (file "lib/std/compress/native-rust.ss") (line 36))))
-    (export (symbol "jerboa_hkdf_sha256") (file "jerboa-native-rs/src/x25519.rs") (line 101) (scheme-callers 0 (none)))
-    (export (symbol "jerboa_hmac_sha256") (file "jerboa-native-rs/src/crypto.rs") (line 201) (scheme-callers 2 (caller (file "lib/std/crypto/native-rust.ss") (line 109)) (caller (file "lib/std/crypto/native-rust.ss") (line 120))))
-    (export (symbol "jerboa_hmac_sha256_verify") (file "jerboa-native-rs/src/crypto.rs") (line 232) (scheme-callers 1 (caller (file "lib/std/crypto/native-rust.ss") (line 120))))
+    (export (symbol "jerboa_hmac_sha256") (file "jerboa-native-rs/src/crypto.rs") (line 196) (scheme-callers 2 (caller (file "lib/std/crypto/native-rust.ss") (line 109)) (caller (file "lib/std/crypto/native-rust.ss") (line 120))))
+    (export (symbol "jerboa_hmac_sha256_verify") (file "jerboa-native-rs/src/crypto.rs") (line 227) (scheme-callers 1 (caller (file "lib/std/crypto/native-rust.ss") (line 120))))
     (export (symbol "jerboa_http_parse") (file "jerboa-native-rs/src/http_parse.rs") (line 25) (scheme-callers 4 (caller (file "lib/std/net/fiber-httpd.ss") (line 78)) (caller (file "lib/std/net/fiber-httpd.ss") (line 81)) (caller (file "lib/std/net/httpsd.ss") (line 28)) (caller (file "lib/std/net/httpsd.ss") (line 71))))
     (export (symbol "jerboa_inflate") (file "jerboa-native-rs/src/compress.rs") (line 49) (scheme-callers 1 (caller (file "lib/std/compress/native-rust.ss") (line 33))))
     (export (symbol "jerboa_inotify_add_watch") (file "jerboa-native-rs/src/inotify_native.rs") (line 22) (scheme-callers 1 (caller (file "lib/std/os/inotify-native.ss") (line 65))))
@@ -82,17 +77,14 @@
     (export (symbol "jerboa_integrity_hash_self") (file "jerboa-native-rs/src/integrity.rs") (line 65) (scheme-callers 1 (caller (file "lib/std/os/integrity.ss") (line 53))))
     (export (symbol "jerboa_integrity_sign_verify") (file "jerboa-native-rs/src/integrity.rs") (line 134) (scheme-callers 1 (caller (file "lib/std/os/integrity.ss") (line 57))))
     (export (symbol "jerboa_integrity_verify_hash") (file "jerboa-native-rs/src/integrity.rs") (line 96) (scheme-callers 1 (caller (file "lib/std/os/integrity.ss") (line 55))))
-    (export (symbol "jerboa_kill_probe") (file "jerboa-native-rs/src/process_ctl.rs") (line 59) (scheme-callers 0 (none)))
     (export (symbol "jerboa_landlock_abi_version") (file "jerboa-native-rs/src/landlock.rs") (line 65) (scheme-callers 6 (caller (file "lib/std/os/landlock-native.ss") (line 78)) (caller (file "lib/std/os/landlock.ss") (line 12)) (caller (file "lib/std/os/landlock.ss") (line 56)) (caller (file "lib/std/os/landlock.ss") (line 57)) (caller (file "lib/std/os/limits/sandbox.ss") (line 455)) (caller (file "lib/std/os/sandbox.ss") (line 75))))
     (export (symbol "jerboa_landlock_add_net_rule") (file "jerboa-native-rs/src/landlock.rs") (line 201) (scheme-callers 1 (caller (file "lib/std/os/landlock-native.ss") (line 86))))
     (export (symbol "jerboa_landlock_add_path_rule") (file "jerboa-native-rs/src/landlock.rs") (line 120) (scheme-callers 1 (caller (file "lib/std/os/landlock-native.ss") (line 83))))
     (export (symbol "jerboa_landlock_create_ruleset") (file "jerboa-native-rs/src/landlock.rs") (line 91) (scheme-callers 1 (caller (file "lib/std/os/landlock-native.ss") (line 80))))
     (export (symbol "jerboa_landlock_enforce") (file "jerboa-native-rs/src/landlock.rs") (line 234) (scheme-callers 1 (caller (file "lib/std/os/landlock-native.ss") (line 89))))
     (export (symbol "jerboa_last_error") (file "jerboa-native-rs/src/panic.rs") (line 9) (scheme-callers 11 (caller (file "lib/std/compress/native-rust.ss") (line 42)) (caller (file "lib/std/crypto/native-rust.ss") (line 48)) (caller (file "lib/std/crypto/x509.ss") (line 24)) (caller (file "lib/std/native.ss") (line 56)) (caller (file "lib/std/net/tls-rustls.ss") (line 167)) (caller (file "lib/std/os/aproc.ss") (line 163)) (caller (file "lib/std/os/integrity.ss") (line 42)) (caller (file "lib/std/os/secure-output.ss") (line 47)) (caller (file "lib/std/pcap.ss") (line 66)) (caller (file "lib/std/regex-native.ss") (line 51)) (caller (file "lib/std/wasm/sandbox.ss") (line 196))))
-    (export (symbol "jerboa_md5") (file "jerboa-native-rs/src/crypto.rs") (line 53) (scheme-callers 0 (none)))
-    (export (symbol "jerboa_mlockall") (file "jerboa-native-rs/src/process_ctl.rs") (line 37) (scheme-callers 0 (none)))
-    (export (symbol "jerboa_pbkdf2_derive") (file "jerboa-native-rs/src/crypto.rs") (line 647) (scheme-callers 1 (caller (file "lib/std/crypto/native-rust.ss") (line 246))))
-    (export (symbol "jerboa_pbkdf2_verify") (file "jerboa-native-rs/src/crypto.rs") (line 676) (scheme-callers 1 (caller (file "lib/std/crypto/native-rust.ss") (line 261))))
+    (export (symbol "jerboa_pbkdf2_derive") (file "jerboa-native-rs/src/crypto.rs") (line 642) (scheme-callers 1 (caller (file "lib/std/crypto/native-rust.ss") (line 246))))
+    (export (symbol "jerboa_pbkdf2_verify") (file "jerboa-native-rs/src/crypto.rs") (line 671) (scheme-callers 1 (caller (file "lib/std/crypto/native-rust.ss") (line 261))))
     (export (symbol "jerboa_pcap_close") (file "jerboa-native-rs/src/pcap_capture.rs") (line 324) (scheme-callers 1 (caller (file "lib/std/pcap.ss") (line 58))))
     (export (symbol "jerboa_pcap_list_interfaces") (file "jerboa-native-rs/src/pcap_capture.rs") (line 350) (scheme-callers 1 (caller (file "lib/std/pcap.ss") (line 62))))
     (export (symbol "jerboa_pcap_next") (file "jerboa-native-rs/src/pcap_capture.rs") (line 260) (scheme-callers 1 (caller (file "lib/std/pcap.ss") (line 53))))
@@ -107,19 +99,16 @@
     (export (symbol "jerboa_pg_ncols") (file "jerboa-native-rs/src/postgres_native.rs") (line 223) (scheme-callers 1 (caller (file "lib/std/db/postgresql-native.ss") (line 34))))
     (export (symbol "jerboa_pg_nrows") (file "jerboa-native-rs/src/postgres_native.rs") (line 215) (scheme-callers 1 (caller (file "lib/std/db/postgresql-native.ss") (line 32))))
     (export (symbol "jerboa_pg_query") (file "jerboa-native-rs/src/postgres_native.rs") (line 172) (scheme-callers 1 (caller (file "lib/std/db/postgresql-native.ss") (line 30))))
-    (export (symbol "jerboa_prctl_set_name") (file "jerboa-native-rs/src/process_ctl.rs") (line 6) (scheme-callers 0 (none)))
-    (export (symbol "jerboa_proc_self_exe") (file "jerboa-native-rs/src/process_ctl.rs") (line 218) (scheme-callers 0 (none)))
-    (export (symbol "jerboa_random_bytes") (file "jerboa-native-rs/src/crypto.rs") (line 265) (scheme-callers 1 (caller (file "lib/std/crypto/native-rust.ss") (line 98))))
-    (export (symbol "jerboa_regex_captures") (file "jerboa-native-rs/src/regex_native.rs") (line 275) (scheme-callers 2 (caller (file "lib/std/regex-native.ss") (line 40)) (caller (file "lib/std/regex.ss") (line 106))))
+    (export (symbol "jerboa_random_bytes") (file "jerboa-native-rs/src/crypto.rs") (line 260) (scheme-callers 1 (caller (file "lib/std/crypto/native-rust.ss") (line 98))))
+    (export (symbol "jerboa_regex_captures") (file "jerboa-native-rs/src/regex_native.rs") (line 274) (scheme-callers 2 (caller (file "lib/std/regex-native.ss") (line 40)) (caller (file "lib/std/regex.ss") (line 106))))
     (export (symbol "jerboa_regex_compile") (file "jerboa-native-rs/src/regex_native.rs") (line 14) (scheme-callers 3 (caller (file "lib/std/regex-native.ss") (line 27)) (caller (file "lib/std/regex.ss") (line 81)) (caller (file "lib/std/regex.ss") (line 85))))
-    (export (symbol "jerboa_regex_compile_ex") (file "jerboa-native-rs/src/regex_native.rs") (line 170) (scheme-callers 0 (none)))
     (export (symbol "jerboa_regex_find") (file "jerboa-native-rs/src/regex_native.rs") (line 75) (scheme-callers 4 (caller (file "lib/std/regex-native.ss") (line 33)) (caller (file "lib/std/regex.ss") (line 89)) (caller (file "lib/std/regex.ss") (line 97)) (caller (file "lib/std/regex.ss") (line 657))))
-    (export (symbol "jerboa_regex_find_at") (file "jerboa-native-rs/src/regex_native.rs") (line 229) (scheme-callers 3 (caller (file "lib/std/regex-native.ss") (line 33)) (caller (file "lib/std/regex.ss") (line 97)) (caller (file "lib/std/regex.ss") (line 657))))
+    (export (symbol "jerboa_regex_find_at") (file "jerboa-native-rs/src/regex_native.rs") (line 228) (scheme-callers 3 (caller (file "lib/std/regex-native.ss") (line 33)) (caller (file "lib/std/regex.ss") (line 97)) (caller (file "lib/std/regex.ss") (line 657))))
     (export (symbol "jerboa_regex_free") (file "jerboa-native-rs/src/regex_native.rs") (line 157) (scheme-callers 2 (caller (file "lib/std/regex-native.ss") (line 48)) (caller (file "lib/std/regex.ss") (line 93))))
-    (export (symbol "jerboa_regex_group_count") (file "jerboa-native-rs/src/regex_native.rs") (line 328) (scheme-callers 2 (caller (file "lib/std/regex-native.ss") (line 37)) (caller (file "lib/std/regex.ss") (line 102))))
+    (export (symbol "jerboa_regex_group_count") (file "jerboa-native-rs/src/regex_native.rs") (line 327) (scheme-callers 2 (caller (file "lib/std/regex-native.ss") (line 37)) (caller (file "lib/std/regex.ss") (line 102))))
     (export (symbol "jerboa_regex_is_match") (file "jerboa-native-rs/src/regex_native.rs") (line 49) (scheme-callers 1 (caller (file "lib/std/regex-native.ss") (line 30))))
     (export (symbol "jerboa_regex_replace_all") (file "jerboa-native-rs/src/regex_native.rs") (line 112) (scheme-callers 1 (caller (file "lib/std/regex-native.ss") (line 44))))
-    (export (symbol "jerboa_scrypt") (file "jerboa-native-rs/src/crypto.rs") (line 605) (scheme-callers 1 (caller (file "lib/std/crypto/native-rust.ss") (line 226))))
+    (export (symbol "jerboa_scrypt") (file "jerboa-native-rs/src/crypto.rs") (line 600) (scheme-callers 1 (caller (file "lib/std/crypto/native-rust.ss") (line 226))))
     (export (symbol "jerboa_seccomp_available") (file "jerboa-native-rs/src/seccomp.rs") (line 283) (scheme-callers 1 (caller (file "lib/std/os/seccomp.ss") (line 32))))
     (export (symbol "jerboa_seccomp_lock") (file "jerboa-native-rs/src/seccomp.rs") (line 125) (scheme-callers 2 (caller (file "lib/std/os/seccomp.ss") (line 34)) (caller (file "lib/std/os/seccomp.ss") (line 36))))
     (export (symbol "jerboa_seccomp_lock_strict") (file "jerboa-native-rs/src/seccomp.rs") (line 197) (scheme-callers 1 (caller (file "lib/std/os/seccomp.ss") (line 36))))
@@ -139,31 +128,18 @@
     (export (symbol "jerboa_secure_random_fill") (file "jerboa-native-rs/src/secure_mem.rs") (line 169) (scheme-callers 1 (caller (file "lib/std/crypto/secure-mem.ss") (line 44))))
     (export (symbol "jerboa_secure_read_file") (file "jerboa-native-rs/src/secure_fs.rs") (line 673) (scheme-callers 1 (caller (file "lib/std/os/secure-output.ss") (line 65))))
     (export (symbol "jerboa_secure_wipe") (file "jerboa-native-rs/src/secure_mem.rs") (line 156) (scheme-callers 1 (caller (file "lib/std/crypto/secure-mem.ss") (line 41))))
-    (export (symbol "jerboa_setproctitle") (file "jerboa-native-rs/src/process_ctl.rs") (line 179) (scheme-callers 0 (none)))
-    (export (symbol "jerboa_sha1") (file "jerboa-native-rs/src/crypto.rs") (line 66) (scheme-callers 1 (caller (file "lib/std/crypto/native-rust.ss") (line 60))))
-    (export (symbol "jerboa_sha256") (file "jerboa-native-rs/src/crypto.rs") (line 82) (scheme-callers 1 (caller (file "lib/std/crypto/native-rust.ss") (line 69))))
-    (export (symbol "jerboa_sha256_ctx_final") (file "jerboa-native-rs/src/crypto.rs") (line 151) (scheme-callers 0 (none)))
-    (export (symbol "jerboa_sha256_ctx_free") (file "jerboa-native-rs/src/crypto.rs") (line 174) (scheme-callers 0 (none)))
-    (export (symbol "jerboa_sha256_ctx_new") (file "jerboa-native-rs/src/crypto.rs") (line 112) (scheme-callers 0 (none)))
-    (export (symbol "jerboa_sha256_ctx_update") (file "jerboa-native-rs/src/crypto.rs") (line 128) (scheme-callers 0 (none)))
-    (export (symbol "jerboa_sha384") (file "jerboa-native-rs/src/crypto.rs") (line 179) (scheme-callers 1 (caller (file "lib/std/crypto/native-rust.ss") (line 78))))
-    (export (symbol "jerboa_sha512") (file "jerboa-native-rs/src/crypto.rs") (line 189) (scheme-callers 1 (caller (file "lib/std/crypto/native-rust.ss") (line 87))))
-    (export (symbol "jerboa_sm_add_fuel") (file "jerboa-native-rs/src/wasm_sm.rs") (line 967) (scheme-callers 1 (caller (file "lib/std/wasm/sandbox.ss") (line 186))))
+    (export (symbol "jerboa_sha1") (file "jerboa-native-rs/src/crypto.rs") (line 65) (scheme-callers 1 (caller (file "lib/std/crypto/native-rust.ss") (line 60))))
+    (export (symbol "jerboa_sha256") (file "jerboa-native-rs/src/crypto.rs") (line 81) (scheme-callers 1 (caller (file "lib/std/crypto/native-rust.ss") (line 69))))
+    (export (symbol "jerboa_sha384") (file "jerboa-native-rs/src/crypto.rs") (line 174) (scheme-callers 1 (caller (file "lib/std/crypto/native-rust.ss") (line 78))))
+    (export (symbol "jerboa_sha512") (file "jerboa-native-rs/src/crypto.rs") (line 184) (scheme-callers 1 (caller (file "lib/std/crypto/native-rust.ss") (line 87))))
+    (export (symbol "jerboa_sm_add_fuel") (file "jerboa-native-rs/src/wasm_sm.rs") (line 964) (scheme-callers 1 (caller (file "lib/std/wasm/sandbox.ss") (line 186))))
     (export (symbol "jerboa_sm_call") (file "jerboa-native-rs/src/wasm_sm.rs") (line 837) (scheme-callers 1 (caller (file "lib/std/wasm/sandbox.ss") (line 168))))
-    (export (symbol "jerboa_sm_fuel_remaining") (file "jerboa-native-rs/src/wasm_sm.rs") (line 972) (scheme-callers 0 (none)))
-    (export (symbol "jerboa_sm_get_log") (file "jerboa-native-rs/src/wasm_sm.rs") (line 981) (scheme-callers 1 (caller (file "lib/std/wasm/sandbox.ss") (line 180))))
+    (export (symbol "jerboa_sm_get_log") (file "jerboa-native-rs/src/wasm_sm.rs") (line 977) (scheme-callers 1 (caller (file "lib/std/wasm/sandbox.ss") (line 180))))
     (export (symbol "jerboa_sm_instance_free") (file "jerboa-native-rs/src/wasm_sm.rs") (line 828) (scheme-callers 1 (caller (file "lib/std/wasm/sandbox.ss") (line 162))))
     (export (symbol "jerboa_sm_instance_new") (file "jerboa-native-rs/src/wasm_sm.rs") (line 818) (scheme-callers 2 (caller (file "lib/std/wasm/sandbox.ss") (line 156)) (caller (file "lib/std/wasm/sandbox.ss") (line 174))))
     (export (symbol "jerboa_sm_instance_new_hosted") (file "jerboa-native-rs/src/wasm_sm.rs") (line 823) (scheme-callers 1 (caller (file "lib/std/wasm/sandbox.ss") (line 174))))
-    (export (symbol "jerboa_sm_memory_read") (file "jerboa-native-rs/src/wasm_sm.rs") (line 938) (scheme-callers 0 (none)))
-    (export (symbol "jerboa_sm_memory_size") (file "jerboa-native-rs/src/wasm_sm.rs") (line 958) (scheme-callers 0 (none)))
-    (export (symbol "jerboa_sm_memory_write") (file "jerboa-native-rs/src/wasm_sm.rs") (line 948) (scheme-callers 0 (none)))
     (export (symbol "jerboa_sm_module_free") (file "jerboa-native-rs/src/wasm_sm.rs") (line 777) (scheme-callers 1 (caller (file "lib/std/wasm/sandbox.ss") (line 150))))
     (export (symbol "jerboa_sm_module_new") (file "jerboa-native-rs/src/wasm_sm.rs") (line 697) (scheme-callers 1 (caller (file "lib/std/wasm/sandbox.ss") (line 144))))
-    (export (symbol "jerboa_socks5_server_port") (file "jerboa-native-rs/src/socks5_server.rs") (line 250) (scheme-callers 0 (none)))
-    (export (symbol "jerboa_socks5_server_start") (file "jerboa-native-rs/src/socks5_server.rs") (line 111) (scheme-callers 0 (none)))
-    (export (symbol "jerboa_socks5_server_stats") (file "jerboa-native-rs/src/socks5_server.rs") (line 270) (scheme-callers 0 (none)))
-    (export (symbol "jerboa_socks5_server_stop") (file "jerboa-native-rs/src/socks5_server.rs") (line 223) (scheme-callers 0 (none)))
     (export (symbol "jerboa_sqlite_bind_blob") (file "jerboa-native-rs/src/sqlite.rs") (line 318) (scheme-callers 1 (caller (file "lib/std/db/sqlite-native.ss") (line 63))))
     (export (symbol "jerboa_sqlite_bind_double") (file "jerboa-native-rs/src/sqlite.rs") (line 247) (scheme-callers 1 (caller (file "lib/std/db/sqlite-native.ss") (line 59))))
     (export (symbol "jerboa_sqlite_bind_int") (file "jerboa-native-rs/src/sqlite.rs") (line 227) (scheme-callers 1 (caller (file "lib/std/db/sqlite-native.ss") (line 57))))
@@ -186,48 +162,37 @@
     (export (symbol "jerboa_sqlite_prepare") (file "jerboa-native-rs/src/sqlite.rs") (line 152) (scheme-callers 1 (caller (file "lib/std/db/sqlite-native.ss") (line 50))))
     (export (symbol "jerboa_sqlite_reset") (file "jerboa-native-rs/src/sqlite.rs") (line 564) (scheme-callers 1 (caller (file "lib/std/db/sqlite-native.ss") (line 54))))
     (export (symbol "jerboa_sqlite_step") (file "jerboa-native-rs/src/sqlite.rs") (line 385) (scheme-callers 1 (caller (file "lib/std/db/sqlite-native.ss") (line 68))))
-    (export (symbol "jerboa_timing_safe_equal") (file "jerboa-native-rs/src/crypto.rs") (line 288) (scheme-callers 1 (caller (file "lib/std/crypto/native-rust.ss") (line 131))))
-    (export (symbol "jerboa_tls_accept") (file "jerboa-native-rs/src/tls.rs") (line 808) (scheme-callers 1 (caller (file "lib/std/net/tls-rustls.ss") (line 86))))
-    (export (symbol "jerboa_tls_close") (file "jerboa-native-rs/src/tls.rs") (line 1679) (scheme-callers 1 (caller (file "lib/std/net/tls-rustls.ss") (line 144))))
+    (export (symbol "jerboa_timing_safe_equal") (file "jerboa-native-rs/src/crypto.rs") (line 283) (scheme-callers 1 (caller (file "lib/std/crypto/native-rust.ss") (line 131))))
+    (export (symbol "jerboa_tls_accept") (file "jerboa-native-rs/src/tls.rs") (line 807) (scheme-callers 1 (caller (file "lib/std/net/tls-rustls.ss") (line 86))))
+    (export (symbol "jerboa_tls_close") (file "jerboa-native-rs/src/tls.rs") (line 1675) (scheme-callers 1 (caller (file "lib/std/net/tls-rustls.ss") (line 144))))
     (export (symbol "jerboa_tls_connect") (file "jerboa-native-rs/src/tls.rs") (line 154) (scheme-callers 5 (caller (file "lib/std/net/tls-rustls.ss") (line 92)) (caller (file "lib/std/net/tls-rustls.ss") (line 98)) (caller (file "lib/std/net/tls-rustls.ss") (line 107)) (caller (file "lib/std/net/tls-rustls.ss") (line 114)) (caller (file "lib/std/net/tls-rustls.ss") (line 121))))
     (export (symbol "jerboa_tls_connect_addr_timeout") (file "jerboa-native-rs/src/tls.rs") (line 293) (scheme-callers 1 (caller (file "lib/std/net/tls-rustls.ss") (line 107))))
-    (export (symbol "jerboa_tls_connect_mtls") (file "jerboa-native-rs/src/tls.rs") (line 1137) (scheme-callers 1 (caller (file "lib/std/net/tls-rustls.ss") (line 121))))
-    (export (symbol "jerboa_tls_connect_mtls_mem") (file "jerboa-native-rs/src/tls.rs") (line 1452) (scheme-callers 0 (none)))
-    (export (symbol "jerboa_tls_connect_mtls_pem_ca") (file "jerboa-native-rs/src/tls.rs") (line 1319) (scheme-callers 0 (none)))
+    (export (symbol "jerboa_tls_connect_mtls") (file "jerboa-native-rs/src/tls.rs") (line 1135) (scheme-callers 1 (caller (file "lib/std/net/tls-rustls.ss") (line 121))))
     (export (symbol "jerboa_tls_connect_pinned") (file "jerboa-native-rs/src/tls.rs") (line 407) (scheme-callers 1 (caller (file "lib/std/net/tls-rustls.ss") (line 114))))
     (export (symbol "jerboa_tls_connect_timeout") (file "jerboa-native-rs/src/tls.rs") (line 161) (scheme-callers 1 (caller (file "lib/std/net/tls-rustls.ss") (line 98))))
-    (export (symbol "jerboa_tls_flush") (file "jerboa-native-rs/src/tls.rs") (line 1644) (scheme-callers 1 (caller (file "lib/std/net/tls-rustls.ss") (line 139))))
-    (export (symbol "jerboa_tls_get_fd") (file "jerboa-native-rs/src/tls.rs") (line 1772) (scheme-callers 1 (caller (file "lib/std/net/tls-rustls.ss") (line 161))))
-    (export (symbol "jerboa_tls_read") (file "jerboa-native-rs/src/tls.rs") (line 1580) (scheme-callers 1 (caller (file "lib/std/net/tls-rustls.ss") (line 129))))
-    (export (symbol "jerboa_tls_server_free") (file "jerboa-native-rs/src/tls.rs") (line 1696) (scheme-callers 1 (caller (file "lib/std/net/tls-rustls.ss") (line 80))))
+    (export (symbol "jerboa_tls_flush") (file "jerboa-native-rs/src/tls.rs") (line 1640) (scheme-callers 1 (caller (file "lib/std/net/tls-rustls.ss") (line 139))))
+    (export (symbol "jerboa_tls_get_fd") (file "jerboa-native-rs/src/tls.rs") (line 1768) (scheme-callers 1 (caller (file "lib/std/net/tls-rustls.ss") (line 161))))
+    (export (symbol "jerboa_tls_read") (file "jerboa-native-rs/src/tls.rs") (line 1576) (scheme-callers 1 (caller (file "lib/std/net/tls-rustls.ss") (line 129))))
+    (export (symbol "jerboa_tls_server_free") (file "jerboa-native-rs/src/tls.rs") (line 1692) (scheme-callers 1 (caller (file "lib/std/net/tls-rustls.ss") (line 80))))
     (export (symbol "jerboa_tls_server_new") (file "jerboa-native-rs/src/tls.rs") (line 635) (scheme-callers 2 (caller (file "lib/std/net/tls-rustls.ss") (line 67)) (caller (file "lib/std/net/tls-rustls.ss") (line 74))))
-    (export (symbol "jerboa_tls_server_new_mtls") (file "jerboa-native-rs/src/tls.rs") (line 977) (scheme-callers 1 (caller (file "lib/std/net/tls-rustls.ss") (line 74))))
-    (export (symbol "jerboa_tls_server_new_mtls_pem") (file "jerboa-native-rs/src/tls.rs") (line 863) (scheme-callers 0 (none)))
-    (export (symbol "jerboa_tls_server_new_pem") (file "jerboa-native-rs/src/tls.rs") (line 737) (scheme-callers 0 (none)))
-    (export (symbol "jerboa_tls_set_nonblock") (file "jerboa-native-rs/src/tls.rs") (line 1703) (scheme-callers 1 (caller (file "lib/std/net/tls-rustls.ss") (line 150))))
-    (export (symbol "jerboa_tls_set_timeout") (file "jerboa-native-rs/src/tls.rs") (line 1728) (scheme-callers 1 (caller (file "lib/std/net/tls-rustls.ss") (line 155))))
-    (export (symbol "jerboa_tls_write") (file "jerboa-native-rs/src/tls.rs") (line 1613) (scheme-callers 1 (caller (file "lib/std/net/tls-rustls.ss") (line 134))))
-    (export (symbol "jerboa_wasm_add_fuel") (file "jerboa-native-rs/src/wasm.rs") (line 295) (scheme-callers 1 (caller (file "lib/std/wasm/sandbox.ss") (line 118))))
-    (export (symbol "jerboa_wasm_allow_cdb_dir") (file "jerboa-native-rs/src/wasm.rs") (line 253) (scheme-callers 0 (none)))
-    (export (symbol "jerboa_wasm_call") (file "jerboa-native-rs/src/wasm.rs") (line 343) (scheme-callers 1 (caller (file "lib/std/wasm/sandbox.ss") (line 94))))
-    (export (symbol "jerboa_wasm_fuel_remaining") (file "jerboa-native-rs/src/wasm.rs") (line 318) (scheme-callers 1 (caller (file "lib/std/wasm/sandbox.ss") (line 124))))
-    (export (symbol "jerboa_wasm_get_log") (file "jerboa-native-rs/src/wasm.rs") (line 585) (scheme-callers 1 (caller (file "lib/std/wasm/sandbox.ss") (line 136))))
+    (export (symbol "jerboa_tls_server_new_mtls") (file "jerboa-native-rs/src/tls.rs") (line 975) (scheme-callers 1 (caller (file "lib/std/net/tls-rustls.ss") (line 74))))
+    (export (symbol "jerboa_tls_set_nonblock") (file "jerboa-native-rs/src/tls.rs") (line 1699) (scheme-callers 1 (caller (file "lib/std/net/tls-rustls.ss") (line 150))))
+    (export (symbol "jerboa_tls_set_timeout") (file "jerboa-native-rs/src/tls.rs") (line 1724) (scheme-callers 1 (caller (file "lib/std/net/tls-rustls.ss") (line 155))))
+    (export (symbol "jerboa_tls_write") (file "jerboa-native-rs/src/tls.rs") (line 1609) (scheme-callers 1 (caller (file "lib/std/net/tls-rustls.ss") (line 134))))
+    (export (symbol "jerboa_wasm_add_fuel") (file "jerboa-native-rs/src/wasm.rs") (line 293) (scheme-callers 1 (caller (file "lib/std/wasm/sandbox.ss") (line 118))))
+    (export (symbol "jerboa_wasm_call") (file "jerboa-native-rs/src/wasm.rs") (line 341) (scheme-callers 1 (caller (file "lib/std/wasm/sandbox.ss") (line 94))))
+    (export (symbol "jerboa_wasm_fuel_remaining") (file "jerboa-native-rs/src/wasm.rs") (line 316) (scheme-callers 1 (caller (file "lib/std/wasm/sandbox.ss") (line 124))))
+    (export (symbol "jerboa_wasm_get_log") (file "jerboa-native-rs/src/wasm.rs") (line 583) (scheme-callers 1 (caller (file "lib/std/wasm/sandbox.ss") (line 136))))
     (export (symbol "jerboa_wasm_instance_free") (file "jerboa-native-rs/src/wasm.rs") (line 208) (scheme-callers 1 (caller (file "lib/std/wasm/sandbox.ss") (line 88))))
     (export (symbol "jerboa_wasm_instance_new") (file "jerboa-native-rs/src/wasm.rs") (line 154) (scheme-callers 3 (caller (file "lib/std/wasm/sandbox.ss") (line 82)) (caller (file "lib/std/wasm/sandbox.ss") (line 130)) (caller (file "tests/test-wasm-sandbox.ss") (line 500))))
-    (export (symbol "jerboa_wasm_instance_new_hosted") (file "jerboa-native-rs/src/wasm.rs") (line 1124) (scheme-callers 2 (caller (file "lib/std/wasm/sandbox.ss") (line 130)) (caller (file "tests/test-wasm-sandbox.ss") (line 500))))
-    (export (symbol "jerboa_wasm_memory_read") (file "jerboa-native-rs/src/wasm.rs") (line 468) (scheme-callers 1 (caller (file "lib/std/wasm/sandbox.ss") (line 100))))
-    (export (symbol "jerboa_wasm_memory_size") (file "jerboa-native-rs/src/wasm.rs") (line 563) (scheme-callers 1 (caller (file "lib/std/wasm/sandbox.ss") (line 112))))
-    (export (symbol "jerboa_wasm_memory_write") (file "jerboa-native-rs/src/wasm.rs") (line 513) (scheme-callers 1 (caller (file "lib/std/wasm/sandbox.ss") (line 106))))
+    (export (symbol "jerboa_wasm_instance_new_hosted") (file "jerboa-native-rs/src/wasm.rs") (line 1122) (scheme-callers 2 (caller (file "lib/std/wasm/sandbox.ss") (line 130)) (caller (file "tests/test-wasm-sandbox.ss") (line 500))))
+    (export (symbol "jerboa_wasm_memory_read") (file "jerboa-native-rs/src/wasm.rs") (line 466) (scheme-callers 1 (caller (file "lib/std/wasm/sandbox.ss") (line 100))))
+    (export (symbol "jerboa_wasm_memory_size") (file "jerboa-native-rs/src/wasm.rs") (line 561) (scheme-callers 1 (caller (file "lib/std/wasm/sandbox.ss") (line 112))))
+    (export (symbol "jerboa_wasm_memory_write") (file "jerboa-native-rs/src/wasm.rs") (line 511) (scheme-callers 1 (caller (file "lib/std/wasm/sandbox.ss") (line 106))))
     (export (symbol "jerboa_wasm_module_free") (file "jerboa-native-rs/src/wasm.rs") (line 142) (scheme-callers 1 (caller (file "lib/std/wasm/sandbox.ss") (line 76))))
     (export (symbol "jerboa_wasm_module_new") (file "jerboa-native-rs/src/wasm.rs") (line 104) (scheme-callers 1 (caller (file "lib/std/wasm/sandbox.ss") (line 70))))
-    (export (symbol "jerboa_wasm_set_socket") (file "jerboa-native-rs/src/wasm.rs") (line 220) (scheme-callers 0 (none)))
     (export (symbol "jerboa_writev2") (file "jerboa-native-rs/src/http_parse.rs") (line 99) (scheme-callers 1 (caller (file "lib/std/net/io.ss") (line 81))))
-    (export (symbol "jerboa_x25519_diffie_hellman") (file "jerboa-native-rs/src/x25519.rs") (line 62) (scheme-callers 0 (none)))
-    (export (symbol "jerboa_x25519_generate_keypair") (file "jerboa-native-rs/src/x25519.rs") (line 10) (scheme-callers 0 (none)))
-    (export (symbol "jerboa_x25519_public_from_private") (file "jerboa-native-rs/src/x25519.rs") (line 36) (scheme-callers 0 (none)))
-    (export (symbol "jerboa_x509_cert_fingerprint") (file "jerboa-native-rs/src/x509.rs") (line 564) (scheme-callers 1 (caller (file "lib/std/crypto/x509.ss") (line 31))))
+    (export (symbol "jerboa_x509_cert_fingerprint") (file "jerboa-native-rs/src/x509.rs") (line 562) (scheme-callers 1 (caller (file "lib/std/crypto/x509.ss") (line 31))))
     (export (symbol "jerboa_x509_generate_self_signed") (file "jerboa-native-rs/src/x509.rs") (line 124) (scheme-callers 1 (caller (file "lib/std/crypto/x509.ss") (line 27))))
-    (export (symbol "jerboa_x509_generate_self_signed_mem") (file "jerboa-native-rs/src/x509.rs") (line 263) (scheme-callers 0 (none)))
-    (export (symbol "jerboa_x509_generate_signed_by_ca_mem") (file "jerboa-native-rs/src/x509.rs") (line 388) (scheme-callers 0 (none)))
   )
 )
diff --git a/jerboa-native-rs/src/aproc.rs b/jerboa-native-rs/src/aproc.rs
index 4d91851..96f9da1 100644
--- a/jerboa-native-rs/src/aproc.rs
+++ b/jerboa-native-rs/src/aproc.rs
@@ -561,7 +561,6 @@ pub extern "C" fn jerboa_aproc_spawn_pty(
 }
 
 /// dup(2) — returns the new fd, or -1 on error.
-#[no_mangle]
 pub extern "C" fn jerboa_aproc_dup(fd: i32) -> i32 {
     ffi_wrap(|| {
         let r = unsafe { libc::dup(fd) };
@@ -577,7 +576,6 @@ pub extern "C" fn jerboa_aproc_dup(fd: i32) -> i32 {
 }
 
 /// close(2) — returns 0 on success, -1 on error.
-#[no_mangle]
 pub extern "C" fn jerboa_aproc_close(fd: i32) -> i32 {
     let r = unsafe { libc::close(fd) };
     r
diff --git a/jerboa-native-rs/src/crypto.rs b/jerboa-native-rs/src/crypto.rs
index 4cbab1b..608b342 100644
--- a/jerboa-native-rs/src/crypto.rs
+++ b/jerboa-native-rs/src/crypto.rs
@@ -49,7 +49,6 @@ fn digest_impl(
     })
 }
 
-#[no_mangle]
 pub extern "C" fn jerboa_md5(
     _input: *const u8,
     _input_len: usize,
@@ -108,7 +107,6 @@ fn next_sha256_context() -> u64 {
 }
 
 /// Allocate an opaque incremental SHA-256 context handle.
-#[no_mangle]
 pub extern "C" fn jerboa_sha256_ctx_new() -> u64 {
     match std::panic::catch_unwind(|| {
         let handle = next_sha256_context();
@@ -124,7 +122,6 @@ pub extern "C" fn jerboa_sha256_ctx_new() -> u64 {
 }
 
 /// Add one chunk to an incremental SHA-256 context.
-#[no_mangle]
 pub extern "C" fn jerboa_sha256_ctx_update(handle: u64, input: *const u8, input_len: usize) -> i32 {
     ffi_wrap(|| {
         if input.is_null() && input_len > 0 {
@@ -147,7 +144,6 @@ pub extern "C" fn jerboa_sha256_ctx_update(handle: u64, input: *const u8, input_
 }
 
 /// Finalize and consume an incremental SHA-256 context.
-#[no_mangle]
 pub extern "C" fn jerboa_sha256_ctx_final(handle: u64, output: *mut u8, output_len: usize) -> i32 {
     ffi_wrap(|| {
         if output.is_null() || output_len < digest::SHA256_OUTPUT_LEN {
@@ -170,7 +166,6 @@ pub extern "C" fn jerboa_sha256_ctx_final(handle: u64, output: *mut u8, output_l
 }
 
 /// Drop an unfinished incremental SHA-256 context. Idempotent for cleanup.
-#[no_mangle]
 pub extern "C" fn jerboa_sha256_ctx_free(handle: u64) {
     let _ = std::panic::catch_unwind(|| lock_sha256_contexts().remove(&handle));
 }
diff --git a/jerboa-native-rs/src/process_ctl.rs b/jerboa-native-rs/src/process_ctl.rs
index cb3571b..bb47c4b 100644
--- a/jerboa-native-rs/src/process_ctl.rs
+++ b/jerboa-native-rs/src/process_ctl.rs
@@ -2,7 +2,6 @@ use crate::panic::{ffi_wrap, set_last_error};
 
 /// Set the process name via prctl(PR_SET_NAME) on Linux.
 /// name: UTF-8 bytes, max 15 bytes (will be truncated).
-#[no_mangle]
 pub extern "C" fn jerboa_prctl_set_name(name: *const u8, name_len: usize) -> i32 {
     ffi_wrap(|| {
         if name.is_null() {
@@ -33,7 +32,6 @@ pub extern "C" fn jerboa_prctl_set_name(name: *const u8, name_len: usize) -> i32
 }
 
 /// Lock all current and future memory pages (prevent swapping).
-#[no_mangle]
 pub extern "C" fn jerboa_mlockall() -> i32 {
     ffi_wrap(|| {
         #[cfg(any(target_os = "linux", target_os = "freebsd"))]
@@ -55,7 +53,6 @@ pub extern "C" fn jerboa_mlockall() -> i32 {
 
 /// Probe whether a process exists using kill(pid, 0).
 /// Returns: 1 = exists, 0 = does not exist, -1 = error.
-#[no_mangle]
 pub extern "C" fn jerboa_kill_probe(pid: u32) -> i32 {
     ffi_wrap(|| {
         let rc = unsafe { libc::kill(pid as libc::pid_t, 0) };
@@ -94,7 +91,6 @@ fn errno() -> i32 {
 /// Check if the current process is being traced (debugged) on FreeBSD.
 /// Uses sysctl kern.proc.pid to read kinfo_proc and check ki_flag for P_TRACED.
 /// Returns: 1 = traced, 0 = not traced, -1 = error.
-#[no_mangle]
 pub extern "C" fn jerboa_freebsd_is_traced() -> i32 {
     ffi_wrap(|| {
         #[cfg(target_os = "freebsd")]
@@ -135,7 +131,6 @@ pub extern "C" fn jerboa_freebsd_is_traced() -> i32 {
 
 /// Count total number of processes on FreeBSD via sysctl kern.proc.all.
 /// Returns the count, or -1 on error.
-#[no_mangle]
 pub extern "C" fn jerboa_freebsd_process_count() -> i32 {
     ffi_wrap(|| {
         #[cfg(target_os = "freebsd")]
@@ -175,7 +170,6 @@ pub extern "C" fn jerboa_freebsd_process_count() -> i32 {
 /// Takes a plain string (not a format string) — we call setproctitle("%s", name).
 /// name: UTF-8 bytes, name_len: length.
 /// Returns 0 on success, -1 on error.
-#[no_mangle]
 pub extern "C" fn jerboa_setproctitle(name: *const u8, name_len: usize) -> i32 {
     ffi_wrap(|| {
         if name.is_null() {
@@ -214,7 +208,6 @@ pub extern "C" fn jerboa_setproctitle(name: *const u8, name_len: usize) -> i32 {
 /// Read the path of the current executable.
 /// On Linux: /proc/self/exe
 /// On FreeBSD: sysctl KERN_PROC_PATHNAME
-#[no_mangle]
 pub extern "C" fn jerboa_proc_self_exe(
     output: *mut u8,
     output_len: usize,
diff --git a/jerboa-native-rs/src/regex_native.rs b/jerboa-native-rs/src/regex_native.rs
index d880c14..8261a5f 100644
--- a/jerboa-native-rs/src/regex_native.rs
+++ b/jerboa-native-rs/src/regex_native.rs
@@ -166,7 +166,6 @@ pub extern "C" fn jerboa_regex_free(handle: u64) -> i32 {
 /// Compile with PCRE2-compatible flags bitmask.
 /// Flags: 0x8=CASELESS, 0x20=DOTALL, 0x400=MULTILINE, 0x80000=UTF (ignored, always UTF-8)
 /// Returns 0 on success, -1 on error.
-#[no_mangle]
 pub extern "C" fn jerboa_regex_compile_ex(
     pattern: *const u8,
     pattern_len: usize,
diff --git a/jerboa-native-rs/src/socks5_server.rs b/jerboa-native-rs/src/socks5_server.rs
index ae072fb..79d4166 100644
--- a/jerboa-native-rs/src/socks5_server.rs
+++ b/jerboa-native-rs/src/socks5_server.rs
@@ -107,7 +107,6 @@ struct ServerConfig {
 /// Returns handle (>0) on success, 0 on error.
 ///
 /// `username`/`password` pointers may be null for no-auth mode.
-#[no_mangle]
 pub extern "C" fn jerboa_socks5_server_start(
     bind_addr: *const u8,
     bind_addr_len: usize,
@@ -219,7 +218,6 @@ pub extern "C" fn jerboa_socks5_server_start(
 
 /// Stop a running SOCKS5 proxy server.
 /// Returns 0 on success, -1 on error.
-#[no_mangle]
 pub extern "C" fn jerboa_socks5_server_stop(handle: u64) -> i32 {
     match std::panic::catch_unwind(|| {
         let mut map = servers().lock().unwrap();
@@ -246,7 +244,6 @@ pub extern "C" fn jerboa_socks5_server_stop(handle: u64) -> i32 {
 
 /// Get the actual bound port of a SOCKS5 server.
 /// Returns port (>0) on success, 0 on error.
-#[no_mangle]
 pub extern "C" fn jerboa_socks5_server_port(handle: u64) -> u16 {
     match std::panic::catch_unwind(|| {
         let map = servers().lock().unwrap();
@@ -266,7 +263,6 @@ pub extern "C" fn jerboa_socks5_server_port(handle: u64) -> u16 {
 /// Get stats: active connections and total connections.
 /// Writes "active:N total:N" to buf.
 /// Returns bytes written (>0) or -1 on error.
-#[no_mangle]
 pub extern "C" fn jerboa_socks5_server_stats(handle: u64, buf: *mut u8, buf_len: usize) -> i32 {
     match std::panic::catch_unwind(|| {
         if buf.is_null() || buf_len == 0 {
diff --git a/jerboa-native-rs/src/tls.rs b/jerboa-native-rs/src/tls.rs
index 0fbbfc3..45dcc5f 100644
--- a/jerboa-native-rs/src/tls.rs
+++ b/jerboa-native-rs/src/tls.rs
@@ -733,7 +733,6 @@ pub extern "C" fn jerboa_tls_server_new(
 /// Create a TLS server context from in-memory PEM cert and key data.
 /// Same as jerboa_tls_server_new but reads from byte buffers instead of files.
 /// Returns context handle (>0) on success, 0 on error.
-#[no_mangle]
 pub extern "C" fn jerboa_tls_server_new_pem(
     cert_pem: *const u8,
     cert_pem_len: usize,
@@ -859,7 +858,6 @@ pub extern "C" fn jerboa_tls_accept(server_ctx: u64, fd: i32) -> u64 {
 /// client_ca_pem: CA cert PEM bytes used to verify client certificates.
 /// Clients without a valid cert signed by this CA are rejected at the TLS handshake.
 /// Returns context handle (>0) on success, 0 on error.
-#[no_mangle]
 pub extern "C" fn jerboa_tls_server_new_mtls_pem(
     cert_pem: *const u8,
     cert_pem_len: usize,
@@ -1315,7 +1313,6 @@ pub extern "C" fn jerboa_tls_connect_mtls(
 /// The server's cert is chain-verified against ca_pem. The client
 /// presents cert_pem/key_pem as its identity. Returns handle ID (>0) on
 /// success, 0 on error.
-#[no_mangle]
 pub extern "C" fn jerboa_tls_connect_mtls_pem_ca(
     host: *const u8,
     host_len: usize,
@@ -1448,7 +1445,6 @@ pub extern "C" fn jerboa_tls_connect_mtls_pem_ca(
 /// mTLS connect using in-memory cert/key data (no file paths).
 /// Avoids /proc/self/fd/ which Android SELinux may block.
 /// Returns handle ID (>0) on success, 0 on error.
-#[no_mangle]
 pub extern "C" fn jerboa_tls_connect_mtls_mem(
     host: *const u8,
     host_len: usize,
diff --git a/jerboa-native-rs/src/wasm.rs b/jerboa-native-rs/src/wasm.rs
index 93b7565..aa34b26 100644
--- a/jerboa-native-rs/src/wasm.rs
+++ b/jerboa-native-rs/src/wasm.rs
@@ -216,7 +216,6 @@ pub extern "C" fn jerboa_wasm_instance_free(handle: u64) {
 ///
 /// SAFETY: `fd` must be a valid, owned UDP socket file descriptor.
 /// Returns 0 on success, -1 on error.
-#[no_mangle]
 pub extern "C" fn jerboa_wasm_set_socket(instance_handle: u64, fd: i32) -> i32 {
     ffi_wrap(|| {
         let mut instances = wasm_instances().lock().unwrap();
@@ -249,7 +248,6 @@ pub extern "C" fn jerboa_wasm_set_socket(instance_handle: u64, fd: i32) -> i32 {
 /// The WASM guest can only open CDB files under these directories.
 /// path_ptr/path_len: UTF-8 directory path.
 /// Returns 0 on success, -1 on error.
-#[no_mangle]
 pub extern "C" fn jerboa_wasm_allow_cdb_dir(
     instance_handle: u64,
     path_ptr: *const u8,
diff --git a/jerboa-native-rs/src/wasm_sm.rs b/jerboa-native-rs/src/wasm_sm.rs
index d4521a2..3188853 100644
--- a/jerboa-native-rs/src/wasm_sm.rs
+++ b/jerboa-native-rs/src/wasm_sm.rs
@@ -934,7 +934,6 @@ pub extern "C" fn jerboa_sm_call(
 // FFI: Memory access (stubs — full impl requires persistent instance)
 // ============================================================
 
-#[no_mangle]
 pub extern "C" fn jerboa_sm_memory_read(
     _handle: u64,
     _offset: u32,
@@ -944,7 +943,6 @@ pub extern "C" fn jerboa_sm_memory_read(
     -1
 }
 
-#[no_mangle]
 pub extern "C" fn jerboa_sm_memory_write(
     _handle: u64,
     _offset: u32,
@@ -954,7 +952,6 @@ pub extern "C" fn jerboa_sm_memory_write(
     -1
 }
 
-#[no_mangle]
 pub extern "C" fn jerboa_sm_memory_size(_handle: u64) -> i64 {
     -1
 }
@@ -968,7 +965,6 @@ pub extern "C" fn jerboa_sm_add_fuel(_handle: u64, _fuel: u64) -> i32 {
     0
 }
 
-#[no_mangle]
 pub extern "C" fn jerboa_sm_fuel_remaining(_handle: u64) -> i64 {
     0
 }
diff --git a/jerboa-native-rs/src/x25519.rs b/jerboa-native-rs/src/x25519.rs
index b3fc460..81b7ef5 100644
--- a/jerboa-native-rs/src/x25519.rs
+++ b/jerboa-native-rs/src/x25519.rs
@@ -6,7 +6,6 @@ use x25519_dalek::{PublicKey, StaticSecret};
 /// Generate an X25519 keypair using ring's CSPRNG.
 /// private_out: 32-byte buffer for the private key
 /// public_out: 32-byte buffer for the public key
-#[no_mangle]
 pub extern "C" fn jerboa_x25519_generate_keypair(private_out: *mut u8, public_out: *mut u8) -> i32 {
     ffi_wrap(|| {
         if private_out.is_null() || public_out.is_null() {
@@ -32,7 +31,6 @@ pub extern "C" fn jerboa_x25519_generate_keypair(private_out: *mut u8, public_ou
 /// Compute public key from a private key.
 /// private_key: 32-byte private key
 /// public_out: 32-byte buffer for the public key
-#[no_mangle]
 pub extern "C" fn jerboa_x25519_public_from_private(
     private_key: *const u8,
     private_len: usize,
@@ -58,7 +56,6 @@ pub extern "C" fn jerboa_x25519_public_from_private(
 /// our_private: 32-byte private key
 /// their_public: 32-byte public key
 /// shared_out: 32-byte buffer for the shared secret
-#[no_mangle]
 pub extern "C" fn jerboa_x25519_diffie_hellman(
     our_private: *const u8,
     priv_len: usize,
@@ -97,7 +94,6 @@ pub extern "C" fn jerboa_x25519_diffie_hellman(
 /// salt: salt bytes (can be NULL with salt_len=0 for no salt)
 /// info: context/application info
 /// output: buffer for derived key material
-#[no_mangle]
 pub extern "C" fn jerboa_hkdf_sha256(
     ikm: *const u8,
     ikm_len: usize,
diff --git a/jerboa-native-rs/src/x509.rs b/jerboa-native-rs/src/x509.rs
index 26effc2..1630a3f 100644
--- a/jerboa-native-rs/src/x509.rs
+++ b/jerboa-native-rs/src/x509.rs
@@ -259,7 +259,6 @@ pub extern "C" fn jerboa_x509_generate_self_signed(
 /// caller-provided buffers instead of files.
 ///
 /// Returns 0 on success, -1 on error.
-#[no_mangle]
 pub extern "C" fn jerboa_x509_generate_self_signed_mem(
     ip_addrs_csv: *const u8,
     ip_addrs_len: usize,
@@ -384,7 +383,6 @@ pub extern "C" fn jerboa_x509_generate_self_signed_mem(
 /// here. The lengths actually written are stored in cert_out_len / key_out_len.
 ///
 /// Returns 0 on success, -1 on error (call jerboa_last_error for details).
-#[no_mangle]
 pub extern "C" fn jerboa_x509_generate_signed_by_ca_mem(
     ca_cert_pem: *const u8,
     ca_cert_pem_len: usize,