-
Notifications
You must be signed in to change notification settings - Fork 12.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
rustc: implement support for
riscv32im_risc0_zkvm_elf
This also adds changes in the rust test suite in order to get a few of them to pass. Co-authored-by: Frank Laub <[email protected]> Co-authored-by: Urgau <[email protected]>
- Loading branch information
1 parent
06fbe07
commit 966b94e
Showing
8 changed files
with
79 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
36 changes: 36 additions & 0 deletions
36
compiler/rustc_target/src/spec/targets/riscv32im_risc0_zkvm_elf.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
use crate::spec::{Cc, LinkerFlavor, Lld, PanicStrategy, RelocModel}; | ||
use crate::spec::{Target, TargetOptions}; | ||
|
||
pub fn target() -> Target { | ||
Target { | ||
data_layout: "e-m:e-p:32:32-i64:64-n32-S128".into(), | ||
llvm_target: "riscv32".into(), | ||
pointer_width: 32, | ||
arch: "riscv32".into(), | ||
|
||
options: TargetOptions { | ||
os: "zkvm".into(), | ||
vendor: "risc0".into(), | ||
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes), | ||
linker: Some("rust-lld".into()), | ||
cpu: "generic-rv32".into(), | ||
|
||
// Some crates (*cough* crossbeam) assume you have 64 bit | ||
// atomics if the target name is not in a hardcoded list. | ||
// Since zkvm is singlethreaded and all operations are | ||
// atomic, I guess we can just say we support 64-bit | ||
// atomics. | ||
max_atomic_width: Some(64), | ||
atomic_cas: true, | ||
|
||
features: "+m".into(), | ||
executables: true, | ||
panic_strategy: PanicStrategy::Abort, | ||
relocation_model: RelocModel::Static, | ||
emit_debug_gdb_scripts: false, | ||
eh_frame_header: false, | ||
singlethread: true, | ||
..Default::default() | ||
}, | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
use alloc::string::String; | ||
use core::panic::PanicPayload; | ||
|
||
// Forward the abort message to zkVM's sys_panic. This is implemented by RISC Zero's | ||
// platform crate which exposes system calls specifically for the zkVM. | ||
pub(crate) unsafe fn zkvm_set_abort_message(payload: &mut dyn PanicPayload) { | ||
let payload = payload.get(); | ||
let msg = match payload.downcast_ref::<&'static str>() { | ||
Some(msg) => msg.as_bytes(), | ||
None => match payload.downcast_ref::<String>() { | ||
Some(msg) => msg.as_bytes(), | ||
None => &[], | ||
}, | ||
}; | ||
if msg.is_empty() { | ||
return; | ||
} | ||
|
||
extern "C" { | ||
fn sys_panic(msg_ptr: *const u8, len: usize) -> !; | ||
} | ||
|
||
sys_panic(msg.as_ptr(), msg.len()); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters