aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Stoelp <johannes.stoelp@gmail.com>2022-05-01 22:42:20 +0200
committerJohannes Stoelp <johannes.stoelp@gmail.com>2022-05-01 22:42:20 +0200
commit1128766f9133c3c3cfc2a1c9e58c21ece509ea5b (patch)
treefd3da4310b1f8d7e4653d88e60ab8c7d94bf0127
parent4754b66f72a8fbfd48e30ae0bd12a44d13a4ce10 (diff)
downloadrv64i-linux-user-no-std-1128766f9133c3c3cfc2a1c9e58c21ece509ea5b.tar.gz
rv64i-linux-user-no-std-1128766f9133c3c3cfc2a1c9e58c21ece509ea5b.zip
build core for target
We need to rebuild core for the target specification because we disable certain isa extensions, and the shipped core library is compiled with those extensions.
-rw-r--r--.cargo/config10
-rw-r--r--rust-toolchain.toml4
-rw-r--r--src/main.rs7
3 files changed, 21 insertions, 0 deletions
diff --git a/.cargo/config b/.cargo/config
index 6588394..a6f4904 100644
--- a/.cargo/config
+++ b/.cargo/config
@@ -7,3 +7,13 @@ rustflags = ["-C", "target-feature=-m,-a,-c"]
runner = "qemu-riscv64"
#runner = "qemu-riscv64 -d in_asm"
#runner = "qemu-riscv64 -strace"
+
+[unstable]
+# Shipped core library is build with `imac` extensions, since we disable `mac`
+# we have to rebuild `core`.
+# Unstable features are only enabled with a nightly toolchain:
+# > cargo +nightly build
+#
+# Validate the resulting binary by checking the instructions & encodings:
+# > llvm-objdump -C -d <bin>
+build-std = ["core"]
diff --git a/rust-toolchain.toml b/rust-toolchain.toml
new file mode 100644
index 0000000..9684b6f
--- /dev/null
+++ b/rust-toolchain.toml
@@ -0,0 +1,4 @@
+[toolchain]
+# Required to build with nightly to enable `build-std`, see .cargo/config for
+# more details why.
+channel = "nightly"
diff --git a/src/main.rs b/src/main.rs
index f1ea8b0..9b48fd7 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -18,3 +18,10 @@ fn panic_handler(info: &core::panic::PanicInfo) -> ! {
eprintln!("{}", info);
sys::exit(42);
}
+
+// Since we disable the atomic isa extension, the compiler emits calls to software emulation. We
+// provide the stub to make the linker happy for now.
+#[no_mangle]
+pub fn __atomic_load_8() {
+ panic!("__atomic_load_8 not implemented!");
+}