From ea4c1604cf9c3731ae897b013595505ec1dca06b Mon Sep 17 00:00:00 2001
From: nhtyy <n@push0.dev>
Date: Thu, 13 Mar 2025 11:03:56 -0700
Subject: [PATCH 1/7] feat: succinct-zkvm target

---
 compiler/rustc_target/src/spec/mod.rs         |  1 +
 .../targets/riscv32im_succinct_zkvm_elf.rs    | 42 +++++++++++++++++++
 src/bootstrap/src/core/sanity.rs              |  1 +
 src/tools/build-manifest/src/main.rs          |  1 +
 tests/assembly/targets/targets-elf.rs         |  3 ++
 5 files changed, 48 insertions(+)
 create mode 100644 compiler/rustc_target/src/spec/targets/riscv32im_succinct_zkvm_elf.rs

diff --git a/compiler/rustc_target/src/spec/mod.rs b/compiler/rustc_target/src/spec/mod.rs
index 1887134c5757d..5bedab81aef99 100644
--- a/compiler/rustc_target/src/spec/mod.rs
+++ b/compiler/rustc_target/src/spec/mod.rs
@@ -1954,6 +1954,7 @@ supported_targets! {
 
     ("riscv32i-unknown-none-elf", riscv32i_unknown_none_elf),
     ("riscv32im-risc0-zkvm-elf", riscv32im_risc0_zkvm_elf),
+    ("riscv32im-succinct-zkvm-elf", riscv32im_succinct_zkvm_elf),
     ("riscv32im-unknown-none-elf", riscv32im_unknown_none_elf),
     ("riscv32ima-unknown-none-elf", riscv32ima_unknown_none_elf),
     ("riscv32imc-unknown-none-elf", riscv32imc_unknown_none_elf),
diff --git a/compiler/rustc_target/src/spec/targets/riscv32im_succinct_zkvm_elf.rs b/compiler/rustc_target/src/spec/targets/riscv32im_succinct_zkvm_elf.rs
new file mode 100644
index 0000000000000..db1a61c69688a
--- /dev/null
+++ b/compiler/rustc_target/src/spec/targets/riscv32im_succinct_zkvm_elf.rs
@@ -0,0 +1,42 @@
+use crate::spec::{
+    Cc, LinkerFlavor, Lld, PanicStrategy, RelocModel, Target, TargetMetadata, TargetOptions,
+};
+
+pub(crate) fn target() -> Target {
+    Target {
+        data_layout: "e-m:e-p:32:32-i64:64-n32-S128".into(),
+        llvm_target: "riscv32".into(),
+        metadata: TargetMetadata {
+            description: Some("Succinct's zero-knowledge Virtual Machine (RV32IM ISA)".into()),
+            tier: Some(3),
+            host_tools: Some(false),
+            std: None,
+        },
+        pointer_width: 32,
+        arch: "riscv32".into(),
+
+        options: TargetOptions {
+            os: "succinct-zkvm".into(),
+            vendor: "succinct".into(),
+            linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
+            linker: Some("rust-lld".into()),
+            cpu: "generic-rv32".into(),
+
+            // The zkvm is singlethreaded and all operations are atomic.
+            // The std-lib is compiled with lowered atomicsa and the default Succinct build tools
+            // enforce this on programs.
+            max_atomic_width: Some(64),
+            atomic_cas: true,
+
+            features: "+m".into(),
+            llvm_abiname: "ilp32".into(),
+            executables: true,
+            panic_strategy: PanicStrategy::Abort,
+            relocation_model: RelocModel::Static,
+            emit_debug_gdb_scripts: false,
+            eh_frame_header: false,
+            singlethread: true,
+            ..Default::default()
+        },
+    }
+}
diff --git a/src/bootstrap/src/core/sanity.rs b/src/bootstrap/src/core/sanity.rs
index 583b8e1198ae3..88139b662a8d2 100644
--- a/src/bootstrap/src/core/sanity.rs
+++ b/src/bootstrap/src/core/sanity.rs
@@ -35,6 +35,7 @@ pub struct Finder {
 const STAGE0_MISSING_TARGETS: &[&str] = &[
     // just a dummy comment so the list doesn't get onelined
     "wasm32-wali-linux-musl",
+    "riscv32im-succinct-zkvm-elf"
 ];
 
 /// Minimum version threshold for libstdc++ required when using prebuilt LLVM
diff --git a/src/tools/build-manifest/src/main.rs b/src/tools/build-manifest/src/main.rs
index 741d7e3fa16c1..809e73e7152ff 100644
--- a/src/tools/build-manifest/src/main.rs
+++ b/src/tools/build-manifest/src/main.rs
@@ -138,6 +138,7 @@ static TARGETS: &[&str] = &[
     "powerpc64le-unknown-linux-musl",
     "riscv32i-unknown-none-elf",
     "riscv32im-risc0-zkvm-elf",
+    "riscv32im-succinct-zkvm-elf",
     "riscv32im-unknown-none-elf",
     "riscv32ima-unknown-none-elf",
     "riscv32imc-unknown-none-elf",
diff --git a/tests/assembly/targets/targets-elf.rs b/tests/assembly/targets/targets-elf.rs
index 8f2fef0e9c911..a6821d238e824 100644
--- a/tests/assembly/targets/targets-elf.rs
+++ b/tests/assembly/targets/targets-elf.rs
@@ -421,6 +421,9 @@
 //@ revisions: riscv32im_risc0_zkvm_elf
 //@ [riscv32im_risc0_zkvm_elf] compile-flags: --target riscv32im-risc0-zkvm-elf
 //@ [riscv32im_risc0_zkvm_elf] needs-llvm-components: riscv
+//@ revisions: riscv32im_succinct_zkvm_elf
+//@ [riscv32im_succinct_zkvm_elf] compile-flags: --target riscv32im-succinct-zkvm-elf
+//@ [riscv32im_succinct_zkvm_elf] needs-llvm-components: riscv
 //@ revisions: riscv32im_unknown_none_elf
 //@ [riscv32im_unknown_none_elf] compile-flags: --target riscv32im-unknown-none-elf
 //@ [riscv32im_unknown_none_elf] needs-llvm-components: riscv

From 900796824ec1c6e7a3fbf405d59720da4b4cf4cd Mon Sep 17 00:00:00 2001
From: nhtyy <n@push0.dev>
Date: Thu, 13 Mar 2025 11:19:08 -0700
Subject: [PATCH 2/7] fix(ci): trailing comma fmt

---
 src/bootstrap/src/core/sanity.rs | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/bootstrap/src/core/sanity.rs b/src/bootstrap/src/core/sanity.rs
index 88139b662a8d2..aadc96a794cc1 100644
--- a/src/bootstrap/src/core/sanity.rs
+++ b/src/bootstrap/src/core/sanity.rs
@@ -35,7 +35,7 @@ pub struct Finder {
 const STAGE0_MISSING_TARGETS: &[&str] = &[
     // just a dummy comment so the list doesn't get onelined
     "wasm32-wali-linux-musl",
-    "riscv32im-succinct-zkvm-elf"
+    "riscv32im-succinct-zkvm-elf",
 ];
 
 /// Minimum version threshold for libstdc++ required when using prebuilt LLVM

From 7e69cf756dd885d84c6c20871528a418e7ea9a9a Mon Sep 17 00:00:00 2001
From: nhtyy <n@push0.dev>
Date: Thu, 13 Mar 2025 14:07:29 -0700
Subject: [PATCH 3/7] fix: include platform-summary

---
 src/doc/rustc/src/SUMMARY.md                  |  1 +
 .../riscv32im-succinct-zkvm-elf.md            | 83 +++++++++++++++++++
 2 files changed, 84 insertions(+)
 create mode 100644 src/doc/rustc/src/platform-support/riscv32im-succinct-zkvm-elf.md

diff --git a/src/doc/rustc/src/SUMMARY.md b/src/doc/rustc/src/SUMMARY.md
index 542ee9fffce3a..51d4d137a1096 100644
--- a/src/doc/rustc/src/SUMMARY.md
+++ b/src/doc/rustc/src/SUMMARY.md
@@ -77,6 +77,7 @@
     - [riscv32e\*-unknown-none-elf](platform-support/riscv32e-unknown-none-elf.md)
     - [riscv32i\*-unknown-none-elf](platform-support/riscv32-unknown-none-elf.md)
     - [riscv32im-risc0-zkvm-elf](platform-support/riscv32im-risc0-zkvm-elf.md)
+    - [riscv32im-succinct-zkvm-elf](platform-support/riscv32im-succinct-zkvm-elf.md)
     - [riscv32imac-unknown-xous-elf](platform-support/riscv32imac-unknown-xous-elf.md)
     - [riscv64gc-unknown-linux-gnu](platform-support/riscv64gc-unknown-linux-gnu.md)
     - [riscv64gc-unknown-linux-musl](platform-support/riscv64gc-unknown-linux-musl.md)
diff --git a/src/doc/rustc/src/platform-support/riscv32im-succinct-zkvm-elf.md b/src/doc/rustc/src/platform-support/riscv32im-succinct-zkvm-elf.md
new file mode 100644
index 0000000000000..5cdab3da22ca8
--- /dev/null
+++ b/src/doc/rustc/src/platform-support/riscv32im-succinct-zkvm-elf.md
@@ -0,0 +1,83 @@
+# `riscv32im-risc0-zkvm-elf`
+
+**Tier: 3**
+
+Succinct's ISA for the SP1 zkVM (Zero Knowledge Virtual Machine).
+
+## Target maintainers
+
+- John Guibas, `john@succinct.xyz`, https://github.com/jtguibas
+- Nathan Bustamante, `nathan@succinct.xyz`, https://github.com/nhtyy
+
+## Background
+
+This target is an execution environment to produce a proof of execution of
+a RISC-V ELF binary and any output that the developer of the binary wishes to
+display publicly. In order to do this, the target will execute the ELF and
+create a cryptographic proof of the "trace" of the programs runtime.
+
+We have a cargo extension called [cargo-prove] that allow users to generate
+project templates, install tools for improved user experience and build binaries.
+
+## Requirements
+
+The target only supports cross compilation and no host tools. The target
+supports `alloc` with a default allocator and will have support for std soon.
+
+The target's execution environment is single threaded, non-preemptive, and does
+not support any privileged instructions, nor unaligned accesses. At the time of
+writing the VM has 192 MB of memory and text/data, heap, and stack need to be
+with in the address range `0x400` - `0x0C000000`. The binaries themselves expect
+no operating system and can be thought of as running on bare-metal. The target
+does not use `#[target_feature(...)]` or `-C target-feature=` values.
+
+Calling `extern "C"` on the target uses the C calling convention outlined in the
+[RISC-V specification].
+
+## Building for the zkVM
+
+Programs for the zkVM could be built by adding it to the `target` list in
+`config.toml`. However, we recommend building programs in our starter template
+generated by the [cargo-prove] utility and the [sp1-build] crate. This
+crate calls `rustc` with `-C "link-arg=-Ttext=` so that it maps the text in the
+appropriate location as well as generating variables that represent the ELF and
+a unique ID associated with the ELF.
+
+The starter template provides developers with system calls that are useful
+to zero knowledge computing such as writing to
+the public output, hashing using sha256, and multiply big integers.
+
+## Building Rust programs
+
+Rust does not yet ship pre-compiled artifacts for this target. To compile for
+this target, you will either need to build Rust with the target enabled (see
+"Building the target" above). We do not recommend using `build-std` as we have
+run into issues building core in the past on our starter template. An alternate
+solution is to download the risc0 tool chain by running `cargo prove install-toolchain`.
+
+## Testing
+
+Note: the target is implemented as a software emulator called the zkVM and there
+is no hardware implementation of the target.
+
+The most practical way to test the target program is to use our starter template
+that can be generated by using the `cargo prove new` command. The template
+generates a sample "host" and "guest" code. The guest code compiled to the
+target (which is RV32IM) whereas the "host" code is compiled to run on the
+programmer's machine running either a Linux distribution or macOS.
+
+The host program is responsible for running the guest binary on the zkVM and retrieving
+its public output.
+
+The target currently does not support running the Rust test suite.
+
+## Cross-compilation toolchains and C code
+
+Compatible C code can be built for this target on any compiler that has a RV32IM
+target.  On clang and ld.lld linker, it can be generated using the
+`-march=rv32im`, `-mabi=ilp32` with llvm features flag `features=+m` and llvm
+target `riscv32-unknown-none`.
+
+[RISC-V specification]: https://riscv.org/wp-content/uploads/2015/01/riscv-calling.pdf
+[cargo-prove]: https://docs.succinct.xyz/docs/sp1/getting-started/install
+[sp1-build]: https://crates.io/crates/sp1-build
\ No newline at end of file

From 92244b3a7314e293c3eb9a27fd613d3f1556b27a Mon Sep 17 00:00:00 2001
From: nhtyy <n@push0.dev>
Date: Thu, 13 Mar 2025 14:58:50 -0700
Subject: [PATCH 4/7] fix: pr suggestions, risc32im-succinct-zkvm-elf ->
 riscv32im-succinct-elf

---
 compiler/rustc_target/src/spec/mod.rs                       | 2 +-
 ...v32im_succinct_zkvm_elf.rs => riscv32im_succinct_elf.rs} | 2 +-
 src/bootstrap/src/core/sanity.rs                            | 2 +-
 src/doc/rustc/src/SUMMARY.md                                | 2 +-
 ...v32im-succinct-zkvm-elf.md => riscv32im-succinct-elf.md} | 2 +-
 src/tools/build-manifest/src/main.rs                        | 2 +-
 tests/assembly/targets/targets-elf.rs                       | 6 +++---
 7 files changed, 9 insertions(+), 9 deletions(-)
 rename compiler/rustc_target/src/spec/targets/{riscv32im_succinct_zkvm_elf.rs => riscv32im_succinct_elf.rs} (93%)
 rename src/doc/rustc/src/platform-support/{riscv32im-succinct-zkvm-elf.md => riscv32im-succinct-elf.md} (99%)

diff --git a/compiler/rustc_target/src/spec/mod.rs b/compiler/rustc_target/src/spec/mod.rs
index 5bedab81aef99..2c6ff9bdab665 100644
--- a/compiler/rustc_target/src/spec/mod.rs
+++ b/compiler/rustc_target/src/spec/mod.rs
@@ -1954,7 +1954,7 @@ supported_targets! {
 
     ("riscv32i-unknown-none-elf", riscv32i_unknown_none_elf),
     ("riscv32im-risc0-zkvm-elf", riscv32im_risc0_zkvm_elf),
-    ("riscv32im-succinct-zkvm-elf", riscv32im_succinct_zkvm_elf),
+    ("riscv32im-succinct-elf", riscv32im_succinct_elf),
     ("riscv32im-unknown-none-elf", riscv32im_unknown_none_elf),
     ("riscv32ima-unknown-none-elf", riscv32ima_unknown_none_elf),
     ("riscv32imc-unknown-none-elf", riscv32imc_unknown_none_elf),
diff --git a/compiler/rustc_target/src/spec/targets/riscv32im_succinct_zkvm_elf.rs b/compiler/rustc_target/src/spec/targets/riscv32im_succinct_elf.rs
similarity index 93%
rename from compiler/rustc_target/src/spec/targets/riscv32im_succinct_zkvm_elf.rs
rename to compiler/rustc_target/src/spec/targets/riscv32im_succinct_elf.rs
index db1a61c69688a..03490128a99c6 100644
--- a/compiler/rustc_target/src/spec/targets/riscv32im_succinct_zkvm_elf.rs
+++ b/compiler/rustc_target/src/spec/targets/riscv32im_succinct_elf.rs
@@ -23,7 +23,7 @@ pub(crate) fn target() -> Target {
             cpu: "generic-rv32".into(),
 
             // The zkvm is singlethreaded and all operations are atomic.
-            // The std-lib is compiled with lowered atomicsa and the default Succinct build tools
+            // The std-lib is compiled with lowered atomics and the default Succinct build tools
             // enforce this on programs.
             max_atomic_width: Some(64),
             atomic_cas: true,
diff --git a/src/bootstrap/src/core/sanity.rs b/src/bootstrap/src/core/sanity.rs
index aadc96a794cc1..822246be2a7b5 100644
--- a/src/bootstrap/src/core/sanity.rs
+++ b/src/bootstrap/src/core/sanity.rs
@@ -35,7 +35,7 @@ pub struct Finder {
 const STAGE0_MISSING_TARGETS: &[&str] = &[
     // just a dummy comment so the list doesn't get onelined
     "wasm32-wali-linux-musl",
-    "riscv32im-succinct-zkvm-elf",
+    "riscv32im-succinct-elf",
 ];
 
 /// Minimum version threshold for libstdc++ required when using prebuilt LLVM
diff --git a/src/doc/rustc/src/SUMMARY.md b/src/doc/rustc/src/SUMMARY.md
index 51d4d137a1096..b7037270d0ad4 100644
--- a/src/doc/rustc/src/SUMMARY.md
+++ b/src/doc/rustc/src/SUMMARY.md
@@ -77,7 +77,7 @@
     - [riscv32e\*-unknown-none-elf](platform-support/riscv32e-unknown-none-elf.md)
     - [riscv32i\*-unknown-none-elf](platform-support/riscv32-unknown-none-elf.md)
     - [riscv32im-risc0-zkvm-elf](platform-support/riscv32im-risc0-zkvm-elf.md)
-    - [riscv32im-succinct-zkvm-elf](platform-support/riscv32im-succinct-zkvm-elf.md)
+    - [riscv32im-succinct-elf](platform-support/riscv32im-succinct-elf.md)
     - [riscv32imac-unknown-xous-elf](platform-support/riscv32imac-unknown-xous-elf.md)
     - [riscv64gc-unknown-linux-gnu](platform-support/riscv64gc-unknown-linux-gnu.md)
     - [riscv64gc-unknown-linux-musl](platform-support/riscv64gc-unknown-linux-musl.md)
diff --git a/src/doc/rustc/src/platform-support/riscv32im-succinct-zkvm-elf.md b/src/doc/rustc/src/platform-support/riscv32im-succinct-elf.md
similarity index 99%
rename from src/doc/rustc/src/platform-support/riscv32im-succinct-zkvm-elf.md
rename to src/doc/rustc/src/platform-support/riscv32im-succinct-elf.md
index 5cdab3da22ca8..f120406cc8970 100644
--- a/src/doc/rustc/src/platform-support/riscv32im-succinct-zkvm-elf.md
+++ b/src/doc/rustc/src/platform-support/riscv32im-succinct-elf.md
@@ -1,4 +1,4 @@
-# `riscv32im-risc0-zkvm-elf`
+# `riscv32im-succinct-elf`
 
 **Tier: 3**
 
diff --git a/src/tools/build-manifest/src/main.rs b/src/tools/build-manifest/src/main.rs
index 809e73e7152ff..b01151e350bf9 100644
--- a/src/tools/build-manifest/src/main.rs
+++ b/src/tools/build-manifest/src/main.rs
@@ -138,7 +138,7 @@ static TARGETS: &[&str] = &[
     "powerpc64le-unknown-linux-musl",
     "riscv32i-unknown-none-elf",
     "riscv32im-risc0-zkvm-elf",
-    "riscv32im-succinct-zkvm-elf",
+    "riscv32im-succinct-elf",
     "riscv32im-unknown-none-elf",
     "riscv32ima-unknown-none-elf",
     "riscv32imc-unknown-none-elf",
diff --git a/tests/assembly/targets/targets-elf.rs b/tests/assembly/targets/targets-elf.rs
index a6821d238e824..cb93cf75ffd82 100644
--- a/tests/assembly/targets/targets-elf.rs
+++ b/tests/assembly/targets/targets-elf.rs
@@ -421,9 +421,9 @@
 //@ revisions: riscv32im_risc0_zkvm_elf
 //@ [riscv32im_risc0_zkvm_elf] compile-flags: --target riscv32im-risc0-zkvm-elf
 //@ [riscv32im_risc0_zkvm_elf] needs-llvm-components: riscv
-//@ revisions: riscv32im_succinct_zkvm_elf
-//@ [riscv32im_succinct_zkvm_elf] compile-flags: --target riscv32im-succinct-zkvm-elf
-//@ [riscv32im_succinct_zkvm_elf] needs-llvm-components: riscv
+//@ revisions: riscv32im_succinct_elf
+//@ [riscv32im_succinct_elf] compile-flags: --target riscv32im-succinct-elf
+//@ [riscv32im_succinct_elf] needs-llvm-components: riscv
 //@ revisions: riscv32im_unknown_none_elf
 //@ [riscv32im_unknown_none_elf] compile-flags: --target riscv32im-unknown-none-elf
 //@ [riscv32im_unknown_none_elf] needs-llvm-components: riscv

From c0f6dfc5bed6fcea62826321173252aa12912fdb Mon Sep 17 00:00:00 2001
From: nhtyy <n@push0.dev>
Date: Fri, 14 Mar 2025 10:49:30 -0700
Subject: [PATCH 5/7] fix: tidy ci

---
 src/doc/rustc/src/platform-support/riscv32im-succinct-elf.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/doc/rustc/src/platform-support/riscv32im-succinct-elf.md b/src/doc/rustc/src/platform-support/riscv32im-succinct-elf.md
index f120406cc8970..c5b9c950c14e6 100644
--- a/src/doc/rustc/src/platform-support/riscv32im-succinct-elf.md
+++ b/src/doc/rustc/src/platform-support/riscv32im-succinct-elf.md
@@ -80,4 +80,4 @@ target `riscv32-unknown-none`.
 
 [RISC-V specification]: https://riscv.org/wp-content/uploads/2015/01/riscv-calling.pdf
 [cargo-prove]: https://docs.succinct.xyz/docs/sp1/getting-started/install
-[sp1-build]: https://crates.io/crates/sp1-build
\ No newline at end of file
+[sp1-build]: https://crates.io/crates/sp1-build

From 24e8fee4e97b243fea3abdaefd2bd1d3d71a1c3e Mon Sep 17 00:00:00 2001
From: nhtyy <n@push0.dev>
Date: Tue, 18 Mar 2025 14:10:43 -0700
Subject: [PATCH 6/7] fix: ui tests

---
 tests/ui/check-cfg/exhaustive-names-values.empty_cfg.stderr | 2 +-
 tests/ui/check-cfg/exhaustive-names-values.feature.stderr   | 2 +-
 tests/ui/check-cfg/exhaustive-names-values.full.stderr      | 2 +-
 tests/ui/check-cfg/well-known-values.stderr                 | 6 +++---
 4 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/tests/ui/check-cfg/exhaustive-names-values.empty_cfg.stderr b/tests/ui/check-cfg/exhaustive-names-values.empty_cfg.stderr
index e7b8f35505761..28597e2ff8ff9 100644
--- a/tests/ui/check-cfg/exhaustive-names-values.empty_cfg.stderr
+++ b/tests/ui/check-cfg/exhaustive-names-values.empty_cfg.stderr
@@ -14,7 +14,7 @@ warning: unexpected `cfg` condition value: `value`
 LL | #[cfg(target_vendor = "value")]
    |       ^^^^^^^^^^^^^^^^^^^^^^^
    |
-   = note: expected values for `target_vendor` are: `amd`, `apple`, `espressif`, `fortanix`, `ibm`, `kmc`, `mti`, `nintendo`, `nvidia`, `pc`, `risc0`, `sony`, `sun`, `unikraft`, `unknown`, `uwp`, `win7`, and `wrs`
+   = note: expected values for `target_vendor` are: `amd`, `apple`, `espressif`, `fortanix`, `ibm`, `kmc`, `mti`, `nintendo`, `nvidia`, `pc`, `risc0`, `sony`, `succinct`, `sun`, `unikraft`, `unknown`, `uwp`, `win7`, and `wrs`
    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
 
 warning: unexpected `cfg` condition name: `feature`
diff --git a/tests/ui/check-cfg/exhaustive-names-values.feature.stderr b/tests/ui/check-cfg/exhaustive-names-values.feature.stderr
index 95af0a9092993..bd3281baf23af 100644
--- a/tests/ui/check-cfg/exhaustive-names-values.feature.stderr
+++ b/tests/ui/check-cfg/exhaustive-names-values.feature.stderr
@@ -15,7 +15,7 @@ warning: unexpected `cfg` condition value: `value`
 LL | #[cfg(target_vendor = "value")]
    |       ^^^^^^^^^^^^^^^^^^^^^^^
    |
-   = note: expected values for `target_vendor` are: `amd`, `apple`, `espressif`, `fortanix`, `ibm`, `kmc`, `mti`, `nintendo`, `nvidia`, `pc`, `risc0`, `sony`, `sun`, `unikraft`, `unknown`, `uwp`, `win7`, and `wrs`
+   = note: expected values for `target_vendor` are: `amd`, `apple`, `espressif`, `fortanix`, `ibm`, `kmc`, `mti`, `nintendo`, `nvidia`, `pc`, `risc0`, `sony`, `succinct`, `sun`, `unikraft`, `unknown`, `uwp`, `win7`, and `wrs`
    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
 
 warning: unexpected `cfg` condition value: `unk`
diff --git a/tests/ui/check-cfg/exhaustive-names-values.full.stderr b/tests/ui/check-cfg/exhaustive-names-values.full.stderr
index 95af0a9092993..bd3281baf23af 100644
--- a/tests/ui/check-cfg/exhaustive-names-values.full.stderr
+++ b/tests/ui/check-cfg/exhaustive-names-values.full.stderr
@@ -15,7 +15,7 @@ warning: unexpected `cfg` condition value: `value`
 LL | #[cfg(target_vendor = "value")]
    |       ^^^^^^^^^^^^^^^^^^^^^^^
    |
-   = note: expected values for `target_vendor` are: `amd`, `apple`, `espressif`, `fortanix`, `ibm`, `kmc`, `mti`, `nintendo`, `nvidia`, `pc`, `risc0`, `sony`, `sun`, `unikraft`, `unknown`, `uwp`, `win7`, and `wrs`
+   = note: expected values for `target_vendor` are: `amd`, `apple`, `espressif`, `fortanix`, `ibm`, `kmc`, `mti`, `nintendo`, `nvidia`, `pc`, `risc0`, `sony`, `succinct`, `sun`, `unikraft`, `unknown`, `uwp`, `win7`, and `wrs`
    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
 
 warning: unexpected `cfg` condition value: `unk`
diff --git a/tests/ui/check-cfg/well-known-values.stderr b/tests/ui/check-cfg/well-known-values.stderr
index ba1900fcddb2d..39e0fb675d86d 100644
--- a/tests/ui/check-cfg/well-known-values.stderr
+++ b/tests/ui/check-cfg/well-known-values.stderr
@@ -201,7 +201,7 @@ warning: unexpected `cfg` condition value: `_UNEXPECTED_VALUE`
 LL |     target_os = "_UNEXPECTED_VALUE",
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
-   = note: expected values for `target_os` are: `aix`, `amdhsa`, `android`, `cuda`, `cygwin`, `dragonfly`, `emscripten`, `espidf`, `freebsd`, `fuchsia`, `haiku`, `hermit`, `horizon`, `hurd`, `illumos`, `ios`, `l4re`, `linux`, `macos`, `netbsd`, `none`, `nto`, `nuttx`, `openbsd`, `psp`, `psx`, `redox`, `rtems`, `solaris`, `solid_asp3`, `teeos`, `trusty`, `tvos`, `uefi`, `unknown`, `visionos`, `vita`, `vxworks`, `wasi`, `watchos`, `windows`, `xous`, and `zkvm`
+   = note: expected values for `target_os` are: `aix`, `amdhsa`, `android`, `cuda`, `cygwin`, `dragonfly`, `emscripten`, `espidf`, `freebsd`, `fuchsia`, `haiku`, `hermit`, `horizon`, `hurd`, `illumos`, `ios`, `l4re`, `linux`, `macos`, `netbsd`, `none`, `nto`, `nuttx`, `openbsd`, `psp`, `psx`, `redox`, `rtems`, `solaris`, `solid_asp3`, `succinct-zkvm`, `teeos`, `trusty`, `tvos`, `uefi`, `unknown`, `visionos`, `vita`, `vxworks`, `wasi`, `watchos`, `windows`, `xous`, and `zkvm`
    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
 
 warning: unexpected `cfg` condition value: `_UNEXPECTED_VALUE`
@@ -230,7 +230,7 @@ warning: unexpected `cfg` condition value: `_UNEXPECTED_VALUE`
 LL |     target_vendor = "_UNEXPECTED_VALUE",
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
-   = note: expected values for `target_vendor` are: `amd`, `apple`, `espressif`, `fortanix`, `ibm`, `kmc`, `mti`, `nintendo`, `nvidia`, `pc`, `risc0`, `sony`, `sun`, `unikraft`, `unknown`, `uwp`, `win7`, and `wrs`
+   = note: expected values for `target_vendor` are: `amd`, `apple`, `espressif`, `fortanix`, `ibm`, `kmc`, `mti`, `nintendo`, `nvidia`, `pc`, `risc0`, `sony`, `succinct`, `sun`, `unikraft`, `unknown`, `uwp`, `win7`, and `wrs`
    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
 
 warning: unexpected `cfg` condition value: `_UNEXPECTED_VALUE`
@@ -274,7 +274,7 @@ LL | #[cfg(target_os = "linuz")] // testing that we suggest `linux`
    |                   |
    |                   help: there is a expected value with a similar name: `"linux"`
    |
-   = note: expected values for `target_os` are: `aix`, `amdhsa`, `android`, `cuda`, `cygwin`, `dragonfly`, `emscripten`, `espidf`, `freebsd`, `fuchsia`, `haiku`, `hermit`, `horizon`, `hurd`, `illumos`, `ios`, `l4re`, `linux`, `macos`, `netbsd`, `none`, `nto`, `nuttx`, `openbsd`, `psp`, `psx`, `redox`, `rtems`, `solaris`, `solid_asp3`, `teeos`, `trusty`, `tvos`, `uefi`, `unknown`, `visionos`, `vita`, `vxworks`, `wasi`, `watchos`, `windows`, `xous`, and `zkvm`
+   = note: expected values for `target_os` are: `aix`, `amdhsa`, `android`, `cuda`, `cygwin`, `dragonfly`, `emscripten`, `espidf`, `freebsd`, `fuchsia`, `haiku`, `hermit`, `horizon`, `hurd`, `illumos`, `ios`, `l4re`, `linux`, `macos`, `netbsd`, `none`, `nto`, `nuttx`, `openbsd`, `psp`, `psx`, `redox`, `rtems`, `solaris`, `solid_asp3`, `succinct-zkvm`, `teeos`, `trusty`, `tvos`, `uefi`, `unknown`, `visionos`, `vita`, `vxworks`, `wasi`, `watchos`, `windows`, `xous`, and `zkvm`
    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
 
 warning: 28 warnings emitted

From 53916e1e1a3507bfabf04984b324e29f2ab3cdbf Mon Sep 17 00:00:00 2001
From: nhtyy <n@push0.dev>
Date: Tue, 18 Mar 2025 15:15:42 -0700
Subject: [PATCH 7/7] fix: add platform support top level docs

---
 src/doc/rustc/src/platform-support.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/doc/rustc/src/platform-support.md b/src/doc/rustc/src/platform-support.md
index c74a9e9849686..3de5b3b00043e 100644
--- a/src/doc/rustc/src/platform-support.md
+++ b/src/doc/rustc/src/platform-support.md
@@ -367,6 +367,7 @@ target | std | host | notes
 `riscv32gc-unknown-linux-gnu` | ✓ |   | RISC-V Linux (kernel 5.4, glibc 2.33)
 `riscv32gc-unknown-linux-musl` | ? |   | RISC-V Linux (kernel 5.4, musl 1.2.3 + RISCV32 support patches)
 [`riscv32im-risc0-zkvm-elf`](platform-support/riscv32im-risc0-zkvm-elf.md) | ? |  | RISC Zero's zero-knowledge Virtual Machine (RV32IM ISA)
+[`riscv32im-succinct-elf`](platform-support/riscv32im-succinct-elf.md) |  |  |
 [`riscv32ima-unknown-none-elf`](platform-support/riscv32-unknown-none-elf.md) | * |  | Bare RISC-V (RV32IMA ISA)
 [`riscv32imac-esp-espidf`](platform-support/esp-idf.md) | ✓ |  | RISC-V ESP-IDF
 [`riscv32imac-unknown-nuttx-elf`](platform-support/nuttx.md) | ✓ |  | RISC-V 32bit with NuttX