aboutsummaryrefslogtreecommitdiff
path: root/zkvms/risc0/guest_elf_patch
diff options
context:
space:
mode:
authorKamen Mladenov <kamen@syndamia.com>2025-03-27 13:25:05 +0200
committerKamen Mladenov <kamen@syndamia.com>2025-04-04 11:03:00 +0300
commita30b4022fa85320806b8b4d004ea713b68df6566 (patch)
treedae482b317a9fb331c2ddf3a831d55bd754d5649 /zkvms/risc0/guest_elf_patch
parent696e6041a88f2ed5d0d3a699a7af55252ecba1ca (diff)
downloadzkVMs-benchmarks-a30b4022fa85320806b8b4d004ea713b68df6566.tar
zkVMs-benchmarks-a30b4022fa85320806b8b4d004ea713b68df6566.tar.gz
zkVMs-benchmarks-a30b4022fa85320806b8b4d004ea713b68df6566.zip
feat(zkvms/risc0): Implement elf encoding
Recently, RISC0 have added code to their SDK which adds magic bytes to the (already compiled) ELF. Since we're taking another route than intended, we'll need to replicate this step too. We're doing things in a different fashion, because their SDK normally compiles the guest, and doesn't allow you to supply a prebuilt ELF.
Diffstat (limited to 'zkvms/risc0/guest_elf_patch')
-rw-r--r--zkvms/risc0/guest_elf_patch/Cargo.toml9
-rw-r--r--zkvms/risc0/guest_elf_patch/src/main.rs11
2 files changed, 20 insertions, 0 deletions
diff --git a/zkvms/risc0/guest_elf_patch/Cargo.toml b/zkvms/risc0/guest_elf_patch/Cargo.toml
new file mode 100644
index 0000000..2008faf
--- /dev/null
+++ b/zkvms/risc0/guest_elf_patch/Cargo.toml
@@ -0,0 +1,9 @@
+[package]
+name = "guest-elf-patch-risc0"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+risc0-binfmt = { path = "/nix/store/6992z4qxba51p1m9vjbjvcwh16gvdp56-risc0-unstable-2025-03-12/risc0/binfmt" }
+risc0-zkos-v1compat = { path = "/nix/store/6992z4qxba51p1m9vjbjvcwh16gvdp56-risc0-unstable-2025-03-12/risc0/zkos/v1compat" }
+bytemuck_derive = "<1.9.0"
diff --git a/zkvms/risc0/guest_elf_patch/src/main.rs b/zkvms/risc0/guest_elf_patch/src/main.rs
new file mode 100644
index 0000000..6999ab4
--- /dev/null
+++ b/zkvms/risc0/guest_elf_patch/src/main.rs
@@ -0,0 +1,11 @@
+use risc0_binfmt::ProgramBinary;
+use risc0_zkos_v1compat::V1COMPAT_ELF;
+
+static ELF: &[u8] = include_bytes!("../../host/src/guest");
+
+// https://github.com/risc0/risc0/blob/fee2e19a3c49b3da492403de5e2d011c890e52de/risc0/build/src/lib.rs#L179-L187
+fn main() {
+ let binary = ProgramBinary::new(&ELF, V1COMPAT_ELF);
+ let elf = binary.encode();
+ std::fs::write("../host/src/guest", &elf).expect("couldn't add magic bytes to elf!");
+}