From 2266921af568291973859bd94b2e202fe893fc44 Mon Sep 17 00:00:00 2001 From: David Craven Date: Tue, 19 Sep 2017 16:37:22 +0200 Subject: [PATCH 001/234] Initial commit. --- riscv-rt/.gitignore | 2 + riscv-rt/Cargo.toml | 13 ++ riscv-rt/README.md | 18 ++ riscv-rt/build.rs | 18 ++ riscv-rt/link.x | 83 +++++++++ riscv-rt/src/lang_items.rs | 45 +++++ riscv-rt/src/lib.rs | 343 +++++++++++++++++++++++++++++++++++++ 7 files changed, 522 insertions(+) create mode 100644 riscv-rt/.gitignore create mode 100644 riscv-rt/Cargo.toml create mode 100644 riscv-rt/README.md create mode 100644 riscv-rt/build.rs create mode 100644 riscv-rt/link.x create mode 100644 riscv-rt/src/lang_items.rs create mode 100644 riscv-rt/src/lib.rs diff --git a/riscv-rt/.gitignore b/riscv-rt/.gitignore new file mode 100644 index 00000000..1e7caa9e --- /dev/null +++ b/riscv-rt/.gitignore @@ -0,0 +1,2 @@ +Cargo.lock +target/ diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml new file mode 100644 index 00000000..ac543add --- /dev/null +++ b/riscv-rt/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "riscv-rt" +version = "0.1.0" +repository = "https://github.com/dvc94ch/riscv-rt" +authors = ["David Craven "] +categories = ["embedded", "no-std"] +description = "Minimal runtime / startup for RISCV CPU's" +keywords = ["riscv", "runtime", "startup"] +license = "ISC" + +[dependencies] +r0 = "0.2.1" +riscv = "0.1.0" diff --git a/riscv-rt/README.md b/riscv-rt/README.md new file mode 100644 index 00000000..1adfd84c --- /dev/null +++ b/riscv-rt/README.md @@ -0,0 +1,18 @@ +# `riscv-rt` + +> Minimal runtime / startup for RISCV CPU's. + +# License +Copyright 2017 David Craven + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. diff --git a/riscv-rt/build.rs b/riscv-rt/build.rs new file mode 100644 index 00000000..4cd56c63 --- /dev/null +++ b/riscv-rt/build.rs @@ -0,0 +1,18 @@ +// NOTE: Adapted from cortex-m/build.rs +use std::env; +use std::fs::File; +use std::io::Write; +use std::path::PathBuf; + +fn main() { + // Put the linker script somewhere the linker can find it + let out = &PathBuf::from(env::var_os("OUT_DIR").unwrap()); + File::create(out.join("link.x")) + .unwrap() + .write_all(include_bytes!("link.x")) + .unwrap(); + println!("cargo:rustc-link-search={}", out.display()); + + println!("cargo:rerun-if-changed=build.rs"); + println!("cargo:rerun-if-changed=link.x"); +} diff --git a/riscv-rt/link.x b/riscv-rt/link.x new file mode 100644 index 00000000..6fb76b98 --- /dev/null +++ b/riscv-rt/link.x @@ -0,0 +1,83 @@ +/* NOTE: Adapted from cortex-m/link.x */ +INCLUDE memory.x + +PROVIDE(_stack_start = ORIGIN(RAM) + LENGTH(RAM)); + +SECTIONS +{ + PROVIDE(_stext = ORIGIN(FLASH)); + + .text _stext : ALIGN(4) + { + /* Put reset handler first in .text section so it ends up as the entry */ + /* point of the program. */ + KEEP(*(.init)); + KEEP(*(.init.rust)); + KEEP(*(.trap)); + KEEP(*(.trap.rust)); + + *(.text .text.*); + } > FLASH + + .rodata : ALIGN(4) + { + *(.rodata .rodata.*); + . = ALIGN(4); + } > FLASH + + .bss : ALIGN(4) + { + _sbss = .; + *(.bss .bss.*); + . = ALIGN(4); + _ebss = .; + } > RAM + + .data : ALIGN(4) + { + _sidata = LOADADDR(.data); + _sdata = .; + /* Must be called __global_pointer$ for linker relaxations to work. */ + PROVIDE(__global_pointer$ = . + 0x800); + *(.data .data.*); + . = ALIGN(4); + _edata = .; + } > RAM AT > FLASH /* LLD fails on AT > FLASH */ + + /* fake output .got section */ + /* Dynamic relocations are unsupported. This section is only used to detect + relocatable code in the input files and raise an error if relocatable code + is found */ + .got : + { + _sgot = .; + KEEP(*(.got .got.*)); + _egot = .; + } > RAM AT > FLASH /* LLD fails on AT > FLASH */ + + /* The heap starts right after the .bss + .data section ends */ + _sheap = _edata; + + /* Due to an unfortunate combination of legacy concerns, + toolchain drawbacks, and insufficient attention to detail, + rustc has no choice but to mark .debug_gdb_scripts as allocatable. + We really do not want to upload it to our target, so we + remove the allocatable bit. Unfortunately, it appears + that the only way to do this in a linker script is + the extremely obscure "INFO" output section type specifier. */ + /* a rustc hack will force the program to read the first byte of this section, + so we'll set the (fake) start address of this section to something we're + sure can be read at runtime: the start of the .text section */ + /* LLD fails to parse _stext (INFO) */ + .debug_gdb_scripts _stext (INFO) : { + KEEP(*(.debug_gdb_scripts)) + } +} + +/* Do not exceed this mark in the error messages below | */ +ASSERT(_sgot == _egot, " +.got section detected in the input files. Dynamic relocations are not +supported. If you are linking to C code compiled using the `gcc` crate +then modify your build script to compile the C code _without_ the +-fPIC flag. See the documentation of the `gcc::Config.fpic` method for +details."); diff --git a/riscv-rt/src/lang_items.rs b/riscv-rt/src/lang_items.rs new file mode 100644 index 00000000..20e0f3fe --- /dev/null +++ b/riscv-rt/src/lang_items.rs @@ -0,0 +1,45 @@ +// NOTE: Adapted from cortex-m/src/lang_items.rs + +use riscv::asm; + +/// Default panic handler +#[linkage = "weak"] +#[lang = "panic_fmt"] +unsafe extern "C" fn panic_fmt( + _: ::core::fmt::Arguments, // fmt + _: &'static str, // file + _: u32, // line + _: u32, // col +) -> ! { + asm::ebreak(); + loop {} +} + +/// Lang item required to make the normal `main` work in applications +// This is how the `start` lang item works: +// When `rustc` compiles a binary crate, it creates a `main` function that looks +// like this: +// +// ``` +// #[export_name = "main"] +// pub extern "C" fn rustc_main(argc: isize, argv: *const *const u8) -> isize { +// start(main) +// } +// ``` +// +// Where `start` is this function and `main` is the binary crate's `main` +// function. +// +// The final piece is that the entry point of our program, the reset handler, +// has to call `rustc_main`. That's covered by the `reset_handler` function in +// root of this crate. +#[lang = "start"] +extern "C" fn start( + main: fn(), + _argc: isize, + _argv: *const *const u8, +) -> isize { + main(); + + 0 +} diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs new file mode 100644 index 00000000..f0d60bb2 --- /dev/null +++ b/riscv-rt/src/lib.rs @@ -0,0 +1,343 @@ +//! Minimal startup / runtime for RISCV CPU's +//! +//! # Features +//! +//! This crate provides +//! +//! - Before main initialization of the `.bss` and `.data` sections. +//! +//! - Before main initialization of the FPU (for targets that have a FPU). +//! +//! - A `panic_fmt` implementation that just calls abort that you can opt into +//! through the "abort-on-panic" Cargo feature. If you don't use this feature +//! you'll have to provide the `panic_fmt` lang item yourself. Documentation +//! [here][1] +//! +//! [1]: https://doc.rust-lang.org/unstable-book/language-features/lang-items.html +//! +//! - A minimal `start` lang item to support the standard `fn main()` +//! interface. (The processor goes to sleep after returning from `main`) +//! +//! - A linker script that encodes the memory layout of a generic RISC-V +//! microcontroller. This linker script is missing some information that must +//! be supplied through a `memory.x` file (see example below). +//! +//! - A `_sheap` symbol at whose address you can locate a heap. +//! +//! ``` text +//! $ cargo new --bin app && cd $_ +//! +//! $ # add this crate as a dependency +//! $ edit Cargo.toml && cat $_ +//! [dependencies.riscv-rt] +//! version = "0.1.0" +//! +//! $ # tell Xargo which standard crates to build +//! $ edit Xargo.toml && cat $_ +//! [dependencies.core] +//! stage = 0 +//! +//! [dependencies.compiler_builtins] +//! features = ["mem"] +//! stage = 1 +//! +//! $ # memory layout of the device +//! $ edit memory.x && cat $_ +//! MEMORY +//! { +//! /* NOTE K = KiBi = 1024 bytes */ +//! FLASH : ORIGIN = 0x08000000, LENGTH = 128K +//! RAM : ORIGIN = 0x20000000, LENGTH = 8K +//! } +//! +//! $ edit src/main.rs && cat $_ +//! ``` +//! +//! ``` ignore,no_run +//! #![no_std] +//! +//! extern crate riscv_rt; +//! +//! fn main() { +//! // do something here +//! } +//! ``` +//! +//! ``` text +//! $ cargo install xargo +//! +//! $ xargo rustc --target riscv32-unknown-none -- \ +//! -C link-arg=-Tlink.x -C linker=riscv32-unknown-elf-ld -Z linker-flavor=ld +//! +//! $ riscv32-unknown-elf-objdump -Cd $(find target -name app) | head +//! +//! Disassembly of section .text: +//! +//! 20400000 <_start>: +//! 20400000: 800011b7 lui gp,0x80001 +//! 20400004: 80018193 addi gp,gp,-2048 # 80000800 <_stack_start+0xffffc800> +//! 20400008: 80004137 lui sp,0x80004 +//! ``` +//! +//! # Symbol interfaces +//! +//! This crate makes heavy use of symbols, linker sections and linker scripts to +//! provide most of its functionality. Below are described the main symbol +//! interfaces. +//! +//! ## `memory.x` +//! +//! This file supplies the information about the device to the linker. +//! +//! ### `MEMORY` +//! +//! The main information that this file must provide is the memory layout of +//! the device in the form of the `MEMORY` command. The command is documented +//! [here][2], but at a minimum you'll want to create two memory regions: one +//! for Flash memory and another for RAM. +//! +//! [2]: https://sourceware.org/binutils/docs/ld/MEMORY.html +//! +//! The program instructions (the `.text` section) will be stored in the memory +//! region named FLASH, and the program `static` variables (the sections `.bss` +//! and `.data`) will be allocated in the memory region named RAM. +//! +//! ### `_stack_start` +//! +//! This symbol provides the address at which the call stack will be allocated. +//! The call stack grows downwards so this address is usually set to the highest +//! valid RAM address plus one (this *is* an invalid address but the processor +//! will decrement the stack pointer *before* using its value as an address). +//! +//! If omitted this symbol value will default to `ORIGIN(RAM) + LENGTH(RAM)`. +//! +//! #### Example +//! +//! Allocating the call stack on a different RAM region. +//! +//! ``` +//! MEMORY +//! { +//! /* call stack will go here */ +//! CCRAM : ORIGIN = 0x10000000, LENGTH = 8K +//! FLASH : ORIGIN = 0x08000000, LENGTH = 256K +//! /* static variables will go here */ +//! RAM : ORIGIN = 0x20000000, LENGTH = 40K +//! } +//! +//! _stack_start = ORIGIN(CCRAM) + LENGTH(CCRAM); +//! ``` +//! +//! ### `_sheap` +//! +//! This symbol is located in RAM right after the `.bss` and `.data` sections. +//! You can use the address of this symbol as the start address of a heap +//! region. This symbol is 4 byte aligned so that address will be a multiple of +//! 4. +//! +//! #### Example +//! +//! ``` +//! extern crate some_allocator; +//! +//! // Size of the heap in bytes +//! const SIZE: usize = 1024; +//! +//! extern "C" { +//! static mut _sheap: u8; +//! } +//! +//! fn main() { +//! unsafe { +//! let start_address = &mut _sheap as *mut u8; +//! some_allocator::initialize(start_address, SIZE); +//! } +//! } +//! ``` + +// NOTE: Adapted from cortex-m/src/lib.rs +#![no_std] +#![deny(missing_docs)] +#![deny(warnings)] +#![feature(asm)] +#![feature(compiler_builtins_lib)] +#![feature(const_fn)] +#![feature(global_asm)] +#![feature(lang_items)] +#![feature(linkage)] +#![feature(naked_functions)] +#![feature(used)] + +extern crate compiler_builtins; +extern crate riscv; +extern crate r0; + +mod lang_items; + +use riscv::{asm, csr}; +pub use riscv::csr::{Trap, Interrupt, Exception}; + +extern "C" { + // NOTE `rustc` forces this signature on us. See `src/lang_items.rs` + fn main(argc: isize, argv: *const *const u8) -> isize; + + // Boundaries of the .bss section + static mut _ebss: u32; + static mut _sbss: u32; + + // Boundaries of the .data section + static mut _edata: u32; + static mut _sdata: u32; + + // Initial values of the .data section (stored in Flash) + static _sidata: u32; + + // Address of _start_trap + static _start_trap: u32; +} + + +/// Entry point of all programs (_start). +/// +/// It initializes DWARF call frame information, the stack pointer, the +/// frame pointer (needed for closures to work in start_rust) and the global +/// pointer. Then it calls _start_rust. +// FIXME: .option push, .option norelax and .option pop directives aren't +// supported by the llvm backend yet. +global_asm!(r#" +.section .init +.globl _start +_start: + .cfi_startproc + .cfi_undefined ra + + // .option push + // .option norelax + lui gp, %hi(__global_pointer$) + addi gp, gp, %lo(__global_pointer$) + // .option pop + + lui sp, %hi(_stack_start) + addi sp, sp, %lo(_stack_start) + + add s0, sp, zero + + jal zero, _start_rust + + .cfi_endproc +"#); + + +/// Rust entry point (_start_rust) +/// +/// Zeros bss section, initializes data section and calls main. This function +/// never returns. +#[naked] +#[link_section = ".init.rust"] +#[export_name = "_start_rust"] +pub extern "C" fn start_rust() -> ! { + unsafe { + r0::zero_bss(&mut _sbss, &mut _ebss); + r0::init_data(&mut _sdata, &mut _edata, &_sidata); + } + + // TODO: Enable FPU when available + + // Set mtvec to _start_trap + unsafe { + // csr::mtvec.write(|w| w.bits(_start_trap)); + asm!("csrrw zero, 0x305, $0" + : + : "r"(&_start_trap) + : + : "volatile"); + } + + // Neither `argc` or `argv` make sense in bare metal context so we + // just stub them + unsafe { + main(0, ::core::ptr::null()); + } + + // If `main` returns, then we go into "reactive" mode and simply attend + // interrupts as they occur. + loop { + asm::wfi(); + } +} + + +/// Trap entry point (_start_trap) +/// +/// Saves caller saved registers ra, t0..6, a0..7, calls _start_trap_rust, +/// restores caller saved registers and then returns. +global_asm!(r#" + .section .trap + .align 4 + .global _start_trap + +_start_trap: + addi sp, sp, -16*4 + + sw ra, 1*4(sp) + sw t0, 2*4(sp) + sw t1, 3*4(sp) + sw t2, 4*4(sp) + sw t3, 5*4(sp) + sw t4, 6*4(sp) + sw t5, 7*4(sp) + sw t6, 8*4(sp) + sw a0, 9*4(sp) + sw a1, 10*4(sp) + sw a2, 11*4(sp) + sw a3, 12*4(sp) + sw a4, 13*4(sp) + sw a5, 14*4(sp) + sw a6, 15*4(sp) + sw a7, 16*4(sp) + + jal ra, _start_trap_rust + + lw ra, 1*4(sp) + lw t0, 2*4(sp) + lw t1, 3*4(sp) + lw t2, 4*4(sp) + lw t3, 5*4(sp) + lw t4, 6*4(sp) + lw t5, 7*4(sp) + lw t6, 8*4(sp) + lw a0, 9*4(sp) + lw a1, 10*4(sp) + lw a2, 11*4(sp) + lw a3, 12*4(sp) + lw a4, 13*4(sp) + lw a5, 14*4(sp) + lw a6, 15*4(sp) + lw a7, 16*4(sp) + + addi sp, sp, 16*4 + mret +"#); + + +/// Trap entry point rust (_start_trap_rust) +/// +/// mcause is read to determine the cause of the trap. XLEN-1 bit indicates +/// if it's an interrupt or an exception. The result is converted to an element +/// of the Interrupt or Exception enum and passed to handle_interrupt or +/// handle_exception. +#[link_section = ".trap.rust"] +#[export_name = "_start_trap_rust"] +pub extern "C" fn start_trap_rust() { + // dispatch trap to handler + trap_handler(csr::mcause.read().cause()); + // mstatus, remain in M-mode after mret + csr::mstatus.set(|w| w.mpp(csr::MPP::Machine)); +} + + +/// Default Trap Handler +#[used] +#[no_mangle] +#[linkage = "weak"] +fn trap_handler(_: Trap) {} From a7f61b8a1c7301cfd54f95769376fbd287c4785c Mon Sep 17 00:00:00 2001 From: David Craven Date: Sat, 18 Nov 2017 09:48:52 +0100 Subject: [PATCH 002/234] Allow compiling on x86_64 for publishing. --- riscv-rt/Cargo.toml | 2 +- riscv-rt/src/lib.rs | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index ac543add..3e1882f8 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -10,4 +10,4 @@ license = "ISC" [dependencies] r0 = "0.2.1" -riscv = "0.1.0" +riscv = "0.1.1" diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index f0d60bb2..be49dbef 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -202,8 +202,7 @@ extern "C" { /// It initializes DWARF call frame information, the stack pointer, the /// frame pointer (needed for closures to work in start_rust) and the global /// pointer. Then it calls _start_rust. -// FIXME: .option push, .option norelax and .option pop directives aren't -// supported by the llvm backend yet. +#[cfg(target_arch = "riscv")] global_asm!(r#" .section .init .globl _start @@ -244,6 +243,7 @@ pub extern "C" fn start_rust() -> ! { // TODO: Enable FPU when available // Set mtvec to _start_trap + #[cfg(target_arch = "riscv")] unsafe { // csr::mtvec.write(|w| w.bits(_start_trap)); asm!("csrrw zero, 0x305, $0" @@ -271,6 +271,7 @@ pub extern "C" fn start_rust() -> ! { /// /// Saves caller saved registers ra, t0..6, a0..7, calls _start_trap_rust, /// restores caller saved registers and then returns. +#[cfg(target_arch = "riscv")] global_asm!(r#" .section .trap .align 4 From 1f4dc285e7a8410f701e6437ef9c60bf18724f9e Mon Sep 17 00:00:00 2001 From: David Craven Date: Sat, 18 Nov 2017 09:49:36 +0100 Subject: [PATCH 003/234] Bump version to 0.1.1 --- riscv-rt/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index 3e1882f8..4fa3546d 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "riscv-rt" -version = "0.1.0" +version = "0.1.1" repository = "https://github.com/dvc94ch/riscv-rt" authors = ["David Craven "] categories = ["embedded", "no-std"] From 984abfd6e8ac60bc3da7681ed17009346f6fce20 Mon Sep 17 00:00:00 2001 From: David Craven Date: Sat, 18 Nov 2017 14:11:52 +0100 Subject: [PATCH 004/234] Bump version to 0.1.2 --- riscv-rt/Cargo.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index 4fa3546d..05f9649c 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "riscv-rt" -version = "0.1.1" +version = "0.1.2" repository = "https://github.com/dvc94ch/riscv-rt" authors = ["David Craven "] categories = ["embedded", "no-std"] @@ -9,5 +9,5 @@ keywords = ["riscv", "runtime", "startup"] license = "ISC" [dependencies] -r0 = "0.2.1" -riscv = "0.1.1" +r0 = "^0.2.1" +riscv = "^0.1.1" From 801cb5a16bf0bfa96c0ce8f8c8e56ebd53386332 Mon Sep 17 00:00:00 2001 From: David Craven Date: Sat, 18 Nov 2017 14:25:39 +0100 Subject: [PATCH 005/234] Bump version to 0.1.3 --- riscv-rt/Cargo.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index 05f9649c..c5aa5817 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "riscv-rt" -version = "0.1.2" +version = "0.1.3" repository = "https://github.com/dvc94ch/riscv-rt" authors = ["David Craven "] categories = ["embedded", "no-std"] @@ -10,4 +10,4 @@ license = "ISC" [dependencies] r0 = "^0.2.1" -riscv = "^0.1.1" +riscv = "^0.1.3" From f210ac26b1719c8ebb406611cd40cc756c1b9811 Mon Sep 17 00:00:00 2001 From: David Craven Date: Mon, 20 Nov 2017 14:32:45 +0100 Subject: [PATCH 006/234] Use git version. --- riscv-rt/Cargo.toml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index c5aa5817..80e6c534 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -10,4 +10,6 @@ license = "ISC" [dependencies] r0 = "^0.2.1" -riscv = "^0.1.3" + +[dependencies.riscv] +git = "https://github.com/dvc94ch/riscv" From d0e2bab6098839ebc41e1004ab9dd7ea6c86fb59 Mon Sep 17 00:00:00 2001 From: David Craven Date: Tue, 21 Nov 2017 10:56:45 +0100 Subject: [PATCH 007/234] Fix stack calculation. --- riscv-rt/src/lib.rs | 64 ++++++++++++++++++++++----------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index be49dbef..07869181 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -280,41 +280,41 @@ global_asm!(r#" _start_trap: addi sp, sp, -16*4 - sw ra, 1*4(sp) - sw t0, 2*4(sp) - sw t1, 3*4(sp) - sw t2, 4*4(sp) - sw t3, 5*4(sp) - sw t4, 6*4(sp) - sw t5, 7*4(sp) - sw t6, 8*4(sp) - sw a0, 9*4(sp) - sw a1, 10*4(sp) - sw a2, 11*4(sp) - sw a3, 12*4(sp) - sw a4, 13*4(sp) - sw a5, 14*4(sp) - sw a6, 15*4(sp) - sw a7, 16*4(sp) + sw ra, 0*4(sp) + sw t0, 1*4(sp) + sw t1, 2*4(sp) + sw t2, 3*4(sp) + sw t3, 4*4(sp) + sw t4, 5*4(sp) + sw t5, 6*4(sp) + sw t6, 7*4(sp) + sw a0, 8*4(sp) + sw a1, 9*4(sp) + sw a2, 10*4(sp) + sw a3, 11*4(sp) + sw a4, 12*4(sp) + sw a5, 13*4(sp) + sw a6, 14*4(sp) + sw a7, 15*4(sp) jal ra, _start_trap_rust - lw ra, 1*4(sp) - lw t0, 2*4(sp) - lw t1, 3*4(sp) - lw t2, 4*4(sp) - lw t3, 5*4(sp) - lw t4, 6*4(sp) - lw t5, 7*4(sp) - lw t6, 8*4(sp) - lw a0, 9*4(sp) - lw a1, 10*4(sp) - lw a2, 11*4(sp) - lw a3, 12*4(sp) - lw a4, 13*4(sp) - lw a5, 14*4(sp) - lw a6, 15*4(sp) - lw a7, 16*4(sp) + lw ra, 0*4(sp) + lw t0, 1*4(sp) + lw t1, 2*4(sp) + lw t2, 3*4(sp) + lw t3, 4*4(sp) + lw t4, 5*4(sp) + lw t5, 6*4(sp) + lw t6, 7*4(sp) + lw a0, 8*4(sp) + lw a1, 9*4(sp) + lw a2, 10*4(sp) + lw a3, 11*4(sp) + lw a4, 12*4(sp) + lw a5, 13*4(sp) + lw a6, 14*4(sp) + lw a7, 15*4(sp) addi sp, sp, 16*4 mret From 218d27bbd32b171118c2ba22ce9c83741adbdf6b Mon Sep 17 00:00:00 2001 From: David Craven Date: Fri, 23 Feb 2018 11:28:31 +0100 Subject: [PATCH 008/234] Add termination trait to lang-items. --- riscv-rt/Cargo.toml | 4 +--- riscv-rt/src/lang_items.rs | 19 ++++++++++++++++--- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index 80e6c534..0c6e5444 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -10,6 +10,4 @@ license = "ISC" [dependencies] r0 = "^0.2.1" - -[dependencies.riscv] -git = "https://github.com/dvc94ch/riscv" +riscv = { path = "../riscv" } diff --git a/riscv-rt/src/lang_items.rs b/riscv-rt/src/lang_items.rs index 20e0f3fe..eb8093ac 100644 --- a/riscv-rt/src/lang_items.rs +++ b/riscv-rt/src/lang_items.rs @@ -3,7 +3,6 @@ use riscv::asm; /// Default panic handler -#[linkage = "weak"] #[lang = "panic_fmt"] unsafe extern "C" fn panic_fmt( _: ::core::fmt::Arguments, // fmt @@ -34,12 +33,26 @@ unsafe extern "C" fn panic_fmt( // has to call `rustc_main`. That's covered by the `reset_handler` function in // root of this crate. #[lang = "start"] -extern "C" fn start( +extern "C" fn lang_start( main: fn(), _argc: isize, _argv: *const *const u8, -) -> isize { +) -> isize + where + T: Termination, +{ main(); 0 } + +#[lang = "termination"] +pub trait Termination { + fn report(self) -> i32; +} + +impl Termination for () { + fn report(self) -> i32 { + 0 + } +} From 3dd9eee3460e614ee1dc98d95fe44bc2127e99fe Mon Sep 17 00:00:00 2001 From: David Craven Date: Tue, 27 Mar 2018 20:15:49 +0200 Subject: [PATCH 009/234] Update to new riscv api. --- riscv-rt/src/lib.rs | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index 07869181..9a82f988 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -174,8 +174,8 @@ extern crate r0; mod lang_items; -use riscv::{asm, csr}; -pub use riscv::csr::{Trap, Interrupt, Exception}; +use riscv::asm; +use riscv::register::{mcause, mstatus, mtvec}; extern "C" { // NOTE `rustc` forces this signature on us. See `src/lang_items.rs` @@ -245,12 +245,7 @@ pub extern "C" fn start_rust() -> ! { // Set mtvec to _start_trap #[cfg(target_arch = "riscv")] unsafe { - // csr::mtvec.write(|w| w.bits(_start_trap)); - asm!("csrrw zero, 0x305, $0" - : - : "r"(&_start_trap) - : - : "volatile"); + mtvec::write(_start_trap as usize, mtvec::TrapMode::Direct); } // Neither `argc` or `argv` make sense in bare metal context so we @@ -331,9 +326,11 @@ _start_trap: #[export_name = "_start_trap_rust"] pub extern "C" fn start_trap_rust() { // dispatch trap to handler - trap_handler(csr::mcause.read().cause()); + trap_handler(mcause::read().cause()); // mstatus, remain in M-mode after mret - csr::mstatus.set(|w| w.mpp(csr::MPP::Machine)); + unsafe { + mstatus::set_mpp(mstatus::MPP::Machine); + } } @@ -341,4 +338,4 @@ pub extern "C" fn start_trap_rust() { #[used] #[no_mangle] #[linkage = "weak"] -fn trap_handler(_: Trap) {} +fn trap_handler(_: mcause::Trap) {} From c7b2bbbe4df1fd3b65729f8fec4cc321a9ec0d12 Mon Sep 17 00:00:00 2001 From: David Craven Date: Wed, 28 Mar 2018 17:52:49 +0200 Subject: [PATCH 010/234] Revert mtvec. --- riscv-rt/src/lib.rs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index 9a82f988..a91bf657 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -175,7 +175,7 @@ extern crate r0; mod lang_items; use riscv::asm; -use riscv::register::{mcause, mstatus, mtvec}; +use riscv::register::{mcause, mstatus}; extern "C" { // NOTE `rustc` forces this signature on us. See `src/lang_items.rs` @@ -245,7 +245,12 @@ pub extern "C" fn start_rust() -> ! { // Set mtvec to _start_trap #[cfg(target_arch = "riscv")] unsafe { - mtvec::write(_start_trap as usize, mtvec::TrapMode::Direct); + //mtvec::write(_start_trap as usize, mtvec::TrapMode::Direct); + asm!("csrrw zero, 0x305, $0" + : + : "r"(&_start_trap) + : + : "volatile"); } // Neither `argc` or `argv` make sense in bare metal context so we From 03dec09e183dc3e0dfd15903083ac53f908b4a25 Mon Sep 17 00:00:00 2001 From: David Craven Date: Sat, 31 Mar 2018 11:48:29 +0200 Subject: [PATCH 011/234] Show heap/stack size. --- riscv-rt/link.x | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/riscv-rt/link.x b/riscv-rt/link.x index 6fb76b98..5af49bf1 100644 --- a/riscv-rt/link.x +++ b/riscv-rt/link.x @@ -25,15 +25,15 @@ SECTIONS . = ALIGN(4); } > FLASH - .bss : ALIGN(4) + PROVIDE(_sbss = ORIGIN(RAM)); + .bss _sbss : ALIGN(4) { - _sbss = .; *(.bss .bss.*); . = ALIGN(4); _ebss = .; } > RAM - .data : ALIGN(4) + .data _ebss : ALIGN(4) { _sidata = LOADADDR(.data); _sdata = .; @@ -44,6 +44,25 @@ SECTIONS _edata = .; } > RAM AT > FLASH /* LLD fails on AT > FLASH */ + PROVIDE(_heap_size = 0); + + /* fictitious region that represents the memory available for the heap */ + .heap _edata (INFO) : ALIGN(4) + { + _sheap = .; + . += _heap_size; + . = ALIGN(4); + _eheap = .; + } + + /* fictitious region that represents the memory available for the stack */ + .stack _eheap (INFO) : ALIGN(4) + { + _estack = .; + . = _stack_start; + _sstack = .; + } + /* fake output .got section */ /* Dynamic relocations are unsupported. This section is only used to detect relocatable code in the input files and raise an error if relocatable code @@ -55,8 +74,6 @@ SECTIONS _egot = .; } > RAM AT > FLASH /* LLD fails on AT > FLASH */ - /* The heap starts right after the .bss + .data section ends */ - _sheap = _edata; /* Due to an unfortunate combination of legacy concerns, toolchain drawbacks, and insufficient attention to detail, From 030c12f3600d2630b96670ad72c04dfb6aa8809e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emil=20Gardstr=C3=B6m?= Date: Tue, 24 Apr 2018 22:23:53 +0200 Subject: [PATCH 012/234] Fix for newest breakage, closes #3 --- riscv-rt/Cargo.toml | 4 ++++ riscv-rt/build.rs | 10 ++++++++++ riscv-rt/src/lib.rs | 3 ++- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index 0c6e5444..6a13a681 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -11,3 +11,7 @@ license = "ISC" [dependencies] r0 = "^0.2.1" riscv = { path = "../riscv" } + +[build-dependencies] +rustc_version = "0.2.1" +chrono = "0.4.0" diff --git a/riscv-rt/build.rs b/riscv-rt/build.rs index 4cd56c63..4b615413 100644 --- a/riscv-rt/build.rs +++ b/riscv-rt/build.rs @@ -1,10 +1,20 @@ +extern crate chrono; +extern crate rustc_version; + // NOTE: Adapted from cortex-m/build.rs use std::env; use std::fs::File; use std::io::Write; use std::path::PathBuf; +use chrono::NaiveDate; + fn main() { + let meta = rustc_version::version_meta().unwrap(); + // newest nightlies don't need 'extern crate compiler_builtins' + if meta.commit_date.unwrap().parse::().unwrap() < NaiveDate::from_ymd(2018, 04, 07) { + println!("cargo:rustc-cfg=needs_cb") + } // Put the linker script somewhere the linker can find it let out = &PathBuf::from(env::var_os("OUT_DIR").unwrap()); File::create(out.join("link.x")) diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index a91bf657..92610b36 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -160,7 +160,7 @@ #![deny(missing_docs)] #![deny(warnings)] #![feature(asm)] -#![feature(compiler_builtins_lib)] +#![cfg_attr(needs_cb, feature(compiler_builtins_lib))] #![feature(const_fn)] #![feature(global_asm)] #![feature(lang_items)] @@ -168,6 +168,7 @@ #![feature(naked_functions)] #![feature(used)] +#[cfg(needs_cb)] extern crate compiler_builtins; extern crate riscv; extern crate r0; From 944d65e9420142a0199fffbdc4d5b7c3225f60ed Mon Sep 17 00:00:00 2001 From: David Craven Date: Tue, 24 Jul 2018 16:03:16 +0200 Subject: [PATCH 013/234] Revert "Fix for newest breakage, closes #3" This reverts commit 030c12f3600d2630b96670ad72c04dfb6aa8809e. --- riscv-rt/Cargo.toml | 4 ---- riscv-rt/build.rs | 10 ---------- riscv-rt/src/lib.rs | 3 +-- 3 files changed, 1 insertion(+), 16 deletions(-) diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index 6a13a681..0c6e5444 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -11,7 +11,3 @@ license = "ISC" [dependencies] r0 = "^0.2.1" riscv = { path = "../riscv" } - -[build-dependencies] -rustc_version = "0.2.1" -chrono = "0.4.0" diff --git a/riscv-rt/build.rs b/riscv-rt/build.rs index 4b615413..4cd56c63 100644 --- a/riscv-rt/build.rs +++ b/riscv-rt/build.rs @@ -1,20 +1,10 @@ -extern crate chrono; -extern crate rustc_version; - // NOTE: Adapted from cortex-m/build.rs use std::env; use std::fs::File; use std::io::Write; use std::path::PathBuf; -use chrono::NaiveDate; - fn main() { - let meta = rustc_version::version_meta().unwrap(); - // newest nightlies don't need 'extern crate compiler_builtins' - if meta.commit_date.unwrap().parse::().unwrap() < NaiveDate::from_ymd(2018, 04, 07) { - println!("cargo:rustc-cfg=needs_cb") - } // Put the linker script somewhere the linker can find it let out = &PathBuf::from(env::var_os("OUT_DIR").unwrap()); File::create(out.join("link.x")) diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index 92610b36..a91bf657 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -160,7 +160,7 @@ #![deny(missing_docs)] #![deny(warnings)] #![feature(asm)] -#![cfg_attr(needs_cb, feature(compiler_builtins_lib))] +#![feature(compiler_builtins_lib)] #![feature(const_fn)] #![feature(global_asm)] #![feature(lang_items)] @@ -168,7 +168,6 @@ #![feature(naked_functions)] #![feature(used)] -#[cfg(needs_cb)] extern crate compiler_builtins; extern crate riscv; extern crate r0; From 07bd42efe035dc1e682019cff53c0add2f81b461 Mon Sep 17 00:00:00 2001 From: David Craven Date: Tue, 24 Jul 2018 17:49:40 +0200 Subject: [PATCH 014/234] Update to latest nightly. --- riscv-rt/src/lang_items.rs | 9 ++------- riscv-rt/src/lib.rs | 15 ++++++++++++--- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/riscv-rt/src/lang_items.rs b/riscv-rt/src/lang_items.rs index eb8093ac..4fbe64d3 100644 --- a/riscv-rt/src/lang_items.rs +++ b/riscv-rt/src/lang_items.rs @@ -3,13 +3,8 @@ use riscv::asm; /// Default panic handler -#[lang = "panic_fmt"] -unsafe extern "C" fn panic_fmt( - _: ::core::fmt::Arguments, // fmt - _: &'static str, // file - _: u32, // line - _: u32, // col -) -> ! { +#[panic_implementation] +fn panic_fmt(_info: &core::panic::PanicInfo) -> ! { asm::ebreak(); loop {} } diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index a91bf657..ca17f931 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -162,13 +162,14 @@ #![feature(asm)] #![feature(compiler_builtins_lib)] #![feature(const_fn)] +#![feature(extern_prelude)] #![feature(global_asm)] #![feature(lang_items)] #![feature(linkage)] #![feature(naked_functions)] +#![feature(panic_implementation)] #![feature(used)] -extern crate compiler_builtins; extern crate riscv; extern crate r0; @@ -340,7 +341,15 @@ pub extern "C" fn start_trap_rust() { /// Default Trap Handler -#[used] #[no_mangle] #[linkage = "weak"] -fn trap_handler(_: mcause::Trap) {} +pub fn trap_handler(_: mcause::Trap) {} + +// Make sure there is an abort when linking +#[cfg(target_arch = "riscv")] +global_asm!(r#" +.section .init +.globl abort +abort: + jal zero, _start +"#); From 4a01db823abb88d7a488ca381ff033d153642822 Mon Sep 17 00:00:00 2001 From: Dan Callaghan Date: Sat, 4 Aug 2018 21:57:15 +1000 Subject: [PATCH 015/234] fix target_arch conditionals to match "riscv32" and "riscv64" In the original riscv-rust fork the target arch was simply named "riscv", but RISC-V support landed in Rust with "riscv32" as the arch name instead. Include "riscv64" optimistically for future-proofing. --- riscv-rt/src/lib.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index ca17f931..31c54c04 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -203,7 +203,7 @@ extern "C" { /// It initializes DWARF call frame information, the stack pointer, the /// frame pointer (needed for closures to work in start_rust) and the global /// pointer. Then it calls _start_rust. -#[cfg(target_arch = "riscv")] +#[cfg(any(target_arch = "riscv32", target_arch = "riscv64"))] global_asm!(r#" .section .init .globl _start @@ -244,7 +244,7 @@ pub extern "C" fn start_rust() -> ! { // TODO: Enable FPU when available // Set mtvec to _start_trap - #[cfg(target_arch = "riscv")] + #[cfg(any(target_arch = "riscv32", target_arch = "riscv64"))] unsafe { //mtvec::write(_start_trap as usize, mtvec::TrapMode::Direct); asm!("csrrw zero, 0x305, $0" @@ -272,7 +272,7 @@ pub extern "C" fn start_rust() -> ! { /// /// Saves caller saved registers ra, t0..6, a0..7, calls _start_trap_rust, /// restores caller saved registers and then returns. -#[cfg(target_arch = "riscv")] +#[cfg(any(target_arch = "riscv32", target_arch = "riscv64"))] global_asm!(r#" .section .trap .align 4 @@ -346,7 +346,7 @@ pub extern "C" fn start_trap_rust() { pub fn trap_handler(_: mcause::Trap) {} // Make sure there is an abort when linking -#[cfg(target_arch = "riscv")] +#[cfg(any(target_arch = "riscv32", target_arch = "riscv64"))] global_asm!(r#" .section .init .globl abort From 081756847bf9b361d22ae1a817ab9c925ca3c546 Mon Sep 17 00:00:00 2001 From: Brad Campbell Date: Tue, 7 Aug 2018 17:22:32 -0400 Subject: [PATCH 016/234] lib: make main have no args I'm not sure when this changed, but without this patch the app does not seem to run, and with it the blinky_delay test app works as expected. This is also how it looks in cortex-m-rt: https://github.com/rust-embedded/cortex-m-rt/blob/6c269f195c9a705162fd912beb952b430cc28336/src/lib.rs#L468 --- riscv-rt/src/lib.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index 31c54c04..2d51f936 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -180,7 +180,7 @@ use riscv::register::{mcause, mstatus}; extern "C" { // NOTE `rustc` forces this signature on us. See `src/lang_items.rs` - fn main(argc: isize, argv: *const *const u8) -> isize; + fn main() -> isize; // Boundaries of the .bss section static mut _ebss: u32; @@ -257,7 +257,7 @@ pub extern "C" fn start_rust() -> ! { // Neither `argc` or `argv` make sense in bare metal context so we // just stub them unsafe { - main(0, ::core::ptr::null()); + main(); } // If `main` returns, then we go into "reactive" mode and simply attend From e69a28327019f57e07e4662bd9c789b42060d66f Mon Sep 17 00:00:00 2001 From: Dan Callaghan Date: Fri, 10 Aug 2018 10:50:23 +1000 Subject: [PATCH 017/234] don't declare _start_rust as a "naked" function The #[naked] attribute means Rust won't emit instructions to push and pop a new stack frame. But the assembly routine which calls _start_rust also doesn't push a new stack frame, so there is no valid stack for this function. We probably need a stack frame though, since it's implemented in Rust and we can't easily ensure that Rust won't try to allocate any local variables. See #5. --- riscv-rt/src/lib.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index 2d51f936..1c870b53 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -166,7 +166,6 @@ #![feature(global_asm)] #![feature(lang_items)] #![feature(linkage)] -#![feature(naked_functions)] #![feature(panic_implementation)] #![feature(used)] @@ -232,7 +231,6 @@ _start: /// /// Zeros bss section, initializes data section and calls main. This function /// never returns. -#[naked] #[link_section = ".init.rust"] #[export_name = "_start_rust"] pub extern "C" fn start_rust() -> ! { From 3270dd813f0625831e049bae24df71ef213190fe Mon Sep 17 00:00:00 2001 From: Dan Callaghan Date: Fri, 10 Aug 2018 18:19:47 +1000 Subject: [PATCH 018/234] use #[no_main] and the entry! macro to specify the main function Matches cortex-m-rt. See: https://github.com/rust-embedded/cortex-m-rt/pull/69 https://github.com/rust-embedded/cortex-m-rt/pull/78 --- riscv-rt/src/lib.rs | 47 +++++++++++++++++++++++++++++++++------------ 1 file changed, 35 insertions(+), 12 deletions(-) diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index 1c870b53..cabb2cb5 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -55,10 +55,15 @@ //! //! ``` ignore,no_run //! #![no_std] +//! #![no_main] //! +//! #[macro_use(entry)] //! extern crate riscv_rt; //! -//! fn main() { +//! // use `main` as the entry point of this application +//! entry!(main); +//! +//! fn main() -> ! { //! // do something here //! } //! ``` @@ -174,13 +179,9 @@ extern crate r0; mod lang_items; -use riscv::asm; use riscv::register::{mcause, mstatus}; extern "C" { - // NOTE `rustc` forces this signature on us. See `src/lang_items.rs` - fn main() -> isize; - // Boundaries of the .bss section static mut _ebss: u32; static mut _sbss: u32; @@ -234,6 +235,11 @@ _start: #[link_section = ".init.rust"] #[export_name = "_start_rust"] pub extern "C" fn start_rust() -> ! { + extern "C" { + // This symbol will be provided by the user via the `entry!` macro + fn main() -> !; + } + unsafe { r0::zero_bss(&mut _sbss, &mut _ebss); r0::init_data(&mut _sdata, &mut _edata, &_sidata); @@ -252,17 +258,34 @@ pub extern "C" fn start_rust() -> ! { : "volatile"); } - // Neither `argc` or `argv` make sense in bare metal context so we - // just stub them unsafe { main(); } +} - // If `main` returns, then we go into "reactive" mode and simply attend - // interrupts as they occur. - loop { - asm::wfi(); - } + +/// Macro to define the entry point of the program +/// +/// **NOTE** This macro must be invoked once and must be invoked from an accessible module, ideally +/// from the root of the crate. +/// +/// Usage: `entry!(path::to::entry::point)` +/// +/// The specified function will be called by the reset handler *after* RAM has been initialized. +/// +/// The signature of the specified function must be `fn() -> !` (never ending function). +#[macro_export] +macro_rules! entry { + ($path:expr) => { + #[inline(never)] + #[export_name = "main"] + pub extern "C" fn __impl_main() -> ! { + // validate the signature of the program entry point + let f: fn() -> ! = $path; + + f() + } + }; } From 130686e45bda915a349b6c76cbd2d7400af3cfc1 Mon Sep 17 00:00:00 2001 From: David Craven Date: Sat, 11 Aug 2018 17:58:32 +0200 Subject: [PATCH 019/234] A unified contributing experience. --- riscv-rt/.github/CODEOWNERS | 1 + riscv-rt/.github/bors.toml | 4 +++ riscv-rt/.travis.yml | 50 +++++++++++++++++++++++++++++++++++++ riscv-rt/CODE_OF_CONDUCT.md | 37 +++++++++++++++++++++++++++ riscv-rt/ci/install.sh | 9 +++++++ riscv-rt/ci/script.sh | 11 ++++++++ 6 files changed, 112 insertions(+) create mode 100644 riscv-rt/.github/CODEOWNERS create mode 100644 riscv-rt/.github/bors.toml create mode 100644 riscv-rt/.travis.yml create mode 100644 riscv-rt/CODE_OF_CONDUCT.md create mode 100644 riscv-rt/ci/install.sh create mode 100644 riscv-rt/ci/script.sh diff --git a/riscv-rt/.github/CODEOWNERS b/riscv-rt/.github/CODEOWNERS new file mode 100644 index 00000000..87f6c03f --- /dev/null +++ b/riscv-rt/.github/CODEOWNERS @@ -0,0 +1 @@ +* @rust-embedded/riscv \ No newline at end of file diff --git a/riscv-rt/.github/bors.toml b/riscv-rt/.github/bors.toml new file mode 100644 index 00000000..ca42be0a --- /dev/null +++ b/riscv-rt/.github/bors.toml @@ -0,0 +1,4 @@ +block_labels = ["needs-decision"] +delete_merged_branches = true +required_approvals = 1 +status = ["continuous-integration/travis-ci/push"] diff --git a/riscv-rt/.travis.yml b/riscv-rt/.travis.yml new file mode 100644 index 00000000..a3c9cf27 --- /dev/null +++ b/riscv-rt/.travis.yml @@ -0,0 +1,50 @@ +language: rust + +matrix: + include: + #- env: TARGET=x86_64-unknown-linux-gnu + # if: (branch = staging OR branch = trying OR branch = master) OR (type = pull_request AND branch = master) + + #- env: TARGET=riscv32imac-unknown-none-elf + # if: (branch = staging OR branch = trying OR branch = master) OR (type = pull_request AND branch = master) + + #- env: TARGET=x86_64-unknown-linux-gnu + # rust: beta + # if: (branch = staging OR branch = trying OR branch = master) OR (type = pull_request AND branch = master) + + #- env: TARGET=riscv32imac-unknown-none-elf + # rust: beta + # if: (branch = staging OR branch = trying OR branch = master) OR (type = pull_request AND branch = master) + + - env: TARGET=x86_64-unknown-linux-gnu + rust: nightly + if: (branch = staging OR branch = trying OR branch = master) OR (type = pull_request AND branch = master) + + - env: TARGET=riscv32imac-unknown-none-elf + rust: nightly + if: (branch = staging OR branch = trying OR branch = master) OR (type = pull_request AND branch = master) + +before_install: set -e + +install: + - bash ci/install.sh + +script: + - bash ci/script.sh + +after_script: set +e + +cache: cargo +before_cache: + # Travis can't cache files that are not readable by "others" + - chmod -R a+r $HOME/.cargo + +branches: + only: + - master + - staging + - trying + +notifications: + email: + on_success: never diff --git a/riscv-rt/CODE_OF_CONDUCT.md b/riscv-rt/CODE_OF_CONDUCT.md new file mode 100644 index 00000000..a22c4f68 --- /dev/null +++ b/riscv-rt/CODE_OF_CONDUCT.md @@ -0,0 +1,37 @@ +# The Rust Code of Conduct + +## Conduct + +**Contact**: [RISCV team](https://github.com/rust-embedded/wg#the-riscv-team) + +* We are committed to providing a friendly, safe and welcoming environment for all, regardless of level of experience, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, religion, nationality, or other similar characteristic. +* On IRC, please avoid using overtly sexual nicknames or other nicknames that might detract from a friendly, safe and welcoming environment for all. +* Please be kind and courteous. There's no need to be mean or rude. +* Respect that people have differences of opinion and that every design or implementation choice carries a trade-off and numerous costs. There is seldom a right answer. +* Please keep unstructured critique to a minimum. If you have solid ideas you want to experiment with, make a fork and see how it works. +* We will exclude you from interaction if you insult, demean or harass anyone. That is not welcome behavior. We interpret the term "harassment" as including the definition in the [Citizen Code of Conduct](http://citizencodeofconduct.org/); if you have any lack of clarity about what might be included in that concept, please read their definition. In particular, we don't tolerate behavior that excludes people in socially marginalized groups. +* Private harassment is also unacceptable. No matter who you are, if you feel you have been or are being harassed or made uncomfortable by a community member, please contact one of the channel ops or any of the [RISCV team][team] immediately. Whether you're a regular contributor or a newcomer, we care about making this community a safe place for you and we've got your back. +* Likewise any spamming, trolling, flaming, baiting or other attention-stealing behavior is not welcome. + +## Moderation + +These are the policies for upholding our community's standards of conduct. + +1. Remarks that violate the Rust standards of conduct, including hateful, hurtful, oppressive, or exclusionary remarks, are not allowed. (Cursing is allowed, but never targeting another user, and never in a hateful manner.) +2. Remarks that moderators find inappropriate, whether listed in the code of conduct or not, are also not allowed. +3. Moderators will first respond to such remarks with a warning. +4. If the warning is unheeded, the user will be "kicked," i.e., kicked out of the communication channel to cool off. +5. If the user comes back and continues to make trouble, they will be banned, i.e., indefinitely excluded. +6. Moderators may choose at their discretion to un-ban the user if it was a first offense and they offer the offended party a genuine apology. +7. If a moderator bans someone and you think it was unjustified, please take it up with that moderator, or with a different moderator, **in private**. Complaints about bans in-channel are not allowed. +8. Moderators are held to a higher standard than other community members. If a moderator creates an inappropriate situation, they should expect less leeway than others. + +In the Rust community we strive to go the extra step to look out for each other. Don't just aim to be technically unimpeachable, try to be your best self. In particular, avoid flirting with offensive or sensitive issues, particularly if they're off-topic; this all too often leads to unnecessary fights, hurt feelings, and damaged trust; worse, it can drive people away from the community entirely. + +And if someone takes issue with something you said or did, resist the urge to be defensive. Just stop doing what it was they complained about and apologize. Even if you feel you were misinterpreted or unfairly accused, chances are good there was something you could've communicated better — remember that it's your responsibility to make your fellow Rustaceans comfortable. Everyone wants to get along and we are all here first and foremost because we want to talk about cool technology. You will find that people will be eager to assume good intent and forgive as long as you earn their trust. + +The enforcement policies listed above apply to all official embedded WG venues; including official IRC channels (#rust-embedded); GitHub repositories under rust-embedded; and all forums under rust-embedded.org (forum.rust-embedded.org). + +*Adapted from the [Node.js Policy on Trolling](http://blog.izs.me/post/30036893703/policy-on-trolling) as well as the [Contributor Covenant v1.3.0](https://www.contributor-covenant.org/version/1/3/0/).* + +[team]: https://github.com/rust-embedded/wg#the-riscv-team diff --git a/riscv-rt/ci/install.sh b/riscv-rt/ci/install.sh new file mode 100644 index 00000000..3c419211 --- /dev/null +++ b/riscv-rt/ci/install.sh @@ -0,0 +1,9 @@ +set -euxo pipefail + +main() { + if [ $TARGET != x86_64-unknown-linux-gnu ]; then + rustup target add $TARGET + fi +} + +main diff --git a/riscv-rt/ci/script.sh b/riscv-rt/ci/script.sh new file mode 100644 index 00000000..eb1a3139 --- /dev/null +++ b/riscv-rt/ci/script.sh @@ -0,0 +1,11 @@ +set -euxo pipefail + +main() { + cargo check --target $TARGET + + if [ $TRAVIS_RUST_VERSION = nightly ]; then + cargo check --target $TARGET --features inline-asm + fi +} + +main From 29f304be0495d8706f8107219e1ce9bd6227347e Mon Sep 17 00:00:00 2001 From: David Craven Date: Sun, 12 Aug 2018 09:23:03 +0200 Subject: [PATCH 020/234] Bump version, update deps and url. --- riscv-rt/Cargo.toml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index 0c6e5444..d49f0543 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "riscv-rt" -version = "0.1.3" -repository = "https://github.com/dvc94ch/riscv-rt" +version = "0.2.0" +repository = "https://github.com/rust-embedded/riscv-rt" authors = ["David Craven "] categories = ["embedded", "no-std"] description = "Minimal runtime / startup for RISCV CPU's" @@ -9,5 +9,5 @@ keywords = ["riscv", "runtime", "startup"] license = "ISC" [dependencies] -r0 = "^0.2.1" -riscv = { path = "../riscv" } +r0 = "0.2.2" +riscv = "0.3.0" From 5d0ab8ff87a3a03638fdd18453f74dd97dd70720 Mon Sep 17 00:00:00 2001 From: David Craven Date: Sun, 12 Aug 2018 09:26:27 +0200 Subject: [PATCH 021/234] Update README. --- riscv-rt/README.md | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/riscv-rt/README.md b/riscv-rt/README.md index 1adfd84c..d98b9822 100644 --- a/riscv-rt/README.md +++ b/riscv-rt/README.md @@ -1,9 +1,18 @@ +[![crates.io](https://img.shields.io/crates/d/riscv-rt.svg)](https://crates.io/crates/riscv-rt) +[![crates.io](https://img.shields.io/crates/v/riscv-rt.svg)](https://crates.io/crates/riscv-rt) +[![Build Status](https://travis-ci.org/rust-embedded/riscv-rt.svg?branch=master)](https://travis-ci.org/rust-embedded/riscv-rt) + # `riscv-rt` > Minimal runtime / startup for RISCV CPU's. -# License -Copyright 2017 David Craven +This project is developed and maintained by the [RISCV team][team]. + +## [Documentation](https://docs.rs/crate/riscv-rt) + +## License + +Copyright 2018 [RISCV team][team] Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice @@ -16,3 +25,12 @@ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +## Code of Conduct + +Contribution to this crate is organized under the terms of the [Rust Code of +Conduct][CoC], the maintainer of this crate, the [RISCV team][team], promises +to intervene to uphold that code of conduct. + +[CoC]: CODE_OF_CONDUCT.md +[team]: https://github.com/rust-embedded/wg#the-riscv-team From aa092421a3ac335c5fca6529b8a082f89602e9e2 Mon Sep 17 00:00:00 2001 From: David Craven Date: Sun, 12 Aug 2018 09:27:58 +0200 Subject: [PATCH 022/234] Add inline-asm feature. --- riscv-rt/Cargo.toml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index d49f0543..7af9e563 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -11,3 +11,6 @@ license = "ISC" [dependencies] r0 = "0.2.2" riscv = "0.3.0" + +[features] +inline-asm = [] \ No newline at end of file From a6c53d65feb3f53b88d9d39df215b8a4a4337f35 Mon Sep 17 00:00:00 2001 From: David Craven Date: Sun, 12 Aug 2018 09:42:28 +0200 Subject: [PATCH 023/234] Bump version. --- riscv-rt/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index 7af9e563..bb6a35cd 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "riscv-rt" -version = "0.2.0" +version = "0.3.0" repository = "https://github.com/rust-embedded/riscv-rt" authors = ["David Craven "] categories = ["embedded", "no-std"] From 353894662c446f04c5799a5be6edb257abc27b47 Mon Sep 17 00:00:00 2001 From: Dan Callaghan Date: Sat, 23 Jun 2018 17:41:49 +1000 Subject: [PATCH 024/234] mark .init and .trap sections as executable This is needed for lld, otherwise it will complain about section flag mismatch: ld.lld: error: incompatible section flags for .text >>> target/riscv32imac-unknown-none/debug/deps/libriscv_rt-7850ee1a6233fbe9.rlib(riscv_rt-7850ee1a6233fbe9.4tmuw4s4crjeqbm5.rcgu.o):(.trap): 0x4 >>> output section .text: 0x6 --- riscv-rt/src/lib.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index cabb2cb5..822d9ca0 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -205,7 +205,7 @@ extern "C" { /// pointer. Then it calls _start_rust. #[cfg(any(target_arch = "riscv32", target_arch = "riscv64"))] global_asm!(r#" -.section .init +.section .init, "ax" .globl _start _start: .cfi_startproc @@ -295,7 +295,7 @@ macro_rules! entry { /// restores caller saved registers and then returns. #[cfg(any(target_arch = "riscv32", target_arch = "riscv64"))] global_asm!(r#" - .section .trap + .section .trap, "ax" .align 4 .global _start_trap From 24290f1fd5da59bb59f3a599107df49b2c2d7aa2 Mon Sep 17 00:00:00 2001 From: Dan Callaghan Date: Sun, 24 Jun 2018 14:53:48 +1000 Subject: [PATCH 025/234] remove hackery for .debug_gdb_scripts section This is no longer necessary now that we can configure the target to exclude the .debug_gdb_scripts section. See: https://github.com/rust-lang/rust/pull/53139 --- riscv-rt/link.x | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/riscv-rt/link.x b/riscv-rt/link.x index 5af49bf1..6458683f 100644 --- a/riscv-rt/link.x +++ b/riscv-rt/link.x @@ -73,22 +73,6 @@ SECTIONS KEEP(*(.got .got.*)); _egot = .; } > RAM AT > FLASH /* LLD fails on AT > FLASH */ - - - /* Due to an unfortunate combination of legacy concerns, - toolchain drawbacks, and insufficient attention to detail, - rustc has no choice but to mark .debug_gdb_scripts as allocatable. - We really do not want to upload it to our target, so we - remove the allocatable bit. Unfortunately, it appears - that the only way to do this in a linker script is - the extremely obscure "INFO" output section type specifier. */ - /* a rustc hack will force the program to read the first byte of this section, - so we'll set the (fake) start address of this section to something we're - sure can be read at runtime: the start of the .text section */ - /* LLD fails to parse _stext (INFO) */ - .debug_gdb_scripts _stext (INFO) : { - KEEP(*(.debug_gdb_scripts)) - } } /* Do not exceed this mark in the error messages below | */ From 9b5c0cd41be6b98d5421bbf94ec799d159775beb Mon Sep 17 00:00:00 2001 From: Dan Callaghan Date: Mon, 13 Aug 2018 22:38:29 +1000 Subject: [PATCH 026/234] align VMA not LMA This aligns the VMA (virtual adddress at runtime): .rodata ALIGN(4) : { ... whereas this aligns the LMA (load address): .rodata : ALIGN(4) { ... If we ensure the VMA is aligned the linker will keep the corresponding LMA in sync (and it will be aligned too). Previously, by forcing the LMA to be aligned but leaving the VMA unspecified, the linker would split .text and .rodata into two separate loads because their addresses fell out of sync. --- riscv-rt/link.x | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/riscv-rt/link.x b/riscv-rt/link.x index 6458683f..6a666da0 100644 --- a/riscv-rt/link.x +++ b/riscv-rt/link.x @@ -7,7 +7,7 @@ SECTIONS { PROVIDE(_stext = ORIGIN(FLASH)); - .text _stext : ALIGN(4) + .text ALIGN(_stext,4) : { /* Put reset handler first in .text section so it ends up as the entry */ /* point of the program. */ @@ -19,21 +19,20 @@ SECTIONS *(.text .text.*); } > FLASH - .rodata : ALIGN(4) + .rodata ALIGN(4) : { *(.rodata .rodata.*); - . = ALIGN(4); } > FLASH PROVIDE(_sbss = ORIGIN(RAM)); - .bss _sbss : ALIGN(4) + .bss ALIGN(_sbss,4) : { *(.bss .bss.*); . = ALIGN(4); _ebss = .; } > RAM - .data _ebss : ALIGN(4) + .data _ebss : { _sidata = LOADADDR(.data); _sdata = .; From 19254fa9b32ae372366eb71aa3c1efeaa181c84b Mon Sep 17 00:00:00 2001 From: Dan Callaghan Date: Wed, 15 Aug 2018 14:38:35 +1000 Subject: [PATCH 027/234] discard .eh_frame sections The .cfi_* assembler directives cause call frame information to be emitted in a special .eh_frame section. But this is not needed in the final binary, because we are not doing panic unwinding. GNU ld already discards this section with its (default) --gc-sections behaviour. Lld doesn't do that by default though, instead it complains: rust-lld: error: no memory region specified for section '.eh_frame' So let's explicitly discard the .eh_frame section. --- riscv-rt/link.x | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/riscv-rt/link.x b/riscv-rt/link.x index 6a666da0..0e2bd985 100644 --- a/riscv-rt/link.x +++ b/riscv-rt/link.x @@ -72,6 +72,12 @@ SECTIONS KEEP(*(.got .got.*)); _egot = .; } > RAM AT > FLASH /* LLD fails on AT > FLASH */ + + /* Discard .eh_frame, we are not doing unwind on panic so it is not needed */ + /DISCARD/ : + { + *(.eh_frame); + } } /* Do not exceed this mark in the error messages below | */ From 89506703632b973819f361edb6e91aa210211110 Mon Sep 17 00:00:00 2001 From: Dan Callaghan Date: Wed, 15 Aug 2018 16:57:26 +1000 Subject: [PATCH 028/234] make the linker script compatible with lld To work around a bug in lld, we need to avoid starting the .bss section from a fixed address (previously, the _sbss symbol). Otherwise lld incorrectly tries to extend the FLASH output region up to the start of the RAM output region, which is too large. To work around another bug in lld, we need to avoid starting sections marked with (INFO) from a specific starting address. Its parser does not accept both a start address and the (INFO) attribute. Specifying these start addresses is redundant anyway, the linker will lay them out in sequential order for us. --- riscv-rt/link.x | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/riscv-rt/link.x b/riscv-rt/link.x index 0e2bd985..5f249659 100644 --- a/riscv-rt/link.x +++ b/riscv-rt/link.x @@ -24,15 +24,15 @@ SECTIONS *(.rodata .rodata.*); } > FLASH - PROVIDE(_sbss = ORIGIN(RAM)); - .bss ALIGN(_sbss,4) : + .bss : { + _sbss = .; *(.bss .bss.*); . = ALIGN(4); _ebss = .; } > RAM - .data _ebss : + .data : AT(LOADADDR(.rodata) + SIZEOF(.rodata)) { _sidata = LOADADDR(.data); _sdata = .; @@ -41,37 +41,35 @@ SECTIONS *(.data .data.*); . = ALIGN(4); _edata = .; - } > RAM AT > FLASH /* LLD fails on AT > FLASH */ + } > RAM PROVIDE(_heap_size = 0); /* fictitious region that represents the memory available for the heap */ - .heap _edata (INFO) : ALIGN(4) + .heap (INFO) : { _sheap = .; . += _heap_size; . = ALIGN(4); _eheap = .; - } + } > RAM /* fictitious region that represents the memory available for the stack */ - .stack _eheap (INFO) : ALIGN(4) + .stack (INFO) : { _estack = .; . = _stack_start; _sstack = .; - } + } > RAM /* fake output .got section */ /* Dynamic relocations are unsupported. This section is only used to detect relocatable code in the input files and raise an error if relocatable code is found */ - .got : + .got (INFO) : { - _sgot = .; KEEP(*(.got .got.*)); - _egot = .; - } > RAM AT > FLASH /* LLD fails on AT > FLASH */ + } /* Discard .eh_frame, we are not doing unwind on panic so it is not needed */ /DISCARD/ : @@ -81,7 +79,7 @@ SECTIONS } /* Do not exceed this mark in the error messages below | */ -ASSERT(_sgot == _egot, " +ASSERT(SIZEOF(.got) == 0, " .got section detected in the input files. Dynamic relocations are not supported. If you are linking to C code compiled using the `gcc` crate then modify your build script to compile the C code _without_ the From 9c06d6ceda7f0c3f575d3854d1354cb69128d413 Mon Sep 17 00:00:00 2001 From: Jonathan Behrens Date: Tue, 20 Nov 2018 13:28:19 -0500 Subject: [PATCH 029/234] Update for newer rustc versions --- riscv-rt/src/lang_items.rs | 4 ++-- riscv-rt/src/lib.rs | 3 --- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/riscv-rt/src/lang_items.rs b/riscv-rt/src/lang_items.rs index 4fbe64d3..25cb6877 100644 --- a/riscv-rt/src/lang_items.rs +++ b/riscv-rt/src/lang_items.rs @@ -3,8 +3,8 @@ use riscv::asm; /// Default panic handler -#[panic_implementation] -fn panic_fmt(_info: &core::panic::PanicInfo) -> ! { +#[panic_handler] +fn panic(_info: &core::panic::PanicInfo) -> ! { asm::ebreak(); loop {} } diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index 822d9ca0..7faaaa64 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -167,12 +167,9 @@ #![feature(asm)] #![feature(compiler_builtins_lib)] #![feature(const_fn)] -#![feature(extern_prelude)] #![feature(global_asm)] #![feature(lang_items)] #![feature(linkage)] -#![feature(panic_implementation)] -#![feature(used)] extern crate riscv; extern crate r0; From ef135749bd496ab93ad11034ba7655f37f5109a7 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Sat, 26 Jan 2019 17:11:06 +0300 Subject: [PATCH 030/234] Use riscv::mtvec::write() to set trap handler --- riscv-rt/src/lib.rs | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index 7faaaa64..f16b27d3 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -176,7 +176,7 @@ extern crate r0; mod lang_items; -use riscv::register::{mcause, mstatus}; +use riscv::register::{mcause, mstatus, mtvec}; extern "C" { // Boundaries of the .bss section @@ -244,18 +244,10 @@ pub extern "C" fn start_rust() -> ! { // TODO: Enable FPU when available - // Set mtvec to _start_trap - #[cfg(any(target_arch = "riscv32", target_arch = "riscv64"))] unsafe { - //mtvec::write(_start_trap as usize, mtvec::TrapMode::Direct); - asm!("csrrw zero, 0x305, $0" - : - : "r"(&_start_trap) - : - : "volatile"); - } + // Set mtvec to _start_trap + mtvec::write(_start_trap as usize, mtvec::TrapMode::Direct); - unsafe { main(); } } From 52a8809fa103122baa18913a6b76d6077992d60c Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Sat, 26 Jan 2019 17:15:31 +0300 Subject: [PATCH 031/234] Remove lang_items --- riscv-rt/src/lang_items.rs | 53 -------------------------------------- riscv-rt/src/lib.rs | 3 --- 2 files changed, 56 deletions(-) delete mode 100644 riscv-rt/src/lang_items.rs diff --git a/riscv-rt/src/lang_items.rs b/riscv-rt/src/lang_items.rs deleted file mode 100644 index 25cb6877..00000000 --- a/riscv-rt/src/lang_items.rs +++ /dev/null @@ -1,53 +0,0 @@ -// NOTE: Adapted from cortex-m/src/lang_items.rs - -use riscv::asm; - -/// Default panic handler -#[panic_handler] -fn panic(_info: &core::panic::PanicInfo) -> ! { - asm::ebreak(); - loop {} -} - -/// Lang item required to make the normal `main` work in applications -// This is how the `start` lang item works: -// When `rustc` compiles a binary crate, it creates a `main` function that looks -// like this: -// -// ``` -// #[export_name = "main"] -// pub extern "C" fn rustc_main(argc: isize, argv: *const *const u8) -> isize { -// start(main) -// } -// ``` -// -// Where `start` is this function and `main` is the binary crate's `main` -// function. -// -// The final piece is that the entry point of our program, the reset handler, -// has to call `rustc_main`. That's covered by the `reset_handler` function in -// root of this crate. -#[lang = "start"] -extern "C" fn lang_start( - main: fn(), - _argc: isize, - _argv: *const *const u8, -) -> isize - where - T: Termination, -{ - main(); - - 0 -} - -#[lang = "termination"] -pub trait Termination { - fn report(self) -> i32; -} - -impl Termination for () { - fn report(self) -> i32 { - 0 - } -} diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index f16b27d3..4e13db37 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -168,14 +168,11 @@ #![feature(compiler_builtins_lib)] #![feature(const_fn)] #![feature(global_asm)] -#![feature(lang_items)] #![feature(linkage)] extern crate riscv; extern crate r0; -mod lang_items; - use riscv::register::{mcause, mstatus, mtvec}; extern "C" { From 5c4dde2845d944c3a9e36737f0c9cabd380a093b Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Sat, 26 Jan 2019 17:39:02 +0300 Subject: [PATCH 032/234] Get rid of inline assembly --- riscv-rt/asm.S | 89 ++++++++++++++++++ riscv-rt/assemble.sh | 14 +++ riscv-rt/bin/riscv32imac-unknown-none-elf.a | Bin 0 -> 1514 bytes riscv-rt/bin/riscv32imc-unknown-none-elf.a | Bin 0 -> 1514 bytes riscv-rt/build.rs | 21 ++++- riscv-rt/check-blobs.sh | 21 +++++ riscv-rt/src/lib.rs | 95 -------------------- 7 files changed, 141 insertions(+), 99 deletions(-) create mode 100644 riscv-rt/asm.S create mode 100755 riscv-rt/assemble.sh create mode 100644 riscv-rt/bin/riscv32imac-unknown-none-elf.a create mode 100644 riscv-rt/bin/riscv32imc-unknown-none-elf.a create mode 100755 riscv-rt/check-blobs.sh diff --git a/riscv-rt/asm.S b/riscv-rt/asm.S new file mode 100644 index 00000000..a1fda993 --- /dev/null +++ b/riscv-rt/asm.S @@ -0,0 +1,89 @@ +/* + Entry point of all programs (_start). + + It initializes DWARF call frame information, the stack pointer, the + frame pointer (needed for closures to work in start_rust) and the global + pointer. Then it calls _start_rust. +*/ + +.section .init, "ax" +.global _start + +_start: + .cfi_startproc + .cfi_undefined ra + + // .option push + // .option norelax + lui gp, %hi(__global_pointer$) + addi gp, gp, %lo(__global_pointer$) + // .option pop + + lui sp, %hi(_stack_start) + addi sp, sp, %lo(_stack_start) + + add s0, sp, zero + + jal zero, _start_rust + + .cfi_endproc + + +/* + Trap entry point (_start_trap) + + Saves caller saved registers ra, t0..6, a0..7, calls _start_trap_rust, + restores caller saved registers and then returns. +*/ +.section .trap, "ax" +.align 4 +.global _start_trap + +_start_trap: + addi sp, sp, -16*4 + + sw ra, 0*4(sp) + sw t0, 1*4(sp) + sw t1, 2*4(sp) + sw t2, 3*4(sp) + sw t3, 4*4(sp) + sw t4, 5*4(sp) + sw t5, 6*4(sp) + sw t6, 7*4(sp) + sw a0, 8*4(sp) + sw a1, 9*4(sp) + sw a2, 10*4(sp) + sw a3, 11*4(sp) + sw a4, 12*4(sp) + sw a5, 13*4(sp) + sw a6, 14*4(sp) + sw a7, 15*4(sp) + + jal ra, _start_trap_rust + + lw ra, 0*4(sp) + lw t0, 1*4(sp) + lw t1, 2*4(sp) + lw t2, 3*4(sp) + lw t3, 4*4(sp) + lw t4, 5*4(sp) + lw t5, 6*4(sp) + lw t6, 7*4(sp) + lw a0, 8*4(sp) + lw a1, 9*4(sp) + lw a2, 10*4(sp) + lw a3, 11*4(sp) + lw a4, 12*4(sp) + lw a5, 13*4(sp) + lw a6, 14*4(sp) + lw a7, 15*4(sp) + + addi sp, sp, 16*4 + mret + + +/* Make sure there is an abort when linking */ +.section .init +.globl abort +abort: + jal zero, _start diff --git a/riscv-rt/assemble.sh b/riscv-rt/assemble.sh new file mode 100755 index 00000000..c3e9795d --- /dev/null +++ b/riscv-rt/assemble.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +set -euxo pipefail + +crate=riscv-rt + +# remove existing blobs because otherwise this will append object files to the old blobs +rm -f bin/*.a + +riscv64-unknown-elf-gcc -c -mabi=ilp32 -march=rv32imac asm.S -o bin/$crate.o +ar crs bin/riscv32imac-unknown-none-elf.a bin/$crate.o +cp bin/riscv32imac-unknown-none-elf.a bin/riscv32imc-unknown-none-elf.a + +rm bin/$crate.o diff --git a/riscv-rt/bin/riscv32imac-unknown-none-elf.a b/riscv-rt/bin/riscv32imac-unknown-none-elf.a new file mode 100644 index 0000000000000000000000000000000000000000..d8f2b7d7bde111b9e0715ab4e3003c364effd23f GIT binary patch literal 1514 zcma)5U279T6uq0oT4O5-6_G^hrba4$tZ5TkE47pq>q|+k*pIi(CPouXle)W>T13&G zP=A20K1yGFEg~W!B0)qX=!@@``fTx@otb765PRXyJ#*&HnXfyEamy~2C&Cx?c1!uX z0{dHC&kU=Ce3*!W>^0@4<65>$BABjit&mlyGedU8DXw0yU8646``0QXnT#htl$Jox zhaX>^nbtIo7ZIk>Z))|3F7Y1F&v?UUsF!-^6%)^%Xf(>PkLRXC8r8Rd?AEuR?`qV? znaaoRb!{Dc9edON)_%A8e*MFvk7qv_jp5HDUoL;0_?B%>fB&_8^3T)BjqJeG=2SM< z$Q5RHW&`sZ^8*W;3)#iSVqs}#DPcLJr^Nn_ia^@>4bmQJTD&)K5c`X;pO9nw3Bk5g z;;I8}(}LdRx2Pb6I%bIe@x7GL9s&qbS4Y2_`h84<_52ywe@jc8=X6^>(Gd5KNG`&& zuXK#(xUV#zPsU72C)2!Btrx7Sxl*sx+>)L2N~n0Zy`Jp*PJ3df>8WwG%ZG1R8C zw2U}?T=Kw*?`9l3ERui~-@`aAd0@rkeWM`QaF*yH4|>fxZgGB;LR4Oa&UowqH*87v zQ}R-Q2PIF2^I+Mv3LITq#IizeY0V|$mgQPx6dZ>PyHvG|O0B}I2fdFbV5w~0wyot7 z*4nSdIT7`#-dg;l)@)UE37Lm459`c>25gWW_xQg&)Jo^N{{Nx$&T}5#Ymyz7;tj2F z#8ZNY<2lCJ{d(8ApJ!Kw`h|_M`}JP19^MgpxC5nkjWP7p`Cl@|UX&pZmSy+rZSjO8 xbI`**C_TRx)6_)6BuWe=ggopKSlt~%YI4p^0BO*HMcMs%KY86bZ$vaI?=Kl}n;HNB literal 0 HcmV?d00001 diff --git a/riscv-rt/bin/riscv32imc-unknown-none-elf.a b/riscv-rt/bin/riscv32imc-unknown-none-elf.a new file mode 100644 index 0000000000000000000000000000000000000000..d8f2b7d7bde111b9e0715ab4e3003c364effd23f GIT binary patch literal 1514 zcma)5U279T6uq0oT4O5-6_G^hrba4$tZ5TkE47pq>q|+k*pIi(CPouXle)W>T13&G zP=A20K1yGFEg~W!B0)qX=!@@``fTx@otb765PRXyJ#*&HnXfyEamy~2C&Cx?c1!uX z0{dHC&kU=Ce3*!W>^0@4<65>$BABjit&mlyGedU8DXw0yU8646``0QXnT#htl$Jox zhaX>^nbtIo7ZIk>Z))|3F7Y1F&v?UUsF!-^6%)^%Xf(>PkLRXC8r8Rd?AEuR?`qV? znaaoRb!{Dc9edON)_%A8e*MFvk7qv_jp5HDUoL;0_?B%>fB&_8^3T)BjqJeG=2SM< z$Q5RHW&`sZ^8*W;3)#iSVqs}#DPcLJr^Nn_ia^@>4bmQJTD&)K5c`X;pO9nw3Bk5g z;;I8}(}LdRx2Pb6I%bIe@x7GL9s&qbS4Y2_`h84<_52ywe@jc8=X6^>(Gd5KNG`&& zuXK#(xUV#zPsU72C)2!Btrx7Sxl*sx+>)L2N~n0Zy`Jp*PJ3df>8WwG%ZG1R8C zw2U}?T=Kw*?`9l3ERui~-@`aAd0@rkeWM`QaF*yH4|>fxZgGB;LR4Oa&UowqH*87v zQ}R-Q2PIF2^I+Mv3LITq#IizeY0V|$mgQPx6dZ>PyHvG|O0B}I2fdFbV5w~0wyot7 z*4nSdIT7`#-dg;l)@)UE37Lm459`c>25gWW_xQg&)Jo^N{{Nx$&T}5#Ymyz7;tj2F z#8ZNY<2lCJ{d(8ApJ!Kw`h|_M`}JP19^MgpxC5nkjWP7p`Cl@|UX&pZmSy+rZSjO8 xbI`**C_TRx)6_)6BuWe=ggopKSlt~%YI4p^0BO*HMcMs%KY86bZ$vaI?=Kl}n;HNB literal 0 HcmV?d00001 diff --git a/riscv-rt/build.rs b/riscv-rt/build.rs index 4cd56c63..be724270 100644 --- a/riscv-rt/build.rs +++ b/riscv-rt/build.rs @@ -1,17 +1,30 @@ // NOTE: Adapted from cortex-m/build.rs use std::env; -use std::fs::File; +use std::fs; use std::io::Write; use std::path::PathBuf; fn main() { + let target = env::var("TARGET").unwrap(); + let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap()); + let name = env::var("CARGO_PKG_NAME").unwrap(); + + if target.starts_with("riscv") { + fs::copy( + format!("bin/{}.a", target), + out_dir.join(format!("lib{}.a", name)), + ).unwrap(); + + println!("cargo:rustc-link-lib=static={}", name); + println!("cargo:rustc-link-search={}", out_dir.display()); + } + // Put the linker script somewhere the linker can find it - let out = &PathBuf::from(env::var_os("OUT_DIR").unwrap()); - File::create(out.join("link.x")) + fs::File::create(out_dir.join("link.x")) .unwrap() .write_all(include_bytes!("link.x")) .unwrap(); - println!("cargo:rustc-link-search={}", out.display()); + println!("cargo:rustc-link-search={}", out_dir.display()); println!("cargo:rerun-if-changed=build.rs"); println!("cargo:rerun-if-changed=link.x"); diff --git a/riscv-rt/check-blobs.sh b/riscv-rt/check-blobs.sh new file mode 100755 index 00000000..36d885e6 --- /dev/null +++ b/riscv-rt/check-blobs.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +# Checks that the blobs are up to date with the committed assembly files + +set -euxo pipefail + +for lib in $(ls bin/*.a); do + filename=$(basename $lib) + riscv64-unknown-elf-objdump -Cd $lib > bin/${filename%.a}.before +done + +./assemble.sh + +for lib in $(ls bin/*.a); do + filename=$(basename $lib) + riscv64-unknown-elf-objdump -Cd $lib > bin/${filename%.a}.after +done + +for cksum in $(ls bin/*.after); do + diff -u $cksum ${cksum%.after}.before +done diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index 4e13db37..21e7169f 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -164,10 +164,8 @@ #![no_std] #![deny(missing_docs)] #![deny(warnings)] -#![feature(asm)] #![feature(compiler_builtins_lib)] #![feature(const_fn)] -#![feature(global_asm)] #![feature(linkage)] extern crate riscv; @@ -192,36 +190,6 @@ extern "C" { } -/// Entry point of all programs (_start). -/// -/// It initializes DWARF call frame information, the stack pointer, the -/// frame pointer (needed for closures to work in start_rust) and the global -/// pointer. Then it calls _start_rust. -#[cfg(any(target_arch = "riscv32", target_arch = "riscv64"))] -global_asm!(r#" -.section .init, "ax" -.globl _start -_start: - .cfi_startproc - .cfi_undefined ra - - // .option push - // .option norelax - lui gp, %hi(__global_pointer$) - addi gp, gp, %lo(__global_pointer$) - // .option pop - - lui sp, %hi(_stack_start) - addi sp, sp, %lo(_stack_start) - - add s0, sp, zero - - jal zero, _start_rust - - .cfi_endproc -"#); - - /// Rust entry point (_start_rust) /// /// Zeros bss section, initializes data section and calls main. This function @@ -275,60 +243,6 @@ macro_rules! entry { } -/// Trap entry point (_start_trap) -/// -/// Saves caller saved registers ra, t0..6, a0..7, calls _start_trap_rust, -/// restores caller saved registers and then returns. -#[cfg(any(target_arch = "riscv32", target_arch = "riscv64"))] -global_asm!(r#" - .section .trap, "ax" - .align 4 - .global _start_trap - -_start_trap: - addi sp, sp, -16*4 - - sw ra, 0*4(sp) - sw t0, 1*4(sp) - sw t1, 2*4(sp) - sw t2, 3*4(sp) - sw t3, 4*4(sp) - sw t4, 5*4(sp) - sw t5, 6*4(sp) - sw t6, 7*4(sp) - sw a0, 8*4(sp) - sw a1, 9*4(sp) - sw a2, 10*4(sp) - sw a3, 11*4(sp) - sw a4, 12*4(sp) - sw a5, 13*4(sp) - sw a6, 14*4(sp) - sw a7, 15*4(sp) - - jal ra, _start_trap_rust - - lw ra, 0*4(sp) - lw t0, 1*4(sp) - lw t1, 2*4(sp) - lw t2, 3*4(sp) - lw t3, 4*4(sp) - lw t4, 5*4(sp) - lw t5, 6*4(sp) - lw t6, 7*4(sp) - lw a0, 8*4(sp) - lw a1, 9*4(sp) - lw a2, 10*4(sp) - lw a3, 11*4(sp) - lw a4, 12*4(sp) - lw a5, 13*4(sp) - lw a6, 14*4(sp) - lw a7, 15*4(sp) - - addi sp, sp, 16*4 - mret -"#); - - /// Trap entry point rust (_start_trap_rust) /// /// mcause is read to determine the cause of the trap. XLEN-1 bit indicates @@ -351,12 +265,3 @@ pub extern "C" fn start_trap_rust() { #[no_mangle] #[linkage = "weak"] pub fn trap_handler(_: mcause::Trap) {} - -// Make sure there is an abort when linking -#[cfg(any(target_arch = "riscv32", target_arch = "riscv64"))] -global_asm!(r#" -.section .init -.globl abort -abort: - jal zero, _start -"#); From 7740a5c87d8258efc08e329508686dc861eb41dd Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Sat, 26 Jan 2019 18:10:36 +0300 Subject: [PATCH 033/234] Do not use #[linkage = "weak"] --- riscv-rt/link.x | 2 ++ riscv-rt/src/lib.rs | 17 ++++++++++------- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/riscv-rt/link.x b/riscv-rt/link.x index 5f249659..48a17005 100644 --- a/riscv-rt/link.x +++ b/riscv-rt/link.x @@ -3,6 +3,8 @@ INCLUDE memory.x PROVIDE(_stack_start = ORIGIN(RAM) + LENGTH(RAM)); +PROVIDE(trap_handler = default_trap_handler); + SECTIONS { PROVIDE(_stext = ORIGIN(FLASH)); diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index 21e7169f..7860a668 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -166,12 +166,11 @@ #![deny(warnings)] #![feature(compiler_builtins_lib)] #![feature(const_fn)] -#![feature(linkage)] extern crate riscv; extern crate r0; -use riscv::register::{mcause, mstatus, mtvec}; +use riscv::register::{mstatus, mtvec}; extern "C" { // Boundaries of the .bss section @@ -252,10 +251,15 @@ macro_rules! entry { #[link_section = ".trap.rust"] #[export_name = "_start_trap_rust"] pub extern "C" fn start_trap_rust() { - // dispatch trap to handler - trap_handler(mcause::read().cause()); - // mstatus, remain in M-mode after mret + extern "C" { + fn trap_handler(); + } + unsafe { + // dispatch trap to handler + trap_handler(); + + // mstatus, remain in M-mode after mret mstatus::set_mpp(mstatus::MPP::Machine); } } @@ -263,5 +267,4 @@ pub extern "C" fn start_trap_rust() { /// Default Trap Handler #[no_mangle] -#[linkage = "weak"] -pub fn trap_handler(_: mcause::Trap) {} +pub fn default_trap_handler() {} From 0bc07597eea301d367f6392a60e8626353b25ce7 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Sat, 26 Jan 2019 18:12:13 +0300 Subject: [PATCH 034/234] Use newer riscv crate --- riscv-rt/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index bb6a35cd..439b52f2 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -10,7 +10,7 @@ license = "ISC" [dependencies] r0 = "0.2.2" -riscv = "0.3.0" +riscv = "0.4.0" [features] inline-asm = [] \ No newline at end of file From 573c41a1b2dfdc1004225f50f73d227d4db50d75 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Sat, 26 Jan 2019 18:19:06 +0300 Subject: [PATCH 035/234] Do not use unstable features --- riscv-rt/src/lib.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index 7860a668..ffc6842b 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -164,8 +164,6 @@ #![no_std] #![deny(missing_docs)] #![deny(warnings)] -#![feature(compiler_builtins_lib)] -#![feature(const_fn)] extern crate riscv; extern crate r0; From 96d46bf3ec47a8da749eb768ed1a65a000758f92 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Sat, 26 Jan 2019 18:30:51 +0300 Subject: [PATCH 036/234] Ignore temporary bin/* files --- riscv-rt/.gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/riscv-rt/.gitignore b/riscv-rt/.gitignore index 1e7caa9e..e38997ad 100644 --- a/riscv-rt/.gitignore +++ b/riscv-rt/.gitignore @@ -1,2 +1,5 @@ Cargo.lock target/ +bin/*.after +bin/*.before +bin/*.o From eae775c3278329df37447744ee53a13df2c4ca8f Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Sat, 26 Jan 2019 18:38:19 +0300 Subject: [PATCH 037/234] Use const-fn and inline-asm if available --- riscv-rt/Cargo.toml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index 439b52f2..3601991f 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -13,4 +13,5 @@ r0 = "0.2.2" riscv = "0.4.0" [features] -inline-asm = [] \ No newline at end of file +const-fn = ["riscv/const-fn"] +inline-asm = ["riscv/inline-asm"] From d56bb294745db4df1e513dad6ac942f5888e5330 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Sat, 26 Jan 2019 18:38:54 +0300 Subject: [PATCH 038/234] Test with const-fn on nightly --- riscv-rt/ci/script.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/riscv-rt/ci/script.sh b/riscv-rt/ci/script.sh index eb1a3139..dde62739 100644 --- a/riscv-rt/ci/script.sh +++ b/riscv-rt/ci/script.sh @@ -4,7 +4,7 @@ main() { cargo check --target $TARGET if [ $TRAVIS_RUST_VERSION = nightly ]; then - cargo check --target $TARGET --features inline-asm + cargo check --target $TARGET --features 'const-fn inline-asm' fi } From 483906c2e66aacb8e45aed0ad83865a796cbc540 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Sat, 26 Jan 2019 18:40:07 +0300 Subject: [PATCH 039/234] Check binary blobs during CI --- riscv-rt/.travis.yml | 1 + riscv-rt/ci/install.sh | 3 +++ riscv-rt/ci/script.sh | 4 ++++ 3 files changed, 8 insertions(+) diff --git a/riscv-rt/.travis.yml b/riscv-rt/.travis.yml index a3c9cf27..d4791052 100644 --- a/riscv-rt/.travis.yml +++ b/riscv-rt/.travis.yml @@ -28,6 +28,7 @@ before_install: set -e install: - bash ci/install.sh + - export PATH="$PATH:$PWD/gcc/bin" script: - bash ci/script.sh diff --git a/riscv-rt/ci/install.sh b/riscv-rt/ci/install.sh index 3c419211..fa989702 100644 --- a/riscv-rt/ci/install.sh +++ b/riscv-rt/ci/install.sh @@ -4,6 +4,9 @@ main() { if [ $TARGET != x86_64-unknown-linux-gnu ]; then rustup target add $TARGET fi + + mkdir gcc + curl -L https://static.dev.sifive.com/dev-tools/riscv64-unknown-elf-gcc-8.1.0-2018.12.0-x86_64-linux-ubuntu14.tar.gz | tar --strip-components=1 -C gcc -xz } main diff --git a/riscv-rt/ci/script.sh b/riscv-rt/ci/script.sh index dde62739..9aa0d7a4 100644 --- a/riscv-rt/ci/script.sh +++ b/riscv-rt/ci/script.sh @@ -6,6 +6,10 @@ main() { if [ $TRAVIS_RUST_VERSION = nightly ]; then cargo check --target $TARGET --features 'const-fn inline-asm' fi + + if [ $TARGET = x86_64-unknown-linux-gnu ]; then + ./check-blobs.sh + fi } main From 5737ea356629dea55295d728007c5acbffd74de8 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Sat, 26 Jan 2019 18:42:01 +0300 Subject: [PATCH 040/234] Check build on stable --- riscv-rt/.travis.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/riscv-rt/.travis.yml b/riscv-rt/.travis.yml index d4791052..01ba0e88 100644 --- a/riscv-rt/.travis.yml +++ b/riscv-rt/.travis.yml @@ -24,6 +24,14 @@ matrix: rust: nightly if: (branch = staging OR branch = trying OR branch = master) OR (type = pull_request AND branch = master) + - env: TARGET=x86_64-unknown-linux-gnu + rust: stable + if: (branch = staging OR branch = trying OR branch = master) OR (type = pull_request AND branch = master) + + - env: TARGET=riscv32imac-unknown-none-elf + rust: stable + if: (branch = staging OR branch = trying OR branch = master) OR (type = pull_request AND branch = master) + before_install: set -e install: From ac66a5a74e1fa37ba7c05d6d132e7cbd709241a7 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Sat, 26 Jan 2019 20:35:06 +0300 Subject: [PATCH 041/234] Fix RISC-V name --- riscv-rt/Cargo.toml | 2 +- riscv-rt/src/lib.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index 3601991f..a5ebd67e 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -4,7 +4,7 @@ version = "0.3.0" repository = "https://github.com/rust-embedded/riscv-rt" authors = ["David Craven "] categories = ["embedded", "no-std"] -description = "Minimal runtime / startup for RISCV CPU's" +description = "Minimal runtime / startup for RISC-V CPU's" keywords = ["riscv", "runtime", "startup"] license = "ISC" diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index ffc6842b..7c7348df 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -1,4 +1,4 @@ -//! Minimal startup / runtime for RISCV CPU's +//! Minimal startup / runtime for RISC-V CPU's //! //! # Features //! From 2f90dbee14a5fe0fc141d994623bbc2a68193ee6 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Sun, 27 Jan 2019 14:06:51 +0300 Subject: [PATCH 042/234] Update heap docs --- riscv-rt/src/lib.rs | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index 7c7348df..fb4ee8eb 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -133,29 +133,32 @@ //! _stack_start = ORIGIN(CCRAM) + LENGTH(CCRAM); //! ``` //! +//! ### `_heap_size` +//! +//! This symbol provides the size of a heap region. The default value is 0. You can set `_heap_size` +//! to a non-zero value if you are planning to use heap allocations. +//! //! ### `_sheap` //! //! This symbol is located in RAM right after the `.bss` and `.data` sections. //! You can use the address of this symbol as the start address of a heap -//! region. This symbol is 4 byte aligned so that address will be a multiple of -//! 4. +//! region. This symbol is 4 byte aligned so that address will be a multiple of 4. //! //! #### Example //! //! ``` //! extern crate some_allocator; //! -//! // Size of the heap in bytes -//! const SIZE: usize = 1024; -//! //! extern "C" { -//! static mut _sheap: u8; +//! static _sheap: u8; +//! static _heap_size: u8; //! } //! //! fn main() { //! unsafe { -//! let start_address = &mut _sheap as *mut u8; -//! some_allocator::initialize(start_address, SIZE); +//! let heap_bottom = &_sheap as *const u8 as usize; +//! let heap_size = &_heap_size as *const u8 as usize; +//! some_allocator::initialize(heap_bottom, heap_size); //! } //! } //! ``` From 0e141d8476f585b8c9e8d35ff1e427a3280bf75f Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Sun, 27 Jan 2019 14:08:27 +0300 Subject: [PATCH 043/234] Update example in docs --- riscv-rt/src/lib.rs | 70 +++++++++++++++++++++++++++++++-------------- 1 file changed, 48 insertions(+), 22 deletions(-) diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index fb4ee8eb..32e89496 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -29,25 +29,17 @@ //! //! $ # add this crate as a dependency //! $ edit Cargo.toml && cat $_ -//! [dependencies.riscv-rt] -//! version = "0.1.0" -//! -//! $ # tell Xargo which standard crates to build -//! $ edit Xargo.toml && cat $_ -//! [dependencies.core] -//! stage = 0 -//! -//! [dependencies.compiler_builtins] -//! features = ["mem"] -//! stage = 1 +//! [dependencies] +//! riscv-rt = "0.3.0" +//! panic-halt = "0.2.0" //! //! $ # memory layout of the device //! $ edit memory.x && cat $_ //! MEMORY //! { //! /* NOTE K = KiBi = 1024 bytes */ -//! FLASH : ORIGIN = 0x08000000, LENGTH = 128K -//! RAM : ORIGIN = 0x20000000, LENGTH = 8K +//! FLASH : ORIGIN = 0x20000000, LENGTH = 16M +//! RAM : ORIGIN = 0x80000000, LENGTH = 16K //! } //! //! $ edit src/main.rs && cat $_ @@ -57,31 +49,65 @@ //! #![no_std] //! #![no_main] //! -//! #[macro_use(entry)] -//! extern crate riscv_rt; +//! extern crate panic_halt; +//! +//! use riscv_rt::entry; //! //! // use `main` as the entry point of this application //! entry!(main); //! //! fn main() -> ! { //! // do something here +//! loop { } //! } //! ``` //! //! ``` text -//! $ cargo install xargo +//! $ mkdir .cargo && edit .cargo/config && cat $_ +//! [target.riscv32imac-unknown-none-elf] +//! rustflags = [ +//! "-C", "link-arg=-Tlink.x" +//! ] +//! +//! [build] +//! target = "riscv32imac-unknown-none-elf" +//! $ edit build.rs && cat $_ +//! ``` +//! +//! ``` ignore,no_run +//! use std::env; +//! use std::fs::File; +//! use std::io::Write; +//! use std::path::Path; +//! +//! /// Put the linker script somewhere the linker can find it. +//! fn main() { +//! let out_dir = env::var("OUT_DIR").expect("No out dir"); +//! let dest_path = Path::new(&out_dir); +//! let mut f = File::create(&dest_path.join("memory.x")) +//! .expect("Could not create file"); +//! +//! f.write_all(include_bytes!("memory.x")) +//! .expect("Could not write file"); //! -//! $ xargo rustc --target riscv32-unknown-none -- \ -//! -C link-arg=-Tlink.x -C linker=riscv32-unknown-elf-ld -Z linker-flavor=ld +//! println!("cargo:rustc-link-search={}", dest_path.display()); +//! +//! println!("cargo:rerun-if-changed=memory.x"); +//! println!("cargo:rerun-if-changed=build.rs"); +//! } +//! ``` +//! +//! ``` text +//! $ cargo build //! //! $ riscv32-unknown-elf-objdump -Cd $(find target -name app) | head //! //! Disassembly of section .text: //! -//! 20400000 <_start>: -//! 20400000: 800011b7 lui gp,0x80001 -//! 20400004: 80018193 addi gp,gp,-2048 # 80000800 <_stack_start+0xffffc800> -//! 20400008: 80004137 lui sp,0x80004 +//! 20000000 <_start>: +//! 20000000: 800011b7 lui gp,0x80001 +//! 20000004: 80018193 addi gp,gp,-2048 # 80000800 <_stack_start+0xffffc800> +//! 20000008: 80004137 lui sp,0x80004 //! ``` //! //! # Symbol interfaces From 11d3c8cb94e5da69fba89b15ca76a4b7b607629e Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Sun, 27 Jan 2019 18:41:06 +0300 Subject: [PATCH 044/234] Remove obsolete things from documentation --- riscv-rt/src/lib.rs | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index 32e89496..33f99fa3 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -8,16 +8,6 @@ //! //! - Before main initialization of the FPU (for targets that have a FPU). //! -//! - A `panic_fmt` implementation that just calls abort that you can opt into -//! through the "abort-on-panic" Cargo feature. If you don't use this feature -//! you'll have to provide the `panic_fmt` lang item yourself. Documentation -//! [here][1] -//! -//! [1]: https://doc.rust-lang.org/unstable-book/language-features/lang-items.html -//! -//! - A minimal `start` lang item to support the standard `fn main()` -//! interface. (The processor goes to sleep after returning from `main`) -//! //! - A linker script that encodes the memory layout of a generic RISC-V //! microcontroller. This linker script is missing some information that must //! be supplied through a `memory.x` file (see example below). From d0b35943da92c907cfc2dbc4e60ceaa9fa83d60f Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Sun, 27 Jan 2019 18:48:42 +0300 Subject: [PATCH 045/234] Mention entry! macro --- riscv-rt/src/lib.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index 33f99fa3..2f3eaaec 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -8,6 +8,8 @@ //! //! - Before main initialization of the FPU (for targets that have a FPU). //! +//! - An `entry!` macro to declare the entry point of the program. +//! //! - A linker script that encodes the memory layout of a generic RISC-V //! microcontroller. This linker script is missing some information that must //! be supplied through a `memory.x` file (see example below). From c5e0ec1857e03f31b04ca626187fda0303f442bd Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Sun, 27 Jan 2019 18:53:08 +0300 Subject: [PATCH 046/234] Bump version --- riscv-rt/Cargo.toml | 2 +- riscv-rt/src/lib.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index a5ebd67e..7d3265e4 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "riscv-rt" -version = "0.3.0" +version = "0.4.0" repository = "https://github.com/rust-embedded/riscv-rt" authors = ["David Craven "] categories = ["embedded", "no-std"] diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index 2f3eaaec..6a2df0b1 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -22,7 +22,7 @@ //! $ # add this crate as a dependency //! $ edit Cargo.toml && cat $_ //! [dependencies] -//! riscv-rt = "0.3.0" +//! riscv-rt = "0.4.0" //! panic-halt = "0.2.0" //! //! $ # memory layout of the device From f9147fd94b41eb35a1bdb0784af1e29feaf46d0a Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Wed, 6 Feb 2019 19:09:29 +0300 Subject: [PATCH 047/234] Remove the unused 'const-fn' feature --- riscv-rt/Cargo.toml | 1 - riscv-rt/ci/script.sh | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index 7d3265e4..629aaa89 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -13,5 +13,4 @@ r0 = "0.2.2" riscv = "0.4.0" [features] -const-fn = ["riscv/const-fn"] inline-asm = ["riscv/inline-asm"] diff --git a/riscv-rt/ci/script.sh b/riscv-rt/ci/script.sh index 9aa0d7a4..e2497ee9 100644 --- a/riscv-rt/ci/script.sh +++ b/riscv-rt/ci/script.sh @@ -4,7 +4,7 @@ main() { cargo check --target $TARGET if [ $TRAVIS_RUST_VERSION = nightly ]; then - cargo check --target $TARGET --features 'const-fn inline-asm' + cargo check --target $TARGET --features 'inline-asm' fi if [ $TARGET = x86_64-unknown-linux-gnu ]; then From 93c9d0ad31972d399bb39429af5a0b6a5c866550 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Wed, 6 Feb 2019 22:26:39 +0300 Subject: [PATCH 048/234] Add team e-mail to authors --- riscv-rt/Cargo.toml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index 629aaa89..c9a895f8 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -2,7 +2,10 @@ name = "riscv-rt" version = "0.4.0" repository = "https://github.com/rust-embedded/riscv-rt" -authors = ["David Craven "] +authors = [ + "The RISC-V Team ", + "David Craven ", +] categories = ["embedded", "no-std"] description = "Minimal runtime / startup for RISC-V CPU's" keywords = ["riscv", "runtime", "startup"] From e4217a736c6fb7c6d2b49f771477a4b199a66351 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Thu, 7 Feb 2019 19:54:18 +0300 Subject: [PATCH 049/234] Leave just team e-mail in authors --- riscv-rt/Cargo.toml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index c9a895f8..23422854 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -2,10 +2,7 @@ name = "riscv-rt" version = "0.4.0" repository = "https://github.com/rust-embedded/riscv-rt" -authors = [ - "The RISC-V Team ", - "David Craven ", -] +authors = ["The RISC-V Team "] categories = ["embedded", "no-std"] description = "Minimal runtime / startup for RISC-V CPU's" keywords = ["riscv", "runtime", "startup"] From 0d671a419b24413e1aafa09fae17167c1c72a561 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Thu, 14 Feb 2019 17:43:59 +0300 Subject: [PATCH 050/234] Fix _start_trap address calculation --- riscv-rt/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index 6a2df0b1..c430f412 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -229,7 +229,7 @@ pub extern "C" fn start_rust() -> ! { unsafe { // Set mtvec to _start_trap - mtvec::write(_start_trap as usize, mtvec::TrapMode::Direct); + mtvec::write(&_start_trap as *const _ as usize, mtvec::TrapMode::Direct); main(); } From b4486cbb8cd881ed6536116551f0d59a4e44aa5c Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Fri, 22 Feb 2019 11:59:39 +0300 Subject: [PATCH 051/234] Fix _start_trap alignment --- riscv-rt/asm.S | 1 - riscv-rt/bin/riscv32imac-unknown-none-elf.a | Bin 1514 -> 1482 bytes riscv-rt/bin/riscv32imc-unknown-none-elf.a | Bin 1514 -> 1482 bytes riscv-rt/link.x | 1 + 4 files changed, 1 insertion(+), 1 deletion(-) diff --git a/riscv-rt/asm.S b/riscv-rt/asm.S index a1fda993..2de48d09 100644 --- a/riscv-rt/asm.S +++ b/riscv-rt/asm.S @@ -36,7 +36,6 @@ _start: restores caller saved registers and then returns. */ .section .trap, "ax" -.align 4 .global _start_trap _start_trap: diff --git a/riscv-rt/bin/riscv32imac-unknown-none-elf.a b/riscv-rt/bin/riscv32imac-unknown-none-elf.a index d8f2b7d7bde111b9e0715ab4e3003c364effd23f..24971b2de844ebda8af79bd142e8e8914fbf5ec3 100644 GIT binary patch delta 145 zcmaFGeTsX+0wzPFiHkHCB_^KMpUlCi!uWr(E~EP5C`Lv`hRM-P-x-xQ$1_JWGRjQe z&7!U8!+-#cP^LMMW&vUcD1QnQ0|U=wepY41Ig^c9)fpE|js}t^CO3o0)vW3gM}R5< Kp{hX?%p?E|>>4ou delta 178 zcmX@b{fc|S0wxoaiHkHCEhe7U=VN3LW?+EhiN91BU!NKAguqRhBqvM{SU d8_)m% diff --git a/riscv-rt/bin/riscv32imc-unknown-none-elf.a b/riscv-rt/bin/riscv32imc-unknown-none-elf.a index d8f2b7d7bde111b9e0715ab4e3003c364effd23f..24971b2de844ebda8af79bd142e8e8914fbf5ec3 100644 GIT binary patch delta 145 zcmaFGeTsX+0wzPFiHkHCB_^KMpUlCi!uWr(E~EP5C`Lv`hRM-P-x-xQ$1_JWGRjQe z&7!U8!+-#cP^LMMW&vUcD1QnQ0|U=wepY41Ig^c9)fpE|js}t^CO3o0)vW3gM}R5< Kp{hX?%p?E|>>4ou delta 178 zcmX@b{fc|S0wxoaiHkHCEhe7U=VN3LW?+EhiN91BU!NKAguqRhBqvM{SU d8_)m% diff --git a/riscv-rt/link.x b/riscv-rt/link.x index 48a17005..c172f746 100644 --- a/riscv-rt/link.x +++ b/riscv-rt/link.x @@ -15,6 +15,7 @@ SECTIONS /* point of the program. */ KEEP(*(.init)); KEEP(*(.init.rust)); + . = ALIGN(4); KEEP(*(.trap)); KEEP(*(.trap.rust)); From f88d31d88ff9ed2be49755f08fefa8fbd5a6d707 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Mon, 4 Mar 2019 19:03:46 +0300 Subject: [PATCH 052/234] Use position-independent loads in asm.S --- riscv-rt/asm.S | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/riscv-rt/asm.S b/riscv-rt/asm.S index 2de48d09..876bb499 100644 --- a/riscv-rt/asm.S +++ b/riscv-rt/asm.S @@ -15,12 +15,10 @@ _start: // .option push // .option norelax - lui gp, %hi(__global_pointer$) - addi gp, gp, %lo(__global_pointer$) + la gp, __global_pointer$ // .option pop - lui sp, %hi(_stack_start) - addi sp, sp, %lo(_stack_start) + la sp, _stack_start add s0, sp, zero From 28e5e7beb5f5b6b124b2baa0143d6a83452d7ecb Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Mon, 4 Mar 2019 19:14:36 +0300 Subject: [PATCH 053/234] Disable relaxation for gp load --- riscv-rt/asm.S | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/riscv-rt/asm.S b/riscv-rt/asm.S index 876bb499..4402d777 100644 --- a/riscv-rt/asm.S +++ b/riscv-rt/asm.S @@ -13,10 +13,10 @@ _start: .cfi_startproc .cfi_undefined ra - // .option push - // .option norelax + .option push + .option norelax la gp, __global_pointer$ - // .option pop + .option pop la sp, _stack_start From 6ef721887322a2dabfeffc47d66506eec2455cc1 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Mon, 4 Mar 2019 19:16:14 +0300 Subject: [PATCH 054/234] Generate binaries for riscv64 targets --- riscv-rt/assemble.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/riscv-rt/assemble.sh b/riscv-rt/assemble.sh index c3e9795d..f3e9c1e2 100755 --- a/riscv-rt/assemble.sh +++ b/riscv-rt/assemble.sh @@ -9,6 +9,10 @@ rm -f bin/*.a riscv64-unknown-elf-gcc -c -mabi=ilp32 -march=rv32imac asm.S -o bin/$crate.o ar crs bin/riscv32imac-unknown-none-elf.a bin/$crate.o -cp bin/riscv32imac-unknown-none-elf.a bin/riscv32imc-unknown-none-elf.a +ar crs bin/riscv32imc-unknown-none-elf.a bin/$crate.o + +riscv64-unknown-elf-gcc -c -mabi=lp64 -march=rv64imac asm.S -o bin/$crate.o +ar crs bin/riscv64imac-unknown-none-elf.a bin/$crate.o +ar crs bin/riscv64gc-unknown-none-elf.a bin/$crate.o rm bin/$crate.o From 656af9deaf4e1940cce54b32b272d2314ec566e4 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Tue, 5 Mar 2019 17:51:11 +0300 Subject: [PATCH 055/234] Regenerate binaries --- riscv-rt/bin/riscv32imac-unknown-none-elf.a | Bin 1482 -> 1502 bytes riscv-rt/bin/riscv32imc-unknown-none-elf.a | Bin 1482 -> 1502 bytes riscv-rt/bin/riscv64gc-unknown-none-elf.a | Bin 0 -> 2130 bytes riscv-rt/bin/riscv64imac-unknown-none-elf.a | Bin 0 -> 2130 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 riscv-rt/bin/riscv64gc-unknown-none-elf.a create mode 100644 riscv-rt/bin/riscv64imac-unknown-none-elf.a diff --git a/riscv-rt/bin/riscv32imac-unknown-none-elf.a b/riscv-rt/bin/riscv32imac-unknown-none-elf.a index 24971b2de844ebda8af79bd142e8e8914fbf5ec3..22f6970b9df794a680f13467f276e4843ea511af 100644 GIT binary patch delta 327 zcmX@beUE#>0!HJB3pK5Dm>C!t85kH$fS7?ngMpWUhhaKUU~(fPgE){DW@KdetmN=< z6O%Dxpo1|BBSZcN`+xZ#{{Nl$%ZCZ5&W&+`v=Ue|h+u)UKn!LEw#f$>MY%cPqAZg? zGL|wbO-^S@P7>#V2!r%UK$U2eRu7opH-#YgTpMD?qIZKre%g d;GUe%D$V$1ayP5G#0{X%K!~wm5)@n@008w_EsFpE delta 328 zcmcb|eTsX+0!G7$3pEWSm>C!t85kH$fS7?ngMpWUhhaNVU~(fPgE^2EW@KbAW?^K= z|8W0b{)hShCbKa5Ob%k4AT0sb03ul6ED(d4fo-xZQz@gwfRK$Z(~f|(3TAU5CT2xcQjMw!XoEXu4h zObiSalQ**{GX_k)&Z5pZW%7R@IcKsut2*O?$^NYBnkPV7fxZJ-12P8W3;`$`7$9(P UV)A@eb%`TD^8(>wknjR=0S}cX$^ZZW diff --git a/riscv-rt/bin/riscv32imc-unknown-none-elf.a b/riscv-rt/bin/riscv32imc-unknown-none-elf.a index 24971b2de844ebda8af79bd142e8e8914fbf5ec3..22f6970b9df794a680f13467f276e4843ea511af 100644 GIT binary patch delta 327 zcmX@beUE#>0!HJB3pK5Dm>C!t85kH$fS7?ngMpWUhhaKUU~(fPgE){DW@KdetmN=< z6O%Dxpo1|BBSZcN`+xZ#{{Nl$%ZCZ5&W&+`v=Ue|h+u)UKn!LEw#f$>MY%cPqAZg? zGL|wbO-^S@P7>#V2!r%UK$U2eRu7opH-#YgTpMD?qIZKre%g d;GUe%D$V$1ayP5G#0{X%K!~wm5)@n@008w_EsFpE delta 328 zcmcb|eTsX+0!G7$3pEWSm>C!t85kH$fS7?ngMpWUhhaNVU~(fPgE^2EW@KbAW?^K= z|8W0b{)hShCbKa5Ob%k4AT0sb03ul6ED(d4fo-xZQz@gwfRK$Z(~f|(3TAU5CT2xcQjMw!XoEXu4h zObiSalQ**{GX_k)&Z5pZW%7R@IcKsut2*O?$^NYBnkPV7fxZJ-12P8W3;`$`7$9(P UV)A@eb%`TD^8(>wknjR=0S}cX$^ZZW diff --git a/riscv-rt/bin/riscv64gc-unknown-none-elf.a b/riscv-rt/bin/riscv64gc-unknown-none-elf.a new file mode 100644 index 0000000000000000000000000000000000000000..1bc727c5404548e652ccfca5562fa324fcb590e8 GIT binary patch literal 2130 zcmbtV-D?v;5T8q8)!0Zyv0|kpu_}n3Z4)YyT8|W~4{dG@2Zi4hvxb2;!*7VLGm5yTFy{+SW2yxhgVXmz?~{S=-gCJYT0QBgrJ&eke5} zTo%F)E@vhJnubZZXs`{fm1F^mA!!FN7&IUP-S7mRA3xNf7xh8hXFG0us|6C;l#vK& zP;FfLQEmMEp1RewarpVs7yU2o&6QWHukXJ({Z_9JzZ-df;ltR+^rwl>U(xH4v6haH z*T&P?dNwz?H5r&$n~BfXX47-^x!nBLe9UqnI>^s)h%3-mr$M`?X?>BvZaO#d$As-~ zRnYgw^!x$eErP5t?WQ1zM^a4uEj#mZ#aF^0bV=CMf7)kH)3XJF(9ZUwxyR?6l(DB3 z+C)b>@FzO(LyT`f|HTgeS;mK;?H%;YU=&RAM!A}^%I0#lRB;RT0Q>y&H+S}eecRdD z7fO$q%qSWKb4lq%&@C6JWrgUz>Z?gi{t?Ar@(G0_DEFj&_9`~Xd;O^%BnNQpXNXVo zJ&51efmiDl6+S7{yA=NcfsdnBt0MVR9)HlCyGyQ>L+#pJ7bS8FcU;h~TdoCq&T&Au z3uQ|$RZ7S*$bOVKEELT}+gd6pNBJ+K$l9gC-vdc(@p@DV}~(RWa0sf_cBS z2zn=~`M<_fU;OU;CtIl)^5#E-EPbN}v$m#&xafwU=x>Ak71Rde>n{{p_2pfLad literal 0 HcmV?d00001 diff --git a/riscv-rt/bin/riscv64imac-unknown-none-elf.a b/riscv-rt/bin/riscv64imac-unknown-none-elf.a new file mode 100644 index 0000000000000000000000000000000000000000..1bc727c5404548e652ccfca5562fa324fcb590e8 GIT binary patch literal 2130 zcmbtV-D?v;5T8q8)!0Zyv0|kpu_}n3Z4)YyT8|W~4{dG@2Zi4hvxb2;!*7VLGm5yTFy{+SW2yxhgVXmz?~{S=-gCJYT0QBgrJ&eke5} zTo%F)E@vhJnubZZXs`{fm1F^mA!!FN7&IUP-S7mRA3xNf7xh8hXFG0us|6C;l#vK& zP;FfLQEmMEp1RewarpVs7yU2o&6QWHukXJ({Z_9JzZ-df;ltR+^rwl>U(xH4v6haH z*T&P?dNwz?H5r&$n~BfXX47-^x!nBLe9UqnI>^s)h%3-mr$M`?X?>BvZaO#d$As-~ zRnYgw^!x$eErP5t?WQ1zM^a4uEj#mZ#aF^0bV=CMf7)kH)3XJF(9ZUwxyR?6l(DB3 z+C)b>@FzO(LyT`f|HTgeS;mK;?H%;YU=&RAM!A}^%I0#lRB;RT0Q>y&H+S}eecRdD z7fO$q%qSWKb4lq%&@C6JWrgUz>Z?gi{t?Ar@(G0_DEFj&_9`~Xd;O^%BnNQpXNXVo zJ&51efmiDl6+S7{yA=NcfsdnBt0MVR9)HlCyGyQ>L+#pJ7bS8FcU;h~TdoCq&T&Au z3uQ|$RZ7S*$bOVKEELT}+gd6pNBJ+K$l9gC-vdc(@p@DV}~(RWa0sf_cBS z2zn=~`M<_fU;OU;CtIl)^5#E-EPbN}v$m#&xafwU=x>Ak71Rde>n{{p_2pfLad literal 0 HcmV?d00001 From d5e487fcf7a9176d048f016ad887f8d78c8c3a4d Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Tue, 5 Mar 2019 18:04:40 +0300 Subject: [PATCH 056/234] Update CI build matrix --- riscv-rt/.travis.yml | 39 ++++++++++++--------------------------- 1 file changed, 12 insertions(+), 27 deletions(-) diff --git a/riscv-rt/.travis.yml b/riscv-rt/.travis.yml index 01ba0e88..e61c80a5 100644 --- a/riscv-rt/.travis.yml +++ b/riscv-rt/.travis.yml @@ -1,36 +1,21 @@ language: rust -matrix: - include: - #- env: TARGET=x86_64-unknown-linux-gnu - # if: (branch = staging OR branch = trying OR branch = master) OR (type = pull_request AND branch = master) - - #- env: TARGET=riscv32imac-unknown-none-elf - # if: (branch = staging OR branch = trying OR branch = master) OR (type = pull_request AND branch = master) - - #- env: TARGET=x86_64-unknown-linux-gnu - # rust: beta - # if: (branch = staging OR branch = trying OR branch = master) OR (type = pull_request AND branch = master) +rust: +- nightly +- stable - #- env: TARGET=riscv32imac-unknown-none-elf - # rust: beta - # if: (branch = staging OR branch = trying OR branch = master) OR (type = pull_request AND branch = master) +env: +- TARGET=x86_64-unknown-linux-gnu +- TARGET=riscv32imac-unknown-none-elf +- TARGET=riscv64imac-unknown-none-elf - - env: TARGET=x86_64-unknown-linux-gnu - rust: nightly - if: (branch = staging OR branch = trying OR branch = master) OR (type = pull_request AND branch = master) +if: (branch = staging OR branch = trying OR branch = master) OR (type = pull_request AND branch = master) - - env: TARGET=riscv32imac-unknown-none-elf - rust: nightly - if: (branch = staging OR branch = trying OR branch = master) OR (type = pull_request AND branch = master) - - - env: TARGET=x86_64-unknown-linux-gnu - rust: stable - if: (branch = staging OR branch = trying OR branch = master) OR (type = pull_request AND branch = master) +matrix: + exclude: + - rust: stable + env: TARGET=riscv64imac-unknown-none-elf - - env: TARGET=riscv32imac-unknown-none-elf - rust: stable - if: (branch = staging OR branch = trying OR branch = master) OR (type = pull_request AND branch = master) before_install: set -e From 465690eaa5a972482088c9f93a89f93fe3c18c0a Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Tue, 5 Mar 2019 18:06:53 +0300 Subject: [PATCH 057/234] Regenerate binaries --- riscv-rt/bin/riscv32imac-unknown-none-elf.a | Bin 1502 -> 1490 bytes riscv-rt/bin/riscv32imc-unknown-none-elf.a | Bin 1502 -> 1490 bytes riscv-rt/bin/riscv64gc-unknown-none-elf.a | Bin 2130 -> 2114 bytes riscv-rt/bin/riscv64imac-unknown-none-elf.a | Bin 2130 -> 2114 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/riscv-rt/bin/riscv32imac-unknown-none-elf.a b/riscv-rt/bin/riscv32imac-unknown-none-elf.a index 22f6970b9df794a680f13467f276e4843ea511af..e301d87339624d8fd01ee4ddee127467fd276a01 100644 GIT binary patch delta 142 zcmcb|eTjR*0wyDaiHkHC6(*im<}qerWXS(;|6l%x`Tr)fF#1dmVw}JzG5Im$dLTKO zX*sV50|SE~ACLe7iOufJ&WwyQle<}z8Eq!7XHjPin0y^b&YAolOscc0Gp?BI40w!aliHkHCbtaxx7W=H^@NpB9F=L>EF$*I@{s;Si`5*rOo%qX#iGg9V z8{-5O|EBAX7rf6m_?m2YVv6yxnlBX lFe%Nd&bVc=GmyM8IU7iRnLL?QUE&7N+(3v4V3HBa1_0^XDSQ9` diff --git a/riscv-rt/bin/riscv32imc-unknown-none-elf.a b/riscv-rt/bin/riscv32imc-unknown-none-elf.a index 22f6970b9df794a680f13467f276e4843ea511af..e301d87339624d8fd01ee4ddee127467fd276a01 100644 GIT binary patch delta 142 zcmcb|eTjR*0wyDaiHkHC6(*im<}qerWXS(;|6l%x`Tr)fF#1dmVw}JzG5Im$dLTKO zX*sV50|SE~ACLe7iOufJ&WwyQle<}z8Eq!7XHjPin0y^b&YAolOscc0Gp?BI40w!aliHkHCbtaxx7W=H^@NpB9F=L>EF$*I@{s;Si`5*rOo%qX#iGg9V z8{-5O|EBAX7rf6m_?m2YVv6yxnlBX lFe%Nd&bVc=GmyM8IU7iRnLL?QUE&7N+(3v4V3HBa1_0^XDSQ9` diff --git a/riscv-rt/bin/riscv64gc-unknown-none-elf.a b/riscv-rt/bin/riscv64gc-unknown-none-elf.a index 1bc727c5404548e652ccfca5562fa324fcb590e8..b35b6b2d7719562a0df42e884858d475be8d867b 100644 GIT binary patch delta 139 zcmca4a7bXn0wxoaiHi&vBPL!}=P_nsWXS(;|6l%x`Tr&hF#1eRVm!epF}aaZc(NVS z7a+@+`MabD0|W>HDLyD0L`iIRW_i!ZC^OlZ&7ASUgf#ib8uYu%>$=dAp Zj5{W01IZhcR|Cn8$*+MV!(?p^bpUsFC%FIs delta 148 zcmX>ka7kdo0wyzqiHi&vGbUbE7yGQ_@NpB9F=L>EF$*I@{s;Si`5*rOoy^AQ!^Qvx zlY}ON n)S!{pmQa>rz8c6-JXlcRy;i^;QrX%2M&TO%vh diff --git a/riscv-rt/bin/riscv64imac-unknown-none-elf.a b/riscv-rt/bin/riscv64imac-unknown-none-elf.a index 1bc727c5404548e652ccfca5562fa324fcb590e8..b35b6b2d7719562a0df42e884858d475be8d867b 100644 GIT binary patch delta 139 zcmca4a7bXn0wxoaiHi&vBPL!}=P_nsWXS(;|6l%x`Tr&hF#1eRVm!epF}aaZc(NVS z7a+@+`MabD0|W>HDLyD0L`iIRW_i!ZC^OlZ&7ASUgf#ib8uYu%>$=dAp Zj5{W01IZhcR|Cn8$*+MV!(?p^bpUsFC%FIs delta 148 zcmX>ka7kdo0wyzqiHi&vGbUbE7yGQ_@NpB9F=L>EF$*I@{s;Si`5*rOoy^AQ!^Qvx zlY}ON n)S!{pmQa>rz8c6-JXlcRy;i^;QrX%2M&TO%vh From b7dac856be7bd8375917ec3deb0d8a364f0837e7 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Tue, 5 Mar 2019 18:12:42 +0300 Subject: [PATCH 058/234] Update 'riscv' dependency --- riscv-rt/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index 23422854..28536baa 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -10,7 +10,7 @@ license = "ISC" [dependencies] r0 = "0.2.2" -riscv = "0.4.0" +riscv = "0.5.0" [features] inline-asm = ["riscv/inline-asm"] From 06e15287c2e5426b1f81cca5c8f920e0cc14ff86 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Tue, 5 Mar 2019 15:54:42 +0300 Subject: [PATCH 059/234] Copy cortex-m-rt-macros --- riscv-rt/macros/Cargo.toml | 28 ++ riscv-rt/macros/src/lib.rs | 807 +++++++++++++++++++++++++++++++++++++ 2 files changed, 835 insertions(+) create mode 100644 riscv-rt/macros/Cargo.toml create mode 100644 riscv-rt/macros/src/lib.rs diff --git a/riscv-rt/macros/Cargo.toml b/riscv-rt/macros/Cargo.toml new file mode 100644 index 00000000..ba6db64f --- /dev/null +++ b/riscv-rt/macros/Cargo.toml @@ -0,0 +1,28 @@ +[package] +authors = ["Jorge Aparicio "] +categories = ["embedded", "no-std"] +description = "Attributes re-exported in `cortex-m-rt`" +documentation = "https://docs.rs/cortex-m-rt" +keywords = ["arm", "cortex-m", "runtime", "startup"] +license = "MIT OR Apache-2.0" +name = "cortex-m-rt-macros" +repository = "https://github.com/japaric/cortex-m-rt" +version = "0.1.5" + +[lib] +proc-macro = true + +[dependencies] +quote = "0.6.8" +proc-macro2 = "0.4.20" + +[dependencies.syn] +features = ["extra-traits", "full"] +version = "0.15.13" + +[dependencies.rand] +version = "0.5.5" +default-features = false + +[dev-dependencies] +cortex-m-rt = { path = "..", version = "0.6.0" } diff --git a/riscv-rt/macros/src/lib.rs b/riscv-rt/macros/src/lib.rs new file mode 100644 index 00000000..7528586e --- /dev/null +++ b/riscv-rt/macros/src/lib.rs @@ -0,0 +1,807 @@ +#![deny(warnings)] + +extern crate proc_macro; +extern crate rand; +#[macro_use] +extern crate quote; +extern crate core; +extern crate proc_macro2; +#[macro_use] +extern crate syn; + +use proc_macro2::Span; +use rand::Rng; +use rand::SeedableRng; +use std::collections::HashSet; +use std::sync::atomic::{AtomicUsize, Ordering}; +use std::time::{SystemTime, UNIX_EPOCH}; +use syn::{ + parse, spanned::Spanned, AttrStyle, Attribute, FnArg, Ident, Item, ItemFn, ItemStatic, + PathArguments, ReturnType, Stmt, Type, Visibility, +}; + +static CALL_COUNT: AtomicUsize = AtomicUsize::new(0); + +use proc_macro::TokenStream; + +/// Attribute to declare the entry point of the program +/// +/// **IMPORTANT**: This attribute must appear exactly *once* in the dependency graph. Also, if you +/// are using Rust 1.30 the attribute must be used on a reachable item (i.e. there must be no +/// private modules between the item and the root of the crate); if the item is in the root of the +/// crate you'll be fine. This reachability restriction doesn't apply to Rust 1.31 and newer releases. +/// +/// The specified function will be called by the reset handler *after* RAM has been initialized. In +/// the case of the `thumbv7em-none-eabihf` target the FPU will also be enabled before the function +/// is called. +/// +/// The type of the specified function must be `[unsafe] fn() -> !` (never ending function) +/// +/// # Properties +/// +/// The entry point will be called by the reset handler. The program can't reference to the entry +/// point, much less invoke it. +/// +/// `static mut` variables declared within the entry point are safe to access. The compiler can't +/// prove this is safe so the attribute will help by making a transformation to the source code: for +/// this reason a variable like `static mut FOO: u32` will become `let FOO: &'static mut u32;`. Note +/// that `&'static mut` references have move semantics. +/// +/// # Examples +/// +/// - Simple entry point +/// +/// ``` no_run +/// # #![no_main] +/// # use cortex_m_rt_macros::entry; +/// #[entry] +/// fn main() -> ! { +/// loop { +/// /* .. */ +/// } +/// } +/// ``` +/// +/// - `static mut` variables local to the entry point are safe to modify. +/// +/// ``` no_run +/// # #![no_main] +/// # use cortex_m_rt_macros::entry; +/// #[entry] +/// fn main() -> ! { +/// static mut FOO: u32 = 0; +/// +/// let foo: &'static mut u32 = FOO; +/// assert_eq!(*foo, 0); +/// *foo = 1; +/// assert_eq!(*foo, 1); +/// +/// loop { +/// /* .. */ +/// } +/// } +/// ``` +#[proc_macro_attribute] +pub fn entry(args: TokenStream, input: TokenStream) -> TokenStream { + let f = parse_macro_input!(input as ItemFn); + + // check the function signature + let valid_signature = f.constness.is_none() + && f.vis == Visibility::Inherited + && f.abi.is_none() + && f.decl.inputs.is_empty() + && f.decl.generics.params.is_empty() + && f.decl.generics.where_clause.is_none() + && f.decl.variadic.is_none() + && match f.decl.output { + ReturnType::Default => false, + ReturnType::Type(_, ref ty) => match **ty { + Type::Never(_) => true, + _ => false, + }, + }; + + if !valid_signature { + return parse::Error::new( + f.span(), + "`#[entry]` function must have signature `[unsafe] fn() -> !`", + ) + .to_compile_error() + .into(); + } + + if !args.is_empty() { + return parse::Error::new(Span::call_site(), "This attribute accepts no arguments") + .to_compile_error() + .into(); + } + + // XXX should we blacklist other attributes? + let attrs = f.attrs; + let unsafety = f.unsafety; + let hash = random_ident(); + let (statics, stmts) = match extract_static_muts(f.block.stmts) { + Err(e) => return e.to_compile_error().into(), + Ok(x) => x, + }; + + let vars = statics + .into_iter() + .map(|var| { + let (ref cfgs, ref attrs) = extract_cfgs(var.attrs); + let ident = var.ident; + let ty = var.ty; + let expr = var.expr; + + quote!( + #[allow(non_snake_case)] + #(#cfgs)* + let #ident: &'static mut #ty = unsafe { + #(#attrs)* + #(#cfgs)* + static mut #ident: #ty = #expr; + + &mut #ident + }; + ) + }) + .collect::>(); + + quote!( + #[export_name = "main"] + #(#attrs)* + pub #unsafety fn #hash() -> ! { + #(#vars)* + + #(#stmts)* + } + ) + .into() +} + +/// Attribute to declare an exception handler +/// +/// **IMPORTANT**: If you are using Rust 1.30 this attribute must be used on reachable items (i.e. +/// there must be no private modules between the item and the root of the crate); if the item is in +/// the root of the crate you'll be fine. This reachability restriction doesn't apply to Rust 1.31 +/// and newer releases. +/// +/// # Syntax +/// +/// ``` +/// # use cortex_m_rt_macros::exception; +/// #[exception] +/// fn SysTick() { +/// // .. +/// } +/// +/// # fn main() {} +/// ``` +/// +/// where the name of the function must be one of: +/// +/// - `DefaultHandler` +/// - `NonMaskableInt` +/// - `HardFault` +/// - `MemoryManagement` (a) +/// - `BusFault` (a) +/// - `UsageFault` (a) +/// - `SecureFault` (b) +/// - `SVCall` +/// - `DebugMonitor` (a) +/// - `PendSV` +/// - `SysTick` +/// +/// (a) Not available on Cortex-M0 variants (`thumbv6m-none-eabi`) +/// +/// (b) Only available on ARMv8-M +/// +/// # Usage +/// +/// `#[exception] fn HardFault(..` sets the hard fault handler. The handler must have signature +/// `[unsafe] fn(&ExceptionFrame) -> !`. This handler is not allowed to return as that can cause +/// undefined behavior. +/// +/// `#[exception] fn DefaultHandler(..` sets the *default* handler. All exceptions which have not +/// been assigned a handler will be serviced by this handler. This handler must have signature +/// `[unsafe] fn(irqn: i16) [-> !]`. `irqn` is the IRQ number (See CMSIS); `irqn` will be a negative +/// number when the handler is servicing a core exception; `irqn` will be a positive number when the +/// handler is servicing a device specific exception (interrupt). +/// +/// `#[exception] fn Name(..` overrides the default handler for the exception with the given `Name`. +/// These handlers must have signature `[unsafe] fn() [-> !]`. When overriding these other exception +/// it's possible to add state to them by declaring `static mut` variables at the beginning of the +/// body of the function. These variables will be safe to access from the function body. +/// +/// # Properties +/// +/// Exception handlers can only be called by the hardware. Other parts of the program can't refer to +/// the exception handlers, much less invoke them as if they were functions. +/// +/// `static mut` variables declared within an exception handler are safe to access and can be used +/// to preserve state across invocations of the handler. The compiler can't prove this is safe so +/// the attribute will help by making a transformation to the source code: for this reason a +/// variable like `static mut FOO: u32` will become `let FOO: &mut u32;`. +/// +/// # Examples +/// +/// - Setting the `HardFault` handler +/// +/// ``` +/// # extern crate cortex_m_rt; +/// # extern crate cortex_m_rt_macros; +/// # use cortex_m_rt_macros::exception; +/// #[exception] +/// fn HardFault(ef: &cortex_m_rt::ExceptionFrame) -> ! { +/// // prints the exception frame as a panic message +/// panic!("{:#?}", ef); +/// } +/// +/// # fn main() {} +/// ``` +/// +/// - Setting the default handler +/// +/// ``` +/// # use cortex_m_rt_macros::exception; +/// #[exception] +/// fn DefaultHandler(irqn: i16) { +/// println!("IRQn = {}", irqn); +/// } +/// +/// # fn main() {} +/// ``` +/// +/// - Overriding the `SysTick` handler +/// +/// ``` +/// extern crate cortex_m_rt as rt; +/// +/// use rt::exception; +/// +/// #[exception] +/// fn SysTick() { +/// static mut COUNT: i32 = 0; +/// +/// // `COUNT` is safe to access and has type `&mut i32` +/// *COUNT += 1; +/// +/// println!("{}", COUNT); +/// } +/// +/// # fn main() {} +/// ``` +#[proc_macro_attribute] +pub fn exception(args: TokenStream, input: TokenStream) -> TokenStream { + let f = parse_macro_input!(input as ItemFn); + + if !args.is_empty() { + return parse::Error::new(Span::call_site(), "This attribute accepts no arguments") + .to_compile_error() + .into(); + } + + let fspan = f.span(); + let ident = f.ident; + + enum Exception { + DefaultHandler, + HardFault, + Other, + } + + let ident_s = ident.to_string(); + let exn = match &*ident_s { + "DefaultHandler" => Exception::DefaultHandler, + "HardFault" => Exception::HardFault, + // NOTE that at this point we don't check if the exception is available on the target (e.g. + // MemoryManagement is not available on Cortex-M0) + "NonMaskableInt" | "MemoryManagement" | "BusFault" | "UsageFault" | "SecureFault" + | "SVCall" | "DebugMonitor" | "PendSV" | "SysTick" => Exception::Other, + _ => { + return parse::Error::new(ident.span(), "This is not a valid exception name") + .to_compile_error() + .into(); + } + }; + + // XXX should we blacklist other attributes? + let attrs = f.attrs; + let block = f.block; + let stmts = block.stmts; + let unsafety = f.unsafety; + + let hash = random_ident(); + match exn { + Exception::DefaultHandler => { + let valid_signature = f.constness.is_none() + && f.vis == Visibility::Inherited + && f.abi.is_none() + && f.decl.inputs.len() == 1 + && f.decl.generics.params.is_empty() + && f.decl.generics.where_clause.is_none() + && f.decl.variadic.is_none() + && match f.decl.output { + ReturnType::Default => true, + ReturnType::Type(_, ref ty) => match **ty { + Type::Tuple(ref tuple) => tuple.elems.is_empty(), + Type::Never(..) => true, + _ => false, + }, + }; + + if !valid_signature { + return parse::Error::new( + fspan, + "`DefaultHandler` must have signature `[unsafe] fn(i16) [-> !]`", + ) + .to_compile_error() + .into(); + } + + let arg = match f.decl.inputs[0] { + FnArg::Captured(ref arg) => arg, + _ => unreachable!(), + }; + + quote!( + #[export_name = #ident_s] + #(#attrs)* + pub #unsafety extern "C" fn #hash() { + extern crate core; + + const SCB_ICSR: *const u32 = 0xE000_ED04 as *const u32; + + let #arg = unsafe { core::ptr::read(SCB_ICSR) as u8 as i16 - 16 }; + + #(#stmts)* + } + ) + .into() + } + Exception::HardFault => { + let valid_signature = f.constness.is_none() + && f.vis == Visibility::Inherited + && f.abi.is_none() + && f.decl.inputs.len() == 1 + && match f.decl.inputs[0] { + FnArg::Captured(ref arg) => match arg.ty { + Type::Reference(ref r) => r.lifetime.is_none() && r.mutability.is_none(), + _ => false, + }, + _ => false, + } + && f.decl.generics.params.is_empty() + && f.decl.generics.where_clause.is_none() + && f.decl.variadic.is_none() + && match f.decl.output { + ReturnType::Default => false, + ReturnType::Type(_, ref ty) => match **ty { + Type::Never(_) => true, + _ => false, + }, + }; + + if !valid_signature { + return parse::Error::new( + fspan, + "`HardFault` handler must have signature `[unsafe] fn(&ExceptionFrame) -> !`", + ) + .to_compile_error() + .into(); + } + + let arg = match f.decl.inputs[0] { + FnArg::Captured(ref arg) => arg, + _ => unreachable!(), + }; + + let pat = &arg.pat; + + quote!( + #[export_name = "HardFault"] + #[link_section = ".HardFault.user"] + #(#attrs)* + pub #unsafety extern "C" fn #hash(#arg) -> ! { + extern crate cortex_m_rt; + + // further type check of the input argument + let #pat: &cortex_m_rt::ExceptionFrame = #pat; + #(#stmts)* + } + ) + .into() + } + Exception::Other => { + let valid_signature = f.constness.is_none() + && f.vis == Visibility::Inherited + && f.abi.is_none() + && f.decl.inputs.is_empty() + && f.decl.generics.params.is_empty() + && f.decl.generics.where_clause.is_none() + && f.decl.variadic.is_none() + && match f.decl.output { + ReturnType::Default => true, + ReturnType::Type(_, ref ty) => match **ty { + Type::Tuple(ref tuple) => tuple.elems.is_empty(), + Type::Never(..) => true, + _ => false, + }, + }; + + if !valid_signature { + return parse::Error::new( + fspan, + "`#[exception]` handlers other than `DefaultHandler` and `HardFault` must have \ + signature `[unsafe] fn() [-> !]`", + ) + .to_compile_error() + .into(); + } + + let (statics, stmts) = match extract_static_muts(stmts) { + Err(e) => return e.to_compile_error().into(), + Ok(x) => x, + }; + + let vars = statics + .into_iter() + .map(|var| { + let (ref cfgs, ref attrs) = extract_cfgs(var.attrs); + let ident = var.ident; + let ty = var.ty; + let expr = var.expr; + + quote!( + #[allow(non_snake_case)] + #(#cfgs)* + let #ident: &mut #ty = unsafe { + #(#attrs)* + #(#cfgs)* + static mut #ident: #ty = #expr; + + &mut #ident + }; + ) + }) + .collect::>(); + + quote!( + #[export_name = #ident_s] + #(#attrs)* + pub #unsafety extern "C" fn #hash() { + extern crate cortex_m_rt; + + // check that this exception actually exists + cortex_m_rt::Exception::#ident; + + #(#vars)* + + #(#stmts)* + } + ) + .into() + } + } +} + +/// Attribute to declare an interrupt (AKA device-specific exception) handler +/// +/// **IMPORTANT**: If you are using Rust 1.30 this attribute must be used on reachable items (i.e. +/// there must be no private modules between the item and the root of the crate); if the item is in +/// the root of the crate you'll be fine. This reachability restriction doesn't apply to Rust 1.31 +/// and newer releases. +/// +/// **NOTE**: This attribute is exposed by `cortex-m-rt` only when the `device` feature is enabled. +/// However, that export is not meant to be used directly -- using it will result in a compilation +/// error. You should instead use the device crate (usually generated using `svd2rust`) re-export of +/// that attribute. You need to use the re-export to have the compiler check that the interrupt +/// exists on the target device. +/// +/// # Syntax +/// +/// ``` ignore +/// extern crate device; +/// +/// // the attribute comes from the device crate not from cortex-m-rt +/// use device::interrupt; +/// +/// #[interrupt] +/// fn USART1() { +/// // .. +/// } +/// ``` +/// +/// where the name of the function must be one of the device interrupts. +/// +/// # Usage +/// +/// `#[interrupt] fn Name(..` overrides the default handler for the interrupt with the given `Name`. +/// These handlers must have signature `[unsafe] fn() [-> !]`. It's possible to add state to these +/// handlers by declaring `static mut` variables at the beginning of the body of the function. These +/// variables will be safe to access from the function body. +/// +/// If the interrupt handler has not been overridden it will be dispatched by the default exception +/// handler (`DefaultHandler`). +/// +/// # Properties +/// +/// Interrupts handlers can only be called by the hardware. Other parts of the program can't refer +/// to the interrupt handlers, much less invoke them as if they were functions. +/// +/// `static mut` variables declared within an interrupt handler are safe to access and can be used +/// to preserve state across invocations of the handler. The compiler can't prove this is safe so +/// the attribute will help by making a transformation to the source code: for this reason a +/// variable like `static mut FOO: u32` will become `let FOO: &mut u32;`. +/// +/// # Examples +/// +/// - Using state within an interrupt handler +/// +/// ``` ignore +/// extern crate device; +/// +/// use device::interrupt; +/// +/// #[interrupt] +/// fn TIM2() { +/// static mut COUNT: i32 = 0; +/// +/// // `COUNT` is safe to access and has type `&mut i32` +/// *COUNT += 1; +/// +/// println!("{}", COUNT); +/// } +/// ``` +#[proc_macro_attribute] +pub fn interrupt(args: TokenStream, input: TokenStream) -> TokenStream { + let f: ItemFn = syn::parse(input).expect("`#[interrupt]` must be applied to a function"); + + if !args.is_empty() { + return parse::Error::new(Span::call_site(), "This attribute accepts no arguments") + .to_compile_error() + .into(); + } + + let fspan = f.span(); + let ident = f.ident; + let ident_s = ident.to_string(); + + // XXX should we blacklist other attributes? + let attrs = f.attrs; + let block = f.block; + let stmts = block.stmts; + let unsafety = f.unsafety; + + let valid_signature = f.constness.is_none() + && f.vis == Visibility::Inherited + && f.abi.is_none() + && f.decl.inputs.is_empty() + && f.decl.generics.params.is_empty() + && f.decl.generics.where_clause.is_none() + && f.decl.variadic.is_none() + && match f.decl.output { + ReturnType::Default => true, + ReturnType::Type(_, ref ty) => match **ty { + Type::Tuple(ref tuple) => tuple.elems.is_empty(), + Type::Never(..) => true, + _ => false, + }, + }; + + if !valid_signature { + return parse::Error::new( + fspan, + "`#[interrupt]` handlers must have signature `[unsafe] fn() [-> !]`", + ) + .to_compile_error() + .into(); + } + + let (statics, stmts) = match extract_static_muts(stmts) { + Err(e) => return e.to_compile_error().into(), + Ok(x) => x, + }; + + let vars = statics + .into_iter() + .map(|var| { + let (ref cfgs, ref attrs) = extract_cfgs(var.attrs); + let ident = var.ident; + let ty = var.ty; + let expr = var.expr; + + quote!( + #[allow(non_snake_case)] + #(#cfgs)* + let #ident: &mut #ty = unsafe { + #(#attrs)* + #(#cfgs)* + static mut #ident: #ty = #expr; + + &mut #ident + }; + ) + }) + .collect::>(); + + let hash = random_ident(); + quote!( + #[export_name = #ident_s] + #(#attrs)* + pub #unsafety extern "C" fn #hash() { + interrupt::#ident; + + #(#vars)* + + #(#stmts)* + } + ) + .into() +} + +/// Attribute to mark which function will be called at the beginning of the reset handler. +/// +/// **IMPORTANT**: This attribute can appear at most *once* in the dependency graph. Also, if you +/// are using Rust 1.30 the attribute must be used on a reachable item (i.e. there must be no +/// private modules between the item and the root of the crate); if the item is in the root of the +/// crate you'll be fine. This reachability restriction doesn't apply to Rust 1.31 and newer +/// releases. +/// +/// The function must have the signature of `unsafe fn()`. +/// +/// The function passed will be called before static variables are initialized. Any access of static +/// variables will result in undefined behavior. +/// +/// # Examples +/// +/// ``` +/// # use cortex_m_rt_macros::pre_init; +/// #[pre_init] +/// unsafe fn before_main() { +/// // do something here +/// } +/// +/// # fn main() {} +/// ``` +#[proc_macro_attribute] +pub fn pre_init(args: TokenStream, input: TokenStream) -> TokenStream { + let f = parse_macro_input!(input as ItemFn); + + // check the function signature + let valid_signature = f.constness.is_none() + && f.vis == Visibility::Inherited + && f.unsafety.is_some() + && f.abi.is_none() + && f.decl.inputs.is_empty() + && f.decl.generics.params.is_empty() + && f.decl.generics.where_clause.is_none() + && f.decl.variadic.is_none() + && match f.decl.output { + ReturnType::Default => true, + ReturnType::Type(_, ref ty) => match **ty { + Type::Tuple(ref tuple) => tuple.elems.is_empty(), + _ => false, + }, + }; + + if !valid_signature { + return parse::Error::new( + f.span(), + "`#[pre_init]` function must have signature `unsafe fn()`", + ) + .to_compile_error() + .into(); + } + + if !args.is_empty() { + return parse::Error::new(Span::call_site(), "This attribute accepts no arguments") + .to_compile_error() + .into(); + } + + // XXX should we blacklist other attributes? + let attrs = f.attrs; + let ident = f.ident; + let block = f.block; + + quote!( + #[export_name = "__pre_init"] + #(#attrs)* + pub unsafe fn #ident() #block + ) + .into() +} + +// Creates a random identifier +fn random_ident() -> Ident { + let secs = SystemTime::now() + .duration_since(UNIX_EPOCH) + .unwrap() + .as_secs(); + + let count: u64 = CALL_COUNT.fetch_add(1, Ordering::SeqCst) as u64; + let mut seed: [u8; 16] = [0; 16]; + + for (i, v) in seed.iter_mut().take(8).enumerate() { + *v = ((secs >> (i * 8)) & 0xFF) as u8 + } + + for (i, v) in seed.iter_mut().skip(8).enumerate() { + *v = ((count >> (i * 8)) & 0xFF) as u8 + } + + let mut rng = rand::rngs::SmallRng::from_seed(seed); + Ident::new( + &(0..16) + .map(|i| { + if i == 0 || rng.gen() { + ('a' as u8 + rng.gen::() % 25) as char + } else { + ('0' as u8 + rng.gen::() % 10) as char + } + }) + .collect::(), + Span::call_site(), + ) +} + +/// Extracts `static mut` vars from the beginning of the given statements +fn extract_static_muts(stmts: Vec) -> Result<(Vec, Vec), parse::Error> { + let mut istmts = stmts.into_iter(); + + let mut seen = HashSet::new(); + let mut statics = vec![]; + let mut stmts = vec![]; + while let Some(stmt) = istmts.next() { + match stmt { + Stmt::Item(Item::Static(var)) => { + if var.mutability.is_some() { + if seen.contains(&var.ident) { + return Err(parse::Error::new( + var.ident.span(), + format!("the name `{}` is defined multiple times", var.ident), + )); + } + + seen.insert(var.ident.clone()); + statics.push(var); + } else { + stmts.push(Stmt::Item(Item::Static(var))); + } + } + _ => { + stmts.push(stmt); + break; + } + } + } + + stmts.extend(istmts); + + Ok((statics, stmts)) +} + +fn extract_cfgs(attrs: Vec) -> (Vec, Vec) { + let mut cfgs = vec![]; + let mut not_cfgs = vec![]; + + for attr in attrs { + if eq(&attr, "cfg") { + cfgs.push(attr); + } else { + not_cfgs.push(attr); + } + } + + (cfgs, not_cfgs) +} + +/// Returns `true` if `attr.path` matches `name` +fn eq(attr: &Attribute, name: &str) -> bool { + attr.style == AttrStyle::Outer && attr.path.segments.len() == 1 && { + let pair = attr.path.segments.first().unwrap(); + let segment = pair.value(); + segment.arguments == PathArguments::None && segment.ident.to_string() == name + } +} From 85efa3b0809c723fad14f30a6523dec05e508ae5 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Tue, 5 Mar 2019 16:02:52 +0300 Subject: [PATCH 060/234] [macros] Fix Cargo.toml --- riscv-rt/macros/Cargo.toml | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/riscv-rt/macros/Cargo.toml b/riscv-rt/macros/Cargo.toml index ba6db64f..84762ff3 100644 --- a/riscv-rt/macros/Cargo.toml +++ b/riscv-rt/macros/Cargo.toml @@ -1,12 +1,15 @@ [package] -authors = ["Jorge Aparicio "] +authors = [ + "The RISC-V Team ", + "Jorge Aparicio ", +] categories = ["embedded", "no-std"] -description = "Attributes re-exported in `cortex-m-rt`" -documentation = "https://docs.rs/cortex-m-rt" -keywords = ["arm", "cortex-m", "runtime", "startup"] +description = "Attributes re-exported in `riscv-rt`" +documentation = "https://docs.rs/riscv-rt" +keywords = ["riscv", "runtime", "startup"] license = "MIT OR Apache-2.0" -name = "cortex-m-rt-macros" -repository = "https://github.com/japaric/cortex-m-rt" +name = "riscv-rt-macros" +repository = "https://github.com/rust-embedded/riscv-rt" version = "0.1.5" [lib] @@ -25,4 +28,4 @@ version = "0.5.5" default-features = false [dev-dependencies] -cortex-m-rt = { path = "..", version = "0.6.0" } +riscv-rt = { path = "..", version = "0.4.0" } From 1ad79f8fb76efef8b9efb162414e961d89c170e1 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Tue, 5 Mar 2019 16:03:43 +0300 Subject: [PATCH 061/234] [macros] Replace cortex-m with riscv --- riscv-rt/macros/src/lib.rs | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/riscv-rt/macros/src/lib.rs b/riscv-rt/macros/src/lib.rs index 7528586e..d345a4b1 100644 --- a/riscv-rt/macros/src/lib.rs +++ b/riscv-rt/macros/src/lib.rs @@ -53,7 +53,7 @@ use proc_macro::TokenStream; /// /// ``` no_run /// # #![no_main] -/// # use cortex_m_rt_macros::entry; +/// # use riscv_rt_macros::entry; /// #[entry] /// fn main() -> ! { /// loop { @@ -66,7 +66,7 @@ use proc_macro::TokenStream; /// /// ``` no_run /// # #![no_main] -/// # use cortex_m_rt_macros::entry; +/// # use riscv_rt_macros::entry; /// #[entry] /// fn main() -> ! { /// static mut FOO: u32 = 0; @@ -169,7 +169,7 @@ pub fn entry(args: TokenStream, input: TokenStream) -> TokenStream { /// # Syntax /// /// ``` -/// # use cortex_m_rt_macros::exception; +/// # use riscv_rt_macros::exception; /// #[exception] /// fn SysTick() { /// // .. @@ -228,11 +228,11 @@ pub fn entry(args: TokenStream, input: TokenStream) -> TokenStream { /// - Setting the `HardFault` handler /// /// ``` -/// # extern crate cortex_m_rt; -/// # extern crate cortex_m_rt_macros; -/// # use cortex_m_rt_macros::exception; +/// # extern crate riscv_rt; +/// # extern crate riscv_rt_macros; +/// # use riscv_rt_macros::exception; /// #[exception] -/// fn HardFault(ef: &cortex_m_rt::ExceptionFrame) -> ! { +/// fn HardFault(ef: &riscv_rt::ExceptionFrame) -> ! { /// // prints the exception frame as a panic message /// panic!("{:#?}", ef); /// } @@ -243,7 +243,7 @@ pub fn entry(args: TokenStream, input: TokenStream) -> TokenStream { /// - Setting the default handler /// /// ``` -/// # use cortex_m_rt_macros::exception; +/// # use riscv_rt_macros::exception; /// #[exception] /// fn DefaultHandler(irqn: i16) { /// println!("IRQn = {}", irqn); @@ -255,7 +255,7 @@ pub fn entry(args: TokenStream, input: TokenStream) -> TokenStream { /// - Overriding the `SysTick` handler /// /// ``` -/// extern crate cortex_m_rt as rt; +/// extern crate riscv_rt as rt; /// /// use rt::exception; /// @@ -403,10 +403,10 @@ pub fn exception(args: TokenStream, input: TokenStream) -> TokenStream { #[link_section = ".HardFault.user"] #(#attrs)* pub #unsafety extern "C" fn #hash(#arg) -> ! { - extern crate cortex_m_rt; + extern crate riscv_rt; // further type check of the input argument - let #pat: &cortex_m_rt::ExceptionFrame = #pat; + let #pat: &riscv_rt::ExceptionFrame = #pat; #(#stmts)* } ) @@ -470,10 +470,10 @@ pub fn exception(args: TokenStream, input: TokenStream) -> TokenStream { #[export_name = #ident_s] #(#attrs)* pub #unsafety extern "C" fn #hash() { - extern crate cortex_m_rt; + extern crate riscv_rt; // check that this exception actually exists - cortex_m_rt::Exception::#ident; + riscv_rt::Exception::#ident; #(#vars)* @@ -492,7 +492,7 @@ pub fn exception(args: TokenStream, input: TokenStream) -> TokenStream { /// the root of the crate you'll be fine. This reachability restriction doesn't apply to Rust 1.31 /// and newer releases. /// -/// **NOTE**: This attribute is exposed by `cortex-m-rt` only when the `device` feature is enabled. +/// **NOTE**: This attribute is exposed by `riscv-rt` only when the `device` feature is enabled. /// However, that export is not meant to be used directly -- using it will result in a compilation /// error. You should instead use the device crate (usually generated using `svd2rust`) re-export of /// that attribute. You need to use the re-export to have the compiler check that the interrupt @@ -503,7 +503,7 @@ pub fn exception(args: TokenStream, input: TokenStream) -> TokenStream { /// ``` ignore /// extern crate device; /// -/// // the attribute comes from the device crate not from cortex-m-rt +/// // the attribute comes from the device crate not from riscv-rt /// use device::interrupt; /// /// #[interrupt] @@ -656,7 +656,7 @@ pub fn interrupt(args: TokenStream, input: TokenStream) -> TokenStream { /// # Examples /// /// ``` -/// # use cortex_m_rt_macros::pre_init; +/// # use riscv_rt_macros::pre_init; /// #[pre_init] /// unsafe fn before_main() { /// // do something here From f981ee60ef1b400576a87db73b60febb6746188a Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Tue, 5 Mar 2019 16:08:12 +0300 Subject: [PATCH 062/234] Use proc-macro `entry` --- riscv-rt/Cargo.toml | 1 + riscv-rt/src/lib.rs | 38 ++++++++------------------------------ 2 files changed, 9 insertions(+), 30 deletions(-) diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index 28536baa..084e9e85 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -11,6 +11,7 @@ license = "ISC" [dependencies] r0 = "0.2.2" riscv = "0.5.0" +riscv-rt-macros = { path = "macros", version = "0.1.5" } [features] inline-asm = ["riscv/inline-asm"] diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index c430f412..88db9d1a 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -8,7 +8,7 @@ //! //! - Before main initialization of the FPU (for targets that have a FPU). //! -//! - An `entry!` macro to declare the entry point of the program. +//! - `#[entry]` to declare the entry point of the program //! //! - A linker script that encodes the memory layout of a generic RISC-V //! microcontroller. This linker script is missing some information that must @@ -46,8 +46,8 @@ //! use riscv_rt::entry; //! //! // use `main` as the entry point of this application -//! entry!(main); -//! +//! // `main` is not allowed to return +//! #[entry] //! fn main() -> ! { //! // do something here //! loop { } @@ -187,8 +187,11 @@ #![deny(warnings)] extern crate riscv; +extern crate riscv_rt_macros as macros; extern crate r0; +pub use macros::entry; + use riscv::register::{mstatus, mtvec}; extern "C" { @@ -215,8 +218,8 @@ extern "C" { #[link_section = ".init.rust"] #[export_name = "_start_rust"] pub extern "C" fn start_rust() -> ! { - extern "C" { - // This symbol will be provided by the user via the `entry!` macro + extern "Rust" { + // This symbol will be provided by the user via `#[entry]` fn main() -> !; } @@ -236,31 +239,6 @@ pub extern "C" fn start_rust() -> ! { } -/// Macro to define the entry point of the program -/// -/// **NOTE** This macro must be invoked once and must be invoked from an accessible module, ideally -/// from the root of the crate. -/// -/// Usage: `entry!(path::to::entry::point)` -/// -/// The specified function will be called by the reset handler *after* RAM has been initialized. -/// -/// The signature of the specified function must be `fn() -> !` (never ending function). -#[macro_export] -macro_rules! entry { - ($path:expr) => { - #[inline(never)] - #[export_name = "main"] - pub extern "C" fn __impl_main() -> ! { - // validate the signature of the program entry point - let f: fn() -> ! = $path; - - f() - } - }; -} - - /// Trap entry point rust (_start_trap_rust) /// /// mcause is read to determine the cause of the trap. XLEN-1 bit indicates From f11f0523906e0d166b3e23acc5dcc29df7dd0fe9 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Tue, 5 Mar 2019 17:23:30 +0300 Subject: [PATCH 063/234] Add 'pre_init' attribute --- riscv-rt/link.x | 5 +++++ riscv-rt/src/lib.rs | 36 +++++++++++++++++++++++++----------- 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/riscv-rt/link.x b/riscv-rt/link.x index c172f746..3cccb3ca 100644 --- a/riscv-rt/link.x +++ b/riscv-rt/link.x @@ -5,6 +5,11 @@ PROVIDE(_stack_start = ORIGIN(RAM) + LENGTH(RAM)); PROVIDE(trap_handler = default_trap_handler); +/* # Pre-initialization function */ +/* If the user overrides this using the `#[pre_init]` attribute or by creating a `__pre_init` function, + then the function this points to will be called before the RAM is initialized. */ +PROVIDE(__pre_init = default_pre_init); + SECTIONS { PROVIDE(_stext = ORIGIN(FLASH)); diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index 88db9d1a..1dc606af 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -9,6 +9,7 @@ //! - Before main initialization of the FPU (for targets that have a FPU). //! //! - `#[entry]` to declare the entry point of the program +//! - `#[pre_init]` to run code *before* `static` variables are initialized //! //! - A linker script that encodes the memory layout of a generic RISC-V //! microcontroller. This linker script is missing some information that must @@ -180,6 +181,14 @@ //! } //! } //! ``` +//! +//! ## `pre_init!` +//! +//! A user-defined function can be run at the start of the reset handler, before RAM is +//! initialized. The macro `pre_init!` can be called to set the function to be run. The function is +//! intended to perform actions that cannot wait the time it takes for RAM to be initialized, such +//! as disabling a watchdog. As the function is called before RAM is initialized, any access of +//! static variables will result in undefined behavior. // NOTE: Adapted from cortex-m/src/lib.rs #![no_std] @@ -190,7 +199,7 @@ extern crate riscv; extern crate riscv_rt_macros as macros; extern crate r0; -pub use macros::entry; +pub use macros::{entry, pre_init}; use riscv::register::{mstatus, mtvec}; @@ -217,25 +226,26 @@ extern "C" { /// never returns. #[link_section = ".init.rust"] #[export_name = "_start_rust"] -pub extern "C" fn start_rust() -> ! { +pub unsafe extern "C" fn start_rust() -> ! { extern "Rust" { // This symbol will be provided by the user via `#[entry]` fn main() -> !; - } - unsafe { - r0::zero_bss(&mut _sbss, &mut _ebss); - r0::init_data(&mut _sdata, &mut _edata, &_sidata); + // This symbol will be provided by the user via `#[pre_init]` + fn __pre_init(); } + __pre_init(); + + r0::zero_bss(&mut _sbss, &mut _ebss); + r0::init_data(&mut _sdata, &mut _edata, &_sidata); + // TODO: Enable FPU when available - unsafe { - // Set mtvec to _start_trap - mtvec::write(&_start_trap as *const _ as usize, mtvec::TrapMode::Direct); + // Set mtvec to _start_trap + mtvec::write(&_start_trap as *const _ as usize, mtvec::TrapMode::Direct); - main(); - } + main(); } @@ -265,3 +275,7 @@ pub extern "C" fn start_trap_rust() { /// Default Trap Handler #[no_mangle] pub fn default_trap_handler() {} + +#[doc(hidden)] +#[no_mangle] +pub unsafe extern "Rust" fn default_pre_init() {} From 253aa88fff9561126ac4f2504493f0e50af76bcd Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Tue, 5 Mar 2019 17:24:26 +0300 Subject: [PATCH 064/234] [macros] Remove 'static mut' hack --- riscv-rt/macros/src/lib.rs | 234 +------------------------------------ 1 file changed, 4 insertions(+), 230 deletions(-) diff --git a/riscv-rt/macros/src/lib.rs b/riscv-rt/macros/src/lib.rs index d345a4b1..605f7c04 100644 --- a/riscv-rt/macros/src/lib.rs +++ b/riscv-rt/macros/src/lib.rs @@ -12,12 +12,10 @@ extern crate syn; use proc_macro2::Span; use rand::Rng; use rand::SeedableRng; -use std::collections::HashSet; use std::sync::atomic::{AtomicUsize, Ordering}; use std::time::{SystemTime, UNIX_EPOCH}; use syn::{ - parse, spanned::Spanned, AttrStyle, Attribute, FnArg, Ident, Item, ItemFn, ItemStatic, - PathArguments, ReturnType, Stmt, Type, Visibility, + parse, spanned::Spanned, FnArg, Ident, ItemFn, ReturnType, Type, Visibility, }; static CALL_COUNT: AtomicUsize = AtomicUsize::new(0); @@ -42,11 +40,6 @@ use proc_macro::TokenStream; /// The entry point will be called by the reset handler. The program can't reference to the entry /// point, much less invoke it. /// -/// `static mut` variables declared within the entry point are safe to access. The compiler can't -/// prove this is safe so the attribute will help by making a transformation to the source code: for -/// this reason a variable like `static mut FOO: u32` will become `let FOO: &'static mut u32;`. Note -/// that `&'static mut` references have move semantics. -/// /// # Examples /// /// - Simple entry point @@ -61,26 +54,6 @@ use proc_macro::TokenStream; /// } /// } /// ``` -/// -/// - `static mut` variables local to the entry point are safe to modify. -/// -/// ``` no_run -/// # #![no_main] -/// # use riscv_rt_macros::entry; -/// #[entry] -/// fn main() -> ! { -/// static mut FOO: u32 = 0; -/// -/// let foo: &'static mut u32 = FOO; -/// assert_eq!(*foo, 0); -/// *foo = 1; -/// assert_eq!(*foo, 1); -/// -/// loop { -/// /* .. */ -/// } -/// } -/// ``` #[proc_macro_attribute] pub fn entry(args: TokenStream, input: TokenStream) -> TokenStream { let f = parse_macro_input!(input as ItemFn); @@ -120,39 +93,12 @@ pub fn entry(args: TokenStream, input: TokenStream) -> TokenStream { let attrs = f.attrs; let unsafety = f.unsafety; let hash = random_ident(); - let (statics, stmts) = match extract_static_muts(f.block.stmts) { - Err(e) => return e.to_compile_error().into(), - Ok(x) => x, - }; - - let vars = statics - .into_iter() - .map(|var| { - let (ref cfgs, ref attrs) = extract_cfgs(var.attrs); - let ident = var.ident; - let ty = var.ty; - let expr = var.expr; - - quote!( - #[allow(non_snake_case)] - #(#cfgs)* - let #ident: &'static mut #ty = unsafe { - #(#attrs)* - #(#cfgs)* - static mut #ident: #ty = #expr; - - &mut #ident - }; - ) - }) - .collect::>(); + let stmts = f.block.stmts; quote!( #[export_name = "main"] #(#attrs)* pub #unsafety fn #hash() -> ! { - #(#vars)* - #(#stmts)* } ) @@ -209,20 +155,13 @@ pub fn entry(args: TokenStream, input: TokenStream) -> TokenStream { /// handler is servicing a device specific exception (interrupt). /// /// `#[exception] fn Name(..` overrides the default handler for the exception with the given `Name`. -/// These handlers must have signature `[unsafe] fn() [-> !]`. When overriding these other exception -/// it's possible to add state to them by declaring `static mut` variables at the beginning of the -/// body of the function. These variables will be safe to access from the function body. +/// These handlers must have signature `[unsafe] fn() [-> !]`. /// /// # Properties /// /// Exception handlers can only be called by the hardware. Other parts of the program can't refer to /// the exception handlers, much less invoke them as if they were functions. /// -/// `static mut` variables declared within an exception handler are safe to access and can be used -/// to preserve state across invocations of the handler. The compiler can't prove this is safe so -/// the attribute will help by making a transformation to the source code: for this reason a -/// variable like `static mut FOO: u32` will become `let FOO: &mut u32;`. -/// /// # Examples /// /// - Setting the `HardFault` handler @@ -251,26 +190,6 @@ pub fn entry(args: TokenStream, input: TokenStream) -> TokenStream { /// /// # fn main() {} /// ``` -/// -/// - Overriding the `SysTick` handler -/// -/// ``` -/// extern crate riscv_rt as rt; -/// -/// use rt::exception; -/// -/// #[exception] -/// fn SysTick() { -/// static mut COUNT: i32 = 0; -/// -/// // `COUNT` is safe to access and has type `&mut i32` -/// *COUNT += 1; -/// -/// println!("{}", COUNT); -/// } -/// -/// # fn main() {} -/// ``` #[proc_macro_attribute] pub fn exception(args: TokenStream, input: TokenStream) -> TokenStream { let f = parse_macro_input!(input as ItemFn); @@ -439,33 +358,6 @@ pub fn exception(args: TokenStream, input: TokenStream) -> TokenStream { .into(); } - let (statics, stmts) = match extract_static_muts(stmts) { - Err(e) => return e.to_compile_error().into(), - Ok(x) => x, - }; - - let vars = statics - .into_iter() - .map(|var| { - let (ref cfgs, ref attrs) = extract_cfgs(var.attrs); - let ident = var.ident; - let ty = var.ty; - let expr = var.expr; - - quote!( - #[allow(non_snake_case)] - #(#cfgs)* - let #ident: &mut #ty = unsafe { - #(#attrs)* - #(#cfgs)* - static mut #ident: #ty = #expr; - - &mut #ident - }; - ) - }) - .collect::>(); - quote!( #[export_name = #ident_s] #(#attrs)* @@ -475,8 +367,6 @@ pub fn exception(args: TokenStream, input: TokenStream) -> TokenStream { // check that this exception actually exists riscv_rt::Exception::#ident; - #(#vars)* - #(#stmts)* } ) @@ -517,9 +407,7 @@ pub fn exception(args: TokenStream, input: TokenStream) -> TokenStream { /// # Usage /// /// `#[interrupt] fn Name(..` overrides the default handler for the interrupt with the given `Name`. -/// These handlers must have signature `[unsafe] fn() [-> !]`. It's possible to add state to these -/// handlers by declaring `static mut` variables at the beginning of the body of the function. These -/// variables will be safe to access from the function body. +/// These handlers must have signature `[unsafe] fn() [-> !]`. /// /// If the interrupt handler has not been overridden it will be dispatched by the default exception /// handler (`DefaultHandler`). @@ -528,31 +416,6 @@ pub fn exception(args: TokenStream, input: TokenStream) -> TokenStream { /// /// Interrupts handlers can only be called by the hardware. Other parts of the program can't refer /// to the interrupt handlers, much less invoke them as if they were functions. -/// -/// `static mut` variables declared within an interrupt handler are safe to access and can be used -/// to preserve state across invocations of the handler. The compiler can't prove this is safe so -/// the attribute will help by making a transformation to the source code: for this reason a -/// variable like `static mut FOO: u32` will become `let FOO: &mut u32;`. -/// -/// # Examples -/// -/// - Using state within an interrupt handler -/// -/// ``` ignore -/// extern crate device; -/// -/// use device::interrupt; -/// -/// #[interrupt] -/// fn TIM2() { -/// static mut COUNT: i32 = 0; -/// -/// // `COUNT` is safe to access and has type `&mut i32` -/// *COUNT += 1; -/// -/// println!("{}", COUNT); -/// } -/// ``` #[proc_macro_attribute] pub fn interrupt(args: TokenStream, input: TokenStream) -> TokenStream { let f: ItemFn = syn::parse(input).expect("`#[interrupt]` must be applied to a function"); @@ -598,33 +461,6 @@ pub fn interrupt(args: TokenStream, input: TokenStream) -> TokenStream { .into(); } - let (statics, stmts) = match extract_static_muts(stmts) { - Err(e) => return e.to_compile_error().into(), - Ok(x) => x, - }; - - let vars = statics - .into_iter() - .map(|var| { - let (ref cfgs, ref attrs) = extract_cfgs(var.attrs); - let ident = var.ident; - let ty = var.ty; - let expr = var.expr; - - quote!( - #[allow(non_snake_case)] - #(#cfgs)* - let #ident: &mut #ty = unsafe { - #(#attrs)* - #(#cfgs)* - static mut #ident: #ty = #expr; - - &mut #ident - }; - ) - }) - .collect::>(); - let hash = random_ident(); quote!( #[export_name = #ident_s] @@ -632,8 +468,6 @@ pub fn interrupt(args: TokenStream, input: TokenStream) -> TokenStream { pub #unsafety extern "C" fn #hash() { interrupt::#ident; - #(#vars)* - #(#stmts)* } ) @@ -745,63 +579,3 @@ fn random_ident() -> Ident { Span::call_site(), ) } - -/// Extracts `static mut` vars from the beginning of the given statements -fn extract_static_muts(stmts: Vec) -> Result<(Vec, Vec), parse::Error> { - let mut istmts = stmts.into_iter(); - - let mut seen = HashSet::new(); - let mut statics = vec![]; - let mut stmts = vec![]; - while let Some(stmt) = istmts.next() { - match stmt { - Stmt::Item(Item::Static(var)) => { - if var.mutability.is_some() { - if seen.contains(&var.ident) { - return Err(parse::Error::new( - var.ident.span(), - format!("the name `{}` is defined multiple times", var.ident), - )); - } - - seen.insert(var.ident.clone()); - statics.push(var); - } else { - stmts.push(Stmt::Item(Item::Static(var))); - } - } - _ => { - stmts.push(stmt); - break; - } - } - } - - stmts.extend(istmts); - - Ok((statics, stmts)) -} - -fn extract_cfgs(attrs: Vec) -> (Vec, Vec) { - let mut cfgs = vec![]; - let mut not_cfgs = vec![]; - - for attr in attrs { - if eq(&attr, "cfg") { - cfgs.push(attr); - } else { - not_cfgs.push(attr); - } - } - - (cfgs, not_cfgs) -} - -/// Returns `true` if `attr.path` matches `name` -fn eq(attr: &Attribute, name: &str) -> bool { - attr.style == AttrStyle::Outer && attr.path.segments.len() == 1 && { - let pair = attr.path.segments.first().unwrap(); - let segment = pair.value(); - segment.arguments == PathArguments::None && segment.ident.to_string() == name - } -} From 64fb6ad3122dbe38d71e6193d7e416a9c1197859 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Tue, 5 Mar 2019 21:40:03 +0300 Subject: [PATCH 065/234] [macros] Remove 'exception' and 'interrupt' attributes --- riscv-rt/macros/src/lib.rs | 371 +------------------------------------ 1 file changed, 1 insertion(+), 370 deletions(-) diff --git a/riscv-rt/macros/src/lib.rs b/riscv-rt/macros/src/lib.rs index 605f7c04..0a6bcdbb 100644 --- a/riscv-rt/macros/src/lib.rs +++ b/riscv-rt/macros/src/lib.rs @@ -15,7 +15,7 @@ use rand::SeedableRng; use std::sync::atomic::{AtomicUsize, Ordering}; use std::time::{SystemTime, UNIX_EPOCH}; use syn::{ - parse, spanned::Spanned, FnArg, Ident, ItemFn, ReturnType, Type, Visibility, + parse, spanned::Spanned, Ident, ItemFn, ReturnType, Type, Visibility, }; static CALL_COUNT: AtomicUsize = AtomicUsize::new(0); @@ -105,375 +105,6 @@ pub fn entry(args: TokenStream, input: TokenStream) -> TokenStream { .into() } -/// Attribute to declare an exception handler -/// -/// **IMPORTANT**: If you are using Rust 1.30 this attribute must be used on reachable items (i.e. -/// there must be no private modules between the item and the root of the crate); if the item is in -/// the root of the crate you'll be fine. This reachability restriction doesn't apply to Rust 1.31 -/// and newer releases. -/// -/// # Syntax -/// -/// ``` -/// # use riscv_rt_macros::exception; -/// #[exception] -/// fn SysTick() { -/// // .. -/// } -/// -/// # fn main() {} -/// ``` -/// -/// where the name of the function must be one of: -/// -/// - `DefaultHandler` -/// - `NonMaskableInt` -/// - `HardFault` -/// - `MemoryManagement` (a) -/// - `BusFault` (a) -/// - `UsageFault` (a) -/// - `SecureFault` (b) -/// - `SVCall` -/// - `DebugMonitor` (a) -/// - `PendSV` -/// - `SysTick` -/// -/// (a) Not available on Cortex-M0 variants (`thumbv6m-none-eabi`) -/// -/// (b) Only available on ARMv8-M -/// -/// # Usage -/// -/// `#[exception] fn HardFault(..` sets the hard fault handler. The handler must have signature -/// `[unsafe] fn(&ExceptionFrame) -> !`. This handler is not allowed to return as that can cause -/// undefined behavior. -/// -/// `#[exception] fn DefaultHandler(..` sets the *default* handler. All exceptions which have not -/// been assigned a handler will be serviced by this handler. This handler must have signature -/// `[unsafe] fn(irqn: i16) [-> !]`. `irqn` is the IRQ number (See CMSIS); `irqn` will be a negative -/// number when the handler is servicing a core exception; `irqn` will be a positive number when the -/// handler is servicing a device specific exception (interrupt). -/// -/// `#[exception] fn Name(..` overrides the default handler for the exception with the given `Name`. -/// These handlers must have signature `[unsafe] fn() [-> !]`. -/// -/// # Properties -/// -/// Exception handlers can only be called by the hardware. Other parts of the program can't refer to -/// the exception handlers, much less invoke them as if they were functions. -/// -/// # Examples -/// -/// - Setting the `HardFault` handler -/// -/// ``` -/// # extern crate riscv_rt; -/// # extern crate riscv_rt_macros; -/// # use riscv_rt_macros::exception; -/// #[exception] -/// fn HardFault(ef: &riscv_rt::ExceptionFrame) -> ! { -/// // prints the exception frame as a panic message -/// panic!("{:#?}", ef); -/// } -/// -/// # fn main() {} -/// ``` -/// -/// - Setting the default handler -/// -/// ``` -/// # use riscv_rt_macros::exception; -/// #[exception] -/// fn DefaultHandler(irqn: i16) { -/// println!("IRQn = {}", irqn); -/// } -/// -/// # fn main() {} -/// ``` -#[proc_macro_attribute] -pub fn exception(args: TokenStream, input: TokenStream) -> TokenStream { - let f = parse_macro_input!(input as ItemFn); - - if !args.is_empty() { - return parse::Error::new(Span::call_site(), "This attribute accepts no arguments") - .to_compile_error() - .into(); - } - - let fspan = f.span(); - let ident = f.ident; - - enum Exception { - DefaultHandler, - HardFault, - Other, - } - - let ident_s = ident.to_string(); - let exn = match &*ident_s { - "DefaultHandler" => Exception::DefaultHandler, - "HardFault" => Exception::HardFault, - // NOTE that at this point we don't check if the exception is available on the target (e.g. - // MemoryManagement is not available on Cortex-M0) - "NonMaskableInt" | "MemoryManagement" | "BusFault" | "UsageFault" | "SecureFault" - | "SVCall" | "DebugMonitor" | "PendSV" | "SysTick" => Exception::Other, - _ => { - return parse::Error::new(ident.span(), "This is not a valid exception name") - .to_compile_error() - .into(); - } - }; - - // XXX should we blacklist other attributes? - let attrs = f.attrs; - let block = f.block; - let stmts = block.stmts; - let unsafety = f.unsafety; - - let hash = random_ident(); - match exn { - Exception::DefaultHandler => { - let valid_signature = f.constness.is_none() - && f.vis == Visibility::Inherited - && f.abi.is_none() - && f.decl.inputs.len() == 1 - && f.decl.generics.params.is_empty() - && f.decl.generics.where_clause.is_none() - && f.decl.variadic.is_none() - && match f.decl.output { - ReturnType::Default => true, - ReturnType::Type(_, ref ty) => match **ty { - Type::Tuple(ref tuple) => tuple.elems.is_empty(), - Type::Never(..) => true, - _ => false, - }, - }; - - if !valid_signature { - return parse::Error::new( - fspan, - "`DefaultHandler` must have signature `[unsafe] fn(i16) [-> !]`", - ) - .to_compile_error() - .into(); - } - - let arg = match f.decl.inputs[0] { - FnArg::Captured(ref arg) => arg, - _ => unreachable!(), - }; - - quote!( - #[export_name = #ident_s] - #(#attrs)* - pub #unsafety extern "C" fn #hash() { - extern crate core; - - const SCB_ICSR: *const u32 = 0xE000_ED04 as *const u32; - - let #arg = unsafe { core::ptr::read(SCB_ICSR) as u8 as i16 - 16 }; - - #(#stmts)* - } - ) - .into() - } - Exception::HardFault => { - let valid_signature = f.constness.is_none() - && f.vis == Visibility::Inherited - && f.abi.is_none() - && f.decl.inputs.len() == 1 - && match f.decl.inputs[0] { - FnArg::Captured(ref arg) => match arg.ty { - Type::Reference(ref r) => r.lifetime.is_none() && r.mutability.is_none(), - _ => false, - }, - _ => false, - } - && f.decl.generics.params.is_empty() - && f.decl.generics.where_clause.is_none() - && f.decl.variadic.is_none() - && match f.decl.output { - ReturnType::Default => false, - ReturnType::Type(_, ref ty) => match **ty { - Type::Never(_) => true, - _ => false, - }, - }; - - if !valid_signature { - return parse::Error::new( - fspan, - "`HardFault` handler must have signature `[unsafe] fn(&ExceptionFrame) -> !`", - ) - .to_compile_error() - .into(); - } - - let arg = match f.decl.inputs[0] { - FnArg::Captured(ref arg) => arg, - _ => unreachable!(), - }; - - let pat = &arg.pat; - - quote!( - #[export_name = "HardFault"] - #[link_section = ".HardFault.user"] - #(#attrs)* - pub #unsafety extern "C" fn #hash(#arg) -> ! { - extern crate riscv_rt; - - // further type check of the input argument - let #pat: &riscv_rt::ExceptionFrame = #pat; - #(#stmts)* - } - ) - .into() - } - Exception::Other => { - let valid_signature = f.constness.is_none() - && f.vis == Visibility::Inherited - && f.abi.is_none() - && f.decl.inputs.is_empty() - && f.decl.generics.params.is_empty() - && f.decl.generics.where_clause.is_none() - && f.decl.variadic.is_none() - && match f.decl.output { - ReturnType::Default => true, - ReturnType::Type(_, ref ty) => match **ty { - Type::Tuple(ref tuple) => tuple.elems.is_empty(), - Type::Never(..) => true, - _ => false, - }, - }; - - if !valid_signature { - return parse::Error::new( - fspan, - "`#[exception]` handlers other than `DefaultHandler` and `HardFault` must have \ - signature `[unsafe] fn() [-> !]`", - ) - .to_compile_error() - .into(); - } - - quote!( - #[export_name = #ident_s] - #(#attrs)* - pub #unsafety extern "C" fn #hash() { - extern crate riscv_rt; - - // check that this exception actually exists - riscv_rt::Exception::#ident; - - #(#stmts)* - } - ) - .into() - } - } -} - -/// Attribute to declare an interrupt (AKA device-specific exception) handler -/// -/// **IMPORTANT**: If you are using Rust 1.30 this attribute must be used on reachable items (i.e. -/// there must be no private modules between the item and the root of the crate); if the item is in -/// the root of the crate you'll be fine. This reachability restriction doesn't apply to Rust 1.31 -/// and newer releases. -/// -/// **NOTE**: This attribute is exposed by `riscv-rt` only when the `device` feature is enabled. -/// However, that export is not meant to be used directly -- using it will result in a compilation -/// error. You should instead use the device crate (usually generated using `svd2rust`) re-export of -/// that attribute. You need to use the re-export to have the compiler check that the interrupt -/// exists on the target device. -/// -/// # Syntax -/// -/// ``` ignore -/// extern crate device; -/// -/// // the attribute comes from the device crate not from riscv-rt -/// use device::interrupt; -/// -/// #[interrupt] -/// fn USART1() { -/// // .. -/// } -/// ``` -/// -/// where the name of the function must be one of the device interrupts. -/// -/// # Usage -/// -/// `#[interrupt] fn Name(..` overrides the default handler for the interrupt with the given `Name`. -/// These handlers must have signature `[unsafe] fn() [-> !]`. -/// -/// If the interrupt handler has not been overridden it will be dispatched by the default exception -/// handler (`DefaultHandler`). -/// -/// # Properties -/// -/// Interrupts handlers can only be called by the hardware. Other parts of the program can't refer -/// to the interrupt handlers, much less invoke them as if they were functions. -#[proc_macro_attribute] -pub fn interrupt(args: TokenStream, input: TokenStream) -> TokenStream { - let f: ItemFn = syn::parse(input).expect("`#[interrupt]` must be applied to a function"); - - if !args.is_empty() { - return parse::Error::new(Span::call_site(), "This attribute accepts no arguments") - .to_compile_error() - .into(); - } - - let fspan = f.span(); - let ident = f.ident; - let ident_s = ident.to_string(); - - // XXX should we blacklist other attributes? - let attrs = f.attrs; - let block = f.block; - let stmts = block.stmts; - let unsafety = f.unsafety; - - let valid_signature = f.constness.is_none() - && f.vis == Visibility::Inherited - && f.abi.is_none() - && f.decl.inputs.is_empty() - && f.decl.generics.params.is_empty() - && f.decl.generics.where_clause.is_none() - && f.decl.variadic.is_none() - && match f.decl.output { - ReturnType::Default => true, - ReturnType::Type(_, ref ty) => match **ty { - Type::Tuple(ref tuple) => tuple.elems.is_empty(), - Type::Never(..) => true, - _ => false, - }, - }; - - if !valid_signature { - return parse::Error::new( - fspan, - "`#[interrupt]` handlers must have signature `[unsafe] fn() [-> !]`", - ) - .to_compile_error() - .into(); - } - - let hash = random_ident(); - quote!( - #[export_name = #ident_s] - #(#attrs)* - pub #unsafety extern "C" fn #hash() { - interrupt::#ident; - - #(#stmts)* - } - ) - .into() -} - /// Attribute to mark which function will be called at the beginning of the reset handler. /// /// **IMPORTANT**: This attribute can appear at most *once* in the dependency graph. Also, if you From d2eff45f5930a8e808530673c3e719956a7bea82 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Thu, 7 Mar 2019 15:14:51 +0300 Subject: [PATCH 066/234] Fix documentation --- riscv-rt/macros/src/lib.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/riscv-rt/macros/src/lib.rs b/riscv-rt/macros/src/lib.rs index 0a6bcdbb..91ef9117 100644 --- a/riscv-rt/macros/src/lib.rs +++ b/riscv-rt/macros/src/lib.rs @@ -29,9 +29,8 @@ use proc_macro::TokenStream; /// private modules between the item and the root of the crate); if the item is in the root of the /// crate you'll be fine. This reachability restriction doesn't apply to Rust 1.31 and newer releases. /// -/// The specified function will be called by the reset handler *after* RAM has been initialized. In -/// the case of the `thumbv7em-none-eabihf` target the FPU will also be enabled before the function -/// is called. +/// The specified function will be called by the reset handler *after* RAM has been initialized. +/// If present, the FPU will also be enabled before the function is called. /// /// The type of the specified function must be `[unsafe] fn() -> !` (never ending function) /// From f572fdecd48a82b6b7b14f20b07746e673621394 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Thu, 7 Mar 2019 16:04:34 +0300 Subject: [PATCH 067/234] Add MSRV policy --- riscv-rt/.travis.yml | 3 +++ riscv-rt/src/lib.rs | 7 +++++++ 2 files changed, 10 insertions(+) diff --git a/riscv-rt/.travis.yml b/riscv-rt/.travis.yml index e61c80a5..52f2755e 100644 --- a/riscv-rt/.travis.yml +++ b/riscv-rt/.travis.yml @@ -3,6 +3,7 @@ language: rust rust: - nightly - stable +- 1.31.0 # MSRV env: - TARGET=x86_64-unknown-linux-gnu @@ -15,6 +16,8 @@ matrix: exclude: - rust: stable env: TARGET=riscv64imac-unknown-none-elf + - rust: 1.31.0 # MSRV + env: TARGET=riscv64imac-unknown-none-elf before_install: set -e diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index 1dc606af..1de3121b 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -1,5 +1,12 @@ //! Minimal startup / runtime for RISC-V CPU's //! +//! # Minimum Supported Rust Version (MSRV) +//! +//! This crate is guaranteed to compile on stable Rust 1.31 and up. It *might* +//! compile with older versions but that may change in any new patch release. +//! Note that `riscv64imac-unknown-none-elf` and `riscv64gc-unknown-none-elf` targets +//! are not supported on stable yet. +//! //! # Features //! //! This crate provides From e85c1fb81c01faacf39aa4b2e9ea64e8650c1d90 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Thu, 7 Mar 2019 16:05:01 +0300 Subject: [PATCH 068/234] Bump version --- riscv-rt/Cargo.toml | 2 +- riscv-rt/macros/Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index 084e9e85..3e642580 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "riscv-rt" -version = "0.4.0" +version = "0.5.0" repository = "https://github.com/rust-embedded/riscv-rt" authors = ["The RISC-V Team "] categories = ["embedded", "no-std"] diff --git a/riscv-rt/macros/Cargo.toml b/riscv-rt/macros/Cargo.toml index 84762ff3..fb1e741c 100644 --- a/riscv-rt/macros/Cargo.toml +++ b/riscv-rt/macros/Cargo.toml @@ -28,4 +28,4 @@ version = "0.5.5" default-features = false [dev-dependencies] -riscv-rt = { path = "..", version = "0.4.0" } +riscv-rt = { path = "..", version = "0.5.0" } From 8163823a83bc9eda50057c6b5fb59f342148e2b6 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Fri, 15 Mar 2019 16:46:19 +0300 Subject: [PATCH 069/234] Produce a compilation error if riscv-rt appears more than once in the dependency graph --- riscv-rt/src/lib.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index 1de3121b..d2274812 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -210,6 +210,10 @@ pub use macros::{entry, pre_init}; use riscv::register::{mstatus, mtvec}; +#[export_name = "error: riscv-rt appears more than once in the dependency graph"] +#[doc(hidden)] +pub static __ONCE__: () = (); + extern "C" { // Boundaries of the .bss section static mut _ebss: u32; From 1c716aacb1cac7df12a5610d84df216bf54626c7 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Fri, 29 Mar 2019 16:03:23 +0300 Subject: [PATCH 070/234] Update 'riscv' dependency --- riscv-rt/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index 3e642580..ff4c1b4b 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -10,7 +10,7 @@ license = "ISC" [dependencies] r0 = "0.2.2" -riscv = "0.5.0" +riscv = "0.5.1" riscv-rt-macros = { path = "macros", version = "0.1.5" } [features] From 373d773767545b0d251f833b6488fa6381e82693 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Fri, 29 Mar 2019 16:05:07 +0300 Subject: [PATCH 071/234] Initialize FPU when available --- riscv-rt/src/lib.rs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index d2274812..b8d1e2b8 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -208,7 +208,7 @@ extern crate r0; pub use macros::{entry, pre_init}; -use riscv::register::{mstatus, mtvec}; +use riscv::register::{mstatus, mtvec, misa, fcsr}; #[export_name = "error: riscv-rt appears more than once in the dependency graph"] #[doc(hidden)] @@ -251,7 +251,15 @@ pub unsafe extern "C" fn start_rust() -> ! { r0::zero_bss(&mut _sbss, &mut _ebss); r0::init_data(&mut _sdata, &mut _edata, &_sidata); - // TODO: Enable FPU when available + // Initialize FPU when available + if let Some(isa) = misa::read() { + if isa.has_extension('F') || isa.has_extension('D') { + fcsr::clear_flags(); + fcsr::set_rounding_mode(fcsr::RoundingMode::RoundToNearestEven); + mstatus::set_fs(mstatus::FS::Dirty); + // TODO: fill registers with zeros + } + } // Set mtvec to _start_trap mtvec::write(&_start_trap as *const _ as usize, mtvec::TrapMode::Direct); From a4ac2f3e330da3a5f41520320ff2406d6c543b88 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Mon, 1 Apr 2019 17:27:19 +0300 Subject: [PATCH 072/234] Fix linker script: produce correct program headers --- riscv-rt/link.x | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/riscv-rt/link.x b/riscv-rt/link.x index 3cccb3ca..5515ecf7 100644 --- a/riscv-rt/link.x +++ b/riscv-rt/link.x @@ -10,6 +10,13 @@ PROVIDE(trap_handler = default_trap_handler); then the function this points to will be called before the RAM is initialized. */ PROVIDE(__pre_init = default_pre_init); +PHDRS +{ + flash PT_LOAD; + ram_init PT_LOAD; + ram PT_NULL; +} + SECTIONS { PROVIDE(_stext = ORIGIN(FLASH)); @@ -25,22 +32,14 @@ SECTIONS KEEP(*(.trap.rust)); *(.text .text.*); - } > FLASH + } > FLASH :flash .rodata ALIGN(4) : { *(.rodata .rodata.*); - } > FLASH + } > FLASH :flash - .bss : - { - _sbss = .; - *(.bss .bss.*); - . = ALIGN(4); - _ebss = .; - } > RAM - - .data : AT(LOADADDR(.rodata) + SIZEOF(.rodata)) + .data ALIGN(4) : { _sidata = LOADADDR(.data); _sdata = .; @@ -49,7 +48,15 @@ SECTIONS *(.data .data.*); . = ALIGN(4); _edata = .; - } > RAM + } > RAM AT > FLASH :ram_init + + .bss : + { + _sbss = .; + *(.bss .bss.*); + . = ALIGN(4); + _ebss = .; + } > RAM :ram PROVIDE(_heap_size = 0); @@ -60,7 +67,7 @@ SECTIONS . += _heap_size; . = ALIGN(4); _eheap = .; - } > RAM + } > RAM :ram /* fictitious region that represents the memory available for the stack */ .stack (INFO) : @@ -68,7 +75,7 @@ SECTIONS _estack = .; . = _stack_start; _sstack = .; - } > RAM + } > RAM :ram /* fake output .got section */ /* Dynamic relocations are unsupported. This section is only used to detect From 43b527c99b6cd22cef25eae6d5c3b6be0dfdcc0e Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Mon, 1 Apr 2019 18:25:21 +0300 Subject: [PATCH 073/234] Fix _stext redefinition --- riscv-rt/link.x | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/riscv-rt/link.x b/riscv-rt/link.x index 5515ecf7..a6e5b8fd 100644 --- a/riscv-rt/link.x +++ b/riscv-rt/link.x @@ -21,6 +21,11 @@ SECTIONS { PROVIDE(_stext = ORIGIN(FLASH)); + .text.dummy ORIGIN(FLASH) : + { + /* This section is intended to make _stext address work */ + } > FLASH :ram + .text ALIGN(_stext,4) : { /* Put reset handler first in .text section so it ends up as the entry */ From fdd627df17f8131feaf988ee6930ff1a6d583b28 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Mon, 1 Apr 2019 18:47:27 +0300 Subject: [PATCH 074/234] Use region aliases in the linker script --- riscv-rt/link.x | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/riscv-rt/link.x b/riscv-rt/link.x index a6e5b8fd..db08f047 100644 --- a/riscv-rt/link.x +++ b/riscv-rt/link.x @@ -1,7 +1,4 @@ -/* NOTE: Adapted from cortex-m/link.x */ -INCLUDE memory.x - -PROVIDE(_stack_start = ORIGIN(RAM) + LENGTH(RAM)); +PROVIDE(_stack_start = ORIGIN(REGION_STACK) + LENGTH(REGION_STACK)); PROVIDE(trap_handler = default_trap_handler); @@ -12,19 +9,19 @@ PROVIDE(__pre_init = default_pre_init); PHDRS { - flash PT_LOAD; - ram_init PT_LOAD; - ram PT_NULL; + load PT_LOAD; + ram_load PT_LOAD; + virtual PT_NULL; } SECTIONS { - PROVIDE(_stext = ORIGIN(FLASH)); + PROVIDE(_stext = ORIGIN(REGION_TEXT)); - .text.dummy ORIGIN(FLASH) : + .text.dummy ORIGIN(REGION_TEXT) : { /* This section is intended to make _stext address work */ - } > FLASH :ram + } > REGION_TEXT :virtual .text ALIGN(_stext,4) : { @@ -37,12 +34,12 @@ SECTIONS KEEP(*(.trap.rust)); *(.text .text.*); - } > FLASH :flash + } > REGION_TEXT :load .rodata ALIGN(4) : { *(.rodata .rodata.*); - } > FLASH :flash + } > REGION_RODATA :load .data ALIGN(4) : { @@ -53,7 +50,7 @@ SECTIONS *(.data .data.*); . = ALIGN(4); _edata = .; - } > RAM AT > FLASH :ram_init + } > REGION_DATA AT > REGION_RODATA :ram_load .bss : { @@ -61,7 +58,7 @@ SECTIONS *(.bss .bss.*); . = ALIGN(4); _ebss = .; - } > RAM :ram + } > REGION_BSS :virtual PROVIDE(_heap_size = 0); @@ -72,7 +69,7 @@ SECTIONS . += _heap_size; . = ALIGN(4); _eheap = .; - } > RAM :ram + } > REGION_HEAP :virtual /* fictitious region that represents the memory available for the stack */ .stack (INFO) : @@ -80,7 +77,7 @@ SECTIONS _estack = .; . = _stack_start; _sstack = .; - } > RAM :ram + } > REGION_STACK :virtual /* fake output .got section */ /* Dynamic relocations are unsupported. This section is only used to detect From ec35554f40e5c8231363dd4783eef6f7e3223650 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Mon, 1 Apr 2019 18:51:22 +0300 Subject: [PATCH 075/234] Put provides in one place --- riscv-rt/link.x | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/riscv-rt/link.x b/riscv-rt/link.x index db08f047..2db5c282 100644 --- a/riscv-rt/link.x +++ b/riscv-rt/link.x @@ -1,4 +1,6 @@ +PROVIDE(_stext = ORIGIN(REGION_TEXT)); PROVIDE(_stack_start = ORIGIN(REGION_STACK) + LENGTH(REGION_STACK)); +PROVIDE(_heap_size = 0); PROVIDE(trap_handler = default_trap_handler); @@ -16,8 +18,6 @@ PHDRS SECTIONS { - PROVIDE(_stext = ORIGIN(REGION_TEXT)); - .text.dummy ORIGIN(REGION_TEXT) : { /* This section is intended to make _stext address work */ @@ -60,8 +60,6 @@ SECTIONS _ebss = .; } > REGION_BSS :virtual - PROVIDE(_heap_size = 0); - /* fictitious region that represents the memory available for the heap */ .heap (INFO) : { From 9d64f83fa4b02e709c20b75dda814f36e7150d9b Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Mon, 1 Apr 2019 18:59:11 +0300 Subject: [PATCH 076/234] Add more asserts --- riscv-rt/link.x | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/riscv-rt/link.x b/riscv-rt/link.x index 2db5c282..396e058f 100644 --- a/riscv-rt/link.x +++ b/riscv-rt/link.x @@ -93,10 +93,49 @@ SECTIONS } } -/* Do not exceed this mark in the error messages below | */ +/* Do not exceed this mark in the error messages above | */ +ASSERT(ORIGIN(REGION_TEXT) % 4 == 0, " +ERROR(riscv-rt): the start of the REGION_TEXT must be 4-byte aligned"); + +ASSERT(ORIGIN(REGION_RODATA) % 4 == 0, " +ERROR(riscv-rt): the start of the REGION_RODATA must be 4-byte aligned"); + +ASSERT(ORIGIN(REGION_DATA) % 4 == 0, " +ERROR(riscv-rt): the start of the REGION_DATA must be 4-byte aligned"); + +ASSERT(ORIGIN(REGION_HEAP) % 4 == 0, " +ERROR(riscv-rt): the start of the REGION_HEAP must be 4-byte aligned"); + +ASSERT(ORIGIN(REGION_TEXT) % 4 == 0, " +ERROR(riscv-rt): the start of the REGION_TEXT must be 4-byte aligned"); + +ASSERT(ORIGIN(REGION_STACK) % 4 == 0, " +ERROR(riscv-rt): the start of the REGION_STACK must be 4-byte aligned"); + +ASSERT(_stext % 4 == 0, " +ERROR(riscv-rt): `_stext` must be 4-byte aligned"); + +ASSERT(_sdata % 4 == 0 && _edata % 4 == 0, " +BUG(riscv-rt): .data is not 4-byte aligned"); + +ASSERT(_sidata % 4 == 0, " +BUG(riscv-rt): the LMA of .data is not 4-byte aligned"); + +ASSERT(_sbss % 4 == 0 && _ebss % 4 == 0, " +BUG(riscv-rt): .bss is not 4-byte aligned"); + +ASSERT(_sheap % 4 == 0, " +BUG(riscv-rt): start of .heap is not 4-byte aligned"); + +ASSERT(_stext + SIZEOF(.text) < ORIGIN(REGION_TEXT) + LENGTH(REGION_TEXT), " +ERROR(riscv-rt): The .text section must be placed inside the REGION_TEXT region. +Set _stext to an address smaller than 'ORIGIN(REGION_TEXT) + LENGTH(REGION_TEXT)'"); + ASSERT(SIZEOF(.got) == 0, " .got section detected in the input files. Dynamic relocations are not supported. If you are linking to C code compiled using the `gcc` crate then modify your build script to compile the C code _without_ the -fPIC flag. See the documentation of the `gcc::Config.fpic` method for details."); + +/* Do not exceed this mark in the error messages above | */ From b04261e0a9d11cc9a9355830764e9d6944f38dd7 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Mon, 1 Apr 2019 19:02:29 +0300 Subject: [PATCH 077/234] Allocate stacks for all the harts --- riscv-rt/link.x | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/riscv-rt/link.x b/riscv-rt/link.x index 396e058f..4c7b0ddf 100644 --- a/riscv-rt/link.x +++ b/riscv-rt/link.x @@ -1,5 +1,7 @@ PROVIDE(_stext = ORIGIN(REGION_TEXT)); PROVIDE(_stack_start = ORIGIN(REGION_STACK) + LENGTH(REGION_STACK)); +PROVIDE(_max_hart_id = 0); +PROVIDE(_hart_stack_size = 2K); PROVIDE(_heap_size = 0); PROVIDE(trap_handler = default_trap_handler); @@ -131,6 +133,10 @@ ASSERT(_stext + SIZEOF(.text) < ORIGIN(REGION_TEXT) + LENGTH(REGION_TEXT), " ERROR(riscv-rt): The .text section must be placed inside the REGION_TEXT region. Set _stext to an address smaller than 'ORIGIN(REGION_TEXT) + LENGTH(REGION_TEXT)'"); +ASSERT(SIZEOF(.stack) > (_max_hart_id + 1) * _hart_stack_size, " +ERROR(riscv-rt): .stack section is too small for allocating stacks for all the harts. +Consider changing `_max_hart_id` or `_hart_stack_size`."); + ASSERT(SIZEOF(.got) == 0, " .got section detected in the input files. Dynamic relocations are not supported. If you are linking to C code compiled using the `gcc` crate From c4d4b7a1662ff2e3c6609d3eec885f86b863a108 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Mon, 1 Apr 2019 19:16:17 +0300 Subject: [PATCH 078/234] Turn abort() into an infinite loop --- riscv-rt/asm.S | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/riscv-rt/asm.S b/riscv-rt/asm.S index 4402d777..4a9c3f25 100644 --- a/riscv-rt/asm.S +++ b/riscv-rt/asm.S @@ -83,4 +83,4 @@ _start_trap: .section .init .globl abort abort: - jal zero, _start + j abort From b50b9ed7134af4e0736c8e082852177b6008c192 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Mon, 1 Apr 2019 19:34:55 +0300 Subject: [PATCH 079/234] Set stack pointer for all the harts --- riscv-rt/asm.S | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/riscv-rt/asm.S b/riscv-rt/asm.S index 4a9c3f25..d85d0b44 100644 --- a/riscv-rt/asm.S +++ b/riscv-rt/asm.S @@ -18,8 +18,23 @@ _start: la gp, __global_pointer$ .option pop + // Check hart id + csrr a2, mhartid + lui t0, %hi(_max_hart_id) + add t0, t0, %lo(_max_hart_id) + bgtu a2, t0, abort + + // Allocate stacks la sp, _stack_start + lui t0, %hi(_hart_stack_size) + add t0, t0, %lo(_hart_stack_size) + mul t0, a2, t0 + sub sp, sp, t0 + + // Park non-zero harts + bnez a2, abort + // Set frame pointer add s0, sp, zero jal zero, _start_rust From c201a96cae0ed48fa2f62a45e0254b649f04a58e Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Tue, 9 Apr 2019 18:51:58 +0300 Subject: [PATCH 080/234] Revert "Initialize FPU when available" This reverts commit 373d773767545b0d251f833b6488fa6381e82693. --- riscv-rt/src/lib.rs | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index b8d1e2b8..d2274812 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -208,7 +208,7 @@ extern crate r0; pub use macros::{entry, pre_init}; -use riscv::register::{mstatus, mtvec, misa, fcsr}; +use riscv::register::{mstatus, mtvec}; #[export_name = "error: riscv-rt appears more than once in the dependency graph"] #[doc(hidden)] @@ -251,15 +251,7 @@ pub unsafe extern "C" fn start_rust() -> ! { r0::zero_bss(&mut _sbss, &mut _ebss); r0::init_data(&mut _sdata, &mut _edata, &_sidata); - // Initialize FPU when available - if let Some(isa) = misa::read() { - if isa.has_extension('F') || isa.has_extension('D') { - fcsr::clear_flags(); - fcsr::set_rounding_mode(fcsr::RoundingMode::RoundToNearestEven); - mstatus::set_fs(mstatus::FS::Dirty); - // TODO: fill registers with zeros - } - } + // TODO: Enable FPU when available // Set mtvec to _start_trap mtvec::write(&_start_trap as *const _ as usize, mtvec::TrapMode::Direct); From 73e56ebfabf56b815626f0917d9180ce42270a90 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Sun, 28 Apr 2019 20:25:26 +0200 Subject: [PATCH 081/234] Initialize GPR and MSR state --- riscv-rt/asm.S | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/riscv-rt/asm.S b/riscv-rt/asm.S index d85d0b44..afcffaf1 100644 --- a/riscv-rt/asm.S +++ b/riscv-rt/asm.S @@ -13,6 +13,43 @@ _start: .cfi_startproc .cfi_undefined ra + csrw mideleg, 0 + csrw medeleg, 0 + csrw mie, 0 + csrw mip, 0 + + li x1, 0 + li x2, 0 + li x3, 0 + li x4, 0 + li x5, 0 + li x6, 0 + li x7, 0 + li x8, 0 + li x9, 0 + li x10,0 + li x11,0 + li x12,0 + li x13,0 + li x14,0 + li x15,0 + li x16,0 + li x17,0 + li x18,0 + li x19,0 + li x20,0 + li x21,0 + li x22,0 + li x23,0 + li x24,0 + li x25,0 + li x26,0 + li x27,0 + li x28,0 + li x29,0 + li x30,0 + li x31,0 + .option push .option norelax la gp, __global_pointer$ From 1f9677f3c73e2bc496c0ac4bf45d21e497023baa Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Sun, 28 Apr 2019 21:02:37 +0200 Subject: [PATCH 082/234] Set frame pointer right after stack allocation --- riscv-rt/asm.S | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/riscv-rt/asm.S b/riscv-rt/asm.S index afcffaf1..99bd0bd9 100644 --- a/riscv-rt/asm.S +++ b/riscv-rt/asm.S @@ -68,12 +68,12 @@ _start: mul t0, a2, t0 sub sp, sp, t0 - // Park non-zero harts - bnez a2, abort - // Set frame pointer add s0, sp, zero + // Park non-zero harts + bnez a2, abort + jal zero, _start_rust .cfi_endproc From 03f4eef93d6ef7ba9d6d72e9479edfa77dc51550 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Sun, 28 Apr 2019 21:05:04 +0200 Subject: [PATCH 083/234] Set trap handler in assembly --- riscv-rt/asm.S | 4 ++++ riscv-rt/src/lib.rs | 8 +------- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/riscv-rt/asm.S b/riscv-rt/asm.S index 99bd0bd9..aa426e3b 100644 --- a/riscv-rt/asm.S +++ b/riscv-rt/asm.S @@ -71,6 +71,10 @@ _start: // Set frame pointer add s0, sp, zero + // Set trap handler + la t0, _start_trap + csrw mtvec, t0 + // Park non-zero harts bnez a2, abort diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index d2274812..0a1534a6 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -208,7 +208,7 @@ extern crate r0; pub use macros::{entry, pre_init}; -use riscv::register::{mstatus, mtvec}; +use riscv::register::mstatus; #[export_name = "error: riscv-rt appears more than once in the dependency graph"] #[doc(hidden)] @@ -225,9 +225,6 @@ extern "C" { // Initial values of the .data section (stored in Flash) static _sidata: u32; - - // Address of _start_trap - static _start_trap: u32; } @@ -253,9 +250,6 @@ pub unsafe extern "C" fn start_rust() -> ! { // TODO: Enable FPU when available - // Set mtvec to _start_trap - mtvec::write(&_start_trap as *const _ as usize, mtvec::TrapMode::Direct); - main(); } From 84042d706ad1064db3a68b0c4037a7b8c017b3cf Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Mon, 20 May 2019 11:16:42 +0300 Subject: [PATCH 084/234] Do not set mideleg and medeleg (not supported on FE310) --- riscv-rt/asm.S | 2 -- 1 file changed, 2 deletions(-) diff --git a/riscv-rt/asm.S b/riscv-rt/asm.S index aa426e3b..9a96381a 100644 --- a/riscv-rt/asm.S +++ b/riscv-rt/asm.S @@ -13,8 +13,6 @@ _start: .cfi_startproc .cfi_undefined ra - csrw mideleg, 0 - csrw medeleg, 0 csrw mie, 0 csrw mip, 0 From 5c1bbc64e4349ea3fe71e9d74a57122861be062e Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Wed, 22 May 2019 22:22:38 +0300 Subject: [PATCH 085/234] Introduce _mp_hook --- riscv-rt/Cargo.toml | 2 +- riscv-rt/asm.S | 3 --- riscv-rt/link.x | 9 +++++++++ riscv-rt/src/lib.rs | 22 +++++++++++++++++++--- 4 files changed, 29 insertions(+), 7 deletions(-) diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index ff4c1b4b..9ba0610f 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -10,7 +10,7 @@ license = "ISC" [dependencies] r0 = "0.2.2" -riscv = "0.5.1" +riscv = "0.5.3" riscv-rt-macros = { path = "macros", version = "0.1.5" } [features] diff --git a/riscv-rt/asm.S b/riscv-rt/asm.S index 9a96381a..471c3ade 100644 --- a/riscv-rt/asm.S +++ b/riscv-rt/asm.S @@ -73,9 +73,6 @@ _start: la t0, _start_trap csrw mtvec, t0 - // Park non-zero harts - bnez a2, abort - jal zero, _start_rust .cfi_endproc diff --git a/riscv-rt/link.x b/riscv-rt/link.x index 4c7b0ddf..8a90af39 100644 --- a/riscv-rt/link.x +++ b/riscv-rt/link.x @@ -11,6 +11,15 @@ PROVIDE(trap_handler = default_trap_handler); then the function this points to will be called before the RAM is initialized. */ PROVIDE(__pre_init = default_pre_init); +/* # Multi-processing hook function + fn _mp_hook() -> bool; + + This function is called from all the harts and should return true only for one hart, + which will perform memory initialization. For other harts it should return false + and implement wake-up in platform-dependent way (e.g. after waiting for a user interrupt). +*/ +PROVIDE(_mp_hook = default_mp_hook); + PHDRS { load PT_LOAD; diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index 0a1534a6..0f8cbf4c 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -241,12 +241,16 @@ pub unsafe extern "C" fn start_rust() -> ! { // This symbol will be provided by the user via `#[pre_init]` fn __pre_init(); + + fn _mp_hook() -> bool; } - __pre_init(); + if _mp_hook() { + __pre_init(); - r0::zero_bss(&mut _sbss, &mut _ebss); - r0::init_data(&mut _sdata, &mut _edata, &_sidata); + r0::zero_bss(&mut _sbss, &mut _ebss); + r0::init_data(&mut _sdata, &mut _edata, &_sidata); + } // TODO: Enable FPU when available @@ -284,3 +288,15 @@ pub fn default_trap_handler() {} #[doc(hidden)] #[no_mangle] pub unsafe extern "Rust" fn default_pre_init() {} + +#[doc(hidden)] +#[no_mangle] +pub extern "Rust" fn default_mp_hook() -> bool { + use riscv::register::mhartid; + match mhartid::read() { + 0 => true, + _ => loop { + unsafe { riscv::asm::wfi() } + }, + } +} From 5d8f8c3ba13aa6ba0b20cb42ebe9d7d872bca7f3 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Wed, 22 May 2019 22:22:58 +0300 Subject: [PATCH 086/234] Regenerate binaries --- riscv-rt/bin/riscv32imac-unknown-none-elf.a | Bin 1490 -> 1954 bytes riscv-rt/bin/riscv32imc-unknown-none-elf.a | Bin 1490 -> 1954 bytes riscv-rt/bin/riscv64gc-unknown-none-elf.a | Bin 2114 -> 2794 bytes riscv-rt/bin/riscv64imac-unknown-none-elf.a | Bin 2114 -> 2794 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/riscv-rt/bin/riscv32imac-unknown-none-elf.a b/riscv-rt/bin/riscv32imac-unknown-none-elf.a index e301d87339624d8fd01ee4ddee127467fd276a01..4fa389e0ac1a52625e0003f61d67d5242bb0b456 100644 GIT binary patch literal 1954 zcma)6&rcIU6n@iU)hdcVAz(~F{H<$+M$s5jiWI>LO2UtLaM_kBRiL=L5+z1696T5g zMh{;78}#5&V~8=v7(q693hL-bLRKd6Sb2_x`0`d-?#8$v%_Ed9Ip=mO1j`Lvgki($! z{}#g~r_EQ6R}5I#`v{hVFjbU2q4@2^6kJ%q!W8lH(~FwQKUc=51AGwzglR>Pf=B6K zK&irhA|;%tri^a~*ZbrAy=C()WxT6|N2tGq6Io@Pj7&U6rg>qkn6<{t$zox`&D)J+ zj$2pFQ8bNN7zy-E?vme1Y7TA1N?|%*(p7$k*;kyBZZkcBh|jZnjoL^zLXCe+eZaMA zmCm?XK^j1;^L55r=X-3^2x8 zzX4nmWtE7r*3SZ0@dppP1z+bk#ckmIzTUw4CJe9`{Kzs!M2+xm5f6HJr>~RYTpM?- zETU_xII5AGzv_}PV!0L>S;ry6&W~9}VWI%lgWfMr!ThLs-nPc`nBhO3VY#kd$X;>t zj#~47#yTW%Py5>>^gypU1yow(>l#!L}35SO2d(?wRs+??BV0>+OTU9h~$h zT2S~W@G3a#?5p9&;K6#&z%y`dy53<3!FmZ0exB>`8R&YQ!2FDU|J5M87j2x!mVyWC zB|#dYaXmfkf@dwLw_6iLy}#g^JUs$o7|t~+;arbDJ8lJi#(*@7joJ)+ S)AhKOf_Wn-kkd(sI`0n|?z>;%oI9!5bF)^DhO+6bfem2dd# z)ppOTmJA|6L>mkukMfkG4hQ6;AeZ-9A;>ocH3t1*WAHMR7vfevq>Iu^?d%rROL&+G z12M=_MSp{)(wQXi-=Coc*-!bKvB74t77N~OuDJC_6Ya5%JFv-=*GBQ4Cq28=^U`SS zu+@xWuC8G0Is%ncccO~BIeiA&D~!6u=H_)A+}D)vi9M5AfFr&LImd9O!E}F4R&yjB zTYi~$GE952lYSEOvSO82YAK=NnAl;;!W!UtDANaFf%$RC8- BNiYBa diff --git a/riscv-rt/bin/riscv32imc-unknown-none-elf.a b/riscv-rt/bin/riscv32imc-unknown-none-elf.a index e301d87339624d8fd01ee4ddee127467fd276a01..4fa389e0ac1a52625e0003f61d67d5242bb0b456 100644 GIT binary patch literal 1954 zcma)6&rcIU6n@iU)hdcVAz(~F{H<$+M$s5jiWI>LO2UtLaM_kBRiL=L5+z1696T5g zMh{;78}#5&V~8=v7(q693hL-bLRKd6Sb2_x`0`d-?#8$v%_Ed9Ip=mO1j`Lvgki($! z{}#g~r_EQ6R}5I#`v{hVFjbU2q4@2^6kJ%q!W8lH(~FwQKUc=51AGwzglR>Pf=B6K zK&irhA|;%tri^a~*ZbrAy=C()WxT6|N2tGq6Io@Pj7&U6rg>qkn6<{t$zox`&D)J+ zj$2pFQ8bNN7zy-E?vme1Y7TA1N?|%*(p7$k*;kyBZZkcBh|jZnjoL^zLXCe+eZaMA zmCm?XK^j1;^L55r=X-3^2x8 zzX4nmWtE7r*3SZ0@dppP1z+bk#ckmIzTUw4CJe9`{Kzs!M2+xm5f6HJr>~RYTpM?- zETU_xII5AGzv_}PV!0L>S;ry6&W~9}VWI%lgWfMr!ThLs-nPc`nBhO3VY#kd$X;>t zj#~47#yTW%Py5>>^gypU1yow(>l#!L}35SO2d(?wRs+??BV0>+OTU9h~$h zT2S~W@G3a#?5p9&;K6#&z%y`dy53<3!FmZ0exB>`8R&YQ!2FDU|J5M87j2x!mVyWC zB|#dYaXmfkf@dwLw_6iLy}#g^JUs$o7|t~+;arbDJ8lJi#(*@7joJ)+ S)AhKOf_Wn-kkd(sI`0n|?z>;%oI9!5bF)^DhO+6bfem2dd# z)ppOTmJA|6L>mkukMfkG4hQ6;AeZ-9A;>ocH3t1*WAHMR7vfevq>Iu^?d%rROL&+G z12M=_MSp{)(wQXi-=Coc*-!bKvB74t77N~OuDJC_6Ya5%JFv-=*GBQ4Cq28=^U`SS zu+@xWuC8G0Is%ncccO~BIeiA&D~!6u=H_)A+}D)vi9M5AfFr&LImd9O!E}F4R&yjB zTYi~$GE952lYSEOvSO82YAK=NnAl;;!W!UtDANaFf%$RC8- BNiYBa diff --git a/riscv-rt/bin/riscv64gc-unknown-none-elf.a b/riscv-rt/bin/riscv64gc-unknown-none-elf.a index b35b6b2d7719562a0df42e884858d475be8d867b..b9289a01bc822013c03e0a67c2f2a11f191c935c 100644 GIT binary patch literal 2794 zcmbtVOK%iM5U!pzPU2uNAprytS{njM2$N;KasonVyvFMXiybW4SUE7vE=#;%d(F&X z84H1$1By@%5gfSk8{m**5Q?HGLI_z1A%r+{ikYW zv>S20v@AV^LiGB4Pd*0OqiyH=%Oy()OcFN%|G>YVVgYWps&N1(f)1>Lb_jlOa`+Ua zBYI`8D9WPflYL^p+%NiNzbMI)7?1;EP!5VAIV6VVus9$Oh_Wn;gYuvlkt1SMj$Xx- zSEPVooAdlP3-JXDs!wiN>yclJ)hX_VHDPs&Lr!;#fUB$vejUp-p8ft(T-$xB_2#-; z8~@n+r~lXd-;1};-TC^iy_CP#bAQi+eGiL|N{^pDd-M8&bGg{ncfGGTvNTc|eKBf{ zUmow8xIR%lymYuS`C_uu3m}{Ol&3Bh$3UDFVpF^I0eu(ZKj$&s^nQt6v=AURBV6In z_Y~^+xtu#gokv|2J3S^1XA)O{wgXN%p=F|tvV0%|Ez8JwZPWQn%OWT*FTOUW-c!;z zf{H(q!Y>*;xf%E{fhC>}L37)MZb!nrsKSnBY2SQFeamTQ-6XrRKKoQys20Fo9bW7v1Al)>d&!; z>ThFAM)9WpN7m3@*Z2EH=INWMyNjqx%${jI{b!8HWEt;9yMi&9t&F#zZDmYG z@!JvWda#2tGoe>O8~U-GQYfq~gkT@@LJ#ap5PEQ9MrpW^9Ptv5$^G)!8((RZWs^}g}D zF!sOd|3y#6TAlg^9r_zMI!Ty+5wE!5kC{?;0qs|6d+|xie>)llD6>_@od0(?kd*%w zZzh$8^3xib`3I1rcbe<6ffMC$Om8Y)aYY14`8#++46=~&Q>=*zPv<`=ev;>3)nW;n@oxd+ Co#Sx; delta 634 zcmaDQdPrbGv|xO3Nn%k+d`VGa0YhR^eo@K993y5!OOuHU4NW3g7{GuLNIHO74h*~u zJPgx;0+SmV8N`9KFe4*_F$*I@{)hYj@;}V~H@S?lW^x0&%w#*J8b*o9icG?j&oRkN zUc@B9$N}c*F^e$DO^#;vovg$pBx?vXR)B#GY&bGu3layZ=kx=sU}2D$tjwZO4|HvE zHpI;gP^TA_7MH--U~eFKDIP2d_7}404B|i@50VJfqYM&2F%Beg7#pOX7l`X&axe*F zm;jW9845Cp6G;vxj;>w=szwk<^C77R=?4LjI5(IDCiobXpd65dz~uF8OC}ewTL1%` zfAT8!2aGb4yE)7SA22}_9e}FkntYiikYW zv>S20v@AV^LiGB4Pd*0OqiyH=%Oy()OcFN%|G>YVVgYWps&N1(f)1>Lb_jlOa`+Ua zBYI`8D9WPflYL^p+%NiNzbMI)7?1;EP!5VAIV6VVus9$Oh_Wn;gYuvlkt1SMj$Xx- zSEPVooAdlP3-JXDs!wiN>yclJ)hX_VHDPs&Lr!;#fUB$vejUp-p8ft(T-$xB_2#-; z8~@n+r~lXd-;1};-TC^iy_CP#bAQi+eGiL|N{^pDd-M8&bGg{ncfGGTvNTc|eKBf{ zUmow8xIR%lymYuS`C_uu3m}{Ol&3Bh$3UDFVpF^I0eu(ZKj$&s^nQt6v=AURBV6In z_Y~^+xtu#gokv|2J3S^1XA)O{wgXN%p=F|tvV0%|Ez8JwZPWQn%OWT*FTOUW-c!;z zf{H(q!Y>*;xf%E{fhC>}L37)MZb!nrsKSnBY2SQFeamTQ-6XrRKKoQys20Fo9bW7v1Al)>d&!; z>ThFAM)9WpN7m3@*Z2EH=INWMyNjqx%${jI{b!8HWEt;9yMi&9t&F#zZDmYG z@!JvWda#2tGoe>O8~U-GQYfq~gkT@@LJ#ap5PEQ9MrpW^9Ptv5$^G)!8((RZWs^}g}D zF!sOd|3y#6TAlg^9r_zMI!Ty+5wE!5kC{?;0qs|6d+|xie>)llD6>_@od0(?kd*%w zZzh$8^3xib`3I1rcbe<6ffMC$Om8Y)aYY14`8#++46=~&Q>=*zPv<`=ev;>3)nW;n@oxd+ Co#Sx; delta 634 zcmaDQdPrbGv|xO3Nn%k+d`VGa0YhR^eo@K993y5!OOuHU4NW3g7{GuLNIHO74h*~u zJPgx;0+SmV8N`9KFe4*_F$*I@{)hYj@;}V~H@S?lW^x0&%w#*J8b*o9icG?j&oRkN zUc@B9$N}c*F^e$DO^#;vovg$pBx?vXR)B#GY&bGu3layZ=kx=sU}2D$tjwZO4|HvE zHpI;gP^TA_7MH--U~eFKDIP2d_7}404B|i@50VJfqYM&2F%Beg7#pOX7l`X&axe*F zm;jW9845Cp6G;vxj;>w=szwk<^C77R=?4LjI5(IDCiobXpd65dz~uF8OC}ewTL1%` zfAT8!2aGb4yE)7SA22}_9e}FkntYi Date: Thu, 23 May 2019 00:26:46 +0300 Subject: [PATCH 087/234] Update documentation --- riscv-rt/link.x | 4 +- riscv-rt/src/lib.rs | 107 +++++++++++++++++++++++++++++++++----------- 2 files changed, 82 insertions(+), 29 deletions(-) diff --git a/riscv-rt/link.x b/riscv-rt/link.x index 8a90af39..65da46ad 100644 --- a/riscv-rt/link.x +++ b/riscv-rt/link.x @@ -14,8 +14,8 @@ PROVIDE(__pre_init = default_pre_init); /* # Multi-processing hook function fn _mp_hook() -> bool; - This function is called from all the harts and should return true only for one hart, - which will perform memory initialization. For other harts it should return false + This function is called from all the harts and must return true only for one hart, + which will perform memory initialization. For other harts it must return false and implement wake-up in platform-dependent way (e.g. after waiting for a user interrupt). */ PROVIDE(_mp_hook = default_mp_hook); diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index 0f8cbf4c..70a35015 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -13,14 +13,14 @@ //! //! - Before main initialization of the `.bss` and `.data` sections. //! -//! - Before main initialization of the FPU (for targets that have a FPU). -//! //! - `#[entry]` to declare the entry point of the program //! - `#[pre_init]` to run code *before* `static` variables are initialized //! //! - A linker script that encodes the memory layout of a generic RISC-V //! microcontroller. This linker script is missing some information that must -//! be supplied through a `memory.x` file (see example below). +//! be supplied through a `memory.x` file (see example below). This file +//! must be supplied using rustflags and listed *before* `link.x`. Arbitrary +//! filename can be use instead of `memory.x`. //! //! - A `_sheap` symbol at whose address you can locate a heap. //! @@ -37,11 +37,17 @@ //! $ edit memory.x && cat $_ //! MEMORY //! { -//! /* NOTE K = KiBi = 1024 bytes */ -//! FLASH : ORIGIN = 0x20000000, LENGTH = 16M //! RAM : ORIGIN = 0x80000000, LENGTH = 16K +//! FLASH : ORIGIN = 0x20000000, LENGTH = 16M //! } //! +//! REGION_ALIAS("REGION_TEXT", FLASH); +//! REGION_ALIAS("REGION_RODATA", FLASH); +//! REGION_ALIAS("REGION_DATA", RAM); +//! REGION_ALIAS("REGION_BSS", RAM); +//! REGION_ALIAS("REGION_HEAP", RAM); +//! REGION_ALIAS("REGION_STACK", RAM); +//! //! $ edit src/main.rs && cat $_ //! ``` //! @@ -66,7 +72,8 @@ //! $ mkdir .cargo && edit .cargo/config && cat $_ //! [target.riscv32imac-unknown-none-elf] //! rustflags = [ -//! "-C", "link-arg=-Tlink.x" +//! "-C", "link-arg=-Tmemory.x", +//! "-C", "link-arg=-Tlink.x", //! ] //! //! [build] @@ -124,14 +131,27 @@ //! //! The main information that this file must provide is the memory layout of //! the device in the form of the `MEMORY` command. The command is documented -//! [here][2], but at a minimum you'll want to create two memory regions: one -//! for Flash memory and another for RAM. +//! [here][2], but at a minimum you'll want to create at least one memory region. //! //! [2]: https://sourceware.org/binutils/docs/ld/MEMORY.html //! -//! The program instructions (the `.text` section) will be stored in the memory -//! region named FLASH, and the program `static` variables (the sections `.bss` -//! and `.data`) will be allocated in the memory region named RAM. +//! To support different relocation models (RAM-only, FLASH+RAM) multiple regions are used: +//! +//! - `REGION_TEXT` - for `.init`, `.trap` and `.text` sections +//! - `REGION_RODATA` - for `.rodata` section and storing initial values for `.data` section +//! - `REGION_DATA` - for `.data` section +//! - `REGION_BSS` - for `.bss` section +//! - `REGION_HEAP` - for the heap area +//! - `REGION_STACK` - for hart stacks +//! +//! Specific aliases for these regions must be defined in `memory.x` file (see example below). +//! +//! ### `_stext` +//! +//! This symbol provides the loading address of `.text` section. This value can be changed +//! to override the loading address of the firmware (for example, in case of bootloader present). +//! +//! If omitted this symbol value will default to `ORIGIN(REGION_TEXT)`. //! //! ### `_stack_start` //! @@ -140,25 +160,49 @@ //! valid RAM address plus one (this *is* an invalid address but the processor //! will decrement the stack pointer *before* using its value as an address). //! -//! If omitted this symbol value will default to `ORIGIN(RAM) + LENGTH(RAM)`. +//! In case of multiple harts present, this address defines the initial stack pointer for hart 0. +//! Stack pointer for hart `N` is calculated as `_stack_start - N * _hart_stack_size`. +//! +//! If omitted this symbol value will default to `ORIGIN(REGION_STACK) + LENGTH(REGION_STACK)`. //! //! #### Example //! //! Allocating the call stack on a different RAM region. //! -//! ``` +//! ``` text //! MEMORY //! { -//! /* call stack will go here */ -//! CCRAM : ORIGIN = 0x10000000, LENGTH = 8K -//! FLASH : ORIGIN = 0x08000000, LENGTH = 256K -//! /* static variables will go here */ -//! RAM : ORIGIN = 0x20000000, LENGTH = 40K +//! L2_LIM : ORIGIN = 0x08000000, LENGTH = 1M +//! RAM : ORIGIN = 0x80000000, LENGTH = 16K +//! FLASH : ORIGIN = 0x20000000, LENGTH = 16M //! } //! -//! _stack_start = ORIGIN(CCRAM) + LENGTH(CCRAM); +//! REGION_ALIAS("REGION_TEXT", FLASH); +//! REGION_ALIAS("REGION_RODATA", FLASH); +//! REGION_ALIAS("REGION_DATA", RAM); +//! REGION_ALIAS("REGION_BSS", RAM); +//! REGION_ALIAS("REGION_HEAP", RAM); +//! REGION_ALIAS("REGION_STACK", L2_LIM); +//! +//! _stack_start = ORIGIN(L2_LIM) + LENGTH(L2_LIM); //! ``` //! +//! ### `_max_hart_id` +//! +//! This symbol defines the maximum hart id suppoted. All harts with id +//! greater than `_max_hart_id` will be redirected to `abort()`. +//! +//! This symbol is supposed to be redefined in platform support crates for +//! multi-core targets. +//! +//! If omitted this symbol value will default to 0 (single core). +//! +//! ### `_hart_stack_size` +//! +//! This symbol defines stack area size for *one* hart. +//! +//! If omitted this symbol value will default to 2K. +//! //! ### `_heap_size` //! //! This symbol provides the size of a heap region. The default value is 0. You can set `_heap_size` @@ -172,7 +216,7 @@ //! //! #### Example //! -//! ``` +//! ``` no_run //! extern crate some_allocator; //! //! extern "C" { @@ -189,13 +233,22 @@ //! } //! ``` //! -//! ## `pre_init!` +//! ### `_mp_hook` +//! +//! This function is called from all the harts and must return true only for one hart, +//! which will perform memory initialization. For other harts it must return false +//! and implement wake-up in platform-dependent way (e.g. after waiting for a user interrupt). //! -//! A user-defined function can be run at the start of the reset handler, before RAM is -//! initialized. The macro `pre_init!` can be called to set the function to be run. The function is -//! intended to perform actions that cannot wait the time it takes for RAM to be initialized, such -//! as disabling a watchdog. As the function is called before RAM is initialized, any access of -//! static variables will result in undefined behavior. +//! This function can be redefined in the following way: +//! +//! ``` no_run +//! #[export_name = "_mp_hook"] +//! pub extern "Rust" fn mp_hook() -> bool { +//! // ... +//! } +//! ``` +//! +//! Default implementation of this function wakes hart 0 and busy-loops all the other harts. // NOTE: Adapted from cortex-m/src/lib.rs #![no_std] @@ -281,7 +334,7 @@ pub extern "C" fn start_trap_rust() { } -/// Default Trap Handler +#[doc(hidden)] #[no_mangle] pub fn default_trap_handler() {} From 0049fd0ed0b74d8c81506cc3eeaabf2534b2e237 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Thu, 23 May 2019 00:35:57 +0300 Subject: [PATCH 088/234] Add examples --- riscv-rt/Cargo.toml | 5 +++ riscv-rt/examples/empty.rs | 13 ++++++++ riscv-rt/examples/multi_core.rs | 56 +++++++++++++++++++++++++++++++++ 3 files changed, 74 insertions(+) create mode 100644 riscv-rt/examples/empty.rs create mode 100644 riscv-rt/examples/multi_core.rs diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index 9ba0610f..d5495535 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -15,3 +15,8 @@ riscv-rt-macros = { path = "macros", version = "0.1.5" } [features] inline-asm = ["riscv/inline-asm"] + +[dev-dependencies] +riscv = "0.5.3" +riscv-rt = "0.5.0" +panic-halt = "0.2.0" diff --git a/riscv-rt/examples/empty.rs b/riscv-rt/examples/empty.rs new file mode 100644 index 00000000..5699d6f4 --- /dev/null +++ b/riscv-rt/examples/empty.rs @@ -0,0 +1,13 @@ +#![no_std] +#![no_main] + +extern crate panic_halt; +extern crate riscv_rt; + +use riscv_rt::entry; + +#[entry] +fn main() -> ! { + // do something here + loop { } +} diff --git a/riscv-rt/examples/multi_core.rs b/riscv-rt/examples/multi_core.rs new file mode 100644 index 00000000..f9092407 --- /dev/null +++ b/riscv-rt/examples/multi_core.rs @@ -0,0 +1,56 @@ +#![no_std] +#![no_main] + +extern crate panic_halt; +extern crate riscv; +extern crate riscv_rt; + +use riscv::register::{mie, mip, mhartid}; +use riscv::asm::wfi; +use riscv_rt::entry; + +#[export_name = "_mp_hook"] +pub extern "Rust" fn user_mp_hook() -> bool { + let hartid = mhartid::read(); + if hartid == 0 { + true + } else { + let addr = 0x02000000 + hartid * 4; + unsafe { + // Clear IPI + (addr as *mut u32).write_volatile(0); + + // Start listening for software interrupts + mie::set_msoft(); + + loop { + wfi(); + if mip::read().msoft() { + break; + } + } + + // Start listening for software interrupts + mie::clear_msoft(); + + // Clear IPI + (addr as *mut u32).write_volatile(0); + } + false + } +} + +#[entry] +fn main() -> ! { + let hartid = mhartid::read(); + + if hartid == 0 { + // Waking hart 1... + let addr = 0x02000004; + unsafe { + (addr as *mut u32).write_volatile(1); + } + } + + loop { } +} From cf8c9f286c6f46952abaf3a37a56e63c3052f0b6 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Thu, 23 May 2019 00:40:23 +0300 Subject: [PATCH 089/234] Check examples in CI --- riscv-rt/ci/script.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/riscv-rt/ci/script.sh b/riscv-rt/ci/script.sh index e2497ee9..93d64a9a 100644 --- a/riscv-rt/ci/script.sh +++ b/riscv-rt/ci/script.sh @@ -2,6 +2,7 @@ set -euxo pipefail main() { cargo check --target $TARGET + cargo check --target $TARGET --examples if [ $TRAVIS_RUST_VERSION = nightly ]; then cargo check --target $TARGET --features 'inline-asm' From 984a63d8f55c8932842ac40943e4f81ee329c88d Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Thu, 23 May 2019 00:45:49 +0300 Subject: [PATCH 090/234] [macros] Remove riscv-rt dependency --- riscv-rt/macros/Cargo.toml | 3 --- 1 file changed, 3 deletions(-) diff --git a/riscv-rt/macros/Cargo.toml b/riscv-rt/macros/Cargo.toml index fb1e741c..859f8db6 100644 --- a/riscv-rt/macros/Cargo.toml +++ b/riscv-rt/macros/Cargo.toml @@ -26,6 +26,3 @@ version = "0.15.13" [dependencies.rand] version = "0.5.5" default-features = false - -[dev-dependencies] -riscv-rt = { path = "..", version = "0.5.0" } From f433e3d248074a30386eb2bd72df7f2b220f875f Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Thu, 23 May 2019 00:46:48 +0300 Subject: [PATCH 091/234] [macros] Bump version (0.1.6) --- riscv-rt/macros/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/riscv-rt/macros/Cargo.toml b/riscv-rt/macros/Cargo.toml index 859f8db6..7adbab68 100644 --- a/riscv-rt/macros/Cargo.toml +++ b/riscv-rt/macros/Cargo.toml @@ -10,7 +10,7 @@ keywords = ["riscv", "runtime", "startup"] license = "MIT OR Apache-2.0" name = "riscv-rt-macros" repository = "https://github.com/rust-embedded/riscv-rt" -version = "0.1.5" +version = "0.1.6" [lib] proc-macro = true From 968594090eeba48fe5efbb23303a06a8341bdcfe Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Thu, 23 May 2019 00:48:17 +0300 Subject: [PATCH 092/234] Update riscv-rt-macros dependency --- riscv-rt/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index d5495535..0dbfe5b9 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -11,7 +11,7 @@ license = "ISC" [dependencies] r0 = "0.2.2" riscv = "0.5.3" -riscv-rt-macros = { path = "macros", version = "0.1.5" } +riscv-rt-macros = { path = "macros", version = "0.1.6" } [features] inline-asm = ["riscv/inline-asm"] From 15fe9928bfe84258afe52186d7624aba1e731cb7 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Thu, 23 May 2019 00:48:32 +0300 Subject: [PATCH 093/234] Bump version (0.6.0) --- riscv-rt/Cargo.toml | 4 ++-- riscv-rt/src/lib.rs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index 0dbfe5b9..e9b26cdf 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "riscv-rt" -version = "0.5.0" +version = "0.6.0" repository = "https://github.com/rust-embedded/riscv-rt" authors = ["The RISC-V Team "] categories = ["embedded", "no-std"] @@ -18,5 +18,5 @@ inline-asm = ["riscv/inline-asm"] [dev-dependencies] riscv = "0.5.3" -riscv-rt = "0.5.0" +riscv-rt = "0.6.0" panic-halt = "0.2.0" diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index 70a35015..17dfc36f 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -30,7 +30,7 @@ //! $ # add this crate as a dependency //! $ edit Cargo.toml && cat $_ //! [dependencies] -//! riscv-rt = "0.4.0" +//! riscv-rt = "0.6.0" //! panic-halt = "0.2.0" //! //! $ # memory layout of the device From 73f1a1ebe796d42ebc79ae228630feefebf60bae Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Sat, 25 May 2019 16:51:10 +0300 Subject: [PATCH 094/234] Rename RISCV to RISC-V --- riscv-rt/CODE_OF_CONDUCT.md | 4 ++-- riscv-rt/README.md | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/riscv-rt/CODE_OF_CONDUCT.md b/riscv-rt/CODE_OF_CONDUCT.md index a22c4f68..fccadf9a 100644 --- a/riscv-rt/CODE_OF_CONDUCT.md +++ b/riscv-rt/CODE_OF_CONDUCT.md @@ -2,7 +2,7 @@ ## Conduct -**Contact**: [RISCV team](https://github.com/rust-embedded/wg#the-riscv-team) +**Contact**: [RISC-V team](https://github.com/rust-embedded/wg#the-riscv-team) * We are committed to providing a friendly, safe and welcoming environment for all, regardless of level of experience, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, religion, nationality, or other similar characteristic. * On IRC, please avoid using overtly sexual nicknames or other nicknames that might detract from a friendly, safe and welcoming environment for all. @@ -10,7 +10,7 @@ * Respect that people have differences of opinion and that every design or implementation choice carries a trade-off and numerous costs. There is seldom a right answer. * Please keep unstructured critique to a minimum. If you have solid ideas you want to experiment with, make a fork and see how it works. * We will exclude you from interaction if you insult, demean or harass anyone. That is not welcome behavior. We interpret the term "harassment" as including the definition in the [Citizen Code of Conduct](http://citizencodeofconduct.org/); if you have any lack of clarity about what might be included in that concept, please read their definition. In particular, we don't tolerate behavior that excludes people in socially marginalized groups. -* Private harassment is also unacceptable. No matter who you are, if you feel you have been or are being harassed or made uncomfortable by a community member, please contact one of the channel ops or any of the [RISCV team][team] immediately. Whether you're a regular contributor or a newcomer, we care about making this community a safe place for you and we've got your back. +* Private harassment is also unacceptable. No matter who you are, if you feel you have been or are being harassed or made uncomfortable by a community member, please contact one of the channel ops or any of the [RISC-V team][team] immediately. Whether you're a regular contributor or a newcomer, we care about making this community a safe place for you and we've got your back. * Likewise any spamming, trolling, flaming, baiting or other attention-stealing behavior is not welcome. ## Moderation diff --git a/riscv-rt/README.md b/riscv-rt/README.md index d98b9822..9d4e4715 100644 --- a/riscv-rt/README.md +++ b/riscv-rt/README.md @@ -4,15 +4,15 @@ # `riscv-rt` -> Minimal runtime / startup for RISCV CPU's. +> Minimal runtime / startup for RISC-V CPU's. -This project is developed and maintained by the [RISCV team][team]. +This project is developed and maintained by the [RISC-V team][team]. ## [Documentation](https://docs.rs/crate/riscv-rt) ## License -Copyright 2018 [RISCV team][team] +Copyright 2018 [RISC-V team][team] Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice @@ -29,7 +29,7 @@ THIS SOFTWARE. ## Code of Conduct Contribution to this crate is organized under the terms of the [Rust Code of -Conduct][CoC], the maintainer of this crate, the [RISCV team][team], promises +Conduct][CoC], the maintainer of this crate, the [RISC-V team][team], promises to intervene to uphold that code of conduct. [CoC]: CODE_OF_CONDUCT.md From e33637548f095f95c0d6298051b76be89c3e3b09 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Mon, 1 Jul 2019 16:41:08 +0300 Subject: [PATCH 095/234] Fix build --- riscv-rt/Cargo.toml | 1 - riscv-rt/ci/script.sh | 4 +++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index e9b26cdf..2ee24a58 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -18,5 +18,4 @@ inline-asm = ["riscv/inline-asm"] [dev-dependencies] riscv = "0.5.3" -riscv-rt = "0.6.0" panic-halt = "0.2.0" diff --git a/riscv-rt/ci/script.sh b/riscv-rt/ci/script.sh index 93d64a9a..fea3bb89 100644 --- a/riscv-rt/ci/script.sh +++ b/riscv-rt/ci/script.sh @@ -2,7 +2,9 @@ set -euxo pipefail main() { cargo check --target $TARGET - cargo check --target $TARGET --examples + if [[ $TARGET == riscv* ]]; then + cargo check --target $TARGET --examples + fi if [ $TRAVIS_RUST_VERSION = nightly ]; then cargo check --target $TARGET --features 'inline-asm' From eb00f87c1604b18bf3c4acac69eeecb79922cf66 Mon Sep 17 00:00:00 2001 From: "Wladimir J. van der Laan" Date: Thu, 18 Jul 2019 18:09:26 +0000 Subject: [PATCH 096/234] Add .sbss section to linker script Rust nightly has started generating this section for RISC-V executables, place it at the start of the bss area. --- riscv-rt/link.x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/riscv-rt/link.x b/riscv-rt/link.x index 65da46ad..6f8926e8 100644 --- a/riscv-rt/link.x +++ b/riscv-rt/link.x @@ -66,7 +66,7 @@ SECTIONS .bss : { _sbss = .; - *(.bss .bss.*); + *(.sbss .sbss.* .bss .bss.*); . = ALIGN(4); _ebss = .; } > REGION_BSS :virtual From 98f7b1a72c6c0cf469eedd2890c861663611f57f Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Fri, 19 Jul 2019 16:30:01 +0300 Subject: [PATCH 097/234] Use ALIGN attributes properly --- riscv-rt/link.x | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/riscv-rt/link.x b/riscv-rt/link.x index 6f8926e8..3844de07 100644 --- a/riscv-rt/link.x +++ b/riscv-rt/link.x @@ -34,7 +34,7 @@ SECTIONS /* This section is intended to make _stext address work */ } > REGION_TEXT :virtual - .text ALIGN(_stext,4) : + .text _stext : { /* Put reset handler first in .text section so it ends up as the entry */ /* point of the program. */ @@ -47,12 +47,12 @@ SECTIONS *(.text .text.*); } > REGION_TEXT :load - .rodata ALIGN(4) : + .rodata : ALIGN(4) { *(.rodata .rodata.*); } > REGION_RODATA :load - .data ALIGN(4) : + .data : ALIGN(4) { _sidata = LOADADDR(.data); _sdata = .; From 84079735254db501bbf6d3af99957cd6d958b602 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Fri, 19 Jul 2019 16:31:03 +0300 Subject: [PATCH 098/234] Add .sdata section to linker script --- riscv-rt/link.x | 1 + 1 file changed, 1 insertion(+) diff --git a/riscv-rt/link.x b/riscv-rt/link.x index 3844de07..0e54e7ba 100644 --- a/riscv-rt/link.x +++ b/riscv-rt/link.x @@ -58,6 +58,7 @@ SECTIONS _sdata = .; /* Must be called __global_pointer$ for linker relaxations to work. */ PROVIDE(__global_pointer$ = . + 0x800); + *(.sdata .sdata.*); *(.data .data.*); . = ALIGN(4); _edata = .; From 03a3639de8d62d05aeec423362a5f92683cae0ef Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Fri, 19 Jul 2019 16:32:25 +0300 Subject: [PATCH 099/234] Fix .data alignment issue --- riscv-rt/link.x | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/riscv-rt/link.x b/riscv-rt/link.x index 0e54e7ba..485a9077 100644 --- a/riscv-rt/link.x +++ b/riscv-rt/link.x @@ -50,6 +50,11 @@ SECTIONS .rodata : ALIGN(4) { *(.rodata .rodata.*); + + /* 4-byte align the end (VMA) of this section. + This is required by LLD to ensure the LMA of the following .data + section will have the correct alignment. */ + . = ALIGN(4); } > REGION_RODATA :load .data : ALIGN(4) From 8f3ff84937f9be84a9df51529ef97d99c8fe4fe6 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Fri, 19 Jul 2019 16:33:36 +0300 Subject: [PATCH 100/234] Fix section flags --- riscv-rt/link.x | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/riscv-rt/link.x b/riscv-rt/link.x index 485a9077..8f874778 100644 --- a/riscv-rt/link.x +++ b/riscv-rt/link.x @@ -69,30 +69,30 @@ SECTIONS _edata = .; } > REGION_DATA AT > REGION_RODATA :ram_load - .bss : + .bss (NOLOAD) : { _sbss = .; *(.sbss .sbss.* .bss .bss.*); . = ALIGN(4); _ebss = .; - } > REGION_BSS :virtual + } > REGION_BSS /* fictitious region that represents the memory available for the heap */ - .heap (INFO) : + .heap (NOLOAD) : { _sheap = .; . += _heap_size; . = ALIGN(4); _eheap = .; - } > REGION_HEAP :virtual + } > REGION_HEAP /* fictitious region that represents the memory available for the stack */ - .stack (INFO) : + .stack (NOLOAD) : { _estack = .; . = _stack_start; _sstack = .; - } > REGION_STACK :virtual + } > REGION_STACK /* fake output .got section */ /* Dynamic relocations are unsupported. This section is only used to detect From 44c86e244df0948b483c3bcc4470d75ba76cd596 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Fri, 19 Jul 2019 16:34:37 +0300 Subject: [PATCH 101/234] Fix _stext override issue --- riscv-rt/link.x | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/riscv-rt/link.x b/riscv-rt/link.x index 8f874778..529bc75e 100644 --- a/riscv-rt/link.x +++ b/riscv-rt/link.x @@ -20,19 +20,13 @@ PROVIDE(__pre_init = default_pre_init); */ PROVIDE(_mp_hook = default_mp_hook); -PHDRS -{ - load PT_LOAD; - ram_load PT_LOAD; - virtual PT_NULL; -} - SECTIONS { - .text.dummy ORIGIN(REGION_TEXT) : + .text.dummy (NOLOAD) : { /* This section is intended to make _stext address work */ - } > REGION_TEXT :virtual + . = _stext; + } > REGION_TEXT .text _stext : { @@ -45,7 +39,7 @@ SECTIONS KEEP(*(.trap.rust)); *(.text .text.*); - } > REGION_TEXT :load + } > REGION_TEXT .rodata : ALIGN(4) { @@ -55,7 +49,7 @@ SECTIONS This is required by LLD to ensure the LMA of the following .data section will have the correct alignment. */ . = ALIGN(4); - } > REGION_RODATA :load + } > REGION_RODATA .data : ALIGN(4) { @@ -67,7 +61,7 @@ SECTIONS *(.data .data.*); . = ALIGN(4); _edata = .; - } > REGION_DATA AT > REGION_RODATA :ram_load + } > REGION_DATA AT > REGION_RODATA .bss (NOLOAD) : { From 1839103f1c5bbff1a0ea404f9bc5bd93f1428f8d Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Fri, 19 Jul 2019 17:14:14 +0300 Subject: [PATCH 102/234] Add support for 64-bit registers in _start_trap --- riscv-rt/asm.S | 74 ++++++++++++++++++++++++++------------------------ riscv-rt/asm.h | 15 ++++++++++ 2 files changed, 53 insertions(+), 36 deletions(-) create mode 100644 riscv-rt/asm.h diff --git a/riscv-rt/asm.S b/riscv-rt/asm.S index 471c3ade..61f3bd6e 100644 --- a/riscv-rt/asm.S +++ b/riscv-rt/asm.S @@ -1,3 +1,5 @@ +#include "asm.h" + /* Entry point of all programs (_start). @@ -88,45 +90,45 @@ _start: .global _start_trap _start_trap: - addi sp, sp, -16*4 - - sw ra, 0*4(sp) - sw t0, 1*4(sp) - sw t1, 2*4(sp) - sw t2, 3*4(sp) - sw t3, 4*4(sp) - sw t4, 5*4(sp) - sw t5, 6*4(sp) - sw t6, 7*4(sp) - sw a0, 8*4(sp) - sw a1, 9*4(sp) - sw a2, 10*4(sp) - sw a3, 11*4(sp) - sw a4, 12*4(sp) - sw a5, 13*4(sp) - sw a6, 14*4(sp) - sw a7, 15*4(sp) + addi sp, sp, -16*REGBYTES + + STORE ra, 0*REGBYTES(sp) + STORE t0, 1*REGBYTES(sp) + STORE t1, 2*REGBYTES(sp) + STORE t2, 3*REGBYTES(sp) + STORE t3, 4*REGBYTES(sp) + STORE t4, 5*REGBYTES(sp) + STORE t5, 6*REGBYTES(sp) + STORE t6, 7*REGBYTES(sp) + STORE a0, 8*REGBYTES(sp) + STORE a1, 9*REGBYTES(sp) + STORE a2, 10*REGBYTES(sp) + STORE a3, 11*REGBYTES(sp) + STORE a4, 12*REGBYTES(sp) + STORE a5, 13*REGBYTES(sp) + STORE a6, 14*REGBYTES(sp) + STORE a7, 15*REGBYTES(sp) jal ra, _start_trap_rust - lw ra, 0*4(sp) - lw t0, 1*4(sp) - lw t1, 2*4(sp) - lw t2, 3*4(sp) - lw t3, 4*4(sp) - lw t4, 5*4(sp) - lw t5, 6*4(sp) - lw t6, 7*4(sp) - lw a0, 8*4(sp) - lw a1, 9*4(sp) - lw a2, 10*4(sp) - lw a3, 11*4(sp) - lw a4, 12*4(sp) - lw a5, 13*4(sp) - lw a6, 14*4(sp) - lw a7, 15*4(sp) - - addi sp, sp, 16*4 + LOAD ra, 0*REGBYTES(sp) + LOAD t0, 1*REGBYTES(sp) + LOAD t1, 2*REGBYTES(sp) + LOAD t2, 3*REGBYTES(sp) + LOAD t3, 4*REGBYTES(sp) + LOAD t4, 5*REGBYTES(sp) + LOAD t5, 6*REGBYTES(sp) + LOAD t6, 7*REGBYTES(sp) + LOAD a0, 8*REGBYTES(sp) + LOAD a1, 9*REGBYTES(sp) + LOAD a2, 10*REGBYTES(sp) + LOAD a3, 11*REGBYTES(sp) + LOAD a4, 12*REGBYTES(sp) + LOAD a5, 13*REGBYTES(sp) + LOAD a6, 14*REGBYTES(sp) + LOAD a7, 15*REGBYTES(sp) + + addi sp, sp, 16*REGBYTES mret diff --git a/riscv-rt/asm.h b/riscv-rt/asm.h new file mode 100644 index 00000000..529b0da7 --- /dev/null +++ b/riscv-rt/asm.h @@ -0,0 +1,15 @@ +#ifndef _RISCV_RT_ASM_H +#define _RISCV_RT_ASM_H + +#if __riscv_xlen == 64 +# define STORE sd +# define LOAD ld +# define LOG_REGBYTES 3 +#else +# define STORE sw +# define LOAD lw +# define LOG_REGBYTES 2 +#endif +#define REGBYTES (1 << LOG_REGBYTES) + +#endif From 6fe10d1bcde4ea57686cfc8350a561a742a31729 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Fri, 19 Jul 2019 17:38:16 +0300 Subject: [PATCH 103/234] Regenerate binaries --- riscv-rt/bin/riscv32imac-unknown-none-elf.a | Bin 1954 -> 1838 bytes riscv-rt/bin/riscv32imc-unknown-none-elf.a | Bin 1954 -> 1838 bytes riscv-rt/bin/riscv64gc-unknown-none-elf.a | Bin 2794 -> 2642 bytes riscv-rt/bin/riscv64imac-unknown-none-elf.a | Bin 2794 -> 2642 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/riscv-rt/bin/riscv32imac-unknown-none-elf.a b/riscv-rt/bin/riscv32imac-unknown-none-elf.a index 4fa389e0ac1a52625e0003f61d67d5242bb0b456..27eed82dd5f061ffc31344411c52d5c06f49b87e 100644 GIT binary patch delta 334 zcmZ3)zm9Lhd}cEv6zBrY=f2}||lB36yb(^)rj{$XNZ_yZK?njFmL z&iR9xfq@6iTg>Jj$O80{3Wx{9Ajbl^U|Enaf!g4}0w@pw#N0p;kZzDV0U+iCVxWO= V&@nlgU0p&0C>;nFgM=A~3jlYjBc}iW delta 496 zcmZ3-w}^kjd}ebClZlHogio+AFfcMOFqi-_1A_(w9|P~kyR3{Fjv7F2QD$*+83Usn zkjYw9W^9ycRA3OF3nCIhL^6<={E$(0@^8lF{2=Wxz|6q4c_9-QqbDCk#0yACa6s5W zKuQX#8pJk+2s4BMX=$i9hz%2u1G2>hCx2nqHxz;>O+%8+0Ga0&olrB_U2_!B$c?Cv6zBrY=f2}||lB36yb(^)rj{$XNZ_yZK?njFmL z&iR9xfq@6iTg>Jj$O80{3Wx{9Ajbl^U|Enaf!g4}0w@pw#N0p;kZzDV0U+iCVxWO= V&@nlgU0p&0C>;nFgM=A~3jlYjBc}iW delta 496 zcmZ3-w}^kjd}ebClZlHogio+AFfcMOFqi-_1A_(w9|P~kyR3{Fjv7F2QD$*+83Usn zkjYw9W^9ycRA3OF3nCIhL^6<={E$(0@^8lF{2=Wxz|6q4c_9-QqbDCk#0yACa6s5W zKuQX#8pJk+2s4BMX=$i9hz%2u1G2>hCx2nqHxz;>O+%8+0Ga0&olrB_U2_!B$c?C;#mdfQE>8d zAX{+qbs#A;nVl_Ok{|3O2+;;*3j%53$@OgFD6&dOvLch$vn`oi#BKq!mw)prb_qto z9n28RtQf5LIFj8bL1xqKm*YOCJLlEpco_sQymCoGczz0 zfW(l22h;#mdfQE>8d zAX{+qbs#A;nVl_Ok{|3O2+;;*3j%53$@OgFD6&dOvLch$vn`oi#BKq!mw)prb_qto z9n28RtQf5LIFj8bL1xqKm*YOCJLlEpco_sQymCoGczz0 zfW(l22h Date: Wed, 7 Aug 2019 14:21:57 +0000 Subject: [PATCH 104/234] link.x: Add .sdata2 sections Clang doesn't seem to generate these, but GCC does. I'm trying to link secp256k1, which is a C library, to my Rust code so the linker script needs to include these sections too. --- riscv-rt/link.x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/riscv-rt/link.x b/riscv-rt/link.x index 529bc75e..ae4e7a86 100644 --- a/riscv-rt/link.x +++ b/riscv-rt/link.x @@ -57,7 +57,7 @@ SECTIONS _sdata = .; /* Must be called __global_pointer$ for linker relaxations to work. */ PROVIDE(__global_pointer$ = . + 0x800); - *(.sdata .sdata.*); + *(.sdata .sdata.* .sdata2 .sdata2.*); *(.data .data.*); . = ALIGN(4); _edata = .; From e962e8c2ea2d1143a2c9093ff0ac4bd5725b5c49 Mon Sep 17 00:00:00 2001 From: "Wladimir J. van der Laan" Date: Thu, 8 Aug 2019 19:56:21 +0200 Subject: [PATCH 105/234] Bump version from 0.6.0 to 0.6.1 --- riscv-rt/Cargo.toml | 2 +- riscv-rt/src/lib.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index 2ee24a58..6067e000 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "riscv-rt" -version = "0.6.0" +version = "0.6.1" repository = "https://github.com/rust-embedded/riscv-rt" authors = ["The RISC-V Team "] categories = ["embedded", "no-std"] diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index 17dfc36f..5f7b5683 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -30,7 +30,7 @@ //! $ # add this crate as a dependency //! $ edit Cargo.toml && cat $_ //! [dependencies] -//! riscv-rt = "0.6.0" +//! riscv-rt = "0.6.1" //! panic-halt = "0.2.0" //! //! $ # memory layout of the device From cd995c626c0cdcc7adf2ccabc4cbb864ca74a887 Mon Sep 17 00:00:00 2001 From: Ian Kronquist Date: Thu, 3 Oct 2019 12:12:12 -0700 Subject: [PATCH 106/234] Simple typo fix --- riscv-rt/examples/multi_core.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/riscv-rt/examples/multi_core.rs b/riscv-rt/examples/multi_core.rs index f9092407..de34e8ec 100644 --- a/riscv-rt/examples/multi_core.rs +++ b/riscv-rt/examples/multi_core.rs @@ -30,7 +30,7 @@ pub extern "Rust" fn user_mp_hook() -> bool { } } - // Start listening for software interrupts + // Stop listening for software interrupts mie::clear_msoft(); // Clear IPI From 4e9aa15f02c8576d74d58ca0a6b99d0ac2cbd801 Mon Sep 17 00:00:00 2001 From: Vadzim Dambrouski Date: Fri, 22 Nov 2019 02:02:17 +0300 Subject: [PATCH 107/234] Make linker script compatible with GNU linker. Assigning to the dot inside the section declaration is section relative, not absolute. --- riscv-rt/link.x | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/riscv-rt/link.x b/riscv-rt/link.x index ae4e7a86..1a46dbea 100644 --- a/riscv-rt/link.x +++ b/riscv-rt/link.x @@ -25,7 +25,7 @@ SECTIONS .text.dummy (NOLOAD) : { /* This section is intended to make _stext address work */ - . = _stext; + . = ABSOLUTE(_stext); } > REGION_TEXT .text _stext : @@ -84,7 +84,7 @@ SECTIONS .stack (NOLOAD) : { _estack = .; - . = _stack_start; + . = ABSOLUTE(_stack_start); _sstack = .; } > REGION_STACK From 09b1f01d3525e52f04f7ab9f843c5442acd89b7e Mon Sep 17 00:00:00 2001 From: Ivan Stankovic Date: Mon, 17 Feb 2020 22:22:28 +0100 Subject: [PATCH 108/234] Place abort in the .text section Don't clutter the .init section needlessly. --- riscv-rt/asm.S | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/riscv-rt/asm.S b/riscv-rt/asm.S index 61f3bd6e..5b20f898 100644 --- a/riscv-rt/asm.S +++ b/riscv-rt/asm.S @@ -133,7 +133,7 @@ _start_trap: /* Make sure there is an abort when linking */ -.section .init +.section .text .globl abort abort: j abort From 0f39348af1805667987097a54cefbb67be0740a9 Mon Sep 17 00:00:00 2001 From: Ivan Stankovic Date: Tue, 18 Feb 2020 22:22:01 +0100 Subject: [PATCH 109/234] Update binaries --- riscv-rt/bin/riscv32imac-unknown-none-elf.a | Bin 1838 -> 2002 bytes riscv-rt/bin/riscv32imc-unknown-none-elf.a | Bin 1838 -> 2002 bytes riscv-rt/bin/riscv64gc-unknown-none-elf.a | Bin 2642 -> 2866 bytes riscv-rt/bin/riscv64imac-unknown-none-elf.a | Bin 2642 -> 2866 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/riscv-rt/bin/riscv32imac-unknown-none-elf.a b/riscv-rt/bin/riscv32imac-unknown-none-elf.a index 27eed82dd5f061ffc31344411c52d5c06f49b87e..9808bda9eb3437be74309cd8d5673a9717ae7c60 100644 GIT binary patch literal 2002 zcma)6-Afcv6hC)2v+T=06^+=;?0eeWMJ%M&Ro9O;EkWz4adz9(OPPqiklNWSUlu0 z==i_Q(a?$WXXg*UY*E5T2w0S=DxUE9-KChSCBz^~)n0sNN%iA%75r9!FF}APtqxM~ zHFPAP)S{l1Ax>0Z!FPwapaUUJ)Ly~+L%f(+Zcdd;lWxIo zCUe5NZWhrvX6Ztpck)+MJNav9Emlf1g-~ayF0-#Wp^h^>!7tztUkn(ZZQXhg(g3FV zRX!fZ)UaV0Cwxewm>ZSOSnK>v>Nfg8jJ19dxL$n*##+A&+^`7)jIq}Fx6!C{##-lZ zT(=nmjIq{df$RC717oc9^S~R`JKkZe8l;KwRt&Hh{HVHe&A_|VWnjEVUq!>YG2vP{ zG91_T=b}b-Vcas@!gZI73zlnoY9ZwM)5c zZo$Eh|7S6TabK%aiT`gAxHgR&A#nGl)ItYZb1g7CKhJB7TNKxw+Xfyqj%7Ot=d1Cr zIDS4@AM@q@_SYbJeHg5-4~Z9`b4`5oy1q`}V7?dNS-3V`Uk8L>zIG7K#a^w}81u9I zj6SDYkb~gbI0suVJeaQ=q!}9L;Ooq5jJXF;`V=P5I*@OlCYW`7!997o2w@Dq4w#+u f@pa|g`iuc-4u#qbl<9ojYQeZ75)^e1W*zqj^n&M1 literal 1838 zcma)6&rcIU6n@iUMFa&g(okaxq7ao@pg}N%lmg{fp+G_*9$dCiY!xW(t^^x`84ku6 z4+alh{TuM$QDTfS#u!74F~)fICgMR47=3SNhi;n~dC8mkzHi>Xd7YWpsy0=dO12kW z^yZr1Mg_KyUT>gL222(KfD?UQx}qDZW`G(`<0yz?XzBuhmeQvd>ovod7W@5cm*zmg zOyAJl+#>dwEV|Pj2{XoU6JZQ~K$Zb47l6qF=5igBKr!gUK|gwc2U!R2U?Co2oxGEE z@h;ZQyIGirSr6}Fy}Xz8@jlki``G{=U=bc+gM5$;@gWxF(RJMB5oe&E4Ss*>K)mXJ zsjtr+6{weEMN)g>h&h_rNU*7Z!MYWvKOFU^x1arFk6UlLHcvdSd~xcf_GjYpDfBt~<=gh3->bp3P<7`y$GPd}3#! zO4Y&ZKQ7N8GYV{(F;9u(Ae}`i`bleTKa(@(1nC;FY@0dFi_Hp7D9HOl@cVlqcnLOh zg3F8#?`b0bY97zn_#Q;yghFVr38lEdD~AKP^Y|I$vL1>*pSRwU$NO@)3&wIdfSSj_ z7x8;RQLfFVCam4OJqyi9@`V8XA zGExBuOZ_@xkEIiqI^AQ%F&xkcOML~gyNFZ(!cxD2xb!Hg0C&;L%1vnAU%jPQlWskD zFXGk%BBlnX)2=M8wRG_5x91EsjMT`Xu9F*vla^(OPPqiklNWSUlu0 z==i_Q(a?$WXXg*UY*E5T2w0S=DxUE9-KChSCBz^~)n0sNN%iA%75r9!FF}APtqxM~ zHFPAP)S{l1Ax>0Z!FPwapaUUJ)Ly~+L%f(+Zcdd;lWxIo zCUe5NZWhrvX6Ztpck)+MJNav9Emlf1g-~ayF0-#Wp^h^>!7tztUkn(ZZQXhg(g3FV zRX!fZ)UaV0Cwxewm>ZSOSnK>v>Nfg8jJ19dxL$n*##+A&+^`7)jIq}Fx6!C{##-lZ zT(=nmjIq{df$RC717oc9^S~R`JKkZe8l;KwRt&Hh{HVHe&A_|VWnjEVUq!>YG2vP{ zG91_T=b}b-Vcas@!gZI73zlnoY9ZwM)5c zZo$Eh|7S6TabK%aiT`gAxHgR&A#nGl)ItYZb1g7CKhJB7TNKxw+Xfyqj%7Ot=d1Cr zIDS4@AM@q@_SYbJeHg5-4~Z9`b4`5oy1q`}V7?dNS-3V`Uk8L>zIG7K#a^w}81u9I zj6SDYkb~gbI0suVJeaQ=q!}9L;Ooq5jJXF;`V=P5I*@OlCYW`7!997o2w@Dq4w#+u f@pa|g`iuc-4u#qbl<9ojYQeZ75)^e1W*zqj^n&M1 literal 1838 zcma)6&rcIU6n@iUMFa&g(okaxq7ao@pg}N%lmg{fp+G_*9$dCiY!xW(t^^x`84ku6 z4+alh{TuM$QDTfS#u!74F~)fICgMR47=3SNhi;n~dC8mkzHi>Xd7YWpsy0=dO12kW z^yZr1Mg_KyUT>gL222(KfD?UQx}qDZW`G(`<0yz?XzBuhmeQvd>ovod7W@5cm*zmg zOyAJl+#>dwEV|Pj2{XoU6JZQ~K$Zb47l6qF=5igBKr!gUK|gwc2U!R2U?Co2oxGEE z@h;ZQyIGirSr6}Fy}Xz8@jlki``G{=U=bc+gM5$;@gWxF(RJMB5oe&E4Ss*>K)mXJ zsjtr+6{weEMN)g>h&h_rNU*7Z!MYWvKOFU^x1arFk6UlLHcvdSd~xcf_GjYpDfBt~<=gh3->bp3P<7`y$GPd}3#! zO4Y&ZKQ7N8GYV{(F;9u(Ae}`i`bleTKa(@(1nC;FY@0dFi_Hp7D9HOl@cVlqcnLOh zg3F8#?`b0bY97zn_#Q;yghFVr38lEdD~AKP^Y|I$vL1>*pSRwU$NO@)3&wIdfSSj_ z7x8;RQLfFVCam4OJqyi9@`V8XA zGExBuOZ_@xkEIiqI^AQ%F&xkcOML~gyNFZ(!cxD2xb!Hg0C&;L%1vnAU%jPQlWskD zFXGk%BBlnX)2=M8wRG_5x91EsjMT`Xu9F*vla^0a|I+WF5<5o^ z67b+vJb3WnK|#TT2M^-WpAbaEL%Z+RVso8bXa`J^! zjYo~85?7|at&WC~XqAM)MgWN7Gb$g`^(@B&D_6qNpO~IwjR81CH$Q&F@nR)EURac5 zB2n4CHF+ZG#~Ey#?#N~$jA0O87<`9+Gl>GcZ;eth`XP=&bc{%^O{AS_p;=5m8%YS~)3_i}K^B?n(smD|4>5tP5_7giZ z^m(Y^){|SAiO&-&EEkM8mASD}D*&4u0CtD5?W-fp==~7BL#(N){Q%A?2Lfy-n)S|j zGEr_%?4I5xf2)?(1``M~)heG(rL-6hjUi*G7hVZQr z9AeqH0j7C%xRkSo&9PE()U%xyFh{Hjvw#i2EM8H1K>oUD3;r6m2ttaJ_L2@Ex`lJo zUD7$s3V?|yas+Ml{mFA}MtqIJ>k&4+*X0U6Ana|Z*9PEi3P$E7G2f0_55+JwEMEd+O(Eh(K{%Q$_kqtP_o(_*=w<>JmhXPkl)G%e<)H;n|G| zT2-AF@efuJ-_Yw1%AJ^Z1+hsKwi+>d^!SvMes>UpSphmUQACeV{U*qNP}E;ge96@P F{{nXK?uY;Y delta 901 zcmZ`$y)Q#i6uuT@Se; zC;}q;v8vwhHCT|n`rVg2gS4E7CpiFzRy)jUtx|(Q&4G2T*P>P-bjWIs(nSXIjY?!h48yg#3vp`{_AM8;Zne<;Xm9*t+=0&qdzRCqmEr>E zLPu;>kuR_d`!APb2z~#t;msHBs5+Sij$z3cUDh#jIa72uJpP*p+E^eS%_5_Xk&WY5 zZNf9m`D0TFtX5OMFsQezLh7`gO7$e{+K!As-X9yA#(FiaN7hPVos6_dr=$ftc4t$H e|D*UnHOL4+&W=kL^7dqRJwMJO=KmVEl~TW)Hd3Pi diff --git a/riscv-rt/bin/riscv64imac-unknown-none-elf.a b/riscv-rt/bin/riscv64imac-unknown-none-elf.a index 3b6e90deefdf443dbb3a142a74f956b12f92ea83..719d802822802a53a3dfd7c2464f6b1744862071 100644 GIT binary patch literal 2866 zcmbVNOKTKC5U$=$qQ+Nz#uqYbe4(yuvMdUso7HSy8>0a|I+WF5<5o^ z67b+vJb3WnK|#TT2M^-WpAbaEL%Z+RVso8bXa`J^! zjYo~85?7|at&WC~XqAM)MgWN7Gb$g`^(@B&D_6qNpO~IwjR81CH$Q&F@nR)EURac5 zB2n4CHF+ZG#~Ey#?#N~$jA0O87<`9+Gl>GcZ;eth`XP=&bc{%^O{AS_p;=5m8%YS~)3_i}K^B?n(smD|4>5tP5_7giZ z^m(Y^){|SAiO&-&EEkM8mASD}D*&4u0CtD5?W-fp==~7BL#(N){Q%A?2Lfy-n)S|j zGEr_%?4I5xf2)?(1``M~)heG(rL-6hjUi*G7hVZQr z9AeqH0j7C%xRkSo&9PE()U%xyFh{Hjvw#i2EM8H1K>oUD3;r6m2ttaJ_L2@Ex`lJo zUD7$s3V?|yas+Ml{mFA}MtqIJ>k&4+*X0U6Ana|Z*9PEi3P$E7G2f0_55+JwEMEd+O(Eh(K{%Q$_kqtP_o(_*=w<>JmhXPkl)G%e<)H;n|G| zT2-AF@efuJ-_Yw1%AJ^Z1+hsKwi+>d^!SvMes>UpSphmUQACeV{U*qNP}E;ge96@P F{{nXK?uY;Y delta 901 zcmZ`$y)Q#i6uuT@Se; zC;}q;v8vwhHCT|n`rVg2gS4E7CpiFzRy)jUtx|(Q&4G2T*P>P-bjWIs(nSXIjY?!h48yg#3vp`{_AM8;Zne<;Xm9*t+=0&qdzRCqmEr>E zLPu;>kuR_d`!APb2z~#t;msHBs5+Sij$z3cUDh#jIa72uJpP*p+E^eS%_5_Xk&WY5 zZNf9m`D0TFtX5OMFsQezLh7`gO7$e{+K!As-X9yA#(FiaN7hPVos6_dr=$ftc4t$H e|D*UnHOL4+&W=kL^7dqRJwMJO=KmVEl~TW)Hd3Pi From 23605f5b3561445b5222ef2ad33768c123cfc1cf Mon Sep 17 00:00:00 2001 From: Ein Terakawa Date: Fri, 28 Feb 2020 01:41:04 +0900 Subject: [PATCH 110/234] Assure address of PC at startup. --- riscv-rt/asm.S | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/riscv-rt/asm.S b/riscv-rt/asm.S index 5b20f898..794902db 100644 --- a/riscv-rt/asm.S +++ b/riscv-rt/asm.S @@ -12,6 +12,25 @@ .global _start _start: + /* Jump to the absolute address defined by the linker script. */ + // for 32bit + .if __riscv_xlen == 32 + lui ra, %hi(_abs_start) + jr %lo(_abs_start)(ra) + .endif + + // for 64bit + .if __riscv_xlen == 64 +1: + auipc ra, %pcrel_hi(1f) + ld ra, %pcrel_lo(1b)(ra) + jr ra + .align 3 +1: + .dword _abs_start + .endif + +_abs_start: .cfi_startproc .cfi_undefined ra From 7e4c1b972c4ec52453966e1afab5503486890a7f Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Thu, 27 Feb 2020 20:47:59 +0300 Subject: [PATCH 111/234] Update binaries --- riscv-rt/bin/riscv32imac-unknown-none-elf.a | Bin 2002 -> 1970 bytes riscv-rt/bin/riscv32imc-unknown-none-elf.a | Bin 2002 -> 1970 bytes riscv-rt/bin/riscv64gc-unknown-none-elf.a | Bin 2866 -> 2986 bytes riscv-rt/bin/riscv64imac-unknown-none-elf.a | Bin 2866 -> 2986 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/riscv-rt/bin/riscv32imac-unknown-none-elf.a b/riscv-rt/bin/riscv32imac-unknown-none-elf.a index 9808bda9eb3437be74309cd8d5673a9717ae7c60..bd203144706ffcf67c44532c593ea123b74bfcf6 100644 GIT binary patch literal 1970 zcma)6-Afcv6hC*@kF+$+N^v9B4=h5rRTs$+S$F+*T}|?Xh{jo6bxU2FnZ%?IuMa)+ z6bAa*Lw|ui_*h6pghWV$MD#CY7C{eT=gi!@&MZV8ICp-(-#PcpoqOlpvL;m1t05|%qbVWB*%>Xr)#L*&(p{a8KT0$S2uh9%&(t6*&-qH{V znB{9P`9;cT?!&f7J7WxAVi|)UaKHd|GQi{kGkhNMArIKI4P=u`0D6DWj~?Jb*1}s@ zh=*91hgmCcWo^8Twexn?!8=$d?_^!Pi*@sE*28;PghyB}?`2UQWqrJF4PW?_GtjGo z-#1){mt8RSa}$!gFMk(ftO(a9^%t%oS3SEDtj}PuCUW&B1ODXh{;$T{S+7oSmcBmw zMteK|ZgK0u`wJg@+jSosK3(2v{v7(!{`K4L{-5RGN~k=%9u7sfqp`ldKG)#NVENGc zP-u92I5x63Ql{$Q^`Er11K8pKuzQSo@?6=pF9qmlMC>pRw_`WyNa;`y%ni7~HgiL! zIpau5%Yb3zB7es{)D zWB4>Q>p3Nn7N1sqMts2l-?(b1;EU-x_)Il1n?Th{pgYil@hN3OQ)lAVYYsJfF^l?I zE{E&?iV?389K)vBdw~SXC96iKp8j7R&9|?Q_$s+>P;-#8*}YpOHjG(ZnK!AcBZm3JQW4qbP}>gd_%ST(ndWb^d_Z z+W8wSEXCH!POz~PwDH{8heLiOj^lH2EEjUcoid4Dpk62^6S+iwGJU`)!)XUezKed@prtHs zXNRsfxN;@w9x?dHuhthl*RJ2L(We#KLx7J0l@hvhH~9^Y>hJ^_^1)5U>R)IvrDvs(H&H%IB6rTVeWB!X4mH{ ziiGVVX4l^Xo6fB;JHAEx5Z$dv2xj+zLvWAdGrKq!R-3yV6%Z;B4*d$1c#kN zUNE;KAqFwR9k+U8m-FtUFov9$!W`3ORNn|ss1Ix+Qz{j5+ef9{qCC?xff*lB6N;MT zr(P6SGHnb67U6v<@6zZKPx8Tt1ycBw?YcL3A^B^>ta*660sDL-kc#;l(ISsY#SH#| v5m#X5UxI^YO_80lFt#w7A$f2=J}~!2KQEr~Pyw&~#6MtWQIz#o{(Juc$S+I# diff --git a/riscv-rt/bin/riscv32imc-unknown-none-elf.a b/riscv-rt/bin/riscv32imc-unknown-none-elf.a index 9808bda9eb3437be74309cd8d5673a9717ae7c60..bd203144706ffcf67c44532c593ea123b74bfcf6 100644 GIT binary patch literal 1970 zcma)6-Afcv6hC*@kF+$+N^v9B4=h5rRTs$+S$F+*T}|?Xh{jo6bxU2FnZ%?IuMa)+ z6bAa*Lw|ui_*h6pghWV$MD#CY7C{eT=gi!@&MZV8ICp-(-#PcpoqOlpvL;m1t05|%qbVWB*%>Xr)#L*&(p{a8KT0$S2uh9%&(t6*&-qH{V znB{9P`9;cT?!&f7J7WxAVi|)UaKHd|GQi{kGkhNMArIKI4P=u`0D6DWj~?Jb*1}s@ zh=*91hgmCcWo^8Twexn?!8=$d?_^!Pi*@sE*28;PghyB}?`2UQWqrJF4PW?_GtjGo z-#1){mt8RSa}$!gFMk(ftO(a9^%t%oS3SEDtj}PuCUW&B1ODXh{;$T{S+7oSmcBmw zMteK|ZgK0u`wJg@+jSosK3(2v{v7(!{`K4L{-5RGN~k=%9u7sfqp`ldKG)#NVENGc zP-u92I5x63Ql{$Q^`Er11K8pKuzQSo@?6=pF9qmlMC>pRw_`WyNa;`y%ni7~HgiL! zIpau5%Yb3zB7es{)D zWB4>Q>p3Nn7N1sqMts2l-?(b1;EU-x_)Il1n?Th{pgYil@hN3OQ)lAVYYsJfF^l?I zE{E&?iV?389K)vBdw~SXC96iKp8j7R&9|?Q_$s+>P;-#8*}YpOHjG(ZnK!AcBZm3JQW4qbP}>gd_%ST(ndWb^d_Z z+W8wSEXCH!POz~PwDH{8heLiOj^lH2EEjUcoid4Dpk62^6S+iwGJU`)!)XUezKed@prtHs zXNRsfxN;@w9x?dHuhthl*RJ2L(We#KLx7J0l@hvhH~9^Y>hJ^_^1)5U>R)IvrDvs(H&H%IB6rTVeWB!X4mH{ ziiGVVX4l^Xo6fB;JHAEx5Z$dv2xj+zLvWAdGrKq!R-3yV6%Z;B4*d$1c#kN zUNE;KAqFwR9k+U8m-FtUFov9$!W`3ORNn|ss1Ix+Qz{j5+ef9{qCC?xff*lB6N;MT zr(P6SGHnb67U6v<@6zZKPx8Tt1ycBw?YcL3A^B^>ta*660sDL-kc#;l(ISsY#SH#| v5m#X5UxI^YO_80lFt#w7A$f2=J}~!2KQEr~Pyw&~#6MtWQIz#o{(Juc$S+I# diff --git a/riscv-rt/bin/riscv64gc-unknown-none-elf.a b/riscv-rt/bin/riscv64gc-unknown-none-elf.a index 719d802822802a53a3dfd7c2464f6b1744862071..50d6c134cf78f62d9d23d26779e2ba148d5a3f8e 100644 GIT binary patch literal 2986 zcmbtV-D@0G6hC*iN!w^_ZM4-^WvitM+U@3ppipG8Z8mAUZL|-?CnvMpjaf~yab`@{ zAW3fo!8buL;FIJbh!0W}D)^w#htfYIlv4UoaK#9DsMK@jp0m#0odwYYbI-ZI`#blX z`*r5%DL<&pzS(y&+b;P;*VxH6n;jVv!gL=1Wbj*%&kG|zh`=w`u{9kp3j9TYpcYn^ zP6Sb|ZsK)|GCDF6Pe1hf;HZf+-M2bkDmqGG5F-lyfPZ>|0$kfI;{a}Ky6^<_gZjqc z>!?1x4zPAj!GM9{Hhjy?<2RyRHKxZ@K^N3%eOjH-XVkbJS4CY^6M8~T>PdB0pH=7d zIdxv2S0!Ci7xV>nQD0P3dTJe0`cf+hkGsGB&-`h0zCU+@7BS)hws1eAZRXaFYl~8{BG;}yFc8&@!;p?FWWbF zZaw_1`RK2;>5X!sa;M^~Y^)Sk@2vJ#H><^&do#UPH?I~O_ZoZs5VCn%;8VO-wR{QG zCrTaZcXreM5&j&H{acku-FdnObP+lw1G_pwL^9CRftxe!foH6d$K!r?eAD7nHv@bb z5@S!sb`R`NU}PR*+=4;kzH1E#zT5@>%EGCefxR8*BqIA$_Tl*$@1VoUF8HY!H@lbg zDs08gz!@b`U)8y}5eXpYs;$wS}k}90PCO zZ+NpVV~oFqI{7LE ze;M&4A9CTx^O0Xh9R)_uiWOAn{9IIRM3B4UM?U1rVF@2@ zm2>z%DvQoko!WB6zKb7;V^piP`*hy)#@rUe7%o3NIxiA>8x&^`bx;I9jyB=;AF4p4 z6tOGmYsjHF|EvEf`lhX)>OaZ1MzvbWUw}b0($@bDuYZv@jMh(oRq>bgk0F*8zlk_W z$*5Lqub=)eY4LCKfl3^TPxsW0PxI59_PM$oD34=F5r4rZ&`68F#qlSZNb#wTi@)TR v7MolaIljw@QO(+y;!kthXO9qEXYh0CB!s7JAygmI{9oZmeYwRnhVB11V9@Ni literal 2866 zcmbVNOKTKC5U$=$qQ+Nz#uqYbe4(yuvMdUso7HSy8>0a|I+WF5<5o^ z67b+vJb3WnK|#TT2M^-WpAbaEL%Z+RVso8bXa`J^! zjYo~85?7|at&WC~XqAM)MgWN7Gb$g`^(@B&D_6qNpO~IwjR81CH$Q&F@nR)EURac5 zB2n4CHF+ZG#~Ey#?#N~$jA0O87<`9+Gl>GcZ;eth`XP=&bc{%^O{AS_p;=5m8%YS~)3_i}K^B?n(smD|4>5tP5_7giZ z^m(Y^){|SAiO&-&EEkM8mASD}D*&4u0CtD5?W-fp==~7BL#(N){Q%A?2Lfy-n)S|j zGEr_%?4I5xf2)?(1``M~)heG(rL-6hjUi*G7hVZQr z9AeqH0j7C%xRkSo&9PE()U%xyFh{Hjvw#i2EM8H1K>oUD3;r6m2ttaJ_L2@Ex`lJo zUD7$s3V?|yas+Ml{mFA}MtqIJ>k&4+*X0U6Ana|Z*9PEi3P$E7G2f0_55+JwEMEd+O(Eh(K{%Q$_kqtP_o(_*=w<>JmhXPkl)G%e<)H;n|G| zT2-AF@efuJ-_Yw1%AJ^Z1+hsKwi+>d^!SvMes>UpSphmUQACeV{U*qNP}E;ge96@P F{{nXK?uY;Y diff --git a/riscv-rt/bin/riscv64imac-unknown-none-elf.a b/riscv-rt/bin/riscv64imac-unknown-none-elf.a index 719d802822802a53a3dfd7c2464f6b1744862071..50d6c134cf78f62d9d23d26779e2ba148d5a3f8e 100644 GIT binary patch literal 2986 zcmbtV-D@0G6hC*iN!w^_ZM4-^WvitM+U@3ppipG8Z8mAUZL|-?CnvMpjaf~yab`@{ zAW3fo!8buL;FIJbh!0W}D)^w#htfYIlv4UoaK#9DsMK@jp0m#0odwYYbI-ZI`#blX z`*r5%DL<&pzS(y&+b;P;*VxH6n;jVv!gL=1Wbj*%&kG|zh`=w`u{9kp3j9TYpcYn^ zP6Sb|ZsK)|GCDF6Pe1hf;HZf+-M2bkDmqGG5F-lyfPZ>|0$kfI;{a}Ky6^<_gZjqc z>!?1x4zPAj!GM9{Hhjy?<2RyRHKxZ@K^N3%eOjH-XVkbJS4CY^6M8~T>PdB0pH=7d zIdxv2S0!Ci7xV>nQD0P3dTJe0`cf+hkGsGB&-`h0zCU+@7BS)hws1eAZRXaFYl~8{BG;}yFc8&@!;p?FWWbF zZaw_1`RK2;>5X!sa;M^~Y^)Sk@2vJ#H><^&do#UPH?I~O_ZoZs5VCn%;8VO-wR{QG zCrTaZcXreM5&j&H{acku-FdnObP+lw1G_pwL^9CRftxe!foH6d$K!r?eAD7nHv@bb z5@S!sb`R`NU}PR*+=4;kzH1E#zT5@>%EGCefxR8*BqIA$_Tl*$@1VoUF8HY!H@lbg zDs08gz!@b`U)8y}5eXpYs;$wS}k}90PCO zZ+NpVV~oFqI{7LE ze;M&4A9CTx^O0Xh9R)_uiWOAn{9IIRM3B4UM?U1rVF@2@ zm2>z%DvQoko!WB6zKb7;V^piP`*hy)#@rUe7%o3NIxiA>8x&^`bx;I9jyB=;AF4p4 z6tOGmYsjHF|EvEf`lhX)>OaZ1MzvbWUw}b0($@bDuYZv@jMh(oRq>bgk0F*8zlk_W z$*5Lqub=)eY4LCKfl3^TPxsW0PxI59_PM$oD34=F5r4rZ&`68F#qlSZNb#wTi@)TR v7MolaIljw@QO(+y;!kthXO9qEXYh0CB!s7JAygmI{9oZmeYwRnhVB11V9@Ni literal 2866 zcmbVNOKTKC5U$=$qQ+Nz#uqYbe4(yuvMdUso7HSy8>0a|I+WF5<5o^ z67b+vJb3WnK|#TT2M^-WpAbaEL%Z+RVso8bXa`J^! zjYo~85?7|at&WC~XqAM)MgWN7Gb$g`^(@B&D_6qNpO~IwjR81CH$Q&F@nR)EURac5 zB2n4CHF+ZG#~Ey#?#N~$jA0O87<`9+Gl>GcZ;eth`XP=&bc{%^O{AS_p;=5m8%YS~)3_i}K^B?n(smD|4>5tP5_7giZ z^m(Y^){|SAiO&-&EEkM8mASD}D*&4u0CtD5?W-fp==~7BL#(N){Q%A?2Lfy-n)S|j zGEr_%?4I5xf2)?(1``M~)heG(rL-6hjUi*G7hVZQr z9AeqH0j7C%xRkSo&9PE()U%xyFh{Hjvw#i2EM8H1K>oUD3;r6m2ttaJ_L2@Ex`lJo zUD7$s3V?|yas+Ml{mFA}MtqIJ>k&4+*X0U6Ana|Z*9PEi3P$E7G2f0_55+JwEMEd+O(Eh(K{%Q$_kqtP_o(_*=w<>JmhXPkl)G%e<)H;n|G| zT2-AF@efuJ-_Yw1%AJ^Z1+hsKwi+>d^!SvMes>UpSphmUQACeV{U*qNP}E;ge96@P F{{nXK?uY;Y From f956817f402bbb57af1d541b9f51bf08b0a44bea Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Sat, 1 Feb 2020 15:22:19 +0300 Subject: [PATCH 112/234] Pass trap frame pointer to the _start_trap_rust function --- riscv-rt/asm.S | 1 + 1 file changed, 1 insertion(+) diff --git a/riscv-rt/asm.S b/riscv-rt/asm.S index 794902db..e46b9a17 100644 --- a/riscv-rt/asm.S +++ b/riscv-rt/asm.S @@ -128,6 +128,7 @@ _start_trap: STORE a6, 14*REGBYTES(sp) STORE a7, 15*REGBYTES(sp) + add a0, sp, zero jal ra, _start_trap_rust LOAD ra, 0*REGBYTES(sp) From 063c0096e1cdbd81933dbf86e8bc3f950bbb5fc0 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Sat, 1 Feb 2020 15:22:51 +0300 Subject: [PATCH 113/234] Regenerate binaries --- riscv-rt/bin/riscv32imac-unknown-none-elf.a | Bin 1970 -> 2090 bytes riscv-rt/bin/riscv32imc-unknown-none-elf.a | Bin 1970 -> 2090 bytes riscv-rt/bin/riscv64gc-unknown-none-elf.a | Bin 2986 -> 3138 bytes riscv-rt/bin/riscv64imac-unknown-none-elf.a | Bin 2986 -> 3138 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/riscv-rt/bin/riscv32imac-unknown-none-elf.a b/riscv-rt/bin/riscv32imac-unknown-none-elf.a index bd203144706ffcf67c44532c593ea123b74bfcf6..2c5d147910804884d2b82715b9d66b394454f3b2 100644 GIT binary patch delta 463 zcmdnQze-@jd?rhyi3>G_HCP!K7#SECOn{hyL4$#xfp6m7-R#D!j12ET?4LZFF<8S< z11M9JS)5$Pz$gb~vKEyY8)X_57{up-h(r*P3?wE$WK@{U#k7SVWD*Q8GjMO-%Ou9g zC^-2Fvo$0CWC0d&Ndbs#6p%88DvSft(gKqmSi~8HCP%R7OA13IijdTlfz$|3UI0`h zGIvYZnAWs44eV)nPY|4xQlh?B;b53A^skqH1&nPqbH=BC>9H5vANEZ-u0x^&aW`_Z3 zpb-T?3Jg4eW@*AWKpGUXAOND7z$^$+0u(3!VqPGZ4~RkLfdU0&HqbmccmmW^%fK+X Ql3h{a08mi|Tn1q_050`GQUCw| delta 321 zcmZ1_u!(=dd?pKni3>G_Z?G^hFfuSOm;f;Yg9Za11MkGUyP4mA_&<3*WANk$tWuLL zn6_>H$0W+gC@@)s#hQ_CasZ3CBtKX^LllrQhAMM oWddRtZ~+P=05M2E@8t9B(u_+czh+mLXaH&mgDC>iAblVJ0Ne&JZ~y=R diff --git a/riscv-rt/bin/riscv32imc-unknown-none-elf.a b/riscv-rt/bin/riscv32imc-unknown-none-elf.a index bd203144706ffcf67c44532c593ea123b74bfcf6..2c5d147910804884d2b82715b9d66b394454f3b2 100644 GIT binary patch delta 463 zcmdnQze-@jd?rhyi3>G_HCP!K7#SECOn{hyL4$#xfp6m7-R#D!j12ET?4LZFF<8S< z11M9JS)5$Pz$gb~vKEyY8)X_57{up-h(r*P3?wE$WK@{U#k7SVWD*Q8GjMO-%Ou9g zC^-2Fvo$0CWC0d&Ndbs#6p%88DvSft(gKqmSi~8HCP%R7OA13IijdTlfz$|3UI0`h zGIvYZnAWs44eV)nPY|4xQlh?B;b53A^skqH1&nPqbH=BC>9H5vANEZ-u0x^&aW`_Z3 zpb-T?3Jg4eW@*AWKpGUXAOND7z$^$+0u(3!VqPGZ4~RkLfdU0&HqbmccmmW^%fK+X Ql3h{a08mi|Tn1q_050`GQUCw| delta 321 zcmZ1_u!(=dd?pKni3>G_Z?G^hFfuSOm;f;Yg9Za11MkGUyP4mA_&<3*WANk$tWuLL zn6_>H$0W+gC@@)s#hQ_CasZ3CBtKX^LllrQhAMM oWddRtZ~+P=05M2E@8t9B(u_+czh+mLXaH&mgDC>iAblVJ0Ne&JZ~y=R diff --git a/riscv-rt/bin/riscv64gc-unknown-none-elf.a b/riscv-rt/bin/riscv64gc-unknown-none-elf.a index 50d6c134cf78f62d9d23d26779e2ba148d5a3f8e..6d6cf156ea54b04573aab2e05e18733f5a84cb33 100644 GIT binary patch delta 443 zcmZ1_en?`%d}d2Ci;0U2#BZ=OfB_?rbO5s)82B0ZCceDPZp_Na@czU8$@>}AC%diOGUYDx1xid>AJyFtIQ*GjMM% zWNu|-6b6b5Pv&Bs!YDX-KC3>X(B$)A@;{IinXJzi&nP;%pG_Y~?gx@$liveHgeUv6 zi%W`w-31}kplm@PEit*CeWjot*hzYcB_&0fNu?#J#gh#=EP+;YOwQtn5bR)qXpn&F zMT_Y0elhnVZX8PyiYt2pz#(`JNh3Q4g3oK$;VXIiP%)>M$Um znSr4IDh#IzKmiN{nv=OX<$(dqz`z6w577ls@d&6(c!4qklf}8U8GlT6=Cku}XZxd}a$nvx$og#2eTdzV#~hsg&xq68hlPGMk>fU4l0 ztj+meFaj!CzyuKnigKAV`b-1Zt8(2xrQt3nV^ZEyhqvPU(% diff --git a/riscv-rt/bin/riscv64imac-unknown-none-elf.a b/riscv-rt/bin/riscv64imac-unknown-none-elf.a index 50d6c134cf78f62d9d23d26779e2ba148d5a3f8e..6d6cf156ea54b04573aab2e05e18733f5a84cb33 100644 GIT binary patch delta 443 zcmZ1_en?`%d}d2Ci;0U2#BZ=OfB_?rbO5s)82B0ZCceDPZp_Na@czU8$@>}AC%diOGUYDx1xid>AJyFtIQ*GjMM% zWNu|-6b6b5Pv&Bs!YDX-KC3>X(B$)A@;{IinXJzi&nP;%pG_Y~?gx@$liveHgeUv6 zi%W`w-31}kplm@PEit*CeWjot*hzYcB_&0fNu?#J#gh#=EP+;YOwQtn5bR)qXpn&F zMT_Y0elhnVZX8PyiYt2pz#(`JNh3Q4g3oK$;VXIiP%)>M$Um znSr4IDh#IzKmiN{nv=OX<$(dqz`z6w577ls@d&6(c!4qklf}8U8GlT6=Cku}XZxd}a$nvx$og#2eTdzV#~hsg&xq68hlPGMk>fU4l0 ztj+meFaj!CzyuKnigKAV`b-1Zt8(2xrQt3nV^ZEyhqvPU(% From f233381982852529e41c784cc0b5d7e880dc58f4 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Sat, 1 Feb 2020 19:56:33 +0300 Subject: [PATCH 114/234] Implement interrupt and exception handling --- riscv-rt/link.x | 13 ++- riscv-rt/src/lib.rs | 203 +++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 203 insertions(+), 13 deletions(-) diff --git a/riscv-rt/link.x b/riscv-rt/link.x index 1a46dbea..a2d48244 100644 --- a/riscv-rt/link.x +++ b/riscv-rt/link.x @@ -4,7 +4,18 @@ PROVIDE(_max_hart_id = 0); PROVIDE(_hart_stack_size = 2K); PROVIDE(_heap_size = 0); -PROVIDE(trap_handler = default_trap_handler); +PROVIDE(UserSoft = DefaultHandler); +PROVIDE(SupervisorSoft = DefaultHandler); +PROVIDE(MachineSoft = DefaultHandler); +PROVIDE(UserTimer = DefaultHandler); +PROVIDE(SupervisorTimer = DefaultHandler); +PROVIDE(MachineTimer = DefaultHandler); +PROVIDE(UserExternal = DefaultHandler); +PROVIDE(SupervisorExternal = DefaultHandler); +PROVIDE(MachineExternal = DefaultHandler); + +PROVIDE(DefaultHandler = DefaultInterruptHandler); +PROVIDE(ExceptionHandler = DefaultExceptionHandler); /* # Pre-initialization function */ /* If the user overrides this using the `#[pre_init]` attribute or by creating a `__pre_init` function, diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index 5f7b5683..fcc60fcb 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -249,6 +249,84 @@ //! ``` //! //! Default implementation of this function wakes hart 0 and busy-loops all the other harts. +//! +//! ### `ExceptionHandler` +//! +//! This function is called when exception is occured. The exception reason can be decoded from the +//! `mcause` register. +//! +//! This function can be redefined in the following way: +//! +//! ``` no_run +//! #[export_name = "ExceptionHandler"] +//! fn custom_exception_handler(trap_frame: &riscv_rt::TrapFrame) -> ! { +//! // ... +//! } +//! ``` +//! or +//! ``` no_run +//! #[no_mangle] +//! fn ExceptionHandler(trap_frame: &riscv_rt::TrapFrame) -> ! { +//! // ... +//! } +//! ``` +//! +//! Default implementation of this function stucks in a busy-loop. +//! +//! +//! ### Core interrupt handlers +//! +//! This functions are called when corresponding interrupt is occured. +//! You can define an interrupt handler with one of the following names: +//! * `UserSoft` +//! * `SupervisorSoft` +//! * `MachineSoft` +//! * `UserTimer` +//! * `SupervisorTimer` +//! * `MachineTimer` +//! * `UserExternal` +//! * `SupervisorExternal` +//! * `MachineExternal` +//! +//! For example: +//! ``` no_run +//! #[export_name = "MachineTimer"] +//! fn custom_timer_handler() { +//! // ... +//! } +//! ``` +//! or +//! ``` no_run +//! #[no_mangle] +//! fn MachineTimer() { +//! // ... +//! } +//! ``` +//! +//! If interrupt handler is not explicitly defined, `DefaultHandler` is called. +//! +//! ### `DefaultHandler` +//! +//! This function is called when interrupt without defined interrupt handler is occured. +//! The interrupt reason can be decoded from the `mcause` register. +//! +//! This function can be redefined in the following way: +//! +//! ``` no_run +//! #[export_name = "DefaultHandler"] +//! fn custom_interrupt_handler() { +//! // ... +//! } +//! ``` +//! or +//! ``` no_run +//! #[no_mangle] +//! fn DefaultHandler() { +//! // ... +//! } +//! ``` +//! +//! Default implementation of this function stucks in a busy-loop. // NOTE: Adapted from cortex-m/src/lib.rs #![no_std] @@ -261,7 +339,7 @@ extern crate r0; pub use macros::{entry, pre_init}; -use riscv::register::mstatus; +use riscv::register::mcause; #[export_name = "error: riscv-rt appears more than once in the dependency graph"] #[doc(hidden)] @@ -310,33 +388,134 @@ pub unsafe extern "C" fn start_rust() -> ! { main(); } +/// Registers saved in trap handler +#[allow(missing_docs)] +#[repr(C)] +pub struct TrapFrame { + pub ra: usize, + pub t0: usize, + pub t1: usize, + pub t2: usize, + pub t3: usize, + pub t4: usize, + pub t5: usize, + pub t6: usize, + pub a0: usize, + pub a1: usize, + pub a2: usize, + pub a3: usize, + pub a4: usize, + pub a5: usize, + pub a6: usize, + pub a7: usize, +} + /// Trap entry point rust (_start_trap_rust) /// -/// mcause is read to determine the cause of the trap. XLEN-1 bit indicates -/// if it's an interrupt or an exception. The result is converted to an element -/// of the Interrupt or Exception enum and passed to handle_interrupt or -/// handle_exception. +/// `mcause` is read to determine the cause of the trap. XLEN-1 bit indicates +/// if it's an interrupt or an exception. The result is examined and ExceptionHandler +/// or one of the core interrupt handlers is called. #[link_section = ".trap.rust"] #[export_name = "_start_trap_rust"] -pub extern "C" fn start_trap_rust() { +pub extern "C" fn start_trap_rust(trap_frame: *const TrapFrame) { extern "C" { - fn trap_handler(); + fn ExceptionHandler(trap_frame: &TrapFrame) -> !; + fn DefaultHandler(); } unsafe { - // dispatch trap to handler - trap_handler(); + let cause = mcause::read(); + if cause.is_exception() { + ExceptionHandler(&*trap_frame) + } else { + let code = cause.code(); + if code < __INTERRUPTS.len() { + let h = &__INTERRUPTS[code]; + if h.reserved == 0 { + DefaultHandler(); + } else { + (h.handler)(); + } + } else { + DefaultHandler(); + } + } + } +} - // mstatus, remain in M-mode after mret - mstatus::set_mpp(mstatus::MPP::Machine); +#[doc(hidden)] +#[no_mangle] +#[allow(unused_variables, non_snake_case)] +pub fn DefaultExceptionHandler(trap_frame: &TrapFrame) -> ! { + loop { + // Prevent this from turning into a UDF instruction + // see rust-lang/rust#28728 for details + continue; } } +#[doc(hidden)] +#[no_mangle] +#[allow(unused_variables, non_snake_case)] +pub fn DefaultInterruptHandler() { + loop { + // Prevent this from turning into a UDF instruction + // see rust-lang/rust#28728 for details + continue; + } +} + +/* Interrupts */ +#[doc(hidden)] +pub enum Interrupt { + UserSoft, + SupervisorSoft, + MachineSoft, + UserTimer, + SupervisorTimer, + MachineTimer, + UserExternal, + SupervisorExternal, + MachineExternal, +} + +pub use self::Interrupt as interrupt; + +extern "C" { + fn UserSoft(); + fn SupervisorSoft(); + fn MachineSoft(); + fn UserTimer(); + fn SupervisorTimer(); + fn MachineTimer(); + fn UserExternal(); + fn SupervisorExternal(); + fn MachineExternal(); +} + +#[doc(hidden)] +pub union Vector { + handler: unsafe extern "C" fn(), + reserved: usize, +} #[doc(hidden)] #[no_mangle] -pub fn default_trap_handler() {} +pub static __INTERRUPTS: [Vector; 12] = [ + Vector { handler: UserSoft }, + Vector { handler: SupervisorSoft }, + Vector { reserved: 0 }, + Vector { handler: MachineSoft }, + Vector { handler: UserTimer }, + Vector { handler: SupervisorTimer }, + Vector { reserved: 0 }, + Vector { handler: MachineTimer }, + Vector { handler: UserExternal }, + Vector { handler: SupervisorExternal }, + Vector { reserved: 0 }, + Vector { handler: MachineExternal }, +]; #[doc(hidden)] #[no_mangle] From 45c729ef43c905e95a748225cae8331b7595fb30 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Sat, 1 Feb 2020 20:05:20 +0300 Subject: [PATCH 115/234] Remove #![deny(warnings)] (anti-pattern) --- riscv-rt/src/lib.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index fcc60fcb..cda81947 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -331,7 +331,6 @@ // NOTE: Adapted from cortex-m/src/lib.rs #![no_std] #![deny(missing_docs)] -#![deny(warnings)] extern crate riscv; extern crate riscv_rt_macros as macros; From 579f68ddf7ccc5e1328c81cdac649b2df022271a Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Wed, 26 Feb 2020 22:33:39 +0300 Subject: [PATCH 116/234] Replace mul instruction with a loop for rv32i --- riscv-rt/asm.S | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/riscv-rt/asm.S b/riscv-rt/asm.S index e46b9a17..96fddd80 100644 --- a/riscv-rt/asm.S +++ b/riscv-rt/asm.S @@ -84,7 +84,18 @@ _abs_start: la sp, _stack_start lui t0, %hi(_hart_stack_size) add t0, t0, %lo(_hart_stack_size) +#ifdef __riscv_mul mul t0, a2, t0 +#else + beqz a2, 2f // Jump if single-hart + mv t1, a2 + mv t2, t0 +1: + add t0, t0, t2 + addi t1, t1, -1 + bnez t1, 1b +2: +#endif sub sp, sp, t0 // Set frame pointer From 88f0e911bced45de70bd4556d47381004fa3e366 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Wed, 26 Feb 2020 22:38:47 +0300 Subject: [PATCH 117/234] Remove asm.h --- riscv-rt/asm.S | 11 ++++++++++- riscv-rt/asm.h | 15 --------------- 2 files changed, 10 insertions(+), 16 deletions(-) delete mode 100644 riscv-rt/asm.h diff --git a/riscv-rt/asm.S b/riscv-rt/asm.S index 96fddd80..2580bd3a 100644 --- a/riscv-rt/asm.S +++ b/riscv-rt/asm.S @@ -1,4 +1,13 @@ -#include "asm.h" +#if __riscv_xlen == 64 +# define STORE sd +# define LOAD ld +# define LOG_REGBYTES 3 +#else +# define STORE sw +# define LOAD lw +# define LOG_REGBYTES 2 +#endif +#define REGBYTES (1 << LOG_REGBYTES) /* Entry point of all programs (_start). diff --git a/riscv-rt/asm.h b/riscv-rt/asm.h deleted file mode 100644 index 529b0da7..00000000 --- a/riscv-rt/asm.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef _RISCV_RT_ASM_H -#define _RISCV_RT_ASM_H - -#if __riscv_xlen == 64 -# define STORE sd -# define LOAD ld -# define LOG_REGBYTES 3 -#else -# define STORE sw -# define LOAD lw -# define LOG_REGBYTES 2 -#endif -#define REGBYTES (1 << LOG_REGBYTES) - -#endif From b729dbfb09e353174d270434c11625ba08d7009f Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Wed, 26 Feb 2020 22:40:53 +0300 Subject: [PATCH 118/234] Add support for riscv32i --- riscv-rt/assemble.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/riscv-rt/assemble.sh b/riscv-rt/assemble.sh index f3e9c1e2..a0db0ff6 100755 --- a/riscv-rt/assemble.sh +++ b/riscv-rt/assemble.sh @@ -11,6 +11,9 @@ riscv64-unknown-elf-gcc -c -mabi=ilp32 -march=rv32imac asm.S -o bin/$crate.o ar crs bin/riscv32imac-unknown-none-elf.a bin/$crate.o ar crs bin/riscv32imc-unknown-none-elf.a bin/$crate.o +riscv64-unknown-elf-gcc -c -mabi=ilp32 -march=rv32i asm.S -o bin/$crate.o +ar crs bin/riscv32i-unknown-none-elf.a bin/$crate.o + riscv64-unknown-elf-gcc -c -mabi=lp64 -march=rv64imac asm.S -o bin/$crate.o ar crs bin/riscv64imac-unknown-none-elf.a bin/$crate.o ar crs bin/riscv64gc-unknown-none-elf.a bin/$crate.o From abd84cc73fa93d5ddc52e04a9d51bb2eb0228708 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Wed, 26 Feb 2020 22:43:30 +0300 Subject: [PATCH 119/234] Generate debug info --- riscv-rt/assemble.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/riscv-rt/assemble.sh b/riscv-rt/assemble.sh index a0db0ff6..9a13a620 100755 --- a/riscv-rt/assemble.sh +++ b/riscv-rt/assemble.sh @@ -7,14 +7,14 @@ crate=riscv-rt # remove existing blobs because otherwise this will append object files to the old blobs rm -f bin/*.a -riscv64-unknown-elf-gcc -c -mabi=ilp32 -march=rv32imac asm.S -o bin/$crate.o +riscv64-unknown-elf-gcc -ggdb3 -c -mabi=ilp32 -march=rv32imac asm.S -o bin/$crate.o ar crs bin/riscv32imac-unknown-none-elf.a bin/$crate.o ar crs bin/riscv32imc-unknown-none-elf.a bin/$crate.o -riscv64-unknown-elf-gcc -c -mabi=ilp32 -march=rv32i asm.S -o bin/$crate.o +riscv64-unknown-elf-gcc -ggdb3 -c -mabi=ilp32 -march=rv32i asm.S -o bin/$crate.o ar crs bin/riscv32i-unknown-none-elf.a bin/$crate.o -riscv64-unknown-elf-gcc -c -mabi=lp64 -march=rv64imac asm.S -o bin/$crate.o +riscv64-unknown-elf-gcc -ggdb3 -c -mabi=lp64 -march=rv64imac asm.S -o bin/$crate.o ar crs bin/riscv64imac-unknown-none-elf.a bin/$crate.o ar crs bin/riscv64gc-unknown-none-elf.a bin/$crate.o From d771a9ebd9394cb909c9f430b2976897e73b6a8a Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Wed, 26 Feb 2020 22:43:49 +0300 Subject: [PATCH 120/234] Regenerate binaries --- riscv-rt/bin/riscv32i-unknown-none-elf.a | Bin 0 -> 7994 bytes riscv-rt/bin/riscv32imac-unknown-none-elf.a | Bin 2090 -> 7558 bytes riscv-rt/bin/riscv32imc-unknown-none-elf.a | Bin 2090 -> 7558 bytes riscv-rt/bin/riscv64gc-unknown-none-elf.a | Bin 3138 -> 12306 bytes riscv-rt/bin/riscv64imac-unknown-none-elf.a | Bin 3138 -> 12306 bytes 5 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 riscv-rt/bin/riscv32i-unknown-none-elf.a diff --git a/riscv-rt/bin/riscv32i-unknown-none-elf.a b/riscv-rt/bin/riscv32i-unknown-none-elf.a new file mode 100644 index 0000000000000000000000000000000000000000..2d44739deb305fe0002266d077eb683218076d2e GIT binary patch literal 7994 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 literal 0 HcmV?d00001 diff --git a/riscv-rt/bin/riscv32imac-unknown-none-elf.a b/riscv-rt/bin/riscv32imac-unknown-none-elf.a index 2c5d147910804884d2b82715b9d66b394454f3b2..c37cf08cc51706295436fa6cff584dfbc87119ae 100644 GIT binary patch literal 7558 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 cn(Ix+pLr4FZPBOoWjOf zSZHEvYhgv@SFp3u?_lDa-P<_H?EB4|+1+G!(0*};5B6$nZDsTr6{94PMMN7&qKFEV zAANrFkNw8uq|4*UIzKsEJak+u`|9ONmgRAjZ}$sop7tO?M)M&gbpLr>BOO62u`g`= zGq69chlGuP4i2WYFKqk^a9GrSUkcN>0$1XOu<-|Ae+COe*!VZ#AS*7Bu<=j8o+mER zEz+A+NKN6A<~pR6B41Svtn+DwB)pK~k6@p#%R4+SZ)T1sh#c4sr^CBU4^st&;dkaJSYB-m&{M-XMY*6@NesG?4%R diff --git a/riscv-rt/bin/riscv32imc-unknown-none-elf.a b/riscv-rt/bin/riscv32imc-unknown-none-elf.a index 2c5d147910804884d2b82715b9d66b394454f3b2..c37cf08cc51706295436fa6cff584dfbc87119ae 100644 GIT binary patch literal 7558 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 cn(Ix+pLr4FZPBOoWjOf zSZHEvYhgv@SFp3u?_lDa-P<_H?EB4|+1+G!(0*};5B6$nZDsTr6{94PMMN7&qKFEV zAANrFkNw8uq|4*UIzKsEJak+u`|9ONmgRAjZ}$sop7tO?M)M&gbpLr>BOO62u`g`= zGq69chlGuP4i2WYFKqk^a9GrSUkcN>0$1XOu<-|Ae+COe*!VZ#AS*7Bu<=j8o+mER zEz+A+NKN6A<~pR6B41Svtn+DwB)pK~k6@p#%R4+SZ)T1sh#c4sr^CBU4^st&;dkaJSYB-m&{M-XMY*6@NesG?4%R diff --git a/riscv-rt/bin/riscv64gc-unknown-none-elf.a b/riscv-rt/bin/riscv64gc-unknown-none-elf.a index 6d6cf156ea54b04573aab2e05e18733f5a84cb33..4939161ae844773118ea830cfffde53cfe0f9742 100644 GIT binary patch literal 12306 zcmd6tdu$v>9mi+yVqYGO>ol(>?&FfCZjvVFCvHmH^z1l}lQ{1t4NaT#oqdik@vC4IOG<%OLII=%@e(ppRQMxQ<*6c3s8B%&Bn1DIe;}$tRY4_O5g-z&%6xa{XMb;Q zM-?pyM!KEZ&wlnhvwOR<>yuYJn9lbNZk*c?FE5R>8nk&CkGD39&^uQt71f^+`J@WP zbiSz4nNhtAR#L@$dQ7Q&uFyBWK3`0X2K~8uX=`ou1{4;_PR=4-j>o9ue;RkZ7pr}ww1Pd+e_QMo>GsuqqM`@S=#CCD($+c zhxGZ9rwaAScfKFd?XwZpckNX*I`zu+rFz>!eFVb49XSwb@%AKJW_jwOaSP}7HjYlc z_cx`MJz0Ha$<^g=-SKvQYW&*C>!)sf^UCF`FTM4>w_l$6(Y05vzjmXg%2R)tdga}- zy_1=azBl?JrzTHzoPOhUb@o!WYv9d+>JyhvbWOZDF(+M6@y5fthp4(uAFJp6vu3_t z`X^J5$y4dVaAIF@F6L-0DA5&O)SII>o8??;N2txt|9^XyKk{H%IofE&aRo;@&*#Bb zcKoe+n?9S0&fGcAi~hGy5$AKe@}NFEq5R5&eaS-y`V8Emm%-IDJM6|(-WhL!s;%B% z9j&RWxw~dzRdAh|WzWpsW&DG#1lM%K;OKC+p+8s9s}23x@rL~ILa`w`oXPh0XZssY zjOLFO#?pP+2AP`FmYw_K?fc@*iI(QFuHQ4I41S1}MP^^`8kvATWhX)tT8o=MH-7fy|DKSTaSj$oR}Xlkyn z7cM#FSMN-It0Sk)!8bVgM;-h@2jA%6NeAz6@J)_8h_-7paa}IvN z!N2O@lMa5#;#iHUSOpEvgPTXJJ;V>6Cu6GG;oI}4~{eoVRg4fiX@123xP+4}T6Y;X8qjWg)io=xO_taZ$9 zwH4QMaJ=*F!}8ao3V)GQmZ(}#0RvK{>=7;XP4|1O>v`&W-r3I`#7C7q+XlmnR*XhC z|6&m^ETd}i%!+B@{;3UlKfm4Q6}oD0aLfy}<|^X7aG%@f4BK}(c(2bZpMygVf5O34 zqNg#gQt3>={LYl-QS5+SKx$MD#kp6Ug<7@sx~n(Y`r`@(Hs?q`f&97G7W{V!spE*SsE z{Z_CLZu{fL!TiM6)g;-4bE#^?XSO|yDIY*2GU+!@r;qWHPA?oj=g3?Ef1&x!r^ny&x`{< zZrZ4X!{?k|83+Cf(?%s6ejLD*-smN`&iR9Jz*dNGjC|qnIj5fd$H*5BpL5oc ze~5hH@HwZM{Kv@`4xe*2kpBev!r^nyM)D7nFC0GSbdsMUUpRcu=_WrzzHs=Q^91>Q zULelnIZ9mm#o-+zF8O$89}3}k z7iK?h9OMj}HY#~%M$SkG$9DD`jf0#~@;8_^a>hb9a@gnN>L*{03;9{%anlALATHwv zKSG?xIY?Z_2|q_XZrbdRd}Z(a-DvPyZHDZ+O&jsXC-#)#fobP1orbGC%14ZF=9Z z-ykKgnWc;#@zmdX@|3!2BW9Ee6_^b3s_LuY0u31?BQ<|gf4yx&;ef)Um59>d^ zIM_w{LH{xRvHQn6lbwk@lLlt2FWh$Vjv3bf2Gjq~%|wF!aUa_K;~8XUYNRI37rGKF zRBZR4-WJxs{Frgx?2G>A>5tt%<`_E@yZqGjZ@xw#zu4~6n%WHF6|=wn{h8C@XJK(d zf5OIp9yf+AQ$gkbHd&+F_V}OI4E;A6PpU?Q>e3lh(@Pnv)L+tDq&+R^#u>B!`;GsC zcEiSh1{1F?=Yz^0{{r2%$A4Kf^lx2e>er@!`?zF(6YKx}8PcHqWBEJ8H`Xl?x zeena$^j9@zw3!Mwt1fGTYIsX3A`H;eC1r U`7OJDoYS!V51Qlu#ry34FCAtglmGw# delta 607 zcmbP~a7bdpJXRx1GYf@@i}l5Curq)GBan0evm6-s8TdB7WMrIN#rk0KE;a#09&VH5_bVigCP!3kDhB`m|pHF>(QJ0t7l`@-Uqf=H$(LD?X8 zb5G_M5oZ*dtS+JtB*THE$mDh)$uoI7kQAN#988Lf>NAQ>b_bHYlgmZ*C54epTLfi; zY!IKkUsRk?V)A+oaY;5LH7ZcHGLUAUd|yMHk!|vKjflw`HKQjBX+;Qjus{^RLXu~4 zwbpyV1yIofCWtIhR6Ac#02(t0wZFCHCx__^FgY+zUZbZrIY>vsNdv0L18OlSkU4>v z1ImYK4g>O;85jzn!f>j9ak7rSo#+Bk^aDWz)CIgiw!q|ieQl;6%#+vX+i4U)?a2Tu KLl97XZ~*{U0aMrj diff --git a/riscv-rt/bin/riscv64imac-unknown-none-elf.a b/riscv-rt/bin/riscv64imac-unknown-none-elf.a index 6d6cf156ea54b04573aab2e05e18733f5a84cb33..4939161ae844773118ea830cfffde53cfe0f9742 100644 GIT binary patch literal 12306 zcmd6tdu$v>9mi+yVqYGO>ol(>?&FfCZjvVFCvHmH^z1l}lQ{1t4NaT#oqdik@vC4IOG<%OLII=%@e(ppRQMxQ<*6c3s8B%&Bn1DIe;}$tRY4_O5g-z&%6xa{XMb;Q zM-?pyM!KEZ&wlnhvwOR<>yuYJn9lbNZk*c?FE5R>8nk&CkGD39&^uQt71f^+`J@WP zbiSz4nNhtAR#L@$dQ7Q&uFyBWK3`0X2K~8uX=`ou1{4;_PR=4-j>o9ue;RkZ7pr}ww1Pd+e_QMo>GsuqqM`@S=#CCD($+c zhxGZ9rwaAScfKFd?XwZpckNX*I`zu+rFz>!eFVb49XSwb@%AKJW_jwOaSP}7HjYlc z_cx`MJz0Ha$<^g=-SKvQYW&*C>!)sf^UCF`FTM4>w_l$6(Y05vzjmXg%2R)tdga}- zy_1=azBl?JrzTHzoPOhUb@o!WYv9d+>JyhvbWOZDF(+M6@y5fthp4(uAFJp6vu3_t z`X^J5$y4dVaAIF@F6L-0DA5&O)SII>o8??;N2txt|9^XyKk{H%IofE&aRo;@&*#Bb zcKoe+n?9S0&fGcAi~hGy5$AKe@}NFEq5R5&eaS-y`V8Emm%-IDJM6|(-WhL!s;%B% z9j&RWxw~dzRdAh|WzWpsW&DG#1lM%K;OKC+p+8s9s}23x@rL~ILa`w`oXPh0XZssY zjOLFO#?pP+2AP`FmYw_K?fc@*iI(QFuHQ4I41S1}MP^^`8kvATWhX)tT8o=MH-7fy|DKSTaSj$oR}Xlkyn z7cM#FSMN-It0Sk)!8bVgM;-h@2jA%6NeAz6@J)_8h_-7paa}IvN z!N2O@lMa5#;#iHUSOpEvgPTXJJ;V>6Cu6GG;oI}4~{eoVRg4fiX@123xP+4}T6Y;X8qjWg)io=xO_taZ$9 zwH4QMaJ=*F!}8ao3V)GQmZ(}#0RvK{>=7;XP4|1O>v`&W-r3I`#7C7q+XlmnR*XhC z|6&m^ETd}i%!+B@{;3UlKfm4Q6}oD0aLfy}<|^X7aG%@f4BK}(c(2bZpMygVf5O34 zqNg#gQt3>={LYl-QS5+SKx$MD#kp6Ug<7@sx~n(Y`r`@(Hs?q`f&97G7W{V!spE*SsE z{Z_CLZu{fL!TiM6)g;-4bE#^?XSO|yDIY*2GU+!@r;qWHPA?oj=g3?Ef1&x!r^ny&x`{< zZrZ4X!{?k|83+Cf(?%s6ejLD*-smN`&iR9Jz*dNGjC|qnIj5fd$H*5BpL5oc ze~5hH@HwZM{Kv@`4xe*2kpBev!r^nyM)D7nFC0GSbdsMUUpRcu=_WrzzHs=Q^91>Q zULelnIZ9mm#o-+zF8O$89}3}k z7iK?h9OMj}HY#~%M$SkG$9DD`jf0#~@;8_^a>hb9a@gnN>L*{03;9{%anlALATHwv zKSG?xIY?Z_2|q_XZrbdRd}Z(a-DvPyZHDZ+O&jsXC-#)#fobP1orbGC%14ZF=9Z z-ykKgnWc;#@zmdX@|3!2BW9Ee6_^b3s_LuY0u31?BQ<|gf4yx&;ef)Um59>d^ zIM_w{LH{xRvHQn6lbwk@lLlt2FWh$Vjv3bf2Gjq~%|wF!aUa_K;~8XUYNRI37rGKF zRBZR4-WJxs{Frgx?2G>A>5tt%<`_E@yZqGjZ@xw#zu4~6n%WHF6|=wn{h8C@XJK(d zf5OIp9yf+AQ$gkbHd&+F_V}OI4E;A6PpU?Q>e3lh(@Pnv)L+tDq&+R^#u>B!`;GsC zcEiSh1{1F?=Yz^0{{r2%$A4Kf^lx2e>er@!`?zF(6YKx}8PcHqWBEJ8H`Xl?x zeena$^j9@zw3!Mwt1fGTYIsX3A`H;eC1r U`7OJDoYS!V51Qlu#ry34FCAtglmGw# delta 607 zcmbP~a7bdpJXRx1GYf@@i}l5Curq)GBan0evm6-s8TdB7WMrIN#rk0KE;a#09&VH5_bVigCP!3kDhB`m|pHF>(QJ0t7l`@-Uqf=H$(LD?X8 zb5G_M5oZ*dtS+JtB*THE$mDh)$uoI7kQAN#988Lf>NAQ>b_bHYlgmZ*C54epTLfi; zY!IKkUsRk?V)A+oaY;5LH7ZcHGLUAUd|yMHk!|vKjflw`HKQjBX+;Qjus{^RLXu~4 zwbpyV1yIofCWtIhR6Ac#02(t0wZFCHCx__^FgY+zUZbZrIY>vsNdv0L18OlSkU4>v z1ImYK4g>O;85jzn!f>j9ak7rSo#+Bk^aDWz)CIgiw!q|ieQl;6%#+vX+i4U)?a2Tu KLl97XZ~*{U0aMrj From ef6d9e709ade17ad02773b45b73eba50e4adb37e Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Sat, 7 Mar 2020 08:22:29 +0300 Subject: [PATCH 121/234] Add assemble.ps1 --- riscv-rt/assemble.ps1 | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 riscv-rt/assemble.ps1 diff --git a/riscv-rt/assemble.ps1 b/riscv-rt/assemble.ps1 new file mode 100644 index 00000000..942a1f03 --- /dev/null +++ b/riscv-rt/assemble.ps1 @@ -0,0 +1,17 @@ +# remove existing blobs because otherwise this will append object files to the old blobs +Remove-Item -Force bin/*.a + +$crate = "riscv-rt" + +riscv64-unknown-elf-gcc -ggdb3 -c -mabi=ilp32 -march=rv32imac asm.S -o bin/$crate.o +riscv64-unknown-elf-ar crs bin/riscv32imac-unknown-none-elf.a bin/$crate.o +riscv64-unknown-elf-ar crs bin/riscv32imc-unknown-none-elf.a bin/$crate.o + +riscv64-unknown-elf-gcc -ggdb3 -c -mabi=ilp32 -march=rv32i asm.S -o bin/$crate.o +riscv64-unknown-elf-ar crs bin/riscv32i-unknown-none-elf.a bin/$crate.o + +riscv64-unknown-elf-gcc -ggdb3 -c -mabi=lp64 -march=rv64imac asm.S -o bin/$crate.o +riscv64-unknown-elf-ar crs bin/riscv64imac-unknown-none-elf.a bin/$crate.o +riscv64-unknown-elf-ar crs bin/riscv64gc-unknown-none-elf.a bin/$crate.o + +Remove-Item bin/$crate.o From bdaeb8e04a9ffc80d4e20589873c58e49efd9dd3 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Sat, 7 Mar 2020 08:23:23 +0300 Subject: [PATCH 122/234] Use riscv64-unknown-elf-ar in assemble.sh --- riscv-rt/assemble.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/riscv-rt/assemble.sh b/riscv-rt/assemble.sh index 9a13a620..a4827638 100755 --- a/riscv-rt/assemble.sh +++ b/riscv-rt/assemble.sh @@ -8,14 +8,14 @@ crate=riscv-rt rm -f bin/*.a riscv64-unknown-elf-gcc -ggdb3 -c -mabi=ilp32 -march=rv32imac asm.S -o bin/$crate.o -ar crs bin/riscv32imac-unknown-none-elf.a bin/$crate.o -ar crs bin/riscv32imc-unknown-none-elf.a bin/$crate.o +riscv64-unknown-elf-ar crs bin/riscv32imac-unknown-none-elf.a bin/$crate.o +riscv64-unknown-elf-ar crs bin/riscv32imc-unknown-none-elf.a bin/$crate.o riscv64-unknown-elf-gcc -ggdb3 -c -mabi=ilp32 -march=rv32i asm.S -o bin/$crate.o -ar crs bin/riscv32i-unknown-none-elf.a bin/$crate.o +riscv64-unknown-elf-ar crs bin/riscv32i-unknown-none-elf.a bin/$crate.o riscv64-unknown-elf-gcc -ggdb3 -c -mabi=lp64 -march=rv64imac asm.S -o bin/$crate.o -ar crs bin/riscv64imac-unknown-none-elf.a bin/$crate.o -ar crs bin/riscv64gc-unknown-none-elf.a bin/$crate.o +riscv64-unknown-elf-ar crs bin/riscv64imac-unknown-none-elf.a bin/$crate.o +riscv64-unknown-elf-ar crs bin/riscv64gc-unknown-none-elf.a bin/$crate.o rm bin/$crate.o From 9c172dac76c011d4e4bfe11b108af3041d4e02ac Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Sat, 7 Mar 2020 20:38:47 +0200 Subject: [PATCH 123/234] Update dependencies --- riscv-rt/Cargo.toml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index 6067e000..5eab902c 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -9,13 +9,12 @@ keywords = ["riscv", "runtime", "startup"] license = "ISC" [dependencies] -r0 = "0.2.2" -riscv = "0.5.3" +r0 = "1.0.0" +riscv = "0.5.5" riscv-rt-macros = { path = "macros", version = "0.1.6" } [features] inline-asm = ["riscv/inline-asm"] [dev-dependencies] -riscv = "0.5.3" panic-halt = "0.2.0" From d748c84982b3a39e585884dc6cb67c41aac5c6ed Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Sat, 7 Mar 2020 20:41:13 +0200 Subject: [PATCH 124/234] [CI] allow 64-bit targets on stable --- riscv-rt/.travis.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/riscv-rt/.travis.yml b/riscv-rt/.travis.yml index 52f2755e..eb3551a0 100644 --- a/riscv-rt/.travis.yml +++ b/riscv-rt/.travis.yml @@ -14,8 +14,6 @@ if: (branch = staging OR branch = trying OR branch = master) OR (type = pull_req matrix: exclude: - - rust: stable - env: TARGET=riscv64imac-unknown-none-elf - rust: 1.31.0 # MSRV env: TARGET=riscv64imac-unknown-none-elf From c00efce87e4d08719e8e7ad78d82a7b5c03b3b3b Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Sat, 7 Mar 2020 20:41:33 +0200 Subject: [PATCH 125/234] [CI] Remove obsolete hack --- riscv-rt/.travis.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/riscv-rt/.travis.yml b/riscv-rt/.travis.yml index eb3551a0..4e77ce8a 100644 --- a/riscv-rt/.travis.yml +++ b/riscv-rt/.travis.yml @@ -30,9 +30,6 @@ script: after_script: set +e cache: cargo -before_cache: - # Travis can't cache files that are not readable by "others" - - chmod -R a+r $HOME/.cargo branches: only: From 05073ff37a57141786cd0ccdd8e17ea23e2ba2db Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Sat, 7 Mar 2020 20:46:37 +0200 Subject: [PATCH 126/234] [CI] Check riscv32i-unknown-none-elf target --- riscv-rt/.travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/riscv-rt/.travis.yml b/riscv-rt/.travis.yml index 4e77ce8a..0bd3108a 100644 --- a/riscv-rt/.travis.yml +++ b/riscv-rt/.travis.yml @@ -7,6 +7,7 @@ rust: env: - TARGET=x86_64-unknown-linux-gnu +- TARGET=riscv32i-unknown-none-elf - TARGET=riscv32imac-unknown-none-elf - TARGET=riscv64imac-unknown-none-elf From ab9cccc169ad29836e4b777c33fb24a5f4f32430 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Sat, 7 Mar 2020 22:23:19 +0200 Subject: [PATCH 127/234] Set MSRV to 1.38 --- riscv-rt/.travis.yml | 8 +------- riscv-rt/src/lib.rs | 4 +--- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/riscv-rt/.travis.yml b/riscv-rt/.travis.yml index 0bd3108a..c911f7d8 100644 --- a/riscv-rt/.travis.yml +++ b/riscv-rt/.travis.yml @@ -3,7 +3,7 @@ language: rust rust: - nightly - stable -- 1.31.0 # MSRV +- 1.38.0 # MSRV env: - TARGET=x86_64-unknown-linux-gnu @@ -13,12 +13,6 @@ env: if: (branch = staging OR branch = trying OR branch = master) OR (type = pull_request AND branch = master) -matrix: - exclude: - - rust: 1.31.0 # MSRV - env: TARGET=riscv64imac-unknown-none-elf - - before_install: set -e install: diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index cda81947..7985c957 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -2,10 +2,8 @@ //! //! # Minimum Supported Rust Version (MSRV) //! -//! This crate is guaranteed to compile on stable Rust 1.31 and up. It *might* +//! This crate is guaranteed to compile on stable Rust 1.38 and up. It *might* //! compile with older versions but that may change in any new patch release. -//! Note that `riscv64imac-unknown-none-elf` and `riscv64gc-unknown-none-elf` targets -//! are not supported on stable yet. //! //! # Features //! From 5343baf47e65f2587c3684c983e4ee36d8c1ee0c Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Tue, 10 Mar 2020 15:55:43 +0300 Subject: [PATCH 128/234] Add CHANGELOG.md --- riscv-rt/CHANGELOG.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 riscv-rt/CHANGELOG.md diff --git a/riscv-rt/CHANGELOG.md b/riscv-rt/CHANGELOG.md new file mode 100644 index 00000000..387dcf5e --- /dev/null +++ b/riscv-rt/CHANGELOG.md @@ -0,0 +1,28 @@ +# Change Log + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](http://keepachangelog.com/) +and this project adheres to [Semantic Versioning](http://semver.org/). + +## [Unreleased] + +### Added + +- Assure address of PC at startup +- Implement interrupt and exception handling +- Add support for the `riscv32i-unknown-none-elf` target +- Added Changelog + +### Fixed + +- Fix linker script compatibility with GNU linker + +### Changed + +- Move `abort` out of the `.init` section +- Update `r0` to v1.0.0 +- Set MSRV to 1.38 + + +[Unreleased]: https://github.com/rust-embedded/riscv-rt/compare/v0.6.1...HEAD From 4fc49a48ae3022b5faf7aa2b63182f76c9335119 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Tue, 10 Mar 2020 16:00:10 +0300 Subject: [PATCH 129/234] Release v0.7.0 --- riscv-rt/CHANGELOG.md | 5 ++++- riscv-rt/Cargo.toml | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/riscv-rt/CHANGELOG.md b/riscv-rt/CHANGELOG.md index 387dcf5e..517c5092 100644 --- a/riscv-rt/CHANGELOG.md +++ b/riscv-rt/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] +## [v0.7.0] - 2020-03-10 + ### Added - Assure address of PC at startup @@ -25,4 +27,5 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Set MSRV to 1.38 -[Unreleased]: https://github.com/rust-embedded/riscv-rt/compare/v0.6.1...HEAD +[Unreleased]: https://github.com/rust-embedded/riscv-rt/compare/v0.7.0...HEAD +[v0.7.0]: https://github.com/rust-embedded/riscv/compare/v0.6.1...v0.7.0 diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index 5eab902c..62ff8bce 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "riscv-rt" -version = "0.6.1" +version = "0.7.0" repository = "https://github.com/rust-embedded/riscv-rt" authors = ["The RISC-V Team "] categories = ["embedded", "no-std"] From 9cfcd277e2f9796c0c013bb70c29c0333a661554 Mon Sep 17 00:00:00 2001 From: Diego Barrios Romero Date: Tue, 21 Apr 2020 22:37:14 +0200 Subject: [PATCH 130/234] Document MSRV on README --- riscv-rt/README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/riscv-rt/README.md b/riscv-rt/README.md index 9d4e4715..af56b274 100644 --- a/riscv-rt/README.md +++ b/riscv-rt/README.md @@ -10,6 +10,11 @@ This project is developed and maintained by the [RISC-V team][team]. ## [Documentation](https://docs.rs/crate/riscv-rt) +## Minimum Supported Rust Version (MSRV) + +This crate is guaranteed to compile on stable Rust 1.38.0 and up. It *might* +compile with older versions but that may change in any new patch release. + ## License Copyright 2018 [RISC-V team][team] From 642ef2944e431e2a40b14fdcf1de8d19f29c15a6 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Wed, 22 Apr 2020 00:05:17 +0300 Subject: [PATCH 131/234] Update CI scripts --- riscv-rt/.travis.yml | 9 ++------- riscv-rt/ci/install.sh | 16 +++++++--------- riscv-rt/ci/script.sh | 27 +++++++++++++-------------- 3 files changed, 22 insertions(+), 30 deletions(-) mode change 100644 => 100755 riscv-rt/ci/install.sh mode change 100644 => 100755 riscv-rt/ci/script.sh diff --git a/riscv-rt/.travis.yml b/riscv-rt/.travis.yml index c911f7d8..fac3944e 100644 --- a/riscv-rt/.travis.yml +++ b/riscv-rt/.travis.yml @@ -13,16 +13,11 @@ env: if: (branch = staging OR branch = trying OR branch = master) OR (type = pull_request AND branch = master) -before_install: set -e - install: - - bash ci/install.sh - - export PATH="$PATH:$PWD/gcc/bin" + - ci/install.sh script: - - bash ci/script.sh - -after_script: set +e + - ci/script.sh cache: cargo diff --git a/riscv-rt/ci/install.sh b/riscv-rt/ci/install.sh old mode 100644 new mode 100755 index fa989702..b8beed22 --- a/riscv-rt/ci/install.sh +++ b/riscv-rt/ci/install.sh @@ -1,12 +1,10 @@ -set -euxo pipefail +#!/usr/bin/env bash -main() { - if [ $TARGET != x86_64-unknown-linux-gnu ]; then - rustup target add $TARGET - fi +set -euxo pipefail - mkdir gcc - curl -L https://static.dev.sifive.com/dev-tools/riscv64-unknown-elf-gcc-8.1.0-2018.12.0-x86_64-linux-ubuntu14.tar.gz | tar --strip-components=1 -C gcc -xz -} +if [ $TARGET != x86_64-unknown-linux-gnu ]; then + rustup target add $TARGET +fi -main +mkdir gcc +curl -L https://static.dev.sifive.com/dev-tools/riscv64-unknown-elf-gcc-8.1.0-2018.12.0-x86_64-linux-ubuntu14.tar.gz | tar --strip-components=1 -C gcc -xz diff --git a/riscv-rt/ci/script.sh b/riscv-rt/ci/script.sh old mode 100644 new mode 100755 index fea3bb89..561440e8 --- a/riscv-rt/ci/script.sh +++ b/riscv-rt/ci/script.sh @@ -1,18 +1,17 @@ -set -euxo pipefail +#!/usr/bin/env bash -main() { - cargo check --target $TARGET - if [[ $TARGET == riscv* ]]; then - cargo check --target $TARGET --examples - fi +set -euxo pipefail - if [ $TRAVIS_RUST_VERSION = nightly ]; then - cargo check --target $TARGET --features 'inline-asm' - fi +cargo check --target $TARGET +if [[ $TARGET == riscv* ]]; then + cargo check --target $TARGET --examples +fi - if [ $TARGET = x86_64-unknown-linux-gnu ]; then - ./check-blobs.sh - fi -} +if [ $TRAVIS_RUST_VERSION = nightly ]; then + cargo check --target $TARGET --features 'inline-asm' +fi -main +if [ $TARGET = x86_64-unknown-linux-gnu ]; then + PATH="$PATH:$PWD/gcc/bin" + ./check-blobs.sh +fi From 9c492da0ecba934eb310e5b6546eb7faabfe1f3d Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Wed, 22 Apr 2020 00:06:15 +0300 Subject: [PATCH 132/234] Allow nightly build to fail --- riscv-rt/.travis.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/riscv-rt/.travis.yml b/riscv-rt/.travis.yml index fac3944e..9c9cb8a6 100644 --- a/riscv-rt/.travis.yml +++ b/riscv-rt/.travis.yml @@ -13,6 +13,10 @@ env: if: (branch = staging OR branch = trying OR branch = master) OR (type = pull_request AND branch = master) +matrix: + allow_failures: + - rust: nightly + install: - ci/install.sh From 4ea6ec401931b99fd7e1bddd5e4453b1151596e3 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Wed, 22 Apr 2020 00:11:52 +0300 Subject: [PATCH 133/234] Check blobs in a separate target --- riscv-rt/.travis.yml | 6 ++++++ riscv-rt/ci/install.sh | 10 +++++++--- riscv-rt/ci/script.sh | 17 ++++++++++------- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/riscv-rt/.travis.yml b/riscv-rt/.travis.yml index 9c9cb8a6..4a9348ed 100644 --- a/riscv-rt/.travis.yml +++ b/riscv-rt/.travis.yml @@ -16,6 +16,12 @@ if: (branch = staging OR branch = trying OR branch = master) OR (type = pull_req matrix: allow_failures: - rust: nightly + include: + - env: CHECK_BLOBS=1 + rust: + language: bash + if: (branch = staging OR branch = trying OR branch = master) OR (type = pull_request AND branch = master) + install: - ci/install.sh diff --git a/riscv-rt/ci/install.sh b/riscv-rt/ci/install.sh index b8beed22..2a475e2c 100755 --- a/riscv-rt/ci/install.sh +++ b/riscv-rt/ci/install.sh @@ -2,9 +2,13 @@ set -euxo pipefail -if [ $TARGET != x86_64-unknown-linux-gnu ]; then +if [ -n "${TARGET:-}" ]; then rustup target add $TARGET fi -mkdir gcc -curl -L https://static.dev.sifive.com/dev-tools/riscv64-unknown-elf-gcc-8.1.0-2018.12.0-x86_64-linux-ubuntu14.tar.gz | tar --strip-components=1 -C gcc -xz +if [ -n "${CHECK_BLOBS:-}" ]; then + if [ ! -d gcc/bin ]; then + mkdir gcc + curl -L https://static.dev.sifive.com/dev-tools/riscv64-unknown-elf-gcc-8.1.0-2018.12.0-x86_64-linux-ubuntu14.tar.gz | tar --strip-components=1 -C gcc -xz + fi +fi diff --git a/riscv-rt/ci/script.sh b/riscv-rt/ci/script.sh index 561440e8..590797d8 100755 --- a/riscv-rt/ci/script.sh +++ b/riscv-rt/ci/script.sh @@ -2,16 +2,19 @@ set -euxo pipefail -cargo check --target $TARGET -if [[ $TARGET == riscv* ]]; then - cargo check --target $TARGET --examples -fi +if [ -n "${TARGET:-}" ]; then + cargo check --target $TARGET + + if [[ $TARGET == riscv* ]]; then + cargo check --target $TARGET --examples + fi -if [ $TRAVIS_RUST_VERSION = nightly ]; then - cargo check --target $TARGET --features 'inline-asm' + if [ $TRAVIS_RUST_VERSION = nightly ]; then + cargo check --target $TARGET --features inline-asm + fi fi -if [ $TARGET = x86_64-unknown-linux-gnu ]; then +if [ -n "${CHECK_BLOBS:-}" ]; then PATH="$PATH:$PWD/gcc/bin" ./check-blobs.sh fi From e8918a76444ba0ab91fb4dba07b22d44ceb43f71 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Wed, 22 Apr 2020 00:13:31 +0300 Subject: [PATCH 134/234] Enable gcc caching --- riscv-rt/.travis.yml | 5 ++++- riscv-rt/ci/install.sh | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/riscv-rt/.travis.yml b/riscv-rt/.travis.yml index 4a9348ed..cb0673df 100644 --- a/riscv-rt/.travis.yml +++ b/riscv-rt/.travis.yml @@ -29,7 +29,10 @@ install: script: - ci/script.sh -cache: cargo +cache: + cargo: true + directories: + - gcc branches: only: diff --git a/riscv-rt/ci/install.sh b/riscv-rt/ci/install.sh index 2a475e2c..0130ccd8 100755 --- a/riscv-rt/ci/install.sh +++ b/riscv-rt/ci/install.sh @@ -8,7 +8,7 @@ fi if [ -n "${CHECK_BLOBS:-}" ]; then if [ ! -d gcc/bin ]; then - mkdir gcc + mkdir -p gcc curl -L https://static.dev.sifive.com/dev-tools/riscv64-unknown-elf-gcc-8.1.0-2018.12.0-x86_64-linux-ubuntu14.tar.gz | tar --strip-components=1 -C gcc -xz fi fi From b67cb52045e994fb845221a5e72830dd334e32b0 Mon Sep 17 00:00:00 2001 From: Ilya Epifanov Date: Fri, 15 May 2020 22:51:38 +0200 Subject: [PATCH 135/234] Only checking for necessary extensions when linking, made debug information location-independent --- riscv-rt/Cargo.toml | 3 +++ riscv-rt/assemble.ps1 | 16 +++++++--------- riscv-rt/assemble.sh | 16 +++++++--------- riscv-rt/bin/riscv32i-unknown-none-elf.a | Bin 7994 -> 7954 bytes riscv-rt/bin/riscv32ic-unknown-none-elf.a | Bin 0 -> 7814 bytes riscv-rt/bin/riscv32im-unknown-none-elf.a | Bin 0 -> 7642 bytes riscv-rt/bin/riscv32imac-unknown-none-elf.a | Bin 7558 -> 0 bytes riscv-rt/bin/riscv32imc-unknown-none-elf.a | Bin 7558 -> 7510 bytes riscv-rt/bin/riscv64i-unknown-none-elf.a | Bin 0 -> 12882 bytes riscv-rt/bin/riscv64ic-unknown-none-elf.a | Bin 0 -> 12738 bytes riscv-rt/bin/riscv64im-unknown-none-elf.a | Bin 0 -> 12370 bytes riscv-rt/bin/riscv64imac-unknown-none-elf.a | Bin 12306 -> 0 bytes ...ne-elf.a => riscv64imc-unknown-none-elf.a} | Bin 12306 -> 12250 bytes riscv-rt/build.rs | 8 ++++++++ 14 files changed, 25 insertions(+), 18 deletions(-) create mode 100644 riscv-rt/bin/riscv32ic-unknown-none-elf.a create mode 100644 riscv-rt/bin/riscv32im-unknown-none-elf.a delete mode 100644 riscv-rt/bin/riscv32imac-unknown-none-elf.a create mode 100644 riscv-rt/bin/riscv64i-unknown-none-elf.a create mode 100644 riscv-rt/bin/riscv64ic-unknown-none-elf.a create mode 100644 riscv-rt/bin/riscv64im-unknown-none-elf.a delete mode 100644 riscv-rt/bin/riscv64imac-unknown-none-elf.a rename riscv-rt/bin/{riscv64gc-unknown-none-elf.a => riscv64imc-unknown-none-elf.a} (75%) diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index 62ff8bce..1daf8799 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -18,3 +18,6 @@ inline-asm = ["riscv/inline-asm"] [dev-dependencies] panic-halt = "0.2.0" + +[build-dependencies] +riscv-target = "0.1.2" diff --git a/riscv-rt/assemble.ps1 b/riscv-rt/assemble.ps1 index 942a1f03..9e615050 100644 --- a/riscv-rt/assemble.ps1 +++ b/riscv-rt/assemble.ps1 @@ -2,16 +2,14 @@ Remove-Item -Force bin/*.a $crate = "riscv-rt" +$extension_sets = @("i", "im", "ic", "imc") -riscv64-unknown-elf-gcc -ggdb3 -c -mabi=ilp32 -march=rv32imac asm.S -o bin/$crate.o -riscv64-unknown-elf-ar crs bin/riscv32imac-unknown-none-elf.a bin/$crate.o -riscv64-unknown-elf-ar crs bin/riscv32imc-unknown-none-elf.a bin/$crate.o +foreach ($ext in $extension_sets) { + riscv64-unknown-elf-gcc -ggdb3 -c -mabi=ilp32 -march=rv32$ext asm.S -o bin/$crate.o + riscv64-unknown-elf-ar crs bin/riscv32$ext-unknown-none-elf.a bin/$crate.o -riscv64-unknown-elf-gcc -ggdb3 -c -mabi=ilp32 -march=rv32i asm.S -o bin/$crate.o -riscv64-unknown-elf-ar crs bin/riscv32i-unknown-none-elf.a bin/$crate.o - -riscv64-unknown-elf-gcc -ggdb3 -c -mabi=lp64 -march=rv64imac asm.S -o bin/$crate.o -riscv64-unknown-elf-ar crs bin/riscv64imac-unknown-none-elf.a bin/$crate.o -riscv64-unknown-elf-ar crs bin/riscv64gc-unknown-none-elf.a bin/$crate.o + riscv64-unknown-elf-gcc -ggdb3 -c -mabi=lp64 -march=rv64$ext asm.S -o bin/$crate.o + riscv64-unknown-elf-ar crs bin/riscv64$ext-unknown-none-elf.a bin/$crate.o +} Remove-Item bin/$crate.o diff --git a/riscv-rt/assemble.sh b/riscv-rt/assemble.sh index a4827638..997d9ae8 100755 --- a/riscv-rt/assemble.sh +++ b/riscv-rt/assemble.sh @@ -7,15 +7,13 @@ crate=riscv-rt # remove existing blobs because otherwise this will append object files to the old blobs rm -f bin/*.a -riscv64-unknown-elf-gcc -ggdb3 -c -mabi=ilp32 -march=rv32imac asm.S -o bin/$crate.o -riscv64-unknown-elf-ar crs bin/riscv32imac-unknown-none-elf.a bin/$crate.o -riscv64-unknown-elf-ar crs bin/riscv32imc-unknown-none-elf.a bin/$crate.o +for ext in i ic im imc +do + riscv64-unknown-elf-gcc -ggdb3 -fdebug-prefix-map=$(pwd)=/riscv-rt -c -mabi=ilp32 -march=rv32${ext} asm.S -o bin/$crate.o + riscv64-unknown-elf-ar crs bin/riscv32${ext}-unknown-none-elf.a bin/$crate.o -riscv64-unknown-elf-gcc -ggdb3 -c -mabi=ilp32 -march=rv32i asm.S -o bin/$crate.o -riscv64-unknown-elf-ar crs bin/riscv32i-unknown-none-elf.a bin/$crate.o - -riscv64-unknown-elf-gcc -ggdb3 -c -mabi=lp64 -march=rv64imac asm.S -o bin/$crate.o -riscv64-unknown-elf-ar crs bin/riscv64imac-unknown-none-elf.a bin/$crate.o -riscv64-unknown-elf-ar crs bin/riscv64gc-unknown-none-elf.a bin/$crate.o + riscv64-unknown-elf-gcc -ggdb3 -fdebug-prefix-map=$(pwd)=/riscv-rt -c -mabi=lp64 -march=rv64${ext} asm.S -o bin/$crate.o + riscv64-unknown-elf-ar crs bin/riscv64${ext}-unknown-none-elf.a bin/$crate.o +done rm bin/$crate.o diff --git a/riscv-rt/bin/riscv32i-unknown-none-elf.a b/riscv-rt/bin/riscv32i-unknown-none-elf.a index 2d44739deb305fe0002266d077eb683218076d2e..861d6413f927de661fd5853a048f784591adfdfd 100644 GIT binary patch delta 170 zcmdmGH_2|od?s^?i3>Fu8#bQKW0{=DD$HfV00RGkU~-_e3a1E|%fP_Ac{S^1c1D5C z@w~x&j3tvdOV4L)m>ewQ&$wgqVjy{B@@F8~G1*zRobkfs-Ll$@GLxUnDl@K_%q^$R z=rP$CNM4v64J0Q_ZkAJL`ol7Ljhq^z#N^9B&I{hjf8^98wn#ECoPyd1q8OoU00Idx Ag#Z8m delta 208 zcmbPax65wAd?pK{i3>FuS8P0;$6}L_pPQFYK#l<4N6lbt#{oi#ZNR*Y%_BULCLLysfdONanZY5H z5C+mVX-I?!O8SUeep;z&RjGWGe6&rKq9{dGi%^TIHmcP2qxoq|6I3;QrF-4I&z$RH zqEI($U@?rN7^T~)xnz5nxLoD z6Ra(*4c3*`1?x-egAJt(!N$_YptsZ;Y$|OE`bvF4f2sc!p75noU<%av=SvlgPgR(K zn{Swr8?V1#&wX{gKC91ov-R}Lr@wsesk-0IO8l!W*wWcHAuzA#sKVK;Eh9J5e_8f; z)eok>(Rg{*oB6j!uN?dFiJvUIn!48dvySV_f3fnH-Ea5&x~(!Wf4cGdKTma@>ke04 zT-DuotuNdEZhyu0bKAom7k6~;ytXsD>)l4N28rNy?n+FHTEP`DEXw~&J0V)RwBy&D7lX* zhV9ur9R!K-3C1tvqbTwGar{woe%RPp{;>yoF~AT$@>$$Qcaq^-`xX(L3~EhH)%L1H zbyM}d)peEZX?A07F=D(VckN>P=rC*hwkNx`C0kQ%Qt2OXj2|^#xl^UYv8^UJ9t2HO zD<)#mHN2r-;?aczi)J(d##QD=+gfw2hg;GE+{B&ZabnC<3Dt;)ql<)@;0U9HsfKc@ZjZ0_c#p@| zd3=M%dp+Lg@f{w2#N(gzc-G?wJf8RXsK<|a{J6(Yc>JWtPkH7;jTV~yZRLF z>QlI@PvM>3@pOCK)u;GfeF}H=Dcseka95wg%jx;)k86LSEXea`bD4|Z-EZPAckA=Y zAMg5Qyr0kYOTKu1*N6LmvUmT>`u>;mxqBZo*F^KV`VsE#e}~{sn5o#6BVq8{#6`l? zM)~~bq5nKPTOLx$BaDeZU+S5kjP;ixgM@LF3Oy11qHvCcsdFUizstCL1xH(H?v6Qd zbc;Ri?p^o;f*X!!c&m9jg637;)jltnfX@hCz`LMI@DunBd{FRiF8E-NV9XOvbePn?47!#R zFsTPA!b#!>CiSd=K3Q~NQqM-{TI9f_o-NR|e1S6^V z8Usw~`8MNFA3ngOo=ebYal-*j>iHhy@E)kf0F!!t$T&=L!vRd{`4QuAHdJGPDG6lE zPk9T&2u7IH^KUj~mzLbGUJ?EjX5O^U{cTbp>Gf!nACF_ z`bN=#Nj+Df_lgco>bVMiljy*tp6k&2Lblkfk{18(07OqOzN2eeW&Qaq@HQecZm*6 z>S=)fu;{>~o>|Zz5gnM+GZ*?NLf?V@CvI?3}|6&r?0h^SJ29GbiuxJk^sd z1qIRP@@`Ji;d!dx2G4%cqxI(mM{77BI9mTf!O^@!f}`~x5}f4SG9=@O=K8q9^Hevf z!jp%JnJn*%dD-u`C_gxqNfif=7ENkTrkF9QY@uLMk(wLMu_^}quSVdW!R(QJ>7m^4 z;20q{ymy3CM4g#zHa|EzraP0*4DTD{%;MnL$8_7?XtKfm>Am^PA>_wDhfjS^Qn+=<92@CP{-Q@KxeYa~L^5O9k&v%|rP{^7M+qa8_c)ows zo9NpZ`6g>0@}XSp7>4FMoNpR{hV47f++uXS#l9BxU}sANkAwKUtGVEgvW9u9wGZ1)&nahV`iu>mC`mWr<_iw0T67c{4 literal 0 HcmV?d00001 diff --git a/riscv-rt/bin/riscv32im-unknown-none-elf.a b/riscv-rt/bin/riscv32im-unknown-none-elf.a new file mode 100644 index 0000000000000000000000000000000000000000..845b829a75356dc562bc88d2a05db5aa7efce949 GIT binary patch literal 7642 zcmdU!U2Ggz9mVhL*h!i=shv%0H%^=FjC1V-cWq)fN!!rcZPEnd7U!#VA!WV(NbJ^M z-QA?77#hbxM53TdiD-aI4HBRtD%6%r$pat^d4MVssT2?rNGQC(10RV}B%ny;ocaI9 zJ9`5K33%X2ckVgAd*Iy*`s~eJo`L-~NG_yz;9*)pI>KzLA2+uhYs<(U^WTYP>``{b3i*O2>Ln5i>i zu-k-9c@x^FOxQB-g&W@T!q&@Pn7!(SnXjb6;I&lPG@lCXTdA<+aw^<#H5ImceweNE zJE}eN$15+rGnetqT+nU&aMsL)^TyA5-dwiZ^V?>>66;D0hbA0%gi*N7%OBCN!M|nug~FP}E?a`l)HzeUrr-|F}-$8U4| zPRI8+zSr^l9N*{o1CH-^{E*{E96#pxDaV%_KkfJ##~*e4amSx<{Bw>!<@nQ%f6?)0 z9RIT8Uv>N&jz8!4?>PSZjz91C3y#0&_)7`DAR&CS*tvhiS1p9ZFL8X0<7*wi%JB`3 zU*q_U!Sm@mn0f)$v`9-{$z8j_+}NujBVQzR&Ro9N+KwA;*t6e$4Sx zjxRZW+VL}vKkE47jz8h}=N$jM;}M404l$JeY4E@{LA|OoAdGb%cVA&4?n}Th_8)p^bNaUaDU>5ccS=)zbDGYH+9i? zjl z2OPhz!Y?-c72cRJ$D3S!ps25D*`D@{$>k1>O%CM8a#NF|6Q$uolgW+er*k8CkIRh? zC0^wQpVZx?4{v%Tqt6Uiyy)pmU*T}E;sr1l0bNVo(ek2J$3NbHIu!Hs*QlI2=Dcq8 zpOO&op@t)(Por7=Y+1+o7l9g;Q^%awyM9*k)G>bry5VWz)G>b*di62k)G>bpx=}fG z%=!7LpTh=)I_5uuZqSDdbZq{dKN&G4fT+(c>&wbjgLpo5!9jiI)h`5bgmPihRc)yzrgpn(+c_o!AgUxW_y zZxqy4GcS>^#s-DjYUXRuK_jU#)K)X!gbvn_8bfV0^BQz;E2%NmRx@Xz1HNydP+QG> z7dlu=Y7Dj2%nzZ13^pj#Rx>|_4sItkhT3MRjQI&_5JWQ4Rx>{(4~0`(&HRGANjSCD z%w_U*!l|uhenW1BQ(Mjap1fH&wbjfu@)qILRx^JgUoV{6YUW+?4Z^9dX7J|`6TDA2 zwbjfr@>b#0Rx@?vcL=Apn&IDdf~;_AtC?HL+k{hF&4lFb!l|uh)|0^UoZ4z;iu?n@sjX&?kl!nu+G=Ko{668-Rx`)QyM$9)&72_b7EWz7^Lg_7 zg;QJ2oFacfIJMQxm&msXr?#3oL%v-&wbjhm$sZI>Z8h@>`3~XKRx_`Y^Gg7Q+G^$; z`3HqlTg`lr{6oU2t!B=X?-EXJHS;EUk8owTk_q)sjX)IK)y#fwbjhqovTh08He4lV?s~P?gDA+HY+G=JI`6I%q zt!8S-9~Dk*HM5euPdK&JOau92!l|uhZX^GQaB8cWCi0I8r?#5eKz=|twbe{J`QyT= zt!6fne@r;F)y&=GdEwMnGrPzKgj3s`=tXF}qUajxlIU9M!=hJFPl@K&mG_kBHPi*s z(Kw@`qkW$c&3(fs%eq;4G|rfCjuVcTb+hsekT)TmUjyM}SvMviVY}FgkF!gx&xBl0g)=li~Gc=|ruHlx$+%sJu)2 zE-W|E`_;|x+@CpKAFJL+%c7@Q47SX&w4(B~|EnCoZj$Tcc$ZM)5|78PL$0AqJARJ! zWzfm>Rino1>xNE_R|9iO_hG|6maVAC@&3G`e7uXbkH_1C8t(&X&cO8I{)Z<+RSJl?YLK9FW5c3MfH zCGMMnk2SkmkZacroA?%a8ag@eY0Ntf#(8myqCU?1SyYY}kI{#nct6I4eXL*BHs;gF zwZsN(Jnt8vlk?U#l#jPg`#A5nP&saV3C>`rR`|GZ43=-8Cdcc;cuinDj-aMdX?pNEWq(}a@pw$h+zi(D KW*kBr=l%}pvIFq| literal 0 HcmV?d00001 diff --git a/riscv-rt/bin/riscv32imac-unknown-none-elf.a b/riscv-rt/bin/riscv32imac-unknown-none-elf.a deleted file mode 100644 index c37cf08cc51706295436fa6cff584dfbc87119ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7558 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 diff --git a/riscv-rt/bin/riscv64i-unknown-none-elf.a b/riscv-rt/bin/riscv64i-unknown-none-elf.a new file mode 100644 index 0000000000000000000000000000000000000000..f72359535d7c0a5694aeb6a77af134409dd87a00 GIT binary patch literal 12882 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 M|10W?X0rdk0lrBw0RR91 literal 0 HcmV?d00001 diff --git a/riscv-rt/bin/riscv64ic-unknown-none-elf.a b/riscv-rt/bin/riscv64ic-unknown-none-elf.a new file mode 100644 index 0000000000000000000000000000000000000000..b7566b631ffca718d32d385d43ce4e3c28c179c3 GIT binary patch literal 12738 zcmd6tYitzP8HUezu@@6?Ow1)fLY7Mi5LkQ*AvdxZFb0e<5C~03mR++36R@4##Q{Qq zg*Lq;P2IGGN=++7t0<`=ilSbkRBC8`(5hGNq=en^kbe@YA|Gd0wd##{*SoP`E5~rt0;pxs(c4lvV^S zrIui2X=Sjgv?^F#S{<~OT7xyEH9=dcEm&Jx8>}m>3)Yv`2koWyU_)s`&{66LHkLM? z)>HaYDNu!ZsgHh8q3aVBs_V+zs&DA6t5fy1I(-Dfr(JA3dFtdhUVNtRcQa#uZwfZ0 zn#Kg`wB4&PxVgS>DE;SYPgY%;a(VjuGe67^4O}^V_2{*4UpjaB_4mL3;hRH0y7Knb zi`SYe1NFzDw?00x^K7=I>)o!3qi2t{9DDazRqo|nYxjHIRZqSARO`X_4pwIhDp7w# z=f~77`j~^@Z#5J2GCZkzZh^`a_9wTPb5gA}(_*uNSWvAu+vPZ_E2w7Y|Gyp+&fF}^ zXB#U!u5z>d*v($NG|8c<6ZN@PbY4#eL99Had@|QVIG^k5$@J|@`Q-=udVt;Z8JMY; z=Cd_6>he{=@nE8=t=d`@tC>-Adre)X`4p=5k^L;WzRrBsm&h$it?AgBSg|G1m~3he zga2XM^^G#J_as}!4sTY$ksz2cp(2hG0FJBCZ7Xo1!r7?+PGx>zX>(6we|@@3FI;={ zdMxtJi0d9V>hcy-W6Gf>F(qezWV3nG{M=0vf9yy^SXG6~N_}S@-NgTQxqA*JCowwS zo|#HD+r#I2_&g7v@8R|_G`v;jvuK!@LU_`{-M3o&Mvreky(1gNUpj)qO87Dlzt_X> z_weN&p7QV(4`1cstsdUy;p;pc_YrP#9y%E6T6m|2Z}#wqJbasnZ};#=JbZ_TKknh( z9=_MZ@imT{oQFI^T?;?#;U_%&Sr7l5hd=M(FL?N%hrj6IU-s~?diYBoe#XOJ@$lC? z{Jg`l8dLEyYRBuA-k8aTWc%h^v%mo-H08{k({)R*xV3yojrH9=|=3n|GNv8B(d->sLMx zoh<9x@W6f-9@!{4Bg9m~efiOTT=~Y0_RHr3FQ#sA_2K)!yWxK|Pcv?YO))WkAqNM%|6)X?;QfA&4ceb3o5&d9ggeE0b^$MQkP$7)Qu zcV{ET%4RQ|e>pJ>%b1!xvSKTIAF7S`J7Ph|%XD?0hvT}fweKeH)#33U_3(WmFMn3fu7c zJA%S#P0qS}Pr&o@8QLb?_2v7(oz|7_6LNjw`v`xRkk2{h^BKy|+8W~?CBE0zcy50- zg1htSwayI37w-CUePKS&QND23m$_k{$H*7%`X{V|`9Dv-aMyp&Tf6?ZEXVwh+Zvs4*B`JB?rZ$Hl6sNmCF`J*@6~w!rb_^>hy;qW(@Z#g&cXc>4Sr2n znT2rpoRhH*{2OhJPB?td*=-&8a!&vf4xe-OW20{H@tKe&96sk1tN@??b`TDqa}JST zXKQrA;d72$H2C~f6b_$r z^F8u!wKY27@Hyv))|E44y zKIa@D{{hMu4xe)lk>5?eaQK`vNd5})g~Lw~KSh2^1c%Q#FOk2JeBtmp=PdcF$QKTu zb6z2THTlBfbIv*PTgev=pL4!T{u=Uy!{?kg$!{ZHIDF2zK>k|tg~R8Zi{!5(UpRcu z`8oOP$rlcvbACyFJNd%lbIv>DZy;Yde9rj|`5oj7htD~e$=^u6aQK|_0r{Qe3y04+ zL*#EFUpRcu`3w1*$rlcvbFPuUg?!=gIj5q+NV9eK5c$I4bIw@uw~{X$KIhbszm0t1 z@HuA^`45vX96skvCx1Kn!r^mHg8WaAFC0GS%p?C1@`c0aoJHh6O1^OToYP4D4)TS= z=bUBaKSsWA_?)wx{Kv@`4xe*Yk)I}CIDF1oNB&Oog~R8ZPVzJ43x~gx_%`yh5gb0} z>>$63eBtmpCrkb=@`c0aoNn@WlP?@T=R8gR9`c35&k?V(H7?^r#K#jqOuUx()5Iqc zA0U1+@u!I2Li`|co=+cf85f7wPh9fnYW8FV$9I4B6V^da-qz^gp&_RbR%Rg_J^S_6 zK~B-u=$6?UIR|WwPB?Pd=i}-jUycj;dxMo`)f}zUbi+&c`0+PL)cBVsn_Xlaj33u8cYJ(DbThGM zn}x@nH{5mcojPj#t9JZ1CL+!JmWb=n9UsqJHxvF(?Hf89E7V+fyWSQx{&`&Zx(%8x z{4MhaUAyDs-sWavmk;dtH(`aE>mJeDTo&q>ly2_(S8MR_63?Ef`KRU^WyqR%|7!Hh zo&R&1Vf=di;?`-$m*<&mletR&HN8PQ!Atjeo(8-)2ReKU|Wszg!n@Xr|xleya_4Lw5YzhKVWMa}_mr zn60lo(+ Aq5uE@ literal 0 HcmV?d00001 diff --git a/riscv-rt/bin/riscv64im-unknown-none-elf.a b/riscv-rt/bin/riscv64im-unknown-none-elf.a new file mode 100644 index 0000000000000000000000000000000000000000..5fa5574397f1ada301c441a2d54a62c8ff798ae3 GIT binary patch literal 12370 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 literal 0 HcmV?d00001 diff --git a/riscv-rt/bin/riscv64imac-unknown-none-elf.a b/riscv-rt/bin/riscv64imac-unknown-none-elf.a deleted file mode 100644 index 4939161ae844773118ea830cfffde53cfe0f9742..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12306 zcmd6tdu$v>9mi+yVqYGO>ol(>?&FfCZjvVFCvHmH^z1l}lQ{1t4NaT#oqdik@vC4IOG<%OLII=%@e(ppRQMxQ<*6c3s8B%&Bn1DIe;}$tRY4_O5g-z&%6xa{XMb;Q zM-?pyM!KEZ&wlnhvwOR<>yuYJn9lbNZk*c?FE5R>8nk&CkGD39&^uQt71f^+`J@WP zbiSz4nNhtAR#L@$dQ7Q&uFyBWK3`0X2K~8uX=`ou1{4;_PR=4-j>o9ue;RkZ7pr}ww1Pd+e_QMo>GsuqqM`@S=#CCD($+c zhxGZ9rwaAScfKFd?XwZpckNX*I`zu+rFz>!eFVb49XSwb@%AKJW_jwOaSP}7HjYlc z_cx`MJz0Ha$<^g=-SKvQYW&*C>!)sf^UCF`FTM4>w_l$6(Y05vzjmXg%2R)tdga}- zy_1=azBl?JrzTHzoPOhUb@o!WYv9d+>JyhvbWOZDF(+M6@y5fthp4(uAFJp6vu3_t z`X^J5$y4dVaAIF@F6L-0DA5&O)SII>o8??;N2txt|9^XyKk{H%IofE&aRo;@&*#Bb zcKoe+n?9S0&fGcAi~hGy5$AKe@}NFEq5R5&eaS-y`V8Emm%-IDJM6|(-WhL!s;%B% z9j&RWxw~dzRdAh|WzWpsW&DG#1lM%K;OKC+p+8s9s}23x@rL~ILa`w`oXPh0XZssY zjOLFO#?pP+2AP`FmYw_K?fc@*iI(QFuHQ4I41S1}MP^^`8kvATWhX)tT8o=MH-7fy|DKSTaSj$oR}Xlkyn z7cM#FSMN-It0Sk)!8bVgM;-h@2jA%6NeAz6@J)_8h_-7paa}IvN z!N2O@lMa5#;#iHUSOpEvgPTXJJ;V>6Cu6GG;oI}4~{eoVRg4fiX@123xP+4}T6Y;X8qjWg)io=xO_taZ$9 zwH4QMaJ=*F!}8ao3V)GQmZ(}#0RvK{>=7;XP4|1O>v`&W-r3I`#7C7q+XlmnR*XhC z|6&m^ETd}i%!+B@{;3UlKfm4Q6}oD0aLfy}<|^X7aG%@f4BK}(c(2bZpMygVf5O34 zqNg#gQt3>={LYl-QS5+SKx$MD#kp6Ug<7@sx~n(Y`r`@(Hs?q`f&97G7W{V!spE*SsE z{Z_CLZu{fL!TiM6)g;-4bE#^?XSO|yDIY*2GU+!@r;qWHPA?oj=g3?Ef1&x!r^ny&x`{< zZrZ4X!{?k|83+Cf(?%s6ejLD*-smN`&iR9Jz*dNGjC|qnIj5fd$H*5BpL5oc ze~5hH@HwZM{Kv@`4xe*2kpBev!r^nyM)D7nFC0GSbdsMUUpRcu=_WrzzHs=Q^91>Q zULelnIZ9mm#o-+zF8O$89}3}k z7iK?h9OMj}HY#~%M$SkG$9DD`jf0#~@;8_^a>hb9a@gnN>L*{03;9{%anlALATHwv zKSG?xIY?Z_2|q_XZrbdRd}Z(a-DvPyZHDZ+O&jsXC-#)#fobP1orbGC%14ZF=9Z z-ykKgnWc;#@zmdX@|3!2BW9Ee6_^b3s_LuY0u31?BQ<|gf4yx&;ef)Um59>d^ zIM_w{LH{xRvHQn6lbwk@lLlt2FWh$Vjv3bf2Gjq~%|wF!aUa_K;~8XUYNRI37rGKF zRBZR4-WJxs{Frgx?2G>A>5tt%<`_E@yZqGjZ@xw#zu4~6n%WHF6|=wn{h8C@XJK(d zf5OIp9yf+AQ$gkbHd&+F_V}OI4E;A6PpU?Q>e3lh(@Pnv)L+tDq&+R^#u>B!`;GsC zcEiSh1{1F?=Yz^0{{r2%$A4Kf^lx2e>er@!`?zF(6YKx}8PcHqWBEJ8H`Xl?x zeena$^j9@zw3!Mwt1fGTYIsX3A`H;eC1r U`7OJDoYS!V51Qlu#ry34FCAtglmGw# diff --git a/riscv-rt/bin/riscv64gc-unknown-none-elf.a b/riscv-rt/bin/riscv64imc-unknown-none-elf.a similarity index 75% rename from riscv-rt/bin/riscv64gc-unknown-none-elf.a rename to riscv-rt/bin/riscv64imc-unknown-none-elf.a index 4939161ae844773118ea830cfffde53cfe0f9742..87327eb93a9032b466f09fd7ee9376fc215fffb1 100644 GIT binary patch delta 203 zcmbP~a4UYo0%ijXgNcjvnLcQ2yu!;OQj}SoT&7!8!r<-~s^A!`V5DbkGFg>1mXUdK zGpmM_G6MqxSP288B#_BkRAy$9X;fekpF8;!tLEl!tXsGk1tu?K5#GE{V2vbW!sKkN z|BMxrv$gA)UWiP7qg}_yFgaVNp6P_@XYB-*|A?>0ougCFxik@e6okW64MWs$vOIVOcw+vuhF+-RG9o)UmXC; CHbB(? delta 257 zcmcZ=KPh3t0%k*Fvx$rKnKU#vUg2d?&&bbB)lbPRPAtyVPf0D)FDflA(NE1yN=->g zP0=sUFUl@1NK8(h{D4J-(})2ICVyp#Wn`Qj%&MWT0Te3AEKV+CV3Y$gS&PcdOfroM z4B~S^L?Vbt1`?AOvZ!p{$GU}!(E`X6-rOdzMv`&HWMi%Wj2k8!Yu7U=h)&+3T?dpk z)~RP=P@B9(XCLE)$;G Date: Fri, 15 May 2020 23:14:15 +0200 Subject: [PATCH 136/234] =?UTF-8?q?fixed=20the=20assemble.ps1=20PowerShell?= =?UTF-8?q?=E2=84=A2=20script?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- riscv-rt/assemble.ps1 | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/riscv-rt/assemble.ps1 b/riscv-rt/assemble.ps1 index 9e615050..389014a7 100644 --- a/riscv-rt/assemble.ps1 +++ b/riscv-rt/assemble.ps1 @@ -3,12 +3,13 @@ Remove-Item -Force bin/*.a $crate = "riscv-rt" $extension_sets = @("i", "im", "ic", "imc") +$pwd = Get-Location foreach ($ext in $extension_sets) { - riscv64-unknown-elf-gcc -ggdb3 -c -mabi=ilp32 -march=rv32$ext asm.S -o bin/$crate.o + riscv64-unknown-elf-gcc -ggdb3 -fdebug-prefix-map=$pwd=/riscv-rt -c -mabi=ilp32 -march=rv32$ext asm.S -o bin/$crate.o riscv64-unknown-elf-ar crs bin/riscv32$ext-unknown-none-elf.a bin/$crate.o - riscv64-unknown-elf-gcc -ggdb3 -c -mabi=lp64 -march=rv64$ext asm.S -o bin/$crate.o + riscv64-unknown-elf-gcc -ggdb3 -fdebug-prefix-map=$pwd=/riscv-rt -c -mabi=lp64 -march=rv64$ext asm.S -o bin/$crate.o riscv64-unknown-elf-ar crs bin/riscv64$ext-unknown-none-elf.a bin/$crate.o } From c255c0c67e334f416083d8b5842965c0d03932f7 Mon Sep 17 00:00:00 2001 From: Ales Katona Date: Sat, 16 May 2020 11:12:42 -0600 Subject: [PATCH 137/234] fix rust fmt to not mangle externs --- riscv-rt/build.rs | 5 +++-- riscv-rt/examples/empty.rs | 2 +- riscv-rt/examples/multi_core.rs | 5 +++-- riscv-rt/src/lib.rs | 35 +++++++++++++++++++++++---------- 4 files changed, 32 insertions(+), 15 deletions(-) diff --git a/riscv-rt/build.rs b/riscv-rt/build.rs index 59356346..dff0f3e3 100644 --- a/riscv-rt/build.rs +++ b/riscv-rt/build.rs @@ -16,12 +16,13 @@ fn main() { let mut target = Target::from_target_str(&target); target.retain_extensions("imc"); - let target = target.to_string(); + let target = target.to_string(); fs::copy( format!("bin/{}.a", target), out_dir.join(format!("lib{}.a", name)), - ).unwrap(); + ) + .unwrap(); println!("cargo:rustc-link-lib=static={}", name); println!("cargo:rustc-link-search={}", out_dir.display()); diff --git a/riscv-rt/examples/empty.rs b/riscv-rt/examples/empty.rs index 5699d6f4..5e4d2384 100644 --- a/riscv-rt/examples/empty.rs +++ b/riscv-rt/examples/empty.rs @@ -9,5 +9,5 @@ use riscv_rt::entry; #[entry] fn main() -> ! { // do something here - loop { } + loop {} } diff --git a/riscv-rt/examples/multi_core.rs b/riscv-rt/examples/multi_core.rs index de34e8ec..efff6b04 100644 --- a/riscv-rt/examples/multi_core.rs +++ b/riscv-rt/examples/multi_core.rs @@ -5,11 +5,12 @@ extern crate panic_halt; extern crate riscv; extern crate riscv_rt; -use riscv::register::{mie, mip, mhartid}; use riscv::asm::wfi; +use riscv::register::{mhartid, mie, mip}; use riscv_rt::entry; #[export_name = "_mp_hook"] +#[rustfmt::skip] pub extern "Rust" fn user_mp_hook() -> bool { let hartid = mhartid::read(); if hartid == 0 { @@ -52,5 +53,5 @@ fn main() -> ! { } } - loop { } + loop {} } diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index 7985c957..850b5832 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -330,9 +330,9 @@ #![no_std] #![deny(missing_docs)] +extern crate r0; extern crate riscv; extern crate riscv_rt_macros as macros; -extern crate r0; pub use macros::{entry, pre_init}; @@ -355,7 +355,6 @@ extern "C" { static _sidata: u32; } - /// Rust entry point (_start_rust) /// /// Zeros bss section, initializes data section and calls main. This function @@ -363,6 +362,7 @@ extern "C" { #[link_section = ".init.rust"] #[export_name = "_start_rust"] pub unsafe extern "C" fn start_rust() -> ! { + #[rustfmt::skip] extern "Rust" { // This symbol will be provided by the user via `#[entry]` fn main() -> !; @@ -407,7 +407,6 @@ pub struct TrapFrame { pub a7: usize, } - /// Trap entry point rust (_start_trap_rust) /// /// `mcause` is read to determine the cause of the trap. XLEN-1 bit indicates @@ -501,25 +500,41 @@ pub union Vector { #[no_mangle] pub static __INTERRUPTS: [Vector; 12] = [ Vector { handler: UserSoft }, - Vector { handler: SupervisorSoft }, + Vector { + handler: SupervisorSoft, + }, Vector { reserved: 0 }, - Vector { handler: MachineSoft }, + Vector { + handler: MachineSoft, + }, Vector { handler: UserTimer }, - Vector { handler: SupervisorTimer }, + Vector { + handler: SupervisorTimer, + }, Vector { reserved: 0 }, - Vector { handler: MachineTimer }, - Vector { handler: UserExternal }, - Vector { handler: SupervisorExternal }, + Vector { + handler: MachineTimer, + }, + Vector { + handler: UserExternal, + }, + Vector { + handler: SupervisorExternal, + }, Vector { reserved: 0 }, - Vector { handler: MachineExternal }, + Vector { + handler: MachineExternal, + }, ]; #[doc(hidden)] #[no_mangle] +#[rustfmt::skip] pub unsafe extern "Rust" fn default_pre_init() {} #[doc(hidden)] #[no_mangle] +#[rustfmt::skip] pub extern "Rust" fn default_mp_hook() -> bool { use riscv::register::mhartid; match mhartid::read() { From ef768fbd97968c1ac49aa9fc487734cb18c12673 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Sun, 17 May 2020 08:26:27 +0300 Subject: [PATCH 138/234] Check code style on CI --- riscv-rt/.travis.yml | 3 +++ riscv-rt/ci/install.sh | 4 ++++ riscv-rt/ci/script.sh | 4 ++++ 3 files changed, 11 insertions(+) diff --git a/riscv-rt/.travis.yml b/riscv-rt/.travis.yml index cb0673df..0cd5a417 100644 --- a/riscv-rt/.travis.yml +++ b/riscv-rt/.travis.yml @@ -21,6 +21,9 @@ matrix: rust: language: bash if: (branch = staging OR branch = trying OR branch = master) OR (type = pull_request AND branch = master) + - env: RUSTFMT=1 + rust: stable + if: (branch = staging OR branch = trying OR branch = master) OR (type = pull_request AND branch = master) install: diff --git a/riscv-rt/ci/install.sh b/riscv-rt/ci/install.sh index 0130ccd8..2378704d 100755 --- a/riscv-rt/ci/install.sh +++ b/riscv-rt/ci/install.sh @@ -12,3 +12,7 @@ if [ -n "${CHECK_BLOBS:-}" ]; then curl -L https://static.dev.sifive.com/dev-tools/riscv64-unknown-elf-gcc-8.1.0-2018.12.0-x86_64-linux-ubuntu14.tar.gz | tar --strip-components=1 -C gcc -xz fi fi + +if [ -n "${RUSTFMT:-}" ]; then + rustup component add rustfmt +fi diff --git a/riscv-rt/ci/script.sh b/riscv-rt/ci/script.sh index 590797d8..e35612e4 100755 --- a/riscv-rt/ci/script.sh +++ b/riscv-rt/ci/script.sh @@ -18,3 +18,7 @@ if [ -n "${CHECK_BLOBS:-}" ]; then PATH="$PATH:$PWD/gcc/bin" ./check-blobs.sh fi + +if [ -n "${RUSTFMT:-}" ]; then + cargo fmt -- --check +fi From 48cc1ec1fe9596b852efb839a9811aea25493458 Mon Sep 17 00:00:00 2001 From: "Wladimir J. van der Laan" Date: Mon, 1 Jun 2020 10:13:51 +0000 Subject: [PATCH 139/234] Exception handler may return --- riscv-rt/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index 850b5832..90eb68dc 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -416,7 +416,7 @@ pub struct TrapFrame { #[export_name = "_start_trap_rust"] pub extern "C" fn start_trap_rust(trap_frame: *const TrapFrame) { extern "C" { - fn ExceptionHandler(trap_frame: &TrapFrame) -> !; + fn ExceptionHandler(trap_frame: &TrapFrame); fn DefaultHandler(); } From 763876165563bd12fc5eab2dc0b144c6de2696ca Mon Sep 17 00:00:00 2001 From: "Wladimir J. van der Laan" Date: Mon, 1 Jun 2020 20:51:23 +0000 Subject: [PATCH 140/234] Surround use of absolute offset with "norelax" This prevents an unsupported `R_RISCV_ALIGN` relocation from being generated by disabling link-time relaxing for the appropriate part. Fixes #55. --- riscv-rt/asm.S | 3 +++ 1 file changed, 3 insertions(+) diff --git a/riscv-rt/asm.S b/riscv-rt/asm.S index 2580bd3a..6bf78b10 100644 --- a/riscv-rt/asm.S +++ b/riscv-rt/asm.S @@ -30,6 +30,8 @@ _start: // for 64bit .if __riscv_xlen == 64 +.option push +.option norelax // to prevent an unsupported R_RISCV_ALIGN relocation from being generated 1: auipc ra, %pcrel_hi(1f) ld ra, %pcrel_lo(1b)(ra) @@ -37,6 +39,7 @@ _start: .align 3 1: .dword _abs_start +.option pop .endif _abs_start: From ced1ad478279b8830beb77eff4c88c22655879a9 Mon Sep 17 00:00:00 2001 From: "Wladimir J. van der Laan" Date: Mon, 1 Jun 2020 20:58:22 +0000 Subject: [PATCH 141/234] Regenerate binaries --- riscv-rt/bin/riscv32i-unknown-none-elf.a | Bin 7954 -> 7954 bytes riscv-rt/bin/riscv32ic-unknown-none-elf.a | Bin 7814 -> 7814 bytes riscv-rt/bin/riscv32im-unknown-none-elf.a | Bin 7642 -> 7642 bytes riscv-rt/bin/riscv32imc-unknown-none-elf.a | Bin 7510 -> 7510 bytes riscv-rt/bin/riscv64i-unknown-none-elf.a | Bin 12882 -> 12810 bytes riscv-rt/bin/riscv64ic-unknown-none-elf.a | Bin 12738 -> 12666 bytes riscv-rt/bin/riscv64im-unknown-none-elf.a | Bin 12370 -> 12298 bytes riscv-rt/bin/riscv64imc-unknown-none-elf.a | Bin 12250 -> 12178 bytes 8 files changed, 0 insertions(+), 0 deletions(-) diff --git a/riscv-rt/bin/riscv32i-unknown-none-elf.a b/riscv-rt/bin/riscv32i-unknown-none-elf.a index 861d6413f927de661fd5853a048f784591adfdfd..5898b7db0bb47474d0c3b3a9d6c301e794ec4f28 100644 GIT binary patch delta 103 zcmbPaH_2{-1ec+yrJ;d|sj;!iM5P!x1W!T1(7?a|i8M1a**NDXBcteKdzS3UADI1s pm}hb{b3IcVPew+e$@VPSlRq%~0Wr_yXy$sR iX2!|$nUW^kv9vO7ntX(%gVAKNFRLjd^X6vOen|k=lp3)B diff --git a/riscv-rt/bin/riscv32ic-unknown-none-elf.a b/riscv-rt/bin/riscv32ic-unknown-none-elf.a index 77d72b1b1af2454811f95c33e41d15cee94fca86..ee7f532ee015f0bb3df82216acb39f2ae15dd274 100644 GIT binary patch delta 103 zcmZp(ZL^&q!DVP_X=q?#YHVyWQ7J|a!BbE$G%zqgBF)T9HqOarWE7pekvV(v17@4a r4a{WJ;R6fw`4&>tr*QHb$e#ds$2w88?4snJftaQ*<1l delta 103 zcmZp(ZL^&q!DXNT0~3{E{AR diff --git a/riscv-rt/bin/riscv32im-unknown-none-elf.a b/riscv-rt/bin/riscv32im-unknown-none-elf.a index 845b829a75356dc562bc88d2a05db5aa7efce949..466d6d4237c13d5f42c7e3a5a00f5a8446b8c32b 100644 GIT binary patch delta 122 zcmca*eam`+1ec+yrJ;d|sj;!iM5P!x1W!T1(7?a|i8M1a**NDZBcteKMi%kOHY_%i z4Ol!TUtrdn?9QCX+Q!Jp%rx1M#eH%Di}GY{7GAK51QtWat&=CQbTJxDmSr_%WZWFg H+AaYANDCf1 delta 122 zcmca*eam`+1ebvV3`|stkwfql6d-H}X=Y*qRJL)>Q$|Li$&4)GlWkaRCL6GLOuoRZ zHQAjxk+qqTk(p_-A&dLu1QzAV+$_9c6$vbcjGHD;V(DTunJmj{%E-Jqn6+I30Egim AIsgCw diff --git a/riscv-rt/bin/riscv32imc-unknown-none-elf.a b/riscv-rt/bin/riscv32imc-unknown-none-elf.a index 7942db62a09e9a12b7756c8aaeeca1ec94ebb36e..0d7b051285c7a79f9deecb58ca59e839042a0b7d 100644 GIT binary patch delta 128 zcmca+bKSni1);2~) zW~RvtnS&=gF!N02WCGy?Am*O@pP7$w>tsHbHZCIu5cm%SlM5wPI7Pr*1_s8>r&+os E0PPGPrT_o{ delta 128 zcmca+bF=6{T8jI7O!jLb}v7cvJ= yc3|e2%*h182|&y}`9Cusnng3Hj<($K)f)Y#Z$qEd`1f~TNhXkcJ~M4FkI0C`4cCI%B1>oY1$ysXX0 zu<`#!Mge6;W=2j11{ldbIgv$t@*EbM$rD&SCL6G5O>SjwW^H3+WM-N?k;Q%T0T$)S z*(|(Z6$e;M8MjXU#13XZoQ&Sx0{#W5?vz`uiCxCa*TAXXKcyZTO!tV6wK6Isi(sJ!Sv^ delta 272 zcmeB5xs)F1QH#C~KSf4Rt;$>|{;f?<{G72a% zGBa{AFu+Kz$%!oDljpG5OrF5vG1-7cYjP`dGix&=BQw+Fi7f7u53ndt&Sv2St2n@7 z%D8FrHn;gT+!D`F^1e4oElr>pEEFb`jK$u{X2g=rl(kz=7 ziyW6=TrfFXx16zH@?+h4#*WF!di6{W8k3*s?PI(!d9nU}#sia+4eA*KCO;M1& delta 251 zcmeyBbSQa(1ebvV3`|stQAO|+6d-H}X=Y*qR%U2qYGyHUu|DICiI+8*85x8({#Rub zP-J9gGG|W~V6mCJfmv?yPo`$Z=E=3pZx}aC&SF``Xfj!pHI|Wib1`c_ z-{dna9IVC+Krs2cu(Bo#hy?^-5eO4ZazWYJP?~MCu*h)<#s!ma>y$G-m>jHI&-i2V rWgxj>aoY1$ysXX0 zu<`#wMge6;W=2j11{le`c>|LcBWoKYBQw+FK$ghKADG!D+p%;qZk>FBWeuaz)fe Y_cK;ZUaeQp$T3-4|372EWNia=01?796951J delta 249 zcmeB5xRfwKg3CYw1|}-Ss3Ld@3J^AgG&3;)D>F1QGBB99Sf4Rt;$>|{;f?j(okG1O=D<&uF r)H6A#O@5-YkMY9f#k%_$4@^$ht7iD&LYsmuuB=I;T diff --git a/riscv-rt/bin/riscv64imc-unknown-none-elf.a b/riscv-rt/bin/riscv64imc-unknown-none-elf.a index 87327eb93a9032b466f09fd7ee9376fc215fffb1..71c9bafd97adfdabff2ed85d0d12016877fc55fc 100644 GIT binary patch delta 226 zcmcZ=KPi5K1ec+yrJ;d|sj;!iM5P#21W!T1(7?a|i8M1a0rHFt3@j!t)@NKX@vY2}?|tQs>#cOn8boqsC-w?Q+Hi zlQ(PEGwl$WY@$=g*f4ps&VELL$;G<+85t%U>(w((n7moon= BJ%j)N delta 267 zcmbOfe=B~11ebvV3`|stQAO|+6d-H}X=Y*qR%U2qU|}$Eu|DI6iI+8*85x8({+DGG zP-J9gG1ZJ(tADL2Fn;99InI Date: Tue, 2 Jun 2020 07:38:39 +0200 Subject: [PATCH 142/234] Add hook to initialize custom interrupt controllers. --- riscv-rt/asm.S | 13 +++++++------ riscv-rt/bin/riscv32i-unknown-none-elf.a | Bin 7954 -> 8042 bytes riscv-rt/bin/riscv32ic-unknown-none-elf.a | Bin 7814 -> 7902 bytes riscv-rt/bin/riscv32im-unknown-none-elf.a | Bin 7642 -> 7730 bytes riscv-rt/bin/riscv32imc-unknown-none-elf.a | Bin 7510 -> 7598 bytes riscv-rt/bin/riscv64i-unknown-none-elf.a | Bin 12810 -> 12946 bytes riscv-rt/bin/riscv64ic-unknown-none-elf.a | Bin 12666 -> 12802 bytes riscv-rt/bin/riscv64im-unknown-none-elf.a | Bin 12298 -> 12418 bytes riscv-rt/bin/riscv64imc-unknown-none-elf.a | Bin 12178 -> 12298 bytes riscv-rt/link.x | 6 ++++-- riscv-rt/src/lib.rs | 4 ++++ 11 files changed, 15 insertions(+), 8 deletions(-) diff --git a/riscv-rt/asm.S b/riscv-rt/asm.S index 6bf78b10..f9704090 100644 --- a/riscv-rt/asm.S +++ b/riscv-rt/asm.S @@ -113,15 +113,10 @@ _abs_start: // Set frame pointer add s0, sp, zero - // Set trap handler - la t0, _start_trap - csrw mtvec, t0 - jal zero, _start_rust .cfi_endproc - /* Trap entry point (_start_trap) @@ -130,6 +125,7 @@ _abs_start: */ .section .trap, "ax" .global _start_trap +.weak _start_trap _start_trap: addi sp, sp, -16*REGBYTES @@ -174,9 +170,14 @@ _start_trap: addi sp, sp, 16*REGBYTES mret +.section .text +default_setup_interrupts: + // Set trap handler + la t0, _start_trap + csrw mtvec, t0 + ret /* Make sure there is an abort when linking */ -.section .text .globl abort abort: j abort diff --git a/riscv-rt/bin/riscv32i-unknown-none-elf.a b/riscv-rt/bin/riscv32i-unknown-none-elf.a index 5898b7db0bb47474d0c3b3a9d6c301e794ec4f28..3b9842ec6c2a6867019c450fb4fe2f4098cfdf47 100644 GIT binary patch delta 1527 zcmZ9MUu;u#6vxlG?cIiS>#bR7*LJh)F82r$>(y}V9X649O-1)tg!g;u`%7Y^|h_9&Ml1Eiz(1!O#4w7fF#Tt0Cd)X zTJxRU^ck4@;|@Nfi5AX_BS_R`E#*H-q$OedD@+5%JS)}X6Am`_94Zq2VL8_}3PL*S4w65rGlq<|1%RwhGoD@gr% zn-Y;1*7kQ)THh7NHtmmW$9|fRY+UB<-WlqOSTx(4iM`1EkCx|{kfT=boReyg~{>iHR+=@I4-P>Spg`gKM6c5!3HLqCp;FZZ-77mw= z6zj*lLapT0D}|%Sy;8MWuXr_D=-W?b)S`d;dY<>H#Y&-CuX+AziEk+vU6)FJDtVa0 zX1}C1iCv(P=)|V4MQUIj3R(v*sRYr!Xk&*C1Ld}V&4gG;DBAiWn_L+xN9H3 zqd3*NWc?a`Yl;iQ(^63EY!jYUdcMPsKl!xMw~MaW$+xb>$3u-tUUS%gvWlIe^c0kS zxWmqra7pQ<4m*BNS?NbaSM2ybGfF=yx?;!gQTM}>(9jk2Rp2RUQqK@i3->GjNI0qZ zW8sWq|Mk-gRYccwPYA2IcD2KzQBjVdgJ55`T{e|akebm>uNO~db5evWGaRHy-%lY^Ijjo8}xnJ#vRm3 zyX=2YyQX?y+SHw~%_Xk)(8i37BeXZ;;y-jMtQ}mn;vrgC3?#BKPf%v z;%<7I{d-g%bdAvgx-#fslYV6BF8#&+2CW@(agjE&|CAQ)a=VFEq6=%+=^1m z9<&n_)sqB8MFnf%TMzXVVL~rKLOldY6co{0Q0L5YwF^ORrU3WvFhD5ITel8#pCfgv7sRmjjmqZm>3&hw)lKGI4$ACWl#p@*!Rck zH{Mop|4j`5FKUn+-5&4#@$n~4sT=B0rc>LksysdbN$>8$jZ8eRz1_(~l~Q!^v_FHhAcR|4o@5PzPhXESMEw}uam zQZ zMI(6{pmv^a&eIAu=4pU!^K^TjUI>TtG-xn@kBX!Cxp?P_RA0wYXiKI#`ciFu$CIfn zvoD4_H!y@ZN}B2}iyWoSJS}{Sy7Ivs*9*d3>O+Iq{lT(faUM{YO+F?z&tTjiOka`g zvpLxb;*jezXJ@@94ql}|jXCSj5SwS&1z^tl_lN^S>;g>E<3HyhykSlYH}G`_Mnv$< z1g;4$r%o*p?pMSu!tM07slAyu{weRqedJd+iO+1U74Bx=y*6gc9n;JHJ{iMoHD_j) zG|%ev_{^3&ri=Xp;xk)&h4~n2K-geDDePxH1@cqy zXQ7Tu!el-n9A@qpb_(?fJCl2bd2Z}zj&0X>>KqfF>%{tUY`cDx*H=kN)bOBGj&0X3 zAWIz--#I~-u(OFn!p;G@g`I^D3p)omA{?b|4Hu*4thJ6HbH6;O_(KlG^i(l`fnP!~ z)rgD2HpTj|tvAxBS!@f(^z)Q&#G!CZMez~kC-EKSC+ISJ@Gs?Gl>od#I}%gXxH)30 zVN6oogm)O)V#G=IF3R^wECW@`tNpTuSD2`&L!q)zHai+p5GIja`q3s4~ d{YzL<8PaEq0IpzdWz3u?19(k-w$T=x_7B2D$I$=) diff --git a/riscv-rt/bin/riscv32ic-unknown-none-elf.a b/riscv-rt/bin/riscv32ic-unknown-none-elf.a index ee7f532ee015f0bb3df82216acb39f2ae15dd274..40f667c2a2f4c4973926e80bb230cefb61002423 100644 GIT binary patch delta 1500 zcmZ9M-%Aux6vxk*-6?H#n+0vhoz)g6X6zS9nNp@f^$-;mQ3NH4=~n)zHC@e8+fB6J zg>n|^AqeUrsE2|LdMbMBA)}2<_3tMa}hvj3MrhuKYkEwo=~<+v1)+kmOnlFjFPbvtM+294FR=pMimark<;&=0 zWCa%JePlZt6sg#-z~dDeZ;^jz*-uuP6+0Wd&^=Kp+v-HZGq z><7Ctcvr_4#m_AAFD~+D{_#_=RD(I1uS}Ue=~G=J1KG~ubarI0v-ey!Jv1~jm>s4S z(W7)RYS3iV+!()8D&FK{m`8I`Il_T1dt85m?nhg5*HrWn59VdX$9PEiA452(I>BuD zx^STPF~@Im$0i);=a|i$r~tx&KE#~3B`QEpoFFjDZ21AE5|m)hxx5yHx$wM5Z=+vf%?-bAna^aJSuv7i5LkPR%Cl_&FKTdzCKi z_&IVuyaei7%TEEvRgxh*p}0!;f?`v6OmR}!e~I2igG%>m&nuQ%Tds;t*!6X9o?%ah zq^xge1Ba9RK#Cz>SZncZO#=Ck;A_Ix8=?T)C}i2Viw;nwe`65tW-t+O#tnY#F2 D?ufLJ delta 1538 zcmZ9M&r4KM6vxkbZzi?;F@`bEnbAf^-ZL;7a~drZC4yR|M1_>3_S;`s&QxYU1|sd3 z3+)62wUGJ)3Wi!mZCXT&D1vC!xR zn>TH4jwd#?v?S*1`x^35G};`G$N%e-$wV~TnoK0-A2wF~s0Kg)NN@vagle#0{_C*u z@(=Z*9k^=%&=mtxbGzf?-}-;j73{&`><8?_Iy=2u2HHFkq6_mPe_#d|x0vF?b64Q|ZBp zbpOPeRGMCtTPCc(M#UBFnQ1+4H#_Ts=KbtKGkI>&2nX4RU0vAIhna)!2?%@oNoMOJ zcWlC*KEWKiAu2#d0xxlvIqW8cJzY*ac#}IeVNbuqY+Vu+K-kldF;`v_6<~^6(`AKl zm0cjCSw5!9TkbX363ptvI(E21^ErMG*r|DdzZpD|?Fzj0Z9B?(eY@6$?Jb%|M0ame z*mi5iML()*gzc@_o;67`vy11fKcsbGdr~RiQyf38F7riLHZK0@flUrIQW`cx!+FxHIDJyr0X>{TJ)HM=N5h9 zpo^9`?<1$y!BOh2b=J@N0N(LdgS>#N+&EOnT*BVu=2;&v>jpiljaiNSXZ^;L+4IVj F{R379vr+&6 diff --git a/riscv-rt/bin/riscv32im-unknown-none-elf.a b/riscv-rt/bin/riscv32im-unknown-none-elf.a index 466d6d4237c13d5f42c7e3a5a00f5a8446b8c32b..b9b3987b369962488544f25653d36bd2dbe2df87 100644 GIT binary patch delta 1431 zcmZ9LO=uHA6vt;|gu$tQ4`>YDpOKg+_yXU*5Ijb8yeK z8m^ZthgsJuJ_ny&+qoaq(#n5)qqN`JWO0?7Fj%aD?%t6-`mY{iJ|?qu|M`s7FY))G zpYOqkJseyTZ(ib`S>j(@u2fG5_-O*rMdq*ur*D?Loc#BE$qROV5u{-b}q6O#igm1(l?12qf<1fn@x$gh~ delta 1459 zcmZ9M%TE(g6vof(bU;X z+p??F`u}KPrC#D9Rj3?lN*vQ)XeA4_1kgdIKd;k^2`#J7aag8OL#WclRfAg}tm;ga zcdlx#UzPS&i>SGF2q(64rN=CLJbPrNDB26@z(pQZuKbvl%$1w_&` zK+8IPC{1TVcbWzV^rJi1z}DQ|6|te7LFkIcdWK?ML&MQnlBLgv-J3s#%ejrd8!RVi z@?K${qRAh}oo^!mO7WCY19kFhTwdj4(ZR>^mmH`63Cn2!qL2Ih=rdfh}9MsbrYwV)d9{htBubxs{@>4HfXAs zi_uVf)e$5Hd>%pn#(REKU&sM);VZu>>hO!-qWITu>9T4Ot$>-aM0rDCd!SUfFdDEN ze{yj;5Y%Vrakk@!fT=s(0B!g)V2TwiD6&L5Hd5S(y%fvwKE)|aQ0%~O6h}}iwnQFQ zP@KVo6g%)5#RYs`Y;9R~0(8^udT9Sqx=7NO06>2FG`fvZx@Nt7fK6vy9Ndjr9C;wYqEuNSbq(Jrl8n$i$RKqVkhKL7!#pjCz91d{L-$cHzf z?Zv4nAId4wlgJU8QzfKwaPM$H;!vrVN^LoSIB@GFH&A;B@6F7{G*5anzxRJL`)0;7 z{0vv>jr>QC?!q_#x6T|-P*^i$$X>QAJp*%BXOPtj_k zW%C2hVl$U8t<6lW$s3z=y;U}v%6B$zR^;{VxXCw=Vvi+z9lNayX@Gc5RUOp$32>R_>$vb{j=87$%BVk zFP+u8aIj1B*P{0}I52YuMeozPaL`+S(cY7&?%;2h&S_mZFhBVL(aTyF4&;>BJ{5gP zq2j=dIVSqB)`bHz=A`H&S{Dw?7}*}qKviYr(xaRbo7@__rV!+bp`0q4!;Te&;0Z^X z)rT%?R&&QS%Us{wSK-j;>O1livUyV9pNIn5sgRhiIFdqZT)- zD6|jpym>m}`c02{%nDHCmhg94azp%;9=f5u6#-7uKdx^-Y5^Fb_JWTQ?Jk5?XO4yn z0p6iog%E$H2i%U+U)=sptK7b(&UDZMxwA delta 1405 zcmZ9MU2F_d6vxk**=@^iYnyDkV|J^n)65W&PIbGb1VKWmuSR?YZGD!OR(E~8u=P<9 zq|`}xl86@xiI)xW=EVa|6B6Rps|N{B!V~A*JEPV~?zzAJ|DJni?%q55Z270IJJ#&B zj%96ruA{v@H`% zyq7z>G{fy0;Q;sPz!whv6U?bgx=1+mPcd8Pv@aa`qs;bY?UzJ^1M>WIFd!WI*O*gR zIB^Jv{tag9ytn|up?{RQevA``9Bchmh2RR0YhK75RzXUsJ$wvMKS z)~sj0IXDSnw?o%#7Qb_b-JoW>_Aet=v6juvjtutLRN;McH)hqSMDz;h(jOB~Ux zHXvuqp&oopv)aG_y|+@hwEV@gkv~q;cA^_<0phgCb}&y{ZBOMCP1p$|4>Z!)Krie> z)ebJoB2C-PI8EQUsz|A{7tQeLZKJhmCpuOK&`pDB2Z!i(+B2pb=w;f)3HqG&@F7)a zJWNt6=l8UW^LHw7zD18YTl6mD86Q*hGvneqYHIWr4@3a^c(ZcvE^uS1_9*{gCbux& W@Q-kT3XP8SlS`*Un|ppS6@LI;IjqJ2 diff --git a/riscv-rt/bin/riscv64i-unknown-none-elf.a b/riscv-rt/bin/riscv64i-unknown-none-elf.a index ef6e4e75936417b3b22a5a4260fc29fbf3ddccbe..18cf85f949fc7ca3e4871601a817f44ee46f0b02 100644 GIT binary patch delta 1786 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 diff --git a/riscv-rt/bin/riscv64im-unknown-none-elf.a b/riscv-rt/bin/riscv64im-unknown-none-elf.a index 8038388674b031cf8db21a1211cb0552d864cb12..5e2b654d2a1fd424589f14cebb8628a554172756 100644 GIT binary patch delta 1696 zcmZuxO-xfk5Z-P3kb>CO7G8@IDqyK?rBxfN;tvNCJopnug9OQ=LJUS7fngI#jqQsZ z86x9fUeF)#kS@0*XJ@{{2YQ{h=aQx!6keKDWtdX43HDl=VAh-mTP>GelMJC&LWEaX z4zDe>P@o*6QOGDQ)SP>(3@CIORw&Ng)xs-g>VS{7au~I{)%>}gjD+fe!nZ_LQl+L;Aq{zxHu*^#qG5@cPvm;J$`D=DYyhMv1 zPHCxhyf01K6CLqPcUns&(wQFZ=!tZquP@V+PJzkU2nnYhTAcaN>vStBlemma?ppV+ zHnH%tn?+njn85$%i-+!D#0#ichT5k@8;hb76;H!+XPBOYuTIr-M&dl+c`1wMq1+Xw z=V1@?7a`01S(s#g1ZH$^E3Vw~nDh0ilFmB`za-)KD$tNW3RA_ED;tfwL)d*L8?nS~ zI|9rwXgRgyV}5oIr&chi4Qt#4?qg?s>%uxD{w4vkC~)MIo9xq zb@Dg|pHV-7N4^rzfYc_gAC?DU#;1BxQWdWp8dlR_t5!W3{cJc{x|>~0)pJ~`iry-Q zoq#0km8)LP#9xzy+pOBd5e$BwV@$#ntM+mP!v>zCav%JzR%tIzryUUXtDYmgiowfs zoYD!JU!_M;jUIz*EboH*{xFT@-uoLU`=A8_F{{^UbPPgQAV&AI|Dy^|1AdOoU_BSNy@efr&u*A3xLGg#Z8m delta 1624 zcmZ`(OHUI~6u!4*iY=NJ+cMKgrSdE-&}peH1cStwSfdH33l=;|@hxJtE%-{Tf{Gdw zA;-i-H%5MdiH$LFp+*;)xL~0R0xn2k;lhY9ChAJ>nYkkuqc@rJ_`dI)Gq-bZ$5J;2 zCKX$Fb8A?QZfbzpU0g4-Y0UKlrg8kU_hJp;G=GF)&eo=bxI zK93dV&%#5OOvm80E5z(~W-mjXJ4DYxH?vn@LbFfYRXgAFD(rrh$LI{aS->!yUj#~&8v=p9K3|aE+{Ppl%`US0lqqI-Jw+s5@ zKXBBGeG-CxP|$NcroD^Us81-^FBBL!4j2G?o$Sd8>{=e<&PQM?V@CznC9tO;&De~< zmJ4haJJVx$66p}kFeP3AW8vw*l%Qw|BNF$LMf*xz$RV2#em9)*hf5N$1V*6*Y2e`q=ox6ZED zwF)c-;&eN^fHFjaeja6lerJL=`?%5+?2;Q^1{K>EUhOx*QgD7fK6rQoyA&CiI$8pvsh^z<%$0j&`!Yx#CgbL+UA|ezapc{uIKw?N@uhW#a za^)6Etx6C+sUR+)T#Cd2B%e5;-YU3p;m|{`NL*Sd2u|V6?yNIPc+$T2=KH?)-t6q` z4XZkSJ=WZ3dbYgd)Xue)X}Y=V_YDm>vi^bof#th>3A2Ye#>o#m*)WT<7`y3X3>6gCA-vH}bAN3#P!90h_+5+C+JnFPc^E;x6EmS0ZUoyo z$Dcu?gR?Ep9@m`MH)8>I8wWyZyb89%Y}iU|o`x(G^mg0|4ak+?hV?3%^;kS9t8^!> zxju9>bix--;Gw4BaQIY5j!2#QueW{l1`B%Bf5eR)#~t0q{hgG$b25G-^_NL+vQ6vT zvSpXYrPgq4a%wtP%G*|P$}Y`Y=P%k*g+giGE~45xrWZ;@n^{FWSFkO+kekPUt!BWW ze!qw#3=E3SNJor*npihYW)53NS^ZRd3A^mni%yqBJ^vOfyA6C5iN$|ZDkfweqxc=J zk?tq_5lNGOPW}ouwWay@$dLaTXB~gDtqWVDo8#imJ^M{2VTxCgjT*d)v1r$>G551F zx`gagPfYQ10g#Dc)mEZ^H6!Ix?^54=8$x zH!xAKzqY!4wxRr)+@9FWq@wk3Aw8|&ql$j~Be>983VuS-=QiTg&R)h9!cqz*K7xw@ zYNIoXeoE1MxX@3av)hO-D(q&Ni<9~qM~Pih*fxbNqD-u2Bs%lFxNrOd{vqW> zMJaBYumn995ZZ0T=bW|c1S)JNJ@d#?hdHd0U%(tG3l8VHPh>7C7R0Rhw8DB*#6g^O zrqG{TH*bny&x`)?nL5Xq*IBT$NGH-fQ?nAIoa?CdWSZ`^y4oeY?#b{G`ppa+OeSPj zNhTsAve_LODd3tG#j|9r*^Id0UmX7@7x@d!roQ0kP)lW+Sk$H7;dLs*?;*7(%im#^ z{1e>YQ|4EZ>V3?Y@Upk;YfK=&_ex7+i(4Xo^9ok?rka@C-CYc(Grkd$rMo`>BF*Oo delta 1606 zcmZuxOK1~O6n%FlNlpDE{e(&UHMD9%(qC~d zpaMqJ+4g<_Rl%p~CQPXgyrrI2?gKX3YVo+O9TwtuTN6NTy*+D>T{gF#v@{!Ib~ZZ6 zn84!4@QSS{_bLCZif3lbRqbpH(=Htpoa)eF41c+j9CHaicU4Zto87~{0;7+ex&LXb zVYr|k@8x^(j?IQ$1zTn{aD|(X@b8+#-^X2-N7YR~YpJ0#2a~nSg>JRbr3_u3EHQAa z&~=+0Zxj~bo5Bt5Oh%T;zAK3SQGkPc}#6=#bRSCa{H=>_j#R8XC(FG)MH%fxsz%T`Hi@g!}M z_!W{q`5&J2a-RlCzfIB$ew8tc+^9(^Xpssmo;FBHyhC7m<_z9mp!p6;S?m9yY!{C6 z>;WlD=TD2W9q0;ZzD^@Hjof)J|57zyTFP3r^ElUvZM;^_`h}7nW*-jo?0&(J6E~aT z_u(s^ZIiOr5mV=O{2kDsjdq9as0TIQ4oT@3n0DET$)EP{NriG%LKA4kchY|3Ni;6bcITGZb{vbwcYphQo>cZlMn<*c$GF5u6Cu!!`_; zC!7z9P2menmnZT@RU^U=4h^4_mqHItl-I&DEUUtTGV5kCFcA@1~i> e^uzYxAwBGTZQgk7G~Uz`&UXPb{}OM8O8x-m``e8G diff --git a/riscv-rt/link.x b/riscv-rt/link.x index a2d48244..89ed07b8 100644 --- a/riscv-rt/link.x +++ b/riscv-rt/link.x @@ -22,6 +22,8 @@ PROVIDE(ExceptionHandler = DefaultExceptionHandler); then the function this points to will be called before the RAM is initialized. */ PROVIDE(__pre_init = default_pre_init); +PROVIDE(_setup_interrupts = default_setup_interrupts); + /* # Multi-processing hook function fn _mp_hook() -> bool; @@ -46,8 +48,8 @@ SECTIONS KEEP(*(.init)); KEEP(*(.init.rust)); . = ALIGN(4); - KEEP(*(.trap)); - KEEP(*(.trap.rust)); + (*(.trap)); + (*(.trap.rust)); *(.text .text.*); } > REGION_TEXT diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index 90eb68dc..b85a715e 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -370,6 +370,8 @@ pub unsafe extern "C" fn start_rust() -> ! { // This symbol will be provided by the user via `#[pre_init]` fn __pre_init(); + fn _setup_interrupts(); + fn _mp_hook() -> bool; } @@ -382,6 +384,8 @@ pub unsafe extern "C" fn start_rust() -> ! { // TODO: Enable FPU when available + _setup_interrupts(); + main(); } From f09f4549ea1c4e58a2fb5dcdd6efa4cfc287472c Mon Sep 17 00:00:00 2001 From: Karol Harasim Date: Tue, 2 Jun 2020 10:19:02 +0200 Subject: [PATCH 143/234] Make default_setup_interrupts global --- riscv-rt/asm.S | 2 ++ riscv-rt/bin/riscv32i-unknown-none-elf.a | Bin 8042 -> 8070 bytes riscv-rt/bin/riscv32ic-unknown-none-elf.a | Bin 7902 -> 7930 bytes riscv-rt/bin/riscv32im-unknown-none-elf.a | Bin 7730 -> 7758 bytes riscv-rt/bin/riscv32imc-unknown-none-elf.a | Bin 7598 -> 7626 bytes riscv-rt/bin/riscv64i-unknown-none-elf.a | Bin 12946 -> 12974 bytes riscv-rt/bin/riscv64ic-unknown-none-elf.a | Bin 12802 -> 12830 bytes riscv-rt/bin/riscv64im-unknown-none-elf.a | Bin 12418 -> 12446 bytes riscv-rt/bin/riscv64imc-unknown-none-elf.a | Bin 12298 -> 12326 bytes 9 files changed, 2 insertions(+) diff --git a/riscv-rt/asm.S b/riscv-rt/asm.S index f9704090..997162bf 100644 --- a/riscv-rt/asm.S +++ b/riscv-rt/asm.S @@ -171,6 +171,8 @@ _start_trap: mret .section .text +.global default_setup_interrupts + default_setup_interrupts: // Set trap handler la t0, _start_trap diff --git a/riscv-rt/bin/riscv32i-unknown-none-elf.a b/riscv-rt/bin/riscv32i-unknown-none-elf.a index 3b9842ec6c2a6867019c450fb4fe2f4098cfdf47..520d90a7a188049855f1e6ad808ab3a37fd10fa8 100644 GIT binary patch delta 915 zcmZ9JJ5L)y5XWcX01G+xodnp}AWj&aJ7S9hq#%$|Q4sL~QrKr8yfLxO%Oo)k?;xS9 z3knKK6j1~n1qGh~D3EB7DAVyNnAus&#w*S3@Bg3KxqZBj?2euc4Gku2J<_cJU|<~9 zMk-%$a|LiSS^Tm{6>{#1ybDCGmcJO{%DXlCTjXDVn-}ok3d_RPj~G0fAS7QtOq9kd z2F@llLH9ci@Uc!0t2#DK5b(J!KT)UCb$YQz+t8APjT*y5K6s}EK+4VJ^Zb>^C?b|y((8$ouL)o`(uVW z^-eC(s3b3u!@pz#v-B7^{$W(I*T~UBnKnboeaZpcV3;L^@IbuH{EU-z#7r+>9m@+d zCNkcG`DBQ1-g*0aV`+x-;|&0g%bY^)ovgBxVV)*`s>+V8Ss;I!ePTz~WXYdppV-kg z&1i{D_Dg;eMHY0IVvD(rc#Szsyw2Q3yuqv*Wtr956=qr+`(EX^_En!8`_w0v2fj8E zahXv3Khq-??X$>v9As=Oz^o3i$gF<6#HAa5b_41rfC(2=2lF7z-9HNCN8|XHqst2uo~Q4sMqTb-3ns}({EC;1z^;D z=zQhazQ9?B08IXu0a8u*wX9>QgMhiF^`)k~-INcWWE0x^;q-~niPLtbr0zE|J8GU5 zV(vp%CCFuwZ|+_=())>%hSNABK0JU?b!*{i=QFDloT9tTKX8hDX|TWRC#tye#J)d6 zj(p{MV&9)5M;-RWzONz2j@ZAU;4fSu$JGL{?|&g1RUEKgW7qeH0PeBt`x2p!lX1+P zBL42)=?Rhb{_1};@y@&H*=lu`czw17z)~+WjXdy{J+YN#ULe2FU`y5H$S<-dwp2}? z{4#rDOVzZY58t1`gN;u_rbqN=_;tL?u?(%M0X~q@w@E^YHQVk zFuz1*-TxrC_cwIy%J-(U=&fTSH10E+REOR|Fx>ya4<2}5td)xsZ6LwFvK?C+SPwO?TM8J{`wzk$={+n6K249@(- zfMAaNDmcrRg_vg%752b=robHetKgKmpCj;~j{$Lpv`?6bZjh-fjpQ=_4f^ezDuo~I z`-EBzyLR2OnGjqp?3{vfDq<&`e7wC;D;_J2B!n`)O6La49dLKSr1n-lpksKR~ zyeT+fRmXrBK<0KeYR(%!2}^wyUpK&ajL;vkA*>rP|F3@WmiW2>zI%j2VKRG^Q0Kwv Gn}sKC#9C$m delta 898 zcmZ9KTT2^J5Xa{>**0MVqLRc50rA}jK@fatr0Hs{cN3FnVzgZaFNwAi zIUm4}AZ6dB_!auzeuX~wsWWFzXqtiD`ThSh=j^%cpShoN&CK*v+SKvB2LL?y?6;m= zscaX^V6W!!%_3JW+6DO5c=Cuxcix-s@&&OQRYEEPUT%IvE}$8H&z z4e-Ite;Q!ELocK5)1CnWvK{r!4t?CAFWa;UU9aK3%`k{__G(G*Z(<>7-WQ@W+gI)8 zw$N9Z3=BrYpICY^O){!gjW=XGFq^t&YY9{MGxJ+aQN4ZQ)~I*LLv`5>k8a@wfTgb`hy3OPk0Z9$nAgc)|Hqc@*&+WU`^1*+$&H9hT1@$*#tKpt$D?jd>G08 E1&%3PF8}}l diff --git a/riscv-rt/bin/riscv32im-unknown-none-elf.a b/riscv-rt/bin/riscv32im-unknown-none-elf.a index b9b3987b369962488544f25653d36bd2dbe2df87..53c1428e8c7b2840df5980a067a71dbb3290ace1 100644 GIT binary patch delta 857 zcmZ9JJ5K^Z6oqGSMWY0kgk%9VA!49Ih>4O&p|QY13llnmu=v6U4*^9BSsrRZMKXMB=MsUg=6z zEmw(}E%G~xbhWIOSjg_}6{aNG(>v0)Rj*IV7A?ki_Ai-?5@%oVD)Z$Z(qZ9)EfY!> zhx%(nIx(a(Cha3*5prTO;DJ~FG$kahW-DT(&_>wD;`Th7w|ktTzuG$FAvM)u^wlTG8AtaDOj&q((4>%w) zo8V{A2M&nL7Wg~p0|!LL$}L(&-v)e!3}1+zBWo@YrzqUOW#nn#3bJv~5wfxQ7#a5Z z#jgbp3g0*nAXLH-aIlCx&I{c|HYV6ZHeO;M*%;se*?4dc R*%;tZPk34qt+UUW{=uxBxLEH6D@a$jVy#@aP-<$W=gdLcf&-XKLW;2`pT|2IgZ!X=qW=U(D1%Ns1 zucPjEx?Z~rUUM5q4sN&Ywcu#KY^d+ySL07|K8w{5oTLlkB%Mh34=GABVIHnT0cR6? zEtc`GlCunuGj3yO{%L`taH&=RV?qjX3h(kn;nw0K}31 zfm|Gs1-L^YTKI`vk_F<(e?iU;alrNqdsg1VGVxwun6|2im(6uUHN(+DZ_a;Al>pTQ zfFm#YHu6Q6J+V_~zDvF_Wk+h($b0OG9jSRh{t0_xM{1I&)DC<99EGw{i0>%CjdwAYp|gt#JJpF^KDHaf@N2LFGk$byANwX}vyIN5KeToIq5 nny2jb1vZ%VkJx0^7kI|3AN-tIU*H9^1!2E1Fq9wsU0nYMxb#=z diff --git a/riscv-rt/bin/riscv32imc-unknown-none-elf.a b/riscv-rt/bin/riscv32imc-unknown-none-elf.a index 565d84ccdfe50f1b5aea1b3764e94a5ff880a852..dd554a6b187c8feb26ef433e5e818cf8ff3cee32 100644 GIT binary patch delta 924 zcmZ9K*-FDu5QgX2xS+PSSZJ*Z!AN>16+wl1qh5HU;CAKKrfzlVVp~_xxFcQ(!Iw}F zB#+>oPv8THPvM0#XHIDCz?^*lKXXnpN#2s5$*0lLk%X=y-3kC2=3{N9$`z|r0V`9$ zl|`yjvWm`&KlYw~_K9~_(|($qm$tAQX!{lR81D8W2#pZ(1YU!fMx9Qe4k#}O0*34A zlXZHrPN!?M4$XtGUt`b>&;Mxwkg_smHP*m%LU%s=Ip@{irE_28uG&AOklsr4*qIGP z#Fdi`ByF1u^W>i}FX1J2S!HkU8d}}TC-(eZLDOJ_F~xyIh!WHE z7(JMxED_{E^cpeb-aTg8Yp6ehIIetoPL6x%93v0>O-aO6K}Qw^Trm1EjiN-!apkw5 mB{tZX18g$OhuC7418g(P8)up206WY&xL?sTOWqmc;+iYo~5;z1-z&jC+=%v61Q9?YK(YO8hirJ zism5%AH=fyB80KkpoxH^)#yq(R1ol4`E zMKYhYGw^o*JU53s)1c* Y_2WHe)d0OJh6$A)qu>#aOn0sP0vHWc9smFU diff --git a/riscv-rt/bin/riscv64i-unknown-none-elf.a b/riscv-rt/bin/riscv64i-unknown-none-elf.a index 18cf85f949fc7ca3e4871601a817f44ee46f0b02..39bb3894171e238f34ecb4154f67cef0b287c972 100644 GIT binary patch delta 912 zcmZXSJ4_T&6o&7`T?m9^dCczRvKa6Yvp_MJkg$n`iEoS8f94W8tj^WXW-BXeh7<=*D@)9JC10b{q@ zgb)$(E!(Hcm29aZvUds;gTqv%lwCxx(|eR(kH{nMcjR50_aU~~q&uloh^XlBb0a8B zc4hQ=|3OszXaHYb!pE*^@)qe1>OE_NLf~s>{M@x5C&&Fd`QMHkrf$;Yc~k$8>IX#2 z*|B0H;4QC%dHCCX5u?rql8%lwiWSK{WTV~q?)1r3{Bc~l&F3hSr#N<$tl?ltAs_G2 zFB*;F(C8k@&u|b|atrU{F2$b|cc2okTtkN9E~do>VGAUQjSbfE&;BbY~H1<+T=PX*a=nOs)owewy zMRTYVy>HPqi_W5dQ0d1OZ8us{euA4sS1jsSw2B&0{%)c58Nt1ec(PpNJC{WqQ)MYE zqs+I>mLe}AHl%dfKL>%IvRx*x;5tnxNe1QZ~)4~$S8E8rCQ z0Ai*@NKhbAC7}BOE@-H5K|zCv=;-KZVaDE#M;U47y?t+H_C9w@uSz>J=gv;1bleyc zLJZ)#Z&tDDdlg@JHy>c`ZHj)yTNa--nuBsLI2QgmByDJ0C*f-}8T_;sLrxBxg$Rpi z7yGFI#nD-L9y&*rya?^lnsX1$C{`Yh%ka)l;B{Qr=s_c<us~%FPhUsddBo0Om8y%x8^qDOQv68dJC?p zS$QjXt-c?Ti$V3&pNPBz^BH%f#5&5*$tb55>Pe>&ZZo$A|In>7cY(QeaIrk9y+P6>gPQ;jq_ zRp!#0rO4o_bXhN@G^ZQ(H7B4t3Yzn<%X-P^guK3>YiQ0RA>e(^&Qfnp>jX2JQ!myW vL=^UO$}v|+6P6Aq#jH>8uCmydi3DIc=D!4kNp#LW_KUmbdveb%zkEO(|tWCyek}Mv*S0C#vb%B z#v&l)Y^Om0f|+3$>wX%;PxQX=%pbPCU^)q2tg^)yG+XN8@eNchAH}rvC}{C0TDr zH)DsI_rB5lV9~h@ADu&JI5O657MM2SXT*V9?l9km1=r^ds-r}9V9FJI7h)L!zuiIk zqCLoFOg@Nl4`KyS$LsCQ9c!gJJpI7NL0f0YW)mknzJeFw7Z=m(JVgnXuIEgwuy zZ~hvZp5Vvu$(!V}LCgDfjxPk?lC2*85KdFRESO#jr7m4u!!Qf~QbNw@1En>K7Qi17 za^9lb7M+6}(nX8zTXY_pNH;8c-sBwPCVWM@Wl`6nHE1EF?-tsyNoe*dZRTtA=DY+` zX(7vD8%BC>{nGS__?$T}7|L=d|DzDB_-V_=BB~71NS6IZdq7U2@5y;Vtxo jm(?x!Z#%Q_7NRS(U#^}p#=^}+i^2QMj~;#m#WDB~A8>%4 delta 1024 zcmZ8gOKTHR6uvi!0sA1CPLi9ELW2}dhQcJis8CwaMR8*{?(3A;7uq(-XrvfJA1-S8 z3a48i;KF5*ap%$>kVO}+#l7_>cusO}bLfG4zVCkDIcM&?K9;x3$CG#O+{)>AIv|9I z;#xCnz83h^K==#mn0uS~pz3dkZ+riu@-*CxeIJk(c!@EXPG-Z$iRFmnVzUreM6!$h zRD_N-EAPR~ppsMIjnthNXeP1pay$UbO5-`6X!PNHM9C$+3pBpd*oHY<$q%%H6WeZA z9QbPQCi+7a(qs4?vtcncD&N9R%9H!Fx5#Ps3q=gZ(hB~j#!K&+x}bR$af|7znqNa~ z!NasCTTsJ%0ADa~!x`p7h-N6?&UpSl>oxNyP}^bpiRSe1cA5TJa|`i^={K0(hM$>P zSq=x)ud8x7{F6J6%N01g=?y<)9Tk|#E2kdmN!Jk;nOlc-bQ{cFVr~OIoL%~IrXRlBU0a+=c(2bvR59RR)RgO6!O?ZCc36X;)y5_p%(!Xn>2&b+ZHj~NS2!FVpxZHzQ3H}2Qv33Oj diff --git a/riscv-rt/bin/riscv64im-unknown-none-elf.a b/riscv-rt/bin/riscv64im-unknown-none-elf.a index 5e2b654d2a1fd424589f14cebb8628a554172756..8ae43741706f2cb3a0d17cb9c7927784fa55bf8f 100644 GIT binary patch delta 920 zcmZXQ&ubGw6vt;ul1dPgvPmb4T^dEw=%HKi&>jTAO9e#{58|bhNt@bgnykAUZB;C` z)mkqK?=JoarR>3rcaObz@*MWZX7fENm9ez{O$>zKwa#HQXrU$^XNleK?!9@^0pw%jASSQT1we zB7f_zYh}*qqN|Hh)Z?*^%eX^fkDP!XIjb~%W2P>&X$Q&E;kvZ}mn_>lo=VSnLzjbJ z)`VP#(TXc~;>!}*fT5-2Q+U@@@S;+)w^;JW)You+2KyByx8VzBZ^LiYS1?s|<#V`; z`Wkj){Zw`B9aiCM>gkJj;i#(Q9;oqoxe)2`pQmIynx7mNq5AeJqgiF552DEnhXwf(hA#X88EJ^x delta 960 zcmY*XOHUL*5bj>r(V*atGtev{*^QEYcyM+V2!w)b->x?QK%NFmoKvTm=ViPjQp6KXu)S_>J+Wy6!^Uf=isb1x~vs zzrzUTRj6X#fnQPn+wK+V`X>JA!baRRB;pw3_u*y7sPx0H9ar~dIV`8HE%_QIGG6Np z>zIJEj7m<$8q^bnfT>e(jjGSoS*H4s%Bo_Ssc)ES_zZHq%Ysr?jX%^*iTIgyncqnK zGUHuc6JKR~C)BfQu$!r$m})WpJ>$(OF}TU9wH{RHjhdi8MUlhxA*vcFt!w(=1zi)6 zkAmhbMpYvjo{;+s+Cy`egn%D8J5Rk8%@YjhntIW58wohisie6fO?Z2&;q!(YRL!}h Z&M~zBUS74D$)wJQL-}({Zoq>A{0IJCaDo5; diff --git a/riscv-rt/bin/riscv64imc-unknown-none-elf.a b/riscv-rt/bin/riscv64imc-unknown-none-elf.a index 0fbb1165ddbc8204cbee6d1fbba851438f44c114..d9c6927e7c8df929972010a46a182e9ac234aec6 100644 GIT binary patch delta 852 zcmZ9Jy-yoK5XE=Fn1})!o71uof`tNDN^x|tBBV$(q;pNf-9dnafNhKkCW(X+J_2rt z^eQSu10}Mq3k5Zm8+uAg{|PYTTPqunwDV@>_jdQRSMx9ZKe^o7>5K`#PY4mCRkN43 zRSC)!5iAxdM~zo02POPX4c7~I-Lf9$V(_8* z-9lnY=}N1Ql6~?QdQqkMf3~B&_caYRP^7&!%@`YhdI9G|i)O--H8pDi4WcD8Vab`A uPu|4Sl#(UBT`t4TD!pPTOUBfE%PPFAlAriA`5C8FuZ36HMqK{Hj*Dl3VtXb4 delta 984 zcmZuwK~ED=5PsX1hCm^0cbCVK3f0hM1BXR}hV&2UT|E#E+pUoxsHLSb2q7duK^kKu zlX%dBH$57&M-x5hNe;x5i6;+6k0c(raB-&lUK|LM?0hrdH#6_;zPE2G?aK4%t5a8s z$|^lVh$KD_^%E>N!$wnt)f)OZ37U;?Nxa|tnl#=;w^HREBM0Bc?dWNLJK>CDqYzyp z+rj^C68zj-CqyEP>RG!6^{kES-cWcOM)J~_RoT44#|m4pf$BbG@Fj2V*B$ttUolS) zm6-0q#V!+`nFaW3TJX^<7%gHhkhaRoQz{-rT!UWA@7rQ(6^<;~x1g9I#BEr#d}AA4 zq2GZ6^y_efeitTe^0T&oxy2^DP;n0N3FBSHx8Z|*-3X%Oz@KjTQOZQe!@tt-(#^o{ z(kPVOjB_&)ms3~3rp!R#%ApyiR+t(j;OFo_7%-VmLE9b0Uqa%pCJ{AHi&Yt)RGqucwV7N7q%G<~<~M zeNh!8;BZWCP}h=T2&kHju-1uUH>qM;z0UY)71Nx?IXunb_53a7grNT{wn3l_}_mEV*3F=ymK6{60V-vuKf0^KN`Tzg` From d1e0564fcd306ca4138b77267a66257a2bc1d7e9 Mon Sep 17 00:00:00 2001 From: Karol Harasim Date: Tue, 2 Jun 2020 10:20:19 +0200 Subject: [PATCH 144/234] Update asm.S Co-authored-by: Vadim Kaushan --- riscv-rt/asm.S | 1 + 1 file changed, 1 insertion(+) diff --git a/riscv-rt/asm.S b/riscv-rt/asm.S index 997162bf..a073774a 100644 --- a/riscv-rt/asm.S +++ b/riscv-rt/asm.S @@ -173,6 +173,7 @@ _start_trap: .section .text .global default_setup_interrupts +.global default_setup_interrupts default_setup_interrupts: // Set trap handler la t0, _start_trap From 67f67f0f846613e8303206d4f36a04991c9232f9 Mon Sep 17 00:00:00 2001 From: Karol Harasim Date: Tue, 2 Jun 2020 10:21:23 +0200 Subject: [PATCH 145/234] Remove duplicated .global from default_setup_interrupts --- riscv-rt/asm.S | 1 - 1 file changed, 1 deletion(-) diff --git a/riscv-rt/asm.S b/riscv-rt/asm.S index a073774a..997162bf 100644 --- a/riscv-rt/asm.S +++ b/riscv-rt/asm.S @@ -173,7 +173,6 @@ _start_trap: .section .text .global default_setup_interrupts -.global default_setup_interrupts default_setup_interrupts: // Set trap handler la t0, _start_trap From 9275ca97b55cb888ec9abe0ebfce7de669cd691b Mon Sep 17 00:00:00 2001 From: Karol Harasim Date: Tue, 2 Jun 2020 10:27:04 +0200 Subject: [PATCH 146/234] Add doc to PROVIDE. --- riscv-rt/link.x | 1 + 1 file changed, 1 insertion(+) diff --git a/riscv-rt/link.x b/riscv-rt/link.x index 89ed07b8..3698db0f 100644 --- a/riscv-rt/link.x +++ b/riscv-rt/link.x @@ -22,6 +22,7 @@ PROVIDE(ExceptionHandler = DefaultExceptionHandler); then the function this points to will be called before the RAM is initialized. */ PROVIDE(__pre_init = default_pre_init); +/* A PAC/HAL defined routine that should initialize custom interrupt controller if needed. */ PROVIDE(_setup_interrupts = default_setup_interrupts); /* # Multi-processing hook function From 3047813439db173f46849d54da4e97762de1294e Mon Sep 17 00:00:00 2001 From: Karol Harasim Date: Tue, 2 Jun 2020 10:29:25 +0200 Subject: [PATCH 147/234] Document .weak usage. --- riscv-rt/asm.S | 1 + 1 file changed, 1 insertion(+) diff --git a/riscv-rt/asm.S b/riscv-rt/asm.S index 997162bf..7165ddf0 100644 --- a/riscv-rt/asm.S +++ b/riscv-rt/asm.S @@ -125,6 +125,7 @@ _abs_start: */ .section .trap, "ax" .global _start_trap +/* Make it .weak so PAC/HAL can provide their own if needed. */ .weak _start_trap _start_trap: From 73ba258ce919dd6b5e636ee88bdaadc12a35bf1e Mon Sep 17 00:00:00 2001 From: Karol Harasim Date: Tue, 2 Jun 2020 10:29:38 +0200 Subject: [PATCH 148/234] Regenerate BLOBs --- riscv-rt/bin/riscv32i-unknown-none-elf.a | Bin 8070 -> 8070 bytes riscv-rt/bin/riscv32ic-unknown-none-elf.a | Bin 7930 -> 7930 bytes riscv-rt/bin/riscv32im-unknown-none-elf.a | Bin 7758 -> 7758 bytes riscv-rt/bin/riscv32imc-unknown-none-elf.a | Bin 7626 -> 7626 bytes riscv-rt/bin/riscv64i-unknown-none-elf.a | Bin 12974 -> 12974 bytes riscv-rt/bin/riscv64ic-unknown-none-elf.a | Bin 12830 -> 12830 bytes riscv-rt/bin/riscv64im-unknown-none-elf.a | Bin 12446 -> 12446 bytes riscv-rt/bin/riscv64imc-unknown-none-elf.a | Bin 12326 -> 12326 bytes 8 files changed, 0 insertions(+), 0 deletions(-) diff --git a/riscv-rt/bin/riscv32i-unknown-none-elf.a b/riscv-rt/bin/riscv32i-unknown-none-elf.a index 520d90a7a188049855f1e6ad808ab3a37fd10fa8..928edbec266d815647485337dbecd0a354ee5136 100644 GIT binary patch delta 20 ccmZp(Z?oU(^b diff --git a/riscv-rt/bin/riscv32ic-unknown-none-elf.a b/riscv-rt/bin/riscv32ic-unknown-none-elf.a index 0b43c5ff1339105b9d2949f6010f44ed84821010..8c48759c538d74f62365c355a8e3d27ed9031b57 100644 GIT binary patch delta 20 ccmexm`^$Di95Z9{t<8 diff --git a/riscv-rt/bin/riscv32im-unknown-none-elf.a b/riscv-rt/bin/riscv32im-unknown-none-elf.a index 53c1428e8c7b2840df5980a067a71dbb3290ace1..541bc2912f643ebd6ca75aee3cbca1107a8be45e 100644 GIT binary patch delta 20 ccmX?SbIxYN9%jbo$$Ob!FmBqsjAex+0Axf76aWAK delta 20 ccmX?SbIxYN9%ja-$$Ob!FmBwujAex+0Aw-=5&!@I diff --git a/riscv-rt/bin/riscv32imc-unknown-none-elf.a b/riscv-rt/bin/riscv32imc-unknown-none-elf.a index dd554a6b187c8feb26ef433e5e818cf8ff3cee32..f09206c4c66ed8d025489e9d44571041a6f78c7f 100644 GIT binary patch delta 38 ucmX?Qead=+88d4$BO^1@WJl)6Ni2esXEO6n_F?v$#3IkQX|n>$DoFs@#|p>* delta 38 ucmX?Qead=+88d4WBO^1@WJl)6Ni2esXEO6n_F?v$#3IkQakB!;DoFs@qYB0V diff --git a/riscv-rt/bin/riscv64i-unknown-none-elf.a b/riscv-rt/bin/riscv64i-unknown-none-elf.a index 39bb3894171e238f34ecb4154f67cef0b287c972..a9d856484e0d78ebeb18b733ed4316bfde4ba44c 100644 GIT binary patch delta 20 ccmZ3Nx-NBt0t;jFWJQ)YjGH#|u`bXB08{D*X#fBK delta 20 ccmZ3Nx-NBt0t;i)WJQ)Yj2k!eu`bXB08`ipX8-^I diff --git a/riscv-rt/bin/riscv64ic-unknown-none-elf.a b/riscv-rt/bin/riscv64ic-unknown-none-elf.a index 25ea48e9aef0e7076124499dd186f078ae4b6327..84cac63eb1476816e8719600881b6f43f2921e4c 100644 GIT binary patch delta 20 ccmbQ2GB0IA4>M!)i~s-t delta 20 ccmbQ2GB0IA4>M!a}K~ZrXf<<(M`AtKJH^ delta 31 ncmbQ2I4^O-D`wUvMn-0)$%!nHlUUd$`>}K~Zrpr><(M`AtHBDl diff --git a/riscv-rt/bin/riscv64imc-unknown-none-elf.a b/riscv-rt/bin/riscv64imc-unknown-none-elf.a index d9c6927e7c8df929972010a46a182e9ac234aec6..f5dbd9b001d5121aac0818683b0e756c982d0f8a 100644 GIT binary patch delta 25 hcmZ3Muq^Z4FG>L377x? delta 25 hcmZ3Muq^Z4FG=}36=l= From 4f09eda5c1086237b4aa3d23913a923e10ae334e Mon Sep 17 00:00:00 2001 From: Karol Harasim Date: Tue, 2 Jun 2020 10:51:47 +0200 Subject: [PATCH 149/234] Update CHANGELOG.md --- riscv-rt/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/riscv-rt/CHANGELOG.md b/riscv-rt/CHANGELOG.md index 517c5092..fe1cff9a 100644 --- a/riscv-rt/CHANGELOG.md +++ b/riscv-rt/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] +### Added + +- Add support to initialize custom interrupt controllers. + ## [v0.7.0] - 2020-03-10 ### Added From ed6c4aec350745395aec4fead46aee13f07b6f6a Mon Sep 17 00:00:00 2001 From: Karol Harasim Date: Tue, 2 Jun 2020 11:41:00 +0200 Subject: [PATCH 150/234] Release v0.7.1 --- riscv-rt/CHANGELOG.md | 9 +++++++-- riscv-rt/Cargo.toml | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/riscv-rt/CHANGELOG.md b/riscv-rt/CHANGELOG.md index fe1cff9a..3c440942 100644 --- a/riscv-rt/CHANGELOG.md +++ b/riscv-rt/CHANGELOG.md @@ -7,10 +7,15 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] +## [v0.7.1] - 2020-06-02 + ### Added - Add support to initialize custom interrupt controllers. +### Changed + - Exception handler may return now + ## [v0.7.0] - 2020-03-10 ### Added @@ -31,5 +36,5 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Set MSRV to 1.38 -[Unreleased]: https://github.com/rust-embedded/riscv-rt/compare/v0.7.0...HEAD -[v0.7.0]: https://github.com/rust-embedded/riscv/compare/v0.6.1...v0.7.0 +[Unreleased]: https://github.com/rust-embedded/riscv-rt/compare/v0.7.1...HEAD +[v0.7.1]: https://github.com/rust-embedded/riscv/compare/v0.7.0...v0.7.1 diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index 1daf8799..e46c9dcc 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "riscv-rt" -version = "0.7.0" +version = "0.7.1" repository = "https://github.com/rust-embedded/riscv-rt" authors = ["The RISC-V Team "] categories = ["embedded", "no-std"] From f1ef3b4ba2bbc9a031588e59974a858eb23502e7 Mon Sep 17 00:00:00 2001 From: Karol Harasim Date: Tue, 2 Jun 2020 11:47:42 +0200 Subject: [PATCH 151/234] Update CHANGELOG.md Co-authored-by: Vadim Kaushan --- riscv-rt/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/riscv-rt/CHANGELOG.md b/riscv-rt/CHANGELOG.md index 3c440942..4545907d 100644 --- a/riscv-rt/CHANGELOG.md +++ b/riscv-rt/CHANGELOG.md @@ -38,3 +38,4 @@ and this project adheres to [Semantic Versioning](http://semver.org/). [Unreleased]: https://github.com/rust-embedded/riscv-rt/compare/v0.7.1...HEAD [v0.7.1]: https://github.com/rust-embedded/riscv/compare/v0.7.0...v0.7.1 +[v0.7.0]: https://github.com/rust-embedded/riscv/compare/v0.6.1...v0.7.0 From 13744d9152c1d80e47af02eae7354e440e0db282 Mon Sep 17 00:00:00 2001 From: Karol Harasim Date: Tue, 2 Jun 2020 11:47:53 +0200 Subject: [PATCH 152/234] Fix format. Co-authored-by: Vadim Kaushan --- riscv-rt/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/riscv-rt/CHANGELOG.md b/riscv-rt/CHANGELOG.md index 4545907d..26ea86f0 100644 --- a/riscv-rt/CHANGELOG.md +++ b/riscv-rt/CHANGELOG.md @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Add support to initialize custom interrupt controllers. ### Changed + - Exception handler may return now ## [v0.7.0] - 2020-03-10 From 2880a75b23aa0847a855c11db3b0c8586efb5305 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Wed, 15 Jul 2020 04:16:13 +0300 Subject: [PATCH 153/234] Preserve .eh_frame and .eh_frame_hdr --- riscv-rt/link.x | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/riscv-rt/link.x b/riscv-rt/link.x index 3698db0f..73553cfb 100644 --- a/riscv-rt/link.x +++ b/riscv-rt/link.x @@ -111,11 +111,8 @@ SECTIONS KEEP(*(.got .got.*)); } - /* Discard .eh_frame, we are not doing unwind on panic so it is not needed */ - /DISCARD/ : - { - *(.eh_frame); - } + .eh_frame (INFO) : { KEEP(*(.eh_frame)) } + .eh_frame_hdr (INFO) : { *(.eh_frame_hdr) } } /* Do not exceed this mark in the error messages above | */ From 48d45c3f60c348178f0a8f1f2b9049c8fed50b95 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Wed, 15 Jul 2020 04:25:15 +0300 Subject: [PATCH 154/234] Add change log entry --- riscv-rt/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/riscv-rt/CHANGELOG.md b/riscv-rt/CHANGELOG.md index 26ea86f0..848ab0b2 100644 --- a/riscv-rt/CHANGELOG.md +++ b/riscv-rt/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] +### Changed + +- Preserve `.eh_frame` and `.eh_frame_hdr` sections + ## [v0.7.1] - 2020-06-02 ### Added From a9a3fa45657b42a732eeb99b21bea3dd4a438a39 Mon Sep 17 00:00:00 2001 From: Richard Meadows <962920+richardeoin@users.noreply.github.com> Date: Wed, 15 Jul 2020 22:53:29 +0200 Subject: [PATCH 155/234] Update link.x Similar to #38, riscv compilers may also generate 'small ro data' `.srodata` sections. This doesn't appear to be well documented, but see [this blog post](https://www.sifive.com/blog/all-aboard-part-3-linker-relaxation-in-riscv-toolchain) for small amount of context. --- riscv-rt/CHANGELOG.md | 1 + riscv-rt/link.x | 1 + 2 files changed, 2 insertions(+) diff --git a/riscv-rt/CHANGELOG.md b/riscv-rt/CHANGELOG.md index 848ab0b2..c7538c83 100644 --- a/riscv-rt/CHANGELOG.md +++ b/riscv-rt/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ### Changed - Preserve `.eh_frame` and `.eh_frame_hdr` sections +- Place `.srodata` and `.srodata.*` sections in `.rodata` ## [v0.7.1] - 2020-06-02 diff --git a/riscv-rt/link.x b/riscv-rt/link.x index 73553cfb..d319d097 100644 --- a/riscv-rt/link.x +++ b/riscv-rt/link.x @@ -57,6 +57,7 @@ SECTIONS .rodata : ALIGN(4) { + *(.srodata .srodata.*); *(.rodata .rodata.*); /* 4-byte align the end (VMA) of this section. From 712433d6b88c2ad229d1d86bb28f3fb4783bf3df Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Thu, 16 Jul 2020 00:11:22 +0300 Subject: [PATCH 156/234] Release v0.7.2 --- riscv-rt/CHANGELOG.md | 5 ++++- riscv-rt/Cargo.toml | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/riscv-rt/CHANGELOG.md b/riscv-rt/CHANGELOG.md index c7538c83..4b7ba5ed 100644 --- a/riscv-rt/CHANGELOG.md +++ b/riscv-rt/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] +## [v0.7.2] - 2020-07-16 + ### Changed - Preserve `.eh_frame` and `.eh_frame_hdr` sections @@ -42,6 +44,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Set MSRV to 1.38 -[Unreleased]: https://github.com/rust-embedded/riscv-rt/compare/v0.7.1...HEAD +[Unreleased]: https://github.com/rust-embedded/riscv-rt/compare/v0.7.2...HEAD +[v0.7.2]: https://github.com/rust-embedded/riscv/compare/v0.7.1...v0.7.2 [v0.7.1]: https://github.com/rust-embedded/riscv/compare/v0.7.0...v0.7.1 [v0.7.0]: https://github.com/rust-embedded/riscv/compare/v0.6.1...v0.7.0 diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index e46c9dcc..f261161d 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "riscv-rt" -version = "0.7.1" +version = "0.7.2" repository = "https://github.com/rust-embedded/riscv-rt" authors = ["The RISC-V Team "] categories = ["embedded", "no-std"] From 47416ae5f3226f6c768022f224f4ac9523e16c23 Mon Sep 17 00:00:00 2001 From: luojia65 Date: Sat, 18 Jul 2020 22:13:26 +0800 Subject: [PATCH 157/234] Update riscv dependency to version 0.6 --- riscv-rt/CHANGELOG.md | 7 ++++++- riscv-rt/Cargo.toml | 2 +- riscv-rt/README.md | 2 +- riscv-rt/src/lib.rs | 2 +- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/riscv-rt/CHANGELOG.md b/riscv-rt/CHANGELOG.md index 4b7ba5ed..9d441243 100644 --- a/riscv-rt/CHANGELOG.md +++ b/riscv-rt/CHANGELOG.md @@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] +### Changed + +- Update `riscv` to version 0.6 +- Update Minimum Supported Rust Version to 1.42.0 + ## [v0.7.2] - 2020-07-16 ### Changed @@ -22,7 +27,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ### Changed - - Exception handler may return now +- Exception handler may return now ## [v0.7.0] - 2020-03-10 diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index f261161d..7d93350d 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -10,7 +10,7 @@ license = "ISC" [dependencies] r0 = "1.0.0" -riscv = "0.5.5" +riscv = "0.6" riscv-rt-macros = { path = "macros", version = "0.1.6" } [features] diff --git a/riscv-rt/README.md b/riscv-rt/README.md index af56b274..b5d6852e 100644 --- a/riscv-rt/README.md +++ b/riscv-rt/README.md @@ -12,7 +12,7 @@ This project is developed and maintained by the [RISC-V team][team]. ## Minimum Supported Rust Version (MSRV) -This crate is guaranteed to compile on stable Rust 1.38.0 and up. It *might* +This crate is guaranteed to compile on stable Rust 1.42.0 and up. It *might* compile with older versions but that may change in any new patch release. ## License diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index b85a715e..eda4f6ed 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -2,7 +2,7 @@ //! //! # Minimum Supported Rust Version (MSRV) //! -//! This crate is guaranteed to compile on stable Rust 1.38 and up. It *might* +//! This crate is guaranteed to compile on stable Rust 1.42 and up. It *might* //! compile with older versions but that may change in any new patch release. //! //! # Features From 4e372a8f547fc4dbd85f7ff32b670e288a6ea1ed Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Sat, 18 Jul 2020 17:32:16 +0300 Subject: [PATCH 158/234] Release v0.8.0 --- riscv-rt/CHANGELOG.md | 5 ++++- riscv-rt/Cargo.toml | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/riscv-rt/CHANGELOG.md b/riscv-rt/CHANGELOG.md index 9d441243..a62fb7ae 100644 --- a/riscv-rt/CHANGELOG.md +++ b/riscv-rt/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] +## [v0.8.0] - 2020-07-18 + ### Changed - Update `riscv` to version 0.6 @@ -49,7 +51,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Set MSRV to 1.38 -[Unreleased]: https://github.com/rust-embedded/riscv-rt/compare/v0.7.2...HEAD +[Unreleased]: https://github.com/rust-embedded/riscv-rt/compare/v0.8.0...HEAD +[v0.8.0]: https://github.com/rust-embedded/riscv/compare/v0.7.2...v0.8.0 [v0.7.2]: https://github.com/rust-embedded/riscv/compare/v0.7.1...v0.7.2 [v0.7.1]: https://github.com/rust-embedded/riscv/compare/v0.7.0...v0.7.1 [v0.7.0]: https://github.com/rust-embedded/riscv/compare/v0.6.1...v0.7.0 diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index 7d93350d..b6929c22 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "riscv-rt" -version = "0.7.2" +version = "0.8.0" repository = "https://github.com/rust-embedded/riscv-rt" authors = ["The RISC-V Team "] categories = ["embedded", "no-std"] From ed55f39e00b6f223806311ed8c0a5df7f9229b1f Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Sun, 2 Aug 2020 03:47:49 +0300 Subject: [PATCH 159/234] Update dependencies of riscv-rt-macros --- riscv-rt/macros/Cargo.toml | 9 +++++---- riscv-rt/macros/src/lib.rs | 36 +++++++++++++++++++----------------- 2 files changed, 24 insertions(+), 21 deletions(-) diff --git a/riscv-rt/macros/Cargo.toml b/riscv-rt/macros/Cargo.toml index 7adbab68..511e681a 100644 --- a/riscv-rt/macros/Cargo.toml +++ b/riscv-rt/macros/Cargo.toml @@ -16,13 +16,14 @@ version = "0.1.6" proc-macro = true [dependencies] -quote = "0.6.8" -proc-macro2 = "0.4.20" +quote = "1.0" +proc-macro2 = "1.0" [dependencies.syn] +version = "1.0" features = ["extra-traits", "full"] -version = "0.15.13" [dependencies.rand] -version = "0.5.5" +version = "0.7.3" default-features = false +features = ["small_rng"] diff --git a/riscv-rt/macros/src/lib.rs b/riscv-rt/macros/src/lib.rs index 91ef9117..375d10c9 100644 --- a/riscv-rt/macros/src/lib.rs +++ b/riscv-rt/macros/src/lib.rs @@ -58,14 +58,15 @@ pub fn entry(args: TokenStream, input: TokenStream) -> TokenStream { let f = parse_macro_input!(input as ItemFn); // check the function signature - let valid_signature = f.constness.is_none() + let valid_signature = f.sig.constness.is_none() + && f.sig.asyncness.is_none() && f.vis == Visibility::Inherited - && f.abi.is_none() - && f.decl.inputs.is_empty() - && f.decl.generics.params.is_empty() - && f.decl.generics.where_clause.is_none() - && f.decl.variadic.is_none() - && match f.decl.output { + && f.sig.abi.is_none() + && f.sig.inputs.is_empty() + && f.sig.generics.params.is_empty() + && f.sig.generics.where_clause.is_none() + && f.sig.variadic.is_none() + && match f.sig.output { ReturnType::Default => false, ReturnType::Type(_, ref ty) => match **ty { Type::Never(_) => true, @@ -90,7 +91,7 @@ pub fn entry(args: TokenStream, input: TokenStream) -> TokenStream { // XXX should we blacklist other attributes? let attrs = f.attrs; - let unsafety = f.unsafety; + let unsafety = f.sig.unsafety; let hash = random_ident(); let stmts = f.block.stmts; @@ -133,15 +134,16 @@ pub fn pre_init(args: TokenStream, input: TokenStream) -> TokenStream { let f = parse_macro_input!(input as ItemFn); // check the function signature - let valid_signature = f.constness.is_none() + let valid_signature = f.sig.constness.is_none() + && f.sig.asyncness.is_none() && f.vis == Visibility::Inherited - && f.unsafety.is_some() - && f.abi.is_none() - && f.decl.inputs.is_empty() - && f.decl.generics.params.is_empty() - && f.decl.generics.where_clause.is_none() - && f.decl.variadic.is_none() - && match f.decl.output { + && f.sig.unsafety.is_some() + && f.sig.abi.is_none() + && f.sig.inputs.is_empty() + && f.sig.generics.params.is_empty() + && f.sig.generics.where_clause.is_none() + && f.sig.variadic.is_none() + && match f.sig.output { ReturnType::Default => true, ReturnType::Type(_, ref ty) => match **ty { Type::Tuple(ref tuple) => tuple.elems.is_empty(), @@ -166,7 +168,7 @@ pub fn pre_init(args: TokenStream, input: TokenStream) -> TokenStream { // XXX should we blacklist other attributes? let attrs = f.attrs; - let ident = f.ident; + let ident = f.sig.ident; let block = f.block; quote!( From ad9bed1d2cdcd26223f7519ed3737dfb0a72738d Mon Sep 17 00:00:00 2001 From: hasheddan Date: Sat, 6 Mar 2021 12:58:58 -0600 Subject: [PATCH 160/234] Fix link to RISC-V team in wg repo Fixes link to properly direct to heading in wg repo README.md. Signed-off-by: hasheddan --- riscv-rt/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/riscv-rt/README.md b/riscv-rt/README.md index b5d6852e..276c17d0 100644 --- a/riscv-rt/README.md +++ b/riscv-rt/README.md @@ -38,4 +38,4 @@ Conduct][CoC], the maintainer of this crate, the [RISC-V team][team], promises to intervene to uphold that code of conduct. [CoC]: CODE_OF_CONDUCT.md -[team]: https://github.com/rust-embedded/wg#the-riscv-team +[team]: https://github.com/rust-embedded/wg#the-risc-v-team From 2042f3b645cbaecfc64840c52ea27ca8c00e50ee Mon Sep 17 00:00:00 2001 From: Jake Merdich Date: Sat, 26 Jun 2021 13:24:50 -0400 Subject: [PATCH 161/234] [NFC] Fix typo 'suppoted' -> 'supported' Interested in using this crate and saw this typo when browsing the docs. --- riscv-rt/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index eda4f6ed..29c35d7e 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -187,7 +187,7 @@ //! //! ### `_max_hart_id` //! -//! This symbol defines the maximum hart id suppoted. All harts with id +//! This symbol defines the maximum hart id supported. All harts with id //! greater than `_max_hart_id` will be redirected to `abort()`. //! //! This symbol is supposed to be redefined in platform support crates for From 2f131cd1e13a9e5da5caf249d3220ce106546eae Mon Sep 17 00:00:00 2001 From: Ales Katona Date: Sun, 18 Jul 2021 19:17:43 -0700 Subject: [PATCH 162/234] switch to Github Actions for CI --- riscv-rt/.github/bors.toml | 6 +++- riscv-rt/.github/workflows/ci.yaml | 40 +++++++++++++++++++++ riscv-rt/.github/workflows/rustfmt.yaml | 24 +++++++++++++ riscv-rt/.travis.yml | 48 ------------------------- riscv-rt/ci/install.sh | 18 ---------- riscv-rt/ci/script.sh | 24 ------------- riscv-rt/macros/src/lib.rs | 4 +-- 7 files changed, 70 insertions(+), 94 deletions(-) create mode 100644 riscv-rt/.github/workflows/ci.yaml create mode 100644 riscv-rt/.github/workflows/rustfmt.yaml delete mode 100644 riscv-rt/.travis.yml delete mode 100755 riscv-rt/ci/install.sh delete mode 100755 riscv-rt/ci/script.sh diff --git a/riscv-rt/.github/bors.toml b/riscv-rt/.github/bors.toml index ca42be0a..cce15496 100644 --- a/riscv-rt/.github/bors.toml +++ b/riscv-rt/.github/bors.toml @@ -1,4 +1,8 @@ block_labels = ["needs-decision"] delete_merged_branches = true required_approvals = 1 -status = ["continuous-integration/travis-ci/push"] +status = [ + "ci-linux (stable)", + "ci-linux (1.42.0)", + "Rustfmt" +] diff --git a/riscv-rt/.github/workflows/ci.yaml b/riscv-rt/.github/workflows/ci.yaml new file mode 100644 index 00000000..c04f7c3d --- /dev/null +++ b/riscv-rt/.github/workflows/ci.yaml @@ -0,0 +1,40 @@ +on: + push: + branches: [ staging, trying, master ] + pull_request: + +name: Continuous integration + +jobs: + ci-linux: + runs-on: ubuntu-20.04 + continue-on-error: ${{ matrix.experimental || false }} + strategy: + matrix: + # All generated code should be running on stable now, MRSV is 1.42.0 + rust: [nightly, stable, 1.42.0] + + include: + # Nightly is only for reference and allowed to fail + - rust: nightly + experimental: true + + steps: + - uses: actions/checkout@v2 + - uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: ${{ matrix.rust }} + override: true + - name: Install all Rust targets for ${{ matrix.rust }} + run: rustup target install --toolchain=${{ matrix.rust }} riscv32imac-unknown-none-elf riscv64imac-unknown-none-elf riscv64gc-unknown-none-elf + - name: Install riscv gcc + run: sudo apt-get update && sudo apt-get install -y gcc-riscv64-unknown-elf + - name: Run CI script for riscv32imac-unknown-none-elf under ${{ matrix.rust }} + run: TARGET=riscv32imac-unknown-none-elf cargo check + - name: Run CI script for riscv64imac-unknown-none-elf under ${{ matrix.rust }} + run: TARGET=riscv64imac-unknown-none-elf cargo check + - name: Run CI script for riscv64gc-unknown-none-elf under ${{ matrix.rust }} + run: TARGET=riscv64gc-unknown-none-elf cargo check + - name: Check blobs + run: ./check-blobs.sh diff --git a/riscv-rt/.github/workflows/rustfmt.yaml b/riscv-rt/.github/workflows/rustfmt.yaml new file mode 100644 index 00000000..07273842 --- /dev/null +++ b/riscv-rt/.github/workflows/rustfmt.yaml @@ -0,0 +1,24 @@ + +on: + push: + branches: [ staging, trying, master ] + pull_request: + +name: Code formatting check + +jobs: + fmt: + name: Rustfmt + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v2 + - uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: stable + override: true + components: rustfmt + - uses: actions-rs/cargo@v1 + with: + command: fmt + args: --all -- --check \ No newline at end of file diff --git a/riscv-rt/.travis.yml b/riscv-rt/.travis.yml deleted file mode 100644 index 0cd5a417..00000000 --- a/riscv-rt/.travis.yml +++ /dev/null @@ -1,48 +0,0 @@ -language: rust - -rust: -- nightly -- stable -- 1.38.0 # MSRV - -env: -- TARGET=x86_64-unknown-linux-gnu -- TARGET=riscv32i-unknown-none-elf -- TARGET=riscv32imac-unknown-none-elf -- TARGET=riscv64imac-unknown-none-elf - -if: (branch = staging OR branch = trying OR branch = master) OR (type = pull_request AND branch = master) - -matrix: - allow_failures: - - rust: nightly - include: - - env: CHECK_BLOBS=1 - rust: - language: bash - if: (branch = staging OR branch = trying OR branch = master) OR (type = pull_request AND branch = master) - - env: RUSTFMT=1 - rust: stable - if: (branch = staging OR branch = trying OR branch = master) OR (type = pull_request AND branch = master) - - -install: - - ci/install.sh - -script: - - ci/script.sh - -cache: - cargo: true - directories: - - gcc - -branches: - only: - - master - - staging - - trying - -notifications: - email: - on_success: never diff --git a/riscv-rt/ci/install.sh b/riscv-rt/ci/install.sh deleted file mode 100755 index 2378704d..00000000 --- a/riscv-rt/ci/install.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env bash - -set -euxo pipefail - -if [ -n "${TARGET:-}" ]; then - rustup target add $TARGET -fi - -if [ -n "${CHECK_BLOBS:-}" ]; then - if [ ! -d gcc/bin ]; then - mkdir -p gcc - curl -L https://static.dev.sifive.com/dev-tools/riscv64-unknown-elf-gcc-8.1.0-2018.12.0-x86_64-linux-ubuntu14.tar.gz | tar --strip-components=1 -C gcc -xz - fi -fi - -if [ -n "${RUSTFMT:-}" ]; then - rustup component add rustfmt -fi diff --git a/riscv-rt/ci/script.sh b/riscv-rt/ci/script.sh deleted file mode 100755 index e35612e4..00000000 --- a/riscv-rt/ci/script.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env bash - -set -euxo pipefail - -if [ -n "${TARGET:-}" ]; then - cargo check --target $TARGET - - if [[ $TARGET == riscv* ]]; then - cargo check --target $TARGET --examples - fi - - if [ $TRAVIS_RUST_VERSION = nightly ]; then - cargo check --target $TARGET --features inline-asm - fi -fi - -if [ -n "${CHECK_BLOBS:-}" ]; then - PATH="$PATH:$PWD/gcc/bin" - ./check-blobs.sh -fi - -if [ -n "${RUSTFMT:-}" ]; then - cargo fmt -- --check -fi diff --git a/riscv-rt/macros/src/lib.rs b/riscv-rt/macros/src/lib.rs index 375d10c9..96fdd2cd 100644 --- a/riscv-rt/macros/src/lib.rs +++ b/riscv-rt/macros/src/lib.rs @@ -14,9 +14,7 @@ use rand::Rng; use rand::SeedableRng; use std::sync::atomic::{AtomicUsize, Ordering}; use std::time::{SystemTime, UNIX_EPOCH}; -use syn::{ - parse, spanned::Spanned, Ident, ItemFn, ReturnType, Type, Visibility, -}; +use syn::{parse, spanned::Spanned, Ident, ItemFn, ReturnType, Type, Visibility}; static CALL_COUNT: AtomicUsize = AtomicUsize::new(0); From 9a190215cadaf2bba2f34657ad9c8caa7deb8477 Mon Sep 17 00:00:00 2001 From: Ales Katona Date: Tue, 20 Jul 2021 09:27:34 -0700 Subject: [PATCH 163/234] use --target for CI checks --- riscv-rt/.github/workflows/ci.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/riscv-rt/.github/workflows/ci.yaml b/riscv-rt/.github/workflows/ci.yaml index c04f7c3d..7d68c697 100644 --- a/riscv-rt/.github/workflows/ci.yaml +++ b/riscv-rt/.github/workflows/ci.yaml @@ -31,10 +31,10 @@ jobs: - name: Install riscv gcc run: sudo apt-get update && sudo apt-get install -y gcc-riscv64-unknown-elf - name: Run CI script for riscv32imac-unknown-none-elf under ${{ matrix.rust }} - run: TARGET=riscv32imac-unknown-none-elf cargo check + run: cargo check --target riscv32imac-unknown-none-elf - name: Run CI script for riscv64imac-unknown-none-elf under ${{ matrix.rust }} - run: TARGET=riscv64imac-unknown-none-elf cargo check + run: cargo check --target riscv64imac-unknown-none-elf - name: Run CI script for riscv64gc-unknown-none-elf under ${{ matrix.rust }} - run: TARGET=riscv64gc-unknown-none-elf cargo check + run: cargo check --target riscv64gc-unknown-none-elf - name: Check blobs run: ./check-blobs.sh From 27b0ed55e04b387cc4228fbd5ee368456390656d Mon Sep 17 00:00:00 2001 From: smsxgli Date: Sat, 18 Sep 2021 21:19:57 +0800 Subject: [PATCH 164/234] update to riscv 0.7 --- riscv-rt/Cargo.toml | 2 +- riscv-rt/assemble.ps1 | 19 +++++++++++---- riscv-rt/assemble.sh | 23 ++++++++++++++++--- riscv-rt/bin/riscv32i-unknown-none-elf.a | Bin 8070 -> 8194 bytes riscv-rt/bin/riscv32ic-unknown-none-elf.a | Bin 7930 -> 8054 bytes riscv-rt/bin/riscv32if-unknown-none-elf.a | Bin 0 -> 8198 bytes riscv-rt/bin/riscv32ifc-unknown-none-elf.a | Bin 0 -> 8058 bytes riscv-rt/bin/riscv32ifd-unknown-none-elf.a | Bin 0 -> 8202 bytes riscv-rt/bin/riscv32ifdc-unknown-none-elf.a | Bin 0 -> 8066 bytes riscv-rt/bin/riscv32im-unknown-none-elf.a | Bin 7758 -> 7882 bytes riscv-rt/bin/riscv32imc-unknown-none-elf.a | Bin 7626 -> 7750 bytes riscv-rt/bin/riscv32imf-unknown-none-elf.a | Bin 0 -> 7886 bytes riscv-rt/bin/riscv32imfc-unknown-none-elf.a | Bin 0 -> 7758 bytes riscv-rt/bin/riscv32imfd-unknown-none-elf.a | Bin 0 -> 7894 bytes riscv-rt/bin/riscv32imfdc-unknown-none-elf.a | Bin 0 -> 7762 bytes riscv-rt/bin/riscv64i-unknown-none-elf.a | Bin 12974 -> 13102 bytes riscv-rt/bin/riscv64ic-unknown-none-elf.a | Bin 12830 -> 12966 bytes riscv-rt/bin/riscv64if-unknown-none-elf.a | Bin 0 -> 13110 bytes riscv-rt/bin/riscv64ifc-unknown-none-elf.a | Bin 0 -> 12966 bytes riscv-rt/bin/riscv64ifd-unknown-none-elf.a | Bin 0 -> 13110 bytes riscv-rt/bin/riscv64ifdc-unknown-none-elf.a | Bin 0 -> 12974 bytes riscv-rt/bin/riscv64im-unknown-none-elf.a | Bin 12446 -> 12598 bytes riscv-rt/bin/riscv64imc-unknown-none-elf.a | Bin 12326 -> 12470 bytes riscv-rt/bin/riscv64imf-unknown-none-elf.a | Bin 0 -> 12598 bytes riscv-rt/bin/riscv64imfc-unknown-none-elf.a | Bin 0 -> 12478 bytes riscv-rt/bin/riscv64imfd-unknown-none-elf.a | Bin 0 -> 12606 bytes riscv-rt/bin/riscv64imfdc-unknown-none-elf.a | Bin 0 -> 12486 bytes riscv-rt/build.rs | 2 +- 28 files changed, 37 insertions(+), 9 deletions(-) create mode 100644 riscv-rt/bin/riscv32if-unknown-none-elf.a create mode 100644 riscv-rt/bin/riscv32ifc-unknown-none-elf.a create mode 100644 riscv-rt/bin/riscv32ifd-unknown-none-elf.a create mode 100644 riscv-rt/bin/riscv32ifdc-unknown-none-elf.a create mode 100644 riscv-rt/bin/riscv32imf-unknown-none-elf.a create mode 100644 riscv-rt/bin/riscv32imfc-unknown-none-elf.a create mode 100644 riscv-rt/bin/riscv32imfd-unknown-none-elf.a create mode 100644 riscv-rt/bin/riscv32imfdc-unknown-none-elf.a create mode 100644 riscv-rt/bin/riscv64if-unknown-none-elf.a create mode 100644 riscv-rt/bin/riscv64ifc-unknown-none-elf.a create mode 100644 riscv-rt/bin/riscv64ifd-unknown-none-elf.a create mode 100644 riscv-rt/bin/riscv64ifdc-unknown-none-elf.a create mode 100644 riscv-rt/bin/riscv64imf-unknown-none-elf.a create mode 100644 riscv-rt/bin/riscv64imfc-unknown-none-elf.a create mode 100644 riscv-rt/bin/riscv64imfd-unknown-none-elf.a create mode 100644 riscv-rt/bin/riscv64imfdc-unknown-none-elf.a diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index b6929c22..cc928a81 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -10,7 +10,7 @@ license = "ISC" [dependencies] r0 = "1.0.0" -riscv = "0.6" +riscv = "0.7" riscv-rt-macros = { path = "macros", version = "0.1.6" } [features] diff --git a/riscv-rt/assemble.ps1 b/riscv-rt/assemble.ps1 index 389014a7..c5e67f67 100644 --- a/riscv-rt/assemble.ps1 +++ b/riscv-rt/assemble.ps1 @@ -1,15 +1,26 @@ +New-Item -Force -Name bin -Type Directory + # remove existing blobs because otherwise this will append object files to the old blobs Remove-Item -Force bin/*.a $crate = "riscv-rt" -$extension_sets = @("i", "im", "ic", "imc") + +$extension_sets = @("i", "im", "ic", "imc", "if", "ifc", "imf", "imfc", "ifd", "ifdc", "imfd", "imfdc") + $pwd = Get-Location -foreach ($ext in $extension_sets) { - riscv64-unknown-elf-gcc -ggdb3 -fdebug-prefix-map=$pwd=/riscv-rt -c -mabi=ilp32 -march=rv32$ext asm.S -o bin/$crate.o +foreach ($ext in $extension_sets) +{ + $abi = "" + if ($ext.contains("d")) + {$abi = "d"} + elseif ($ext.contains("f")) + {$abi = "f"} + + riscv64-unknown-elf-gcc -ggdb3 -fdebug-prefix-map=$pwd=/riscv-rt -c "-mabi=ilp32$abi" "-march=rv32$ext" asm.S -o bin/$crate.o riscv64-unknown-elf-ar crs bin/riscv32$ext-unknown-none-elf.a bin/$crate.o - riscv64-unknown-elf-gcc -ggdb3 -fdebug-prefix-map=$pwd=/riscv-rt -c -mabi=lp64 -march=rv64$ext asm.S -o bin/$crate.o + riscv64-unknown-elf-gcc -ggdb3 -fdebug-prefix-map=$pwd=/riscv-rt -c "-mabi=lp64$abi" "-march=rv64$ext" asm.S -o bin/$crate.o riscv64-unknown-elf-ar crs bin/riscv64$ext-unknown-none-elf.a bin/$crate.o } diff --git a/riscv-rt/assemble.sh b/riscv-rt/assemble.sh index 997d9ae8..b8d85d67 100755 --- a/riscv-rt/assemble.sh +++ b/riscv-rt/assemble.sh @@ -7,12 +7,29 @@ crate=riscv-rt # remove existing blobs because otherwise this will append object files to the old blobs rm -f bin/*.a -for ext in i ic im imc +exts=('i' 'ic' 'im' 'imc' 'if' 'ifc' 'imf' 'imfc' 'ifd' 'ifdc' 'imfd' 'imfdc') + +for ext in ${exts[@]} do - riscv64-unknown-elf-gcc -ggdb3 -fdebug-prefix-map=$(pwd)=/riscv-rt -c -mabi=ilp32 -march=rv32${ext} asm.S -o bin/$crate.o + case $ext in + + *'d'*) + abi='d' + ;; + + *'f'*) + abi='f' + ;; + + *) + abi='' + ;; + esac + + riscv64-unknown-elf-gcc -ggdb3 -fdebug-prefix-map=$(pwd)=/riscv-rt -c -mabi=ilp32${abi} -march=rv32${ext} asm.S -o bin/$crate.o riscv64-unknown-elf-ar crs bin/riscv32${ext}-unknown-none-elf.a bin/$crate.o - riscv64-unknown-elf-gcc -ggdb3 -fdebug-prefix-map=$(pwd)=/riscv-rt -c -mabi=lp64 -march=rv64${ext} asm.S -o bin/$crate.o + riscv64-unknown-elf-gcc -ggdb3 -fdebug-prefix-map=$(pwd)=/riscv-rt -c -mabi=lp64${abi} -march=rv64${ext} asm.S -o bin/$crate.o riscv64-unknown-elf-ar crs bin/riscv64${ext}-unknown-none-elf.a bin/$crate.o done diff --git a/riscv-rt/bin/riscv32i-unknown-none-elf.a b/riscv-rt/bin/riscv32i-unknown-none-elf.a index 928edbec266d815647485337dbecd0a354ee5136..f09da16d9a0e81ba0695e7f87871898c402da25a 100644 GIT binary patch literal 8194 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 literal 8070 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 S+0Ova>}c)5llwQQmNtX{ literal 7930 zcmdU!Z){a(9mk*3OAF&q*HWOR6}TL_9|hr3+O7y=tSwLql$QUnx$Saqdx1Mj+ueIx zJI1zNK%Lt(1jrV3af^v2Mq?sx*c+#r%c8_6A-XI|Owdb^6dyxqm!UT?A2+f&@*^%eWP{$l@2JpARNXY$nX*K0b`!255Qk=w6)P|IyK zJll{jeyipDi|4;~>8YCEFOB`H)!Wz6I>Y1SvcGM7yyAz8-l%_b>07xUk6%CY)2Dy7 z`bOer%P-pB-t^9vUv=H;{!MGSXZ~{g2md_RajDDSdUb18-_5>s|GWKVhb|rR4_`gp zb>!xe^wD>ZE>Go6ym^#o5;LFRGxfZGRL~*p>i{~q#?xPF)T&A zn|HnKL-IJ!=<)MItNn-9Cme5)(_ZIze(Y+I{_Qmsk4q>;d_1%|p6~cZ$CKlm9KYJ} zxUZzhc!|*Jc=ltH_78v;L zWu=gKyZ*#iIPG@*N&9T4-L6MzuXNh&`jmFNKE>PhDc-J6@pgTRx9d~9U7zCZ`V=2` z=Holwu1Cq+^(Wr0Kk;_`iMQ)dyj_3d?fMgM*PnR1{>0n$C*H0<@pk=*?{Lni%kg&o zN#3qM@pk=*x9d;5U4Pt&9!UgUZCzZ}nA8;o2PjAz%IcsoCZ2D?KRc}?F)^)w{W)QW=SN0vs>qQ z-0R^eReXQhds)8E^gH=ujvtEnI6wa;A|B&?VT$K(Ny$_?uRr?|z0Glx=xr%m&)fC9 zO(stajiggU$g!+!8?ZBPy!a@=FJda2#QS*7GrZw)fos(ylra~%RzDv|L(pFoy^439F1l0r6?wn#gZyIj(xNerKhtW` z{6=tHcF?4m2f$}b9-1_>9ej>(XwuAXaD5m+lVoSKX%^U&82g?PTH1h~+|87uY zph+_WtbKiaK$B*&;8^rrph+_$to`|*#z2#1##s9`pvFLxW}am2F90t-yj^CG;;u4zZgQ3W*!9JD0yhoOcH#PaA?xZ z0Qhm?(4?7h@GZij>3-2?!5^@iG;M%=_R6ghP{NJ^()`9GWzPKZ5y(ghP{ND!>m5hbGO;1wSGjnlv*X{HSnf(o7xr zgTkRnGfTlA5)Mt8X$1eYaA?xZYVe1JLz8Bj!5$4ag$MJ0Omr}ZQ=)_U4~Y)OJuNzz|FGyd?>3?{F2Pv$S-n!ZN#vh6 zT}Y*QU&zV+WT{~HoHm`RVFNDgI(GgClz z`1lBS5j3XK>0D-fN^>fg8a|QXo+ZJfPiYQYgTXQg-7p09Wu5DQORtic3Z)b4r2%IrZmBwsly@)H0M;ksLQXk_z$~M`Rw#cHa z;fl-tpK|S-iOvuGUEvy*us^(>qw^c&`OV@+%&%PAFuzW&(f;0Hzn5!R!v1h>(f)?+ zmh(e@Gqnx<^>Pi5VQHG!6vB%ZX~XL!+TR5CcZ)9o`nyZp&>tQ<(f(fM3*<8kOW1al zLA1YveB<{pLw|F$4gF#1gvYQnuXBI%A+&^TXW54uO*c5#tQqXWC4xsobljJD+zDnF zmoItHhH;{vPK38kyldYP1dgy~dR<#VGHBQs9G@g@*SS3ne-x{1wjK=E>Kx j{w!CFRmBybHTPF47v>rB^^&vw;hdtmNuJ;JJLLWiA&(|x diff --git a/riscv-rt/bin/riscv32if-unknown-none-elf.a b/riscv-rt/bin/riscv32if-unknown-none-elf.a new file mode 100644 index 0000000000000000000000000000000000000000..f8e099f2c357e6167cc4fe172e45212309d84cd0 GIT binary patch literal 8198 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 xy0`m0;>TogH*!hb0DLz_*DMLwCNB<3BX2K#>3d literal 0 HcmV?d00001 diff --git a/riscv-rt/bin/riscv32ifc-unknown-none-elf.a b/riscv-rt/bin/riscv32ifc-unknown-none-elf.a new file mode 100644 index 0000000000000000000000000000000000000000..0a5234ec67ec749fe8671ae62cf11c3f3559fa91 GIT binary patch literal 8058 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 W_pPFmejxG8j^=Lh{NDICxqkr$U^rI* literal 0 HcmV?d00001 diff --git a/riscv-rt/bin/riscv32ifd-unknown-none-elf.a b/riscv-rt/bin/riscv32ifd-unknown-none-elf.a new file mode 100644 index 0000000000000000000000000000000000000000..a5924f786de4cb17130be74ac60911a9021528c1 GIT binary patch literal 8202 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 literal 0 HcmV?d00001 diff --git a/riscv-rt/bin/riscv32ifdc-unknown-none-elf.a b/riscv-rt/bin/riscv32ifdc-unknown-none-elf.a new file mode 100644 index 0000000000000000000000000000000000000000..8c424ff8e070718e5326536638f018127ccc20b9 GIT binary patch literal 8066 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 sjgy99tDq^x=3>W0KSVSr2qf` literal 7758 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 S`FKq6+`Cxc+ffK@l=}xgt{T7q diff --git a/riscv-rt/bin/riscv32imc-unknown-none-elf.a b/riscv-rt/bin/riscv32imc-unknown-none-elf.a index f09206c4c66ed8d025489e9d44571041a6f78c7f..a39c08062527220b9376086ccdfee313e3b16f13 100644 GIT binary patch literal 7750 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 diff --git a/riscv-rt/bin/riscv32imf-unknown-none-elf.a b/riscv-rt/bin/riscv32imf-unknown-none-elf.a new file mode 100644 index 0000000000000000000000000000000000000000..aa1c333627174f4bf8c91e68353c6284d2e44785 GIT binary patch literal 7886 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 literal 0 HcmV?d00001 diff --git a/riscv-rt/bin/riscv32imfc-unknown-none-elf.a b/riscv-rt/bin/riscv32imfc-unknown-none-elf.a new file mode 100644 index 0000000000000000000000000000000000000000..c03b50320a91a9fef6e05f7a24c63224ef0ef754 GIT binary patch literal 7758 zcmdT}TWlOx89uWc=i(%eoiui0r^#lL{thA8IJWDOP|~%XI5)@6%}HoUH@nW--qg45 zu8k8xn@!ua3VnbS5d;M)fslX)P!RN?pq2MXx%p5M4q9t7{ zWeO#e$xd)BBwZ?GCe7*GP-behlrH8dXa)!XBF9#25RGk-Fc88frem^i1}gY*W|XjYmlF=Jl15HrP3 z9&WjC-h1g~&JCY8rg$*b!lk{O@;b|%URSxx>n?YDJIg!0UFBU~Pr1k2UEb~ODev+2 zmiK!5%KN!m(J)KJ>_}v|MikY`;X$gPvXB2^Ayk80nfYGz!f3EwLnamFb z=8GyAK)78s;jZ81wh!^+yd{J$4XO4Yu2(o-y^~+z@J5H*HI@EXJNbmevCb0WUmsGP z4>^2;!|~*kkoLHQQJxH`_SfR@R)@=b1fulU;p9Ky@a+zN(BV5Ao^p7X!*@Eo$KiV% zzR%&k4)1gLF^50w@JAhPje$nBVBD?|_#CgBldm9xBE%B-A}^peiCl?lW@DAgeRQ&_zt)G zNBkR|yxlL7xBEr7-7muJei3f>i*UPNgxmch-0m0QcE1R>`$c%lnQxcF?S2uz-7muJ zei6RUX>a$7(fSDN3oKY~xeN;=N1?YTgf_U?Qt4YWUZel{=jbLVUGb-{Rc{|UGLI%{PVH+E%_ zh?@n@d}X}8N-LTFnFz1Ip#AJOcHAt9rn!H2e7lojj90!Sq*>h58+-5Kd!lMq4>+%N zVhw8W7B1mg)$;vi_lkUvbUXf|4nGy)3BDeq5sv;pK8y49PG_=3{kfLxZAqAPdU$jq zn;A_{P6R*C)|>QLW+pwtzvt5V(~+NagO6!5$?-2fDEV`_@CRREsyO?{U*v~iI!ON0 zUxPBqhG*?$+Z5tiz2c)nfI}T?w)rX1Q8xx(lEOm|{7tGy+v5IcD2w+nA6Co=#(S?( zUp~NLKY0H&sSX_KxUU+X=86M2)W;dGI1AMn;7~6xZhQtRe^PP@b-W*&R0j_AA;xuj zju(MZaS)ff=K^T(Z1*yPHvwk_Zv`F{ybXA+;FEj{c=`bDi7`GYI_@(+_(C=YnAE=) zIzIV1fJr_5jQwh;#sHIg1{nLgt$;~Ak3iRl3oxk%Q}-8h#Q{v}8D{L`B69$fdd3+0 zx=n#eJw@oa;W>awJ-7_MZew6l&y&z~I|Gw?a2fn%TyX%CdOpF}*B3W1spnJBmvhAd zOzOG9*sq6b3^1wZ3yl2+sKx-3dcMrq*B3u9spo6ZS8~MxOzQb2V_!cEfJr^yf!@Rw z2QaDU6~?}PH~^D+egOSmt~h{6JwImb>xTs}spqHA@iUJDnAGz##(sh;4q#HxFB$u5 zp&A2B2_R#B&Be#f%K=R4`7L9A9aLk0Nj<-3?5~Gv3^1wZZN~n6P>lg5^}NH_$421* zCiT3_*l&hv3^1uD?ye&wcBccP7dUin1i4IKaIRyPt(Shlt z;N#HK7L$5TLO&%sFsUa4eMod*QqO#ryeZKa15XRC10EK<9JnBOC2&#jy}%{GbAcZd zTnjuZ_#Qs28?(4sb-WI}anV=7GhuPF>Is&-NzvEyVcp{vH>)1Zc|>%K<>du80-q6_ z;KMeYC`ZswhsDjRn`H6qSSgd`W2qp=kq{MfqnTtWH&Zgn)0tAnB(ue$Nd{_uJkP2a z@P8A5r*qk<;q+*JJjX36m_Mrvvkdw1p^4Ct$z}_==~?MaAu~RlBBcr;(+ zf62(0xsmixAv4A!27mQTW=f?(K08(74*t_fu#vZ*!L>xRbHTL?gKwK4nz)|BB^5AZ zZt_LI5dy5C0VGZN*saMARJY)1%>4O`s zW*!D|DBsXysIO*UA|#RAR~bjgJ<1QA^{ioBoDXt1-`BXH-|$kUII)R&81Nxp;R2lE zf|!Z)hi6aN-y4j1DJJ1TjB;YLz@Wxhi0GK$FS73?UNr93oaci6YPsN^;QlJ{An&)& URG9Pwif4Az_ab+6>pgt`0DJr(3jhEB literal 0 HcmV?d00001 diff --git a/riscv-rt/bin/riscv32imfd-unknown-none-elf.a b/riscv-rt/bin/riscv32imfd-unknown-none-elf.a new file mode 100644 index 0000000000000000000000000000000000000000..34d9847bdce7029f4f8e15ab5122d84c613ca421 GIT binary patch literal 7894 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 literal 0 HcmV?d00001 diff --git a/riscv-rt/bin/riscv64i-unknown-none-elf.a b/riscv-rt/bin/riscv64i-unknown-none-elf.a index a9d856484e0d78ebeb18b733ed4316bfde4ba44c..9f4ca5d2fa8c87d28f797e470cedafa61aa011b3 100644 GIT binary patch literal 13102 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 literal 12974 zcmd6tZH!!18OP6^yKjYd*)jzREiy2r6ls^)7j_p}+pQERP@#nuDlg8?zO=it+g)a6 zOTi+$Of?ly*Ayv<81UsoNeEWO*r*?hAxaD;qI|%F2t-VXlGp}cNKo0(4-KfuxnN0Vb(0`J1u1>ZGc*~c{ zg<{zi1}5Y&+R2xTg-JIwyrVERR?e4(%Tts2(Ou=?VsUD+Tyn+H(%|kj#d7OJw3fLE zWFI*Gr z7`Q@dy!A#b+_?p!MJ>z*VIWVaJ)TVc6!qEp@b~MgD~}#)R~y!xSFKrl?$M~|v3gWe zbh;2^*3hPTRS?dq3>yX|1-=VxkPuv zdv0*S-XK`EDAkCk0UV#qcw2v_km~AOAeSmvU)*3QLzR$z=d-y{hKAXs+PahwONZ^_nO5gZG4{u52_3o`i-sm1q zq7_5bej<#Pu5QI3D!WWRPj@IohlWXIZvZJp72;;)K54=pbG9eUy<%R z^Oc(j2`zN^3#Yb)ZgCBa@}oyS7@74hKJOV-$^W`P#v#&=lIz`(7(ZKcUW@Up@|R*9 zyP=btB?&F8S!E=JE}dW_=d>D*>s?F2-xn8Fd5!Ka^Ke{$TjZ?c&)an#|5gtl^Ke|h zG6~<;xE{sl6y&~E<+ZP`Yu%K~xO`!tr1$k&H?^hOg|?;IJrEKZf?-#Db3i23S4@0~=P zN!0NE`-<&Q?Vvuob-KS)>b=@WF&_8rxx@SZLGrDOc|T`6QY{Dh_Yt=o+#BF)wS6v- z^F{KX&^~gewU2U0`)5hTZCGo@7v zkE(<9e@Xi&N3|dKpHq(Yvu`}^Kcjy9^?F`8UWfa&kMfH4!7JKFc~kqy`Lgy=HfkSy zR{JQp9-!g%<*VS7e#F4nLeMqL8!LwT#2(99$RC;PX}AIDF12K$Zp{ z_ou8GhtD}XRe*1wSs>%^IcFRPrNPI0!kTgToKsQ({;4KQH4dM1?p6nWTKg!*;d72% zbKoz5sLeQh&iT9^htJ=B#^H00T?65tu47S*!{?l@sskU_6l=!ebIw5(;NzNN%{Y9{ z`GyMcaVyfAarm6`Z580-8f48le9n1N1^BoISu+lwbH1wr{N*M~H4dM1ey9%ov$c<6 z96sm#L>>6JQ*F&Se9n1R1^DNfEY&!C&iREp@H5&+F%F+|ex(llbG46R9DW8s+i$hP z$7anqe9rlu3UIR~OEnIkb6!;kY=!nwjKk-gKdJ-&eC?wchtD~GRtG+gSu+mCImcCi ze}TzTjl<`hf2ae0mG)7L!{wZRsRRE)?V}in&pBZbN$@`!b*qoY;d9Oc@-HIaIDF1I zh5Xgz8;8$1r;)#geBmpG5N;fbIt|i=g2n>pL5ob-$uT1_?**0 zemnWb;d9QV3i2-@-#C2Ext9Dc@{PmioGs*clW!b8=iE$w z5BbL7bI$GLUrN4l_?$CH{>R8S4xe*I$-j(zr zE6FzwpL3oe|0?p0!{?kIlW%_uV3=|EoO6`?t08JL4xe*=PX09}OEnIkb6z0-TJnv< z=bYb=zlnU~@HyvY@;^zwarm6`d-AU%-#C2Ed4v4x$u|z4bN)pBX7Y{0=bU5YZz10} ze9rkh`8SYn96sm#ll&XWHx8e3QmIHfPs&#Ejl<`hCi1tDZyY}7G?RZ5`NrXM&Jyx( zCf_)G&N++x?c^JW&p8?LKSjQA_?)wn{9DL34xe*YlYcAu#^G~LJNdVfZyY}7^pJl$ z`NrXM&RX(6O}=sXoU?)aJo(1qbIvv7_mgiNKId#Ezd*im`2EChB7Y!(!{?k^$R8o! zIDF2zll&p_jl&-#ei!+}2^>D>+)Mrr@{PmioEh>*$u|z4a~jma$NnDj7ZU$0@fPBH zi7z337xAUU_Yk+g0Wt60#CbiF#BE-j-kroPe}%AO0>|G9>}S+LPD%SH@X(M`uJ)n_ z#D!(`v=mZ~JZ1 zNjm@idj9X|f^q)!ve|e$|MkL>=HIB}9+uu;7V zzWxV=Vg8(K+>Yt|_I+l@Y^_$mE(fe{4r&YDtkVA5`X3P|Y5jJyYPOmZ-FwDcA-?{n zg<<~K+syUr{PFX$@fz!%lupw8vwE{^ql$R`(z4lj`&=9mCfANh)#l2q&VSY%i8}G; zDrxO759|2Di=uI7NZBu2e13c;;@2*W=*MEE;rZbfpC8X@()gG4{C~-Vr5_*vAK2+c Aa{vGU diff --git a/riscv-rt/bin/riscv64ic-unknown-none-elf.a b/riscv-rt/bin/riscv64ic-unknown-none-elf.a index 84cac63eb1476816e8719600881b6f43f2921e4c..7b563c6b74b80e6a6210005129a38ac4e2259e39 100644 GIT binary patch literal 12966 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 diff --git a/riscv-rt/bin/riscv64if-unknown-none-elf.a b/riscv-rt/bin/riscv64if-unknown-none-elf.a new file mode 100644 index 0000000000000000000000000000000000000000..f9e4aa47cc2442bf7b788f0af4ad6fb0e38887e0 GIT binary patch literal 13110 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 BP9y*T literal 0 HcmV?d00001 diff --git a/riscv-rt/bin/riscv64ifc-unknown-none-elf.a b/riscv-rt/bin/riscv64ifc-unknown-none-elf.a new file mode 100644 index 0000000000000000000000000000000000000000..f118261ae10dd12fc2d640626093d7183bfa61b5 GIT binary patch literal 12966 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 VCAJamANN0T+n;dz|Hemb{~rs@M&|$k literal 0 HcmV?d00001 diff --git a/riscv-rt/bin/riscv64ifd-unknown-none-elf.a b/riscv-rt/bin/riscv64ifd-unknown-none-elf.a new file mode 100644 index 0000000000000000000000000000000000000000..666f812ba1df511b8400bbd82ccf7c45e970e7a6 GIT binary patch literal 13110 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 literal 12446 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 iMEl1xVQ&>9%F^C=mt@`6(f)BxUHiA%W-Cbs8 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 Date: Fri, 5 Nov 2021 15:34:09 +0100 Subject: [PATCH 165/234] Trap handler override improvments * Add ability to override trap handling mechanism * Previously, `_start_trap` was marked as weak, which when compiled into a static archive, that information is ignored. * Now by default we `PROVIDE` the default trap handler, if another one has not been specified from another crate. * Mark the fields of `Vector` public, for use outside of `riscv-rt` --- riscv-rt/asm.S | 6 ++---- riscv-rt/bin/riscv32i-unknown-none-elf.a | Bin 8194 -> 8226 bytes riscv-rt/bin/riscv32ic-unknown-none-elf.a | Bin 8054 -> 8082 bytes riscv-rt/bin/riscv32if-unknown-none-elf.a | Bin 8198 -> 8230 bytes riscv-rt/bin/riscv32ifc-unknown-none-elf.a | Bin 8058 -> 8086 bytes riscv-rt/bin/riscv32ifd-unknown-none-elf.a | Bin 8202 -> 8234 bytes riscv-rt/bin/riscv32ifdc-unknown-none-elf.a | Bin 8066 -> 8094 bytes riscv-rt/bin/riscv32im-unknown-none-elf.a | Bin 7882 -> 7914 bytes riscv-rt/bin/riscv32imc-unknown-none-elf.a | Bin 7750 -> 7778 bytes riscv-rt/bin/riscv32imf-unknown-none-elf.a | Bin 7886 -> 7918 bytes riscv-rt/bin/riscv32imfc-unknown-none-elf.a | Bin 7758 -> 7786 bytes riscv-rt/bin/riscv32imfd-unknown-none-elf.a | Bin 7894 -> 7926 bytes riscv-rt/bin/riscv32imfdc-unknown-none-elf.a | Bin 7762 -> 7790 bytes riscv-rt/bin/riscv64i-unknown-none-elf.a | Bin 13102 -> 13142 bytes riscv-rt/bin/riscv64ic-unknown-none-elf.a | Bin 12966 -> 12998 bytes riscv-rt/bin/riscv64if-unknown-none-elf.a | Bin 13110 -> 13150 bytes riscv-rt/bin/riscv64ifc-unknown-none-elf.a | Bin 12966 -> 12998 bytes riscv-rt/bin/riscv64ifd-unknown-none-elf.a | Bin 13110 -> 13150 bytes riscv-rt/bin/riscv64ifdc-unknown-none-elf.a | Bin 12974 -> 13006 bytes riscv-rt/bin/riscv64im-unknown-none-elf.a | Bin 12598 -> 12638 bytes riscv-rt/bin/riscv64imc-unknown-none-elf.a | Bin 12470 -> 12502 bytes riscv-rt/bin/riscv64imf-unknown-none-elf.a | Bin 12598 -> 12638 bytes riscv-rt/bin/riscv64imfc-unknown-none-elf.a | Bin 12478 -> 12510 bytes riscv-rt/bin/riscv64imfd-unknown-none-elf.a | Bin 12606 -> 12646 bytes riscv-rt/bin/riscv64imfdc-unknown-none-elf.a | Bin 12486 -> 12518 bytes riscv-rt/link.x | 6 ++++++ riscv-rt/src/lib.rs | 5 +++-- 27 files changed, 11 insertions(+), 6 deletions(-) diff --git a/riscv-rt/asm.S b/riscv-rt/asm.S index 7165ddf0..910d3593 100644 --- a/riscv-rt/asm.S +++ b/riscv-rt/asm.S @@ -124,11 +124,9 @@ _abs_start: restores caller saved registers and then returns. */ .section .trap, "ax" -.global _start_trap -/* Make it .weak so PAC/HAL can provide their own if needed. */ -.weak _start_trap +.global default_start_trap -_start_trap: +default_start_trap: addi sp, sp, -16*REGBYTES STORE ra, 0*REGBYTES(sp) diff --git a/riscv-rt/bin/riscv32i-unknown-none-elf.a b/riscv-rt/bin/riscv32i-unknown-none-elf.a index f09da16d9a0e81ba0695e7f87871898c402da25a..50197c5abaee32ad321f672f4c368cb818d6b4f0 100644 GIT binary patch delta 362 zcmZp2SmZE4BE-IKH?fv8aS0 zF)1HNrlh7Nmgba9OjR{yD9S8OF4HY4(aYBdn}BSQsevI-%m{3gp@D&!iHU-Og@KX5 z#C;l!E*qbVGcz_${?Gh^al_;nEE^cjC(mY8-n@s^iqlwtft{fqXgv%F02vct93U;g zz{pUH!e^K)$)C#(b=c%Kej8>6@rjcJ#5UjJui#-4;GY~KGmp_{@@E-;#*oR*vi^(- zlPAlT14(YVa>f;to8`0_WhSqeQ)av}`Ldikqr&9ha{i1ilfC7Gf$aJ6%B(4T3=AtL TAD35_$dF=SxPxRlBa{sQsCiHp delta 352 zcmZ4F(Bv>d!q-3n0U&H-QbEBSt{{Pnfq{Vqh`W$+d~r!)Q3*q0Qa+HJn4@Y^lv$iy zrdw2^m#+^t8Ll75LpIvX!~`sFZfR*Y@t6jq&c^rR%&g6fjLb}v1z92|UtkfOoXNsF zS%$?A$d+f^H2DL|24*uo!^sO-l{X(_wcu1%U|?sc06GQ+1b~cA7zaoTFfdLw$joCjnJg^p&uB9_8Ay6e-Yi=VB(>$r87E9$ET_#V zH~GArGUK($pXJmUIVMZX`!niH&Xx~m6qvkUUYRw7kAY#)S40n($WrVT; DA}LG2 diff --git a/riscv-rt/bin/riscv32ic-unknown-none-elf.a b/riscv-rt/bin/riscv32ic-unknown-none-elf.a index 1d0ee0af60adcdebbd7929d870cd235b9c41e54f..0b7f5925c69bab4e5769700df2dbb80e67a6bad9 100644 GIT binary patch delta 374 zcmexnH_3j2M2Ml8v6->CiJ_&rf`Wkp2q2RR3g#AIK_HR9#lXP80>qP$aeQ$}Vo?c0 zVp2YkOi4{kEX^sIn5t^RP?TAmT&7!8qL;4^HUZfpQv*Ywm=V|}Ljwad6BCd{<`eg7 zGH%)Uyq$@$adJNM3&stTBUm;tnos6tRotw{YQt$Pz`)K>540Ty1b~bQFbFFqS)2JwlTE%^I*7#k)Zm!8kKXL7oXKjV?f+kxbT$?US_K(Zc4 zN=*JPtIa4gSy@h*)dlElg~^3H!jt3V1Q;hw&X-eXOqo0#NN$lI!GhLvD(KY0Ph89YiEdB}}#+=EIrROuQnA|Mm&$waoWgxj{va)PBkem%9Stbk1X*0@A zwwF_8beo(kr_NY2xf@7kOx_G67fiklB&SSfmRD!p0Spd-$@=ojtS5LG7#2+qmsgfJ OBFVsT2gwbLP&NRmdQbEK diff --git a/riscv-rt/bin/riscv32if-unknown-none-elf.a b/riscv-rt/bin/riscv32if-unknown-none-elf.a index f8e099f2c357e6167cc4fe172e45212309d84cd0..18ec3f29d7fdb4c7e0ee197ec18013bc76df0a13 100644 GIT binary patch delta 353 zcmZp3SmrQ6BE-IKH?fv8aS0 zF)1HNrlh7Nmgba9OjR{yD9S8OF4HY4(aYBdn}BSQsevI-%m{3gp@D&!iHU-Og@KXD z#C;l!9vh#FGcz_${?Gh^al_;nEE^cjC(mY8-n@s^j?-9xft{fqXgv%F02vct93U;g zz{pUH!e^K)%b&{*b=c%Cej8>6@rj#H@b~dBiSSR3keSCAF!{TTKV!sXcUgbNl*!X& z%Yh`nTsh;K$?bC5j53oq%PF&70s32UG9$0>lEGSYDYm VgO7n>C0PERyZ}><)Z_~?VgTInQV9S6 delta 330 zcmZ4H(B?2f!q-3n0U&H-QbEBSt{{Pnfq{Vqh`W$+d~r!)Q3*q0Qa+HJn4@Y^lv$iy zrdw2^m#+^t8Ll75LpIvX!~`sFVPIe|@t6jq!N&LE%&g6fjLb}v1z92|UtkfOoXNsF zS%$?A$d+f^H2DL|24*uo!^sO-l{X(_wc%7&U|?sc06GQ+1b~cA7zaoTFfdLw<?{eylJd@?+{TU4==gS8(3QRsMugn_3$H1^?@@sizrVy#gA7sP;)YeP} diff --git a/riscv-rt/bin/riscv32ifc-unknown-none-elf.a b/riscv-rt/bin/riscv32ifc-unknown-none-elf.a index 0a5234ec67ec749fe8671ae62cf11c3f3559fa91..4e8484b9ef864e020d817152ee877ee5c90dd704 100644 GIT binary patch delta 373 zcmexmH_d*6M2Ml8v6->CiJ_&rf`Wkp2q2RR3g#AIK_HR9#lXP80>qP$aeQ$}Vo?c0 zVp2YkOi4{kEX^sIn5t^RP?TAmT&7!8qL;4^HUZfpQv*Ywm=V|}Ljwad6BCd{78Cbs zGVa*;yq$@$adJNM3&stTBUm;tnos6tRotw{>cD9%z`)K>540Ty1b~bQFbG_OnCb!G@Gj5rD9Y`LStS(y)B+P3+Kh6Oo#m7n z-6p5YsWUcA?gx??leYuOC6n(1$tjcB<<(jD0E0qcva!4}>lt1KhDDR3<&_yvOsIKH?fv8aS0 zF)1HNrlh7Nmgba9OjR{yD9S8OF4HY4(aYBdn}BSQsevI-%m{3gp@D&!iHU-Og@KX9 z#C;l!J{zBlGcz_${?Gh^al_;nEE^cjC(mY8-n@s^iPKnsft{fqXgv%F02vct93U;g zz{pUH!e^MQ$e+s&b=c%Sej8>6@rj$y@b~dBN=%NHna>z9`L~QeW6Wf4S%1ci$+Kn4 zfuyipIneHIIc-Ln$=l_W8Lv#fEvL??F_~H3pV4P>uzWD1!sO-h%B(qj3=AtLpO;sb PD3D@cxPxRdBa{sQu8L1T delta 347 zcmZ4G(B&{e!q-3n0U&H-QbEBSt{{Pnfq{Vqh`W$+d~r!)Q3*q0Qa+HJn4@Y^lv$iy zrdw2^m#+^t8Ll75LpIvX!~`sFVPIe~@t6jq$;S8M%&g6fjLb}v1z92|UtkfOoXNsF zS%$?A$d+f^H2DL|24*uo!^sO-l{X(_b>LK1U|?sc06GQ+1b~cA7zaoTFfdNGOUwE*x=hXnk^z%<%a#L4W4Ut18IxDbX*0@AzAmTC xcy01;Idw*X$;$Hnj3$$d<%5CjBU@x@UWGch(!&S!qXxM6Yx%LYdC$=s}poAp>dIE@7u*cs}9w!?q`kTC(q0n!2tj10vn ze1^$0`EuEz?wZWTZ^O(WK5=pbzu4v|{t6z(p2?S`=QEy|TrA_ycwzEkAbDr9uxvSy z>;{r5lbPkT8D%Ex%PBLuOb(V)XPh&+8c3#0UJN7;Og;@HCrthi%G ZAMi3TteosFuPpIIl7Zn4l4BU5YygB7REPio delta 353 zcmbPd-(){Q!q-3n0U&H-QbEBSt{{Pnfq{Vqh`W$+d~r!)Q3*q0Qa+HJn4@Z3lv$iy zrdw2^m#+^t8Ll75LpIvX!~`sFZecd@s3zl@jqlr;SeqFcnVBXxGDl8!U=f^rlbLsN z53?VTEzh`VastZ+W-~p*$%3qkj0~F%Sv@(G6&TnVDuAwm0RbSR6UG730t}3k*Yf2~ zR^+!~67Sobz~9HiSTXs%^nAuGllx`-8TU-S4lI!GhDDPbd4wmI$qTSv LkYr%E1L6Sy)S*%U diff --git a/riscv-rt/bin/riscv32im-unknown-none-elf.a b/riscv-rt/bin/riscv32im-unknown-none-elf.a index 629a2d45051736a070ca7dfb870f647a5de47cc6..94f45690c9278c5a78181d3a0ff8d64774a0eac3 100644 GIT binary patch delta 381 zcmX?Q`^t8LM2Ml8v6->CiJ_&rf`Wkp2q2RR3g#AIK_HR9#lXP80>qP$aeQ$}Vo?c0 zVp2YkOi4{kEX^sIn5t^ZP?TAmT&7!8qL;4^HUZfpQv*Ywm=V|}Ljwad6BD3C<^~oM z_h~TkNNs%ago&|n@>%8=j2k9zW7))LJ~^9Jd2axlA_-vRN#Je`j@c-jx%$O`KJ)d#Oexr z&Zsf@GLS5o>@BO!C^NZSR+)7P(BF!a8+n8UmjMk21%dL7*aLs6r5BAj!aR2P6XkS+Y{$ delta 345 zcmaE5d&+i#gs*`D0zlZvq=JGuTtNaC0|NsK5O*Qt_~Mepq7sJ0qKQjp-p8_u*-X!Hav`ho=4q^FIFuC_*cozwE`b37Afpz>0n!2tjFYGGB~Jd! zXTv1kzS)NVA2(ybWNYd9j6IWYOZzj{OxBk1XY80}ebco`U`OCiJ_&rf`Wkp2q2RR3g#AIK_HR9#lXP80>qP$aeQ$}Vo?c0 zVp2YkOi4{kEX^sIn5t^RP?TAmT&7!8qL;4^HUZfpQv*Ywm=V|}Ljwad6BD3Crsfm( zYBIKLd>+rl+Q`Vr%rrTWIdZZ9i{Rvy%)FChnEilkdBzQs4OliXnooYrqPUrj^#X^n z00TQiG0;UYAOK{vz&Jo!fPs-A9fi*@`6q88JJhX{qxfu?8N|Cb&*1yV&G=yQbgB7_ zGLy}v{h4_9CwEBuF-lCnE?v&JV6wkVIpd4T$7QsE(w}9Nfuy*sI%C3Qdmw2uIUPv0 oOzsDg8I!lmsi_@% delta 354 zcmaE4bIfLfgs*`D0zlZvq=JGuTtNaC0|NsK5O*Qt_~Mepq7sJ0q1GAZ);pCSr zii`}KIax1qC@V0qGvokmh5-Q}qZY;i(gF;OlX>|PCztZsFp0NM{=g@;`4ry^ZpJf{ zH%rZD! zd&vqg`b>_NRcCaV+zccOCa;!NXUzf1Yk=in$qKMe0rD11{twh=!pp!g4J>XY2NaiJ JV7LR~0RZO_P(uI! diff --git a/riscv-rt/bin/riscv32imf-unknown-none-elf.a b/riscv-rt/bin/riscv32imf-unknown-none-elf.a index aa1c333627174f4bf8c91e68353c6284d2e44785..2127d91edbb1f25b3d853910ee278d49a08d6171 100644 GIT binary patch delta 360 zcmX?S`_6WPM2Ml8v6->CiJ_&rf`Wkp2q2RR3g#AIK_HR9#lXP80>qP$aeQ$}Vo?c0 zVp2YkOi4{kEX^sIn5t^ZP?TAmT&7!8qL;4^HUZfpQv*Ywm=V|}Ljwad6BD3C=7vTS z_h~Q*NNs%ago&|n@>%8=j2k9zW7))LJ~^9Jd2axj?_-vRN#Je^t@c-jx%$Y1NJ)d#K@Ta$C^NZQRv9QhUsj#*&E(^<{!9XrlO^PWfKJPnQ)WHG%fK*q@?<$> P2@^>MhC4_$GeX$_ff7+! delta 345 zcmaE7d(L)(gs*`D0zlZvq=JGuTtNaC0|NsK5O*Qt_~Mepq7sJ0qKQjp-p8_u*-X!Hav`ho=4q@KIFuC_*cozwE`b37Afpz>0n!2tjFV^bB~E7K zw_y@*-|WEukDD=Mvc2?t#tD<}OZzi6OxBn2XY83=FH_DaGWk1@jG3G-tIa4kdA6)F z}fGco`U`P2Mc0EFmMwz;Fl2LPjVX0FiS} AbN~PV diff --git a/riscv-rt/bin/riscv32imfc-unknown-none-elf.a b/riscv-rt/bin/riscv32imfc-unknown-none-elf.a index c03b50320a91a9fef6e05f7a24c63224ef0ef754..0c157001829fe37ced38ec582a53f985dacb5e18 100644 GIT binary patch delta 393 zcmX?S^U7v|M2Ml8v6->CiJ_&rf`Wkp2q2RR3g#AIK_HR9#lXP80>qP$aeQ$}Vo?c0 zVp2YkOi4{kEX^sIn5t^RP?TAmT&7!8qL;4^HUZfpQv*Ywm=V|}Ljwad6BD3CrWO+rl+Q`Vr%rrTWIdZZ9i{Rvy%)FChnEilkdBzQs4OliXnooYrqPUrj^#+Hr z00TQiG0;UYAOK{vz&Jo!fPs-A9fi*@nUOD%9qQJ}NqjcU4B}mz7x4Y#W_&SuzSMk1 zmC5$f{){4%`+=mw1GAZ);pCSr zii`}KIazOVC@V0qGvokmh5-Q}qZY;i(gF;OlSTOwC)e`XFp0Ns-oy8goAJuz-BR-z z1tv#J`!h03UJWF9CjXW$XPh#*Sf-ru&g9oJ+Kh6O#buR&q_wO%W60!WAn7o<8%S16 s-V7vjCf}A-XPpD|_JYama>}eWybKJ}ChN;7OU#jAV7P;1KO>Y40M$)Oe*gdg diff --git a/riscv-rt/bin/riscv32imfd-unknown-none-elf.a b/riscv-rt/bin/riscv32imfd-unknown-none-elf.a index 34d9847bdce7029f4f8e15ab5122d84c613ca421..54fb2a4de8a00a0323f1b95c6b1119d44ccde33b 100644 GIT binary patch delta 339 zcmca+`^|QOM2Ml8v6->CiJ_&1f`Wkp2q2RR3g$p@2uR>!U|?VY;z`IjzPKc@sDvRg zDIZ9tq^2d7=9ElKRW)TO$}CPU(=95|%hw0%N4Ch+zz`^A1h&c0z`)GJ1Za`Dk-@}$ z8jKPfpFd?{Y@B?S`32*K$=g^qF`7@#W>wzY!+MLuSb%|@p%`dA3(9o$<@$^RoVo5|icSf`Ph<<&;^k@G>yWojhAknbBtQ HemQXfLNro` delta 324 zcmexnd(C!&gs*`D0zlZvq=JGuTtNaC0|NsK5O*Qt_~Mepq7sJ0qadQ48Y$X#obt$qV@sCv)=K zFp0Ns_Tc}=%@{M;U3xy_jLFZX{TVwZo6Gn!PMO>;Q_d(e`9F|MnOrWb%_ui{v8*!V tvdPC~)fw+helP3K$S~PnE|_t_G diff --git a/riscv-rt/bin/riscv32imfdc-unknown-none-elf.a b/riscv-rt/bin/riscv32imfdc-unknown-none-elf.a index 2cfabd7645e191284b77642d787dd2f3b16b95c2..e474cce63ef867be5ceef72b35e57f6456dfe5d0 100644 GIT binary patch delta 397 zcmca)^Uh|1M2Ml8v6->CiJ_&1f`Wkp2q2RR3g$p@2uR>!U|?VY;z`IjzPKc@sDvRg zDIZ9tq^2d7=9ElKRW)HK$}CPU(=95|%hw0%N4Ch+zz`^A1h&c0z`)GJ1Za_|#l*du zj1x9Kk7r_SWMpJ!njFX+Iaz>3aPmrK-pMh{en7T7)SzJz8Vv7U=!yP2YFhbb?-IrMl delta 344 zcmaE7bIE3cgs*`D0zlZvq=JGuTtNaC0|NsK5O*Qt_~Mepq7sJ0q1GAZ);pCSr zii`}KIa%*=C@V0qGvokmh5-Q}qZY;i(gF;OlO_2QCpYrhFp0NsKEU^noAJiv{ZjK8 zMJC5f`!ljkUJoP%CjXZ%XPhy)T&A4y!Q}Tc+Kh6OrDc_Yq`j;}d@ybKJ}CL7BsODvFJV7P;1KO>Y400|IE{{R30 diff --git a/riscv-rt/bin/riscv64i-unknown-none-elf.a b/riscv-rt/bin/riscv64i-unknown-none-elf.a index 9f4ca5d2fa8c87d28f797e470cedafa61aa011b3..079f0968204f15c6a182657facb5e2039d9e6c85 100644 GIT binary patch delta 347 zcmZ3Nb}em!M2Ml8v6->CiJ_&rf`Wkp2q2RR3g#AIK_HR9#lXP80>qP$aeQ$}Vo?c0 zVp2YkOi4{kEX^sIn5t^VP?TAmT&7!8qL;4^HUZfpQv*Ywm=V|}Ljwad6B7jmLnBLL zvx)olnK*PdesExBY@BS!@`iE4WI5JLjOLR+vl?$!VSC3bD!{-Fv>p|7Pp%ghXPh(H zUPPR+9>ks;CQ`u;b^Mncb+J@yFzTBXiCb V!VpJnoqQh1)6jgBRH8W0TWD%KsfW>2S0t?&Z zIV_!wn4wLhB|1<8GoUd2UxMA{pAbDbPzW#ou9~zSl4E8a0Onz_R zKDo?DVzQs10;AsKd_#N2iplE@>lqJB);DTrd@y;tkvZoCVTjf1Cik<8PUbOIV&s^t HZ>$ag7;IMm diff --git a/riscv-rt/bin/riscv64ic-unknown-none-elf.a b/riscv-rt/bin/riscv64ic-unknown-none-elf.a index 7b563c6b74b80e6a6210005129a38ac4e2259e39..5cf2c97606c7686ccbe5680d56c89e2f886f0a9b 100644 GIT binary patch delta 384 zcmZ3MdMtHCiJ_&rf`Wkp2q2RR3g#AIK_HR9#lXP80>qP$aeQ$}Vo?c0 zVp2YkOi4{kEX^sIn5t^VP?TAmT&7!8qL;4^HUZfpQv*Ywm=V|}Ljwad6B7jmLnCub zqlx?V87nrvU(3YUIC(Df8^#TjyI8InHEi z}aMkrLyK$@NC+0F5YLxBvhE delta 370 zcmX?>x-4~qgs*`D0zlZvq=JGuTtNaC0|NsK5O*Qt_~Mepq7sJ0qsMY;1qOC751DA0%r7j?Iu$4+F!7HN{sU+-#4&l`k*;k!O)KJ!sK{Edq#`N^9}8p7+5DiFtp>; ffH;fc!DMwKb50Inh>O;N_173FF*Zz|Z=?CiJ_&rf`Wkp2q2RR3g#AIK_HR9#lXP80>qP$aeQ$}Vo?c0 zVp2YkOi4{kEX^sIn5t^VP?TAmT&7!8qL;4^HUZfpQv*Ywm=V|}Ljwad6B7jmLnBKQ zlZpHFnFMq;esExBY@BS!@`iE4WI5JLjOLR+vl?$!Vf)4_D!{-Fv>p|7Po6I{dNB{KA7yUSI>B3 z@_8WnVY0veeny4K{094h&Ny%2KDm!wY_g7_5~I#!e?xo51(W*?>lt56<~M3*{4sgD bkvZoEVTk2hC-<|9PJUyg#Aq;?-&h?0(~(*Q delta 342 zcmcbYwk>Ufgs*`D0zlZvq=JGuTtNaC0|NsK5O*Qt_~Mepq7sJ0qgBRH8W0TWD%KsfW>2S0t?&Z zIV_!wn`%XR-V9++INSI@X(@^>J4VRE_teny7L<_7y2Crtis;La#F zdB3jsCiJ_&rf`Wkp2q2RR3g#AIK_HR9#lXP80>qP$aeQ$}Vo?c0 zVp2YkOi4{kEX^sIn5t^VP?TAmT&7!8qL;4^HUZfpQv*Ywm=V|}Ljwad6B7jmLnCub zqlx?V87nrvU(3YUIC(Df8^#TjyI8InHEi z}aMkrLyK$@NC+0F5YLxBvhE delta 370 zcmX?>x-4~qgs*`D0zlZvq=JGuTtNaC0|NsK5O*Qt_~Mepq7sJ0qsMY;1qOC751DA0%r7j?Iu$4+F!7HN{sU+-#4&l`k*;k!O)KJ!sK{Edq#`N^9}8p7+5DiFtp>; ffH;fc!DMwKb50Inh>O;N_173FF*Zz|Z=?CiJ_&1f`Wkp2q2RR3g$p@2uR>!U|?VY;z`IjzPKc@sDvRg zDIZ9tq^2d7=9ElKRW)NM$}CPU(=95|%hw0%N4Ch+zz`^A1h&c0z`)GJL_xvO$kN1Q z;(mQ50iBH>9GDp!CmXW7VcalTj`b3w`Q*>6#+y~xzVV6*Ft7uyM+M!J=L?HV&H)Mv zFfgJ@0eSTx*~xJt73@&wO}-}Lz{VgBl$tWRkxh8Bo~VKZW5#5E-T#aaCj0BvGv1hd z9!P$e?61F{QDHK_!G54K&KtN-?qe65tYfIes59B$(4KL@Ufgs*`D0zlZvq=JGuTtNaC0|NsK5O*Qt_~Mepq7sJ0qgBRH8W0TWD%KsfW>2S0t?&Z zIV_!wn`%XR-V9++INSI@X(@^>J4VRE_teny7L<_7y2Crtis;La#F zdB3jsM2Ml8v6->CiJ_&1f`Wkp2q2RR3g$p@2uR>!U|?VY;z`IjzPKc@sDvRg zDIZ9tq^2d7=9ElKRW)NM$}CPU(=95|%hw0%N4Ch+zz`^A1h&c0z`)GJL_xvO$il#2 z;(mR`hK=vnGBGwzp3D4(al_;;mTQdWlapC>H&0{z!z(Jlzz(z>6?9MjFC@-5XYzhw zamIQOd-65m3U;VlCi{svurY`ObxhejS;Sa^@y6uiI{z61CLht9|`1qOC751DA0{9j0%aq8s#!s3(P30F+c z6>(q{2P&Ajd9#SI1ml6p&vpJYT1PYyB^;RU(D d04n-mvc8cyr+_fTUF#<219=@<5Z)b-4gi-!S+@WH diff --git a/riscv-rt/bin/riscv64im-unknown-none-elf.a b/riscv-rt/bin/riscv64im-unknown-none-elf.a index e7e7490912dff323b1ded4cbf400b02e6078c182..587320f69d86f75a7c283cdcb2a3fb7040479cb5 100644 GIT binary patch delta 356 zcmdm%bT4UwM2Ml8v6->CiJ_&rf`Wkp2q2RR3g#AIK_HR9#lXP80>qP$aeQ$}Vo?c0 zVp2YkOi4{kEX^sIn5t^VP?TAmT&7!8qL;4^HUZfpQv*Ywm=V|}Ljwad6B7jmLn9Mo zqlx?VnFO>pe&AweZDeF*W|~~c5;<9bg>7;iODE%o$uC%LFq%(3%xb*(3#%Wmr~m^y z&?%^(e)4)DamERg^M%D3i$UzkZNfS1P=`(aB<#Y*AP&^gJ2{X|c(I>|IAh0Tf9?NF z3?h>Qbm|ySOg^tu&-h@nzwUlUg~|MS`+=68*K?m7$1XNmM_-BY&t!jnd&UKm`}OM? lUrgpVXlD$VJl(*Y^M(+_6)Pvlvx`oCW1z%nFqz*_9RMccClz`zc)9TikeJ})HB+6fdCnD|g+@^azq$&w;2tl~g{uE`Iz zgcp~Ih%;tPF4z9g^gwuWg-#vgipk$~>KPAAF4x`9$S~PlZ$ION$=~(d8RaJb*A|}~ yrmw*GZ*sZ5J!8Yv-fv*ec|Zta_oB)Ffjj|C2=5M1pF9AogI8Pt diff --git a/riscv-rt/bin/riscv64imc-unknown-none-elf.a b/riscv-rt/bin/riscv64imc-unknown-none-elf.a index b2763d0bf7849d656e2c1e61d2a4e3169eb74bb4..fb5d641717a8692250fbc6714cf61ded14ea22e3 100644 GIT binary patch delta 372 zcmdm%cr9^)M2Ml8v6->CiJ_&rf`Wkp2q2RR3g#AIK_HR9#lXP80>qP$aeQ$}Vo?c0 zVp2YkOi4{kEX^sIn5t^VP?TAmT&7!8qL;4^HUZfpQv*Ywm=V|}Ljwad6B7jmLn9+g zvx)ol89O$5{lzrH==ipl;! pGGTH*ki0SZyuLjr11rQm0h7fI%sB&uAiR}e-8lwIKpp)C>HwuPUibh2 delta 350 zcmcbXxGiylgs*`D0zlZvq=JGuTtNaC0|NsK5O*Qt_~Mepq7sJ0qn6X~vu9+Otgmm+xM6ZWko1_m9!Nfz{9fOllLO)&28+q&2Iia&LJ+4c0_*NEP-2`g IdA)%;08yP*)c^nh diff --git a/riscv-rt/bin/riscv64imf-unknown-none-elf.a b/riscv-rt/bin/riscv64imf-unknown-none-elf.a index 93335899af944d1cf29b46fa445f201089934505..a9ebfeda6dc9c259906bb08890082cf290732875 100644 GIT binary patch delta 356 zcmdm%bT4UwM2Ml8v6->CiJ_&rf`Wkp2q2RR3g#AIK_HR9#lXP80>qP$aeQ$}Vo?c0 zVp2YkOi4{kEX^sIn5t^VP?TAmT&7!8qL;4^HUZfpQv*Ywm=V|}Ljwad6B7jmLn9Mo zqlx?VnFO>pe&AweZDeF*W|~~c5;<9bg>7;iODE%o$uC%LFq%(3%xb*(3#%Wmr~m^y z&?%^(e)4)DamERg^M%D3i$UzkZNfS1P=`(aB<#Y*AP&^gJ2{X|c(I>|IAh0Tf9?NF z3?h>Qbm|ySOg^tu&-h@nzwUlUg~|MS`+=68*K?m7$1XNmM_-BY&t!jnd&UKm`}OM? lUrgpVXlD$VJl(*Y^M(+_6)Pvlvx`oCW1z%nFqz*_9RMccClz`zc)9TikeJ})HB+6fdCnD|g+@^azq$&w;2tl~g{uE`Iz zgcp~Ih%;tPF4z9g^gwuWg-#vgipk$~>KPAAF4x`9$S~PlZ$ION$=~(d8RaJb*A|}~ yrmw*GZ*sZ5J!8Yv-fv*ec|Zta_oB)Ffjj|C2=5M1pF9AogI8Pt diff --git a/riscv-rt/bin/riscv64imfc-unknown-none-elf.a b/riscv-rt/bin/riscv64imfc-unknown-none-elf.a index 2c75f544ddb0c7300f4d2ed5e35df1c002848305..680159a2076f2ccec2d9ff6072b185a9a6111863 100644 GIT binary patch delta 394 zcmdm&crS5+M2Ml8v6->CiJ_&rf`Wkp2q2RR3g#AIK_HR9#lXP80>qP$aeQ$}Vo?c0 zVp2YkOi4{kEX^sIn5t^VP?TAmT&7!8qL;4^HUZfpQv*Ywm=V|}Ljwad6B7jmLnC7Y zlZpHF87FLf-_FF;$T&HXDQWU8=1#^9lT%pkFq%(xX4TzX#u~yaD!{-FbOI`$x+^O}5t&pL|VE zfw6A#cRhPXj>+cw_KX`QmjlUw$=mhqIUj%m00?w}D&;39>5EJ*&|={ffH;xCVzRw~ WIj4sZM9ref^+4VX4G8ZJNCyCO*jMTR diff --git a/riscv-rt/bin/riscv64imfd-unknown-none-elf.a b/riscv-rt/bin/riscv64imfd-unknown-none-elf.a index f9d11c3b73af89725cbc60f97cc39d0a960d86c8..d4f5169cd1c008f19a22a88d0e0a4ec3891589fd 100644 GIT binary patch delta 366 zcmdm&^ekzDM2Ml8v6->CiJ_&1f`Wkp2q2RR3g$p@2uR>!U|?VY;z`IjzPKc@sDvRg zDIZ9tq^2d7=9ElKRW)NM$}CPU(=95|%hw0%N4Ch+zz`^A1h&c0z`)GJL_xvO$i&28 z;(mQ539XGExR_ZR85x8pbOsz`zc4 z3M#0dd|pVLbplXOU^1hwFk>-@Ke_cO(1h^rOrEbJ4*;-nUfTcw delta 330 zcmaEsv@dCbgs*`D0zlZvq=JGuTtNaC0|NsK5O*Qt_~Mepq7sJ0qrr?|LfE$x+^O}@`2IypvP viSgg$dVPDwj>-G=>lrUhwl`>Jw3vL{z?}1h5X9m|V3jh4N{kYd?G4od-^f;G diff --git a/riscv-rt/bin/riscv64imfdc-unknown-none-elf.a b/riscv-rt/bin/riscv64imfdc-unknown-none-elf.a index b991498b3b9e1e7e2609cc8ef5721e52f5e3e160..8141df3e22cfa412f1f8d7f556a78eca90035e8b 100644 GIT binary patch delta 372 zcmX?>_$+aPM2Ml8v6->CiJ_&1f`Wkp2q2RR3g$p@2uR>!U|?VY;z`IjzPKc@sDvRg zDIZ9tq^2d7=9ElKRW)NM$}CPU(=95|%hw0%N4Ch+zz`^A1h&c0z`)GJL_xvO$k@ntY47lX1i36qY-T=98USbvKu>#_);?Ft7uifC}m-+Y5;^ zPMG{3NEU+EM-F?qi3enyMQ@p|rzGLz%kL?`djQ(~-{d|%I=QDd^azCBPyJdiAy pJReBjn0#N~o>PDo;+}xX>IUYV2|^IwO0e!410}{Cljj?#0|1SyVNU=6 delta 349 zcmaEscr0;(gs*`D0zlZvq=JGuTtNaC0|NsK5O*Qt_~Mepq7sJ0qz-qv#JFJc Hegky?nJ8F1 diff --git a/riscv-rt/link.x b/riscv-rt/link.x index d319d097..e3b5ff4b 100644 --- a/riscv-rt/link.x +++ b/riscv-rt/link.x @@ -34,6 +34,12 @@ PROVIDE(_setup_interrupts = default_setup_interrupts); */ PROVIDE(_mp_hook = default_mp_hook); +/* # Start trap function override + By default uses the riscv crates default trap handler + but by providing the `_start_trap` symbol external crates can override. +*/ +PROVIDE(_start_trap = default_start_trap); + SECTIONS { .text.dummy (NOLOAD) : diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index 29c35d7e..63da950d 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -392,6 +392,7 @@ pub unsafe extern "C" fn start_rust() -> ! { /// Registers saved in trap handler #[allow(missing_docs)] #[repr(C)] +#[derive(Debug)] pub struct TrapFrame { pub ra: usize, pub t0: usize, @@ -496,8 +497,8 @@ extern "C" { #[doc(hidden)] pub union Vector { - handler: unsafe extern "C" fn(), - reserved: usize, + pub handler: unsafe extern "C" fn(), + pub reserved: usize, } #[doc(hidden)] From f1f3b63cde1a2961f93088493ee71fcb3897b1ea Mon Sep 17 00:00:00 2001 From: parkero <7399144+parkero@users.noreply.github.com> Date: Tue, 25 Jan 2022 10:40:22 -0700 Subject: [PATCH 166/234] Update CHANGELOG.md --- riscv-rt/CHANGELOG.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/riscv-rt/CHANGELOG.md b/riscv-rt/CHANGELOG.md index a62fb7ae..ff2ccf0d 100644 --- a/riscv-rt/CHANGELOG.md +++ b/riscv-rt/CHANGELOG.md @@ -7,6 +7,18 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] +### Added + +- Enable float support for targets with extension sets F and D +- Add ability to override trap handling mechanism + +### Changed + +- Update `riscv` to version 0.7 +- Update `quote` to version 1.0 +- Update `proc-macro2` to version 1.0 +- Update `rand` to version to version 0.7.3 + ## [v0.8.0] - 2020-07-18 ### Changed From 6aadc508528b4133185c00bde201dced388e1ea7 Mon Sep 17 00:00:00 2001 From: Ales Katona Date: Tue, 25 Jan 2022 16:26:53 -0800 Subject: [PATCH 167/234] release v0.8.1 --- riscv-rt/CHANGELOG.md | 5 ++++- riscv-rt/Cargo.toml | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/riscv-rt/CHANGELOG.md b/riscv-rt/CHANGELOG.md index ff2ccf0d..02775149 100644 --- a/riscv-rt/CHANGELOG.md +++ b/riscv-rt/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] +## [v0.8.1] - 2022-01-25 + ### Added - Enable float support for targets with extension sets F and D @@ -63,7 +65,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Set MSRV to 1.38 -[Unreleased]: https://github.com/rust-embedded/riscv-rt/compare/v0.8.0...HEAD +[Unreleased]: https://github.com/rust-embedded/riscv-rt/compare/v0.8.1..HEAD +[v0.8.1]: https://github.com/rust-embedded/riscv/compare/v0.8.0...v0.8.1 [v0.8.0]: https://github.com/rust-embedded/riscv/compare/v0.7.2...v0.8.0 [v0.7.2]: https://github.com/rust-embedded/riscv/compare/v0.7.1...v0.7.2 [v0.7.1]: https://github.com/rust-embedded/riscv/compare/v0.7.0...v0.7.1 diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index cc928a81..a9cb9176 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "riscv-rt" -version = "0.8.0" +version = "0.8.1" repository = "https://github.com/rust-embedded/riscv-rt" authors = ["The RISC-V Team "] categories = ["embedded", "no-std"] From 3c681802de9a7fe3a270cae53718823752aff284 Mon Sep 17 00:00:00 2001 From: Taiki Endo Date: Sat, 23 Apr 2022 09:48:27 +0900 Subject: [PATCH 168/234] Update riscv to 0.8 and remove inline-asm feature This also updates MSRV to 1.59. --- riscv-rt/.github/bors.toml | 2 +- riscv-rt/.github/workflows/ci.yaml | 4 ++-- riscv-rt/CHANGELOG.md | 9 +++++++++ riscv-rt/Cargo.toml | 6 ++---- riscv-rt/README.md | 2 +- riscv-rt/src/lib.rs | 2 +- 6 files changed, 16 insertions(+), 9 deletions(-) diff --git a/riscv-rt/.github/bors.toml b/riscv-rt/.github/bors.toml index cce15496..b50b7c62 100644 --- a/riscv-rt/.github/bors.toml +++ b/riscv-rt/.github/bors.toml @@ -3,6 +3,6 @@ delete_merged_branches = true required_approvals = 1 status = [ "ci-linux (stable)", - "ci-linux (1.42.0)", + "ci-linux (1.59.0)", "Rustfmt" ] diff --git a/riscv-rt/.github/workflows/ci.yaml b/riscv-rt/.github/workflows/ci.yaml index 7d68c697..94d99f49 100644 --- a/riscv-rt/.github/workflows/ci.yaml +++ b/riscv-rt/.github/workflows/ci.yaml @@ -11,8 +11,8 @@ jobs: continue-on-error: ${{ matrix.experimental || false }} strategy: matrix: - # All generated code should be running on stable now, MRSV is 1.42.0 - rust: [nightly, stable, 1.42.0] + # All generated code should be running on stable now, MSRV is 1.59.0 + rust: [nightly, stable, 1.59.0] include: # Nightly is only for reference and allowed to fail diff --git a/riscv-rt/CHANGELOG.md b/riscv-rt/CHANGELOG.md index 02775149..f04a2c8f 100644 --- a/riscv-rt/CHANGELOG.md +++ b/riscv-rt/CHANGELOG.md @@ -7,6 +7,15 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] +### Changed + +- Update `riscv` to version 0.8 +- Update Minimum Supported Rust Version to 1.59 + +### Removed + +- Remove `inline-asm` feature which is now always enabled + ## [v0.8.1] - 2022-01-25 ### Added diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index a9cb9176..5bcda5f6 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -1,6 +1,7 @@ [package] name = "riscv-rt" version = "0.8.1" +rust-version = "1.59" repository = "https://github.com/rust-embedded/riscv-rt" authors = ["The RISC-V Team "] categories = ["embedded", "no-std"] @@ -10,12 +11,9 @@ license = "ISC" [dependencies] r0 = "1.0.0" -riscv = "0.7" +riscv = "0.8" riscv-rt-macros = { path = "macros", version = "0.1.6" } -[features] -inline-asm = ["riscv/inline-asm"] - [dev-dependencies] panic-halt = "0.2.0" diff --git a/riscv-rt/README.md b/riscv-rt/README.md index 276c17d0..bf5837b0 100644 --- a/riscv-rt/README.md +++ b/riscv-rt/README.md @@ -12,7 +12,7 @@ This project is developed and maintained by the [RISC-V team][team]. ## Minimum Supported Rust Version (MSRV) -This crate is guaranteed to compile on stable Rust 1.42.0 and up. It *might* +This crate is guaranteed to compile on stable Rust 1.59 and up. It *might* compile with older versions but that may change in any new patch release. ## License diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index 63da950d..50b86cd1 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -2,7 +2,7 @@ //! //! # Minimum Supported Rust Version (MSRV) //! -//! This crate is guaranteed to compile on stable Rust 1.42 and up. It *might* +//! This crate is guaranteed to compile on stable Rust 1.59 and up. It *might* //! compile with older versions but that may change in any new patch release. //! //! # Features From ab70e9fab80b32df1159e90af1c84438f6fc293b Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Sat, 23 Apr 2022 13:05:46 +0300 Subject: [PATCH 169/234] Fix links in changelog --- riscv-rt/CHANGELOG.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/riscv-rt/CHANGELOG.md b/riscv-rt/CHANGELOG.md index f04a2c8f..10f01308 100644 --- a/riscv-rt/CHANGELOG.md +++ b/riscv-rt/CHANGELOG.md @@ -75,8 +75,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). [Unreleased]: https://github.com/rust-embedded/riscv-rt/compare/v0.8.1..HEAD -[v0.8.1]: https://github.com/rust-embedded/riscv/compare/v0.8.0...v0.8.1 -[v0.8.0]: https://github.com/rust-embedded/riscv/compare/v0.7.2...v0.8.0 -[v0.7.2]: https://github.com/rust-embedded/riscv/compare/v0.7.1...v0.7.2 -[v0.7.1]: https://github.com/rust-embedded/riscv/compare/v0.7.0...v0.7.1 -[v0.7.0]: https://github.com/rust-embedded/riscv/compare/v0.6.1...v0.7.0 +[v0.8.1]: https://github.com/rust-embedded/riscv-rt/compare/v0.8.0...v0.8.1 +[v0.8.0]: https://github.com/rust-embedded/riscv-rt/compare/v0.7.2...v0.8.0 +[v0.7.2]: https://github.com/rust-embedded/riscv-rt/compare/v0.7.1...v0.7.2 +[v0.7.1]: https://github.com/rust-embedded/riscv-rt/compare/v0.7.0...v0.7.1 +[v0.7.0]: https://github.com/rust-embedded/riscv-rt/compare/v0.6.1...v0.7.0 From 5fcb5ef8558cf867a7d5203309491bf0615654f0 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Sat, 23 Apr 2022 13:10:00 +0300 Subject: [PATCH 170/234] Update copyright years --- riscv-rt/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/riscv-rt/README.md b/riscv-rt/README.md index bf5837b0..6db52456 100644 --- a/riscv-rt/README.md +++ b/riscv-rt/README.md @@ -17,7 +17,7 @@ compile with older versions but that may change in any new patch release. ## License -Copyright 2018 [RISC-V team][team] +Copyright 2018-2022 [RISC-V team][team] Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice From 5c8b061a716fd108350ea5698f977b679c55cebf Mon Sep 17 00:00:00 2001 From: Scott Mabin Date: Fri, 10 Jun 2022 15:41:29 +0100 Subject: [PATCH 171/234] Don't use a random hash ident, instead use the crate prefixed symbol. --- riscv-rt/CHANGELOG.md | 1 + riscv-rt/macros/Cargo.toml | 5 ----- riscv-rt/macros/src/lib.rs | 45 ++------------------------------------ 3 files changed, 3 insertions(+), 48 deletions(-) diff --git a/riscv-rt/CHANGELOG.md b/riscv-rt/CHANGELOG.md index 10f01308..f8e6b3c6 100644 --- a/riscv-rt/CHANGELOG.md +++ b/riscv-rt/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Update `riscv` to version 0.8 - Update Minimum Supported Rust Version to 1.59 +- The main symbol is no longer randomly generated in the `#[entry]` macro, instead it uses `__risc_v_rt__main`. ### Removed diff --git a/riscv-rt/macros/Cargo.toml b/riscv-rt/macros/Cargo.toml index 511e681a..ceaaf6c5 100644 --- a/riscv-rt/macros/Cargo.toml +++ b/riscv-rt/macros/Cargo.toml @@ -22,8 +22,3 @@ proc-macro2 = "1.0" [dependencies.syn] version = "1.0" features = ["extra-traits", "full"] - -[dependencies.rand] -version = "0.7.3" -default-features = false -features = ["small_rng"] diff --git a/riscv-rt/macros/src/lib.rs b/riscv-rt/macros/src/lib.rs index 96fdd2cd..5767d2b1 100644 --- a/riscv-rt/macros/src/lib.rs +++ b/riscv-rt/macros/src/lib.rs @@ -1,7 +1,6 @@ #![deny(warnings)] extern crate proc_macro; -extern crate rand; #[macro_use] extern crate quote; extern crate core; @@ -10,13 +9,7 @@ extern crate proc_macro2; extern crate syn; use proc_macro2::Span; -use rand::Rng; -use rand::SeedableRng; -use std::sync::atomic::{AtomicUsize, Ordering}; -use std::time::{SystemTime, UNIX_EPOCH}; -use syn::{parse, spanned::Spanned, Ident, ItemFn, ReturnType, Type, Visibility}; - -static CALL_COUNT: AtomicUsize = AtomicUsize::new(0); +use syn::{parse, spanned::Spanned, ItemFn, ReturnType, Type, Visibility}; use proc_macro::TokenStream; @@ -90,13 +83,12 @@ pub fn entry(args: TokenStream, input: TokenStream) -> TokenStream { // XXX should we blacklist other attributes? let attrs = f.attrs; let unsafety = f.sig.unsafety; - let hash = random_ident(); let stmts = f.block.stmts; quote!( #[export_name = "main"] #(#attrs)* - pub #unsafety fn #hash() -> ! { + pub #unsafety fn __risc_v_rt__main() -> ! { #(#stmts)* } ) @@ -176,36 +168,3 @@ pub fn pre_init(args: TokenStream, input: TokenStream) -> TokenStream { ) .into() } - -// Creates a random identifier -fn random_ident() -> Ident { - let secs = SystemTime::now() - .duration_since(UNIX_EPOCH) - .unwrap() - .as_secs(); - - let count: u64 = CALL_COUNT.fetch_add(1, Ordering::SeqCst) as u64; - let mut seed: [u8; 16] = [0; 16]; - - for (i, v) in seed.iter_mut().take(8).enumerate() { - *v = ((secs >> (i * 8)) & 0xFF) as u8 - } - - for (i, v) in seed.iter_mut().skip(8).enumerate() { - *v = ((count >> (i * 8)) & 0xFF) as u8 - } - - let mut rng = rand::rngs::SmallRng::from_seed(seed); - Ident::new( - &(0..16) - .map(|i| { - if i == 0 || rng.gen() { - ('a' as u8 + rng.gen::() % 25) as char - } else { - ('0' as u8 + rng.gen::() % 10) as char - } - }) - .collect::(), - Span::call_site(), - ) -} From 63a9486699164d08ade5e2417c1031e630512333 Mon Sep 17 00:00:00 2001 From: Simon Sapin Date: Thu, 23 Jun 2022 06:26:07 +0200 Subject: [PATCH 172/234] Use std::fs::write in build.rs --- riscv-rt/build.rs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/riscv-rt/build.rs b/riscv-rt/build.rs index 9801b190..470479cf 100644 --- a/riscv-rt/build.rs +++ b/riscv-rt/build.rs @@ -4,7 +4,6 @@ extern crate riscv_target; use riscv_target::Target; use std::env; use std::fs; -use std::io::Write; use std::path::PathBuf; fn main() { @@ -29,10 +28,7 @@ fn main() { } // Put the linker script somewhere the linker can find it - fs::File::create(out_dir.join("link.x")) - .unwrap() - .write_all(include_bytes!("link.x")) - .unwrap(); + fs::write(out_dir.join("link.x"), include_bytes!("link.x")).unwrap(); println!("cargo:rustc-link-search={}", out_dir.display()); println!("cargo:rerun-if-changed=build.rs"); From 89c97b4937e7346902c06cdc344cbbc7ab4ff6e6 Mon Sep 17 00:00:00 2001 From: Simon Sapin Date: Thu, 23 Jun 2022 06:26:22 +0200 Subject: [PATCH 173/234] cargo:rerun-if-changed=build.rs is redundant https://doc.rust-lang.org/cargo/reference/build-scripts.html#cargorerun-if-changedpath --- riscv-rt/build.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/riscv-rt/build.rs b/riscv-rt/build.rs index 470479cf..4f9bf75c 100644 --- a/riscv-rt/build.rs +++ b/riscv-rt/build.rs @@ -30,7 +30,5 @@ fn main() { // Put the linker script somewhere the linker can find it fs::write(out_dir.join("link.x"), include_bytes!("link.x")).unwrap(); println!("cargo:rustc-link-search={}", out_dir.display()); - - println!("cargo:rerun-if-changed=build.rs"); println!("cargo:rerun-if-changed=link.x"); } From 3c50674beae2fd735afd833b6b7d4960c4afe113 Mon Sep 17 00:00:00 2001 From: Simon Sapin Date: Thu, 23 Jun 2022 06:27:35 +0200 Subject: [PATCH 174/234] Printing cargo:rustc-link-search=$OUT_DIR twice is redundant --- riscv-rt/build.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/riscv-rt/build.rs b/riscv-rt/build.rs index 4f9bf75c..66c30e12 100644 --- a/riscv-rt/build.rs +++ b/riscv-rt/build.rs @@ -24,7 +24,6 @@ fn main() { .unwrap(); println!("cargo:rustc-link-lib=static={}", name); - println!("cargo:rustc-link-search={}", out_dir.display()); } // Put the linker script somewhere the linker can find it From 17e0aa2453d1ac2ec9a2d61b0320caf690b141f1 Mon Sep 17 00:00:00 2001 From: Simon Sapin Date: Thu, 23 Jun 2022 06:30:40 +0200 Subject: [PATCH 175/234] Rerun the build script if the bin/{}.a archive has changed --- riscv-rt/build.rs | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/riscv-rt/build.rs b/riscv-rt/build.rs index 66c30e12..2c307900 100644 --- a/riscv-rt/build.rs +++ b/riscv-rt/build.rs @@ -14,15 +14,10 @@ fn main() { if target.starts_with("riscv") { let mut target = Target::from_target_str(&target); target.retain_extensions("imfdc"); + let archive = format!("bin/{}.a", target.to_string()); - let target = target.to_string(); - - fs::copy( - format!("bin/{}.a", target), - out_dir.join(format!("lib{}.a", name)), - ) - .unwrap(); - + fs::copy(&archive, out_dir.join(format!("lib{}.a", name))).unwrap(); + println!("cargo:rerun-if-changed={}", archive); println!("cargo:rustc-link-lib=static={}", name); } From 57219ef1a0a93b50d2d7487ec644aa88dc260ce9 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Sat, 25 Jun 2022 10:23:05 +0300 Subject: [PATCH 176/234] Pass a0..a2 to main() --- riscv-rt/Cargo.toml | 2 +- riscv-rt/asm.S | 18 +++---- riscv-rt/bin/riscv32i-unknown-none-elf.a | Bin 8226 -> 7958 bytes riscv-rt/bin/riscv32ic-unknown-none-elf.a | Bin 8082 -> 7826 bytes riscv-rt/bin/riscv32if-unknown-none-elf.a | Bin 8230 -> 7962 bytes riscv-rt/bin/riscv32ifc-unknown-none-elf.a | Bin 8086 -> 7830 bytes riscv-rt/bin/riscv32ifd-unknown-none-elf.a | Bin 8234 -> 7966 bytes riscv-rt/bin/riscv32ifdc-unknown-none-elf.a | Bin 8094 -> 7838 bytes riscv-rt/bin/riscv32im-unknown-none-elf.a | Bin 7914 -> 7638 bytes riscv-rt/bin/riscv32imc-unknown-none-elf.a | Bin 7778 -> 7514 bytes riscv-rt/bin/riscv32imf-unknown-none-elf.a | Bin 7918 -> 7642 bytes riscv-rt/bin/riscv32imfc-unknown-none-elf.a | Bin 7786 -> 7522 bytes riscv-rt/bin/riscv32imfd-unknown-none-elf.a | Bin 7926 -> 7650 bytes riscv-rt/bin/riscv32imfdc-unknown-none-elf.a | Bin 7790 -> 7526 bytes riscv-rt/bin/riscv64i-unknown-none-elf.a | Bin 13142 -> 12766 bytes riscv-rt/bin/riscv64ic-unknown-none-elf.a | Bin 12998 -> 12622 bytes riscv-rt/bin/riscv64if-unknown-none-elf.a | Bin 13150 -> 12766 bytes riscv-rt/bin/riscv64ifc-unknown-none-elf.a | Bin 12998 -> 12630 bytes riscv-rt/bin/riscv64ifd-unknown-none-elf.a | Bin 13150 -> 12774 bytes riscv-rt/bin/riscv64ifdc-unknown-none-elf.a | Bin 13006 -> 12638 bytes riscv-rt/bin/riscv64im-unknown-none-elf.a | Bin 12638 -> 12254 bytes riscv-rt/bin/riscv64imc-unknown-none-elf.a | Bin 12502 -> 12134 bytes riscv-rt/bin/riscv64imf-unknown-none-elf.a | Bin 12638 -> 12262 bytes riscv-rt/bin/riscv64imfc-unknown-none-elf.a | Bin 12510 -> 12142 bytes riscv-rt/bin/riscv64imfd-unknown-none-elf.a | Bin 12646 -> 12270 bytes riscv-rt/bin/riscv64imfdc-unknown-none-elf.a | Bin 12518 -> 12142 bytes riscv-rt/macros/Cargo.toml | 2 +- riscv-rt/macros/src/lib.rs | 52 ++++++++++++++++--- riscv-rt/src/lib.rs | 6 +-- 29 files changed, 57 insertions(+), 23 deletions(-) diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index 5bcda5f6..167d7c65 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -12,7 +12,7 @@ license = "ISC" [dependencies] r0 = "1.0.0" riscv = "0.8" -riscv-rt-macros = { path = "macros", version = "0.1.6" } +riscv-rt-macros = { path = "macros", version = "0.2.0" } [dev-dependencies] panic-halt = "0.2.0" diff --git a/riscv-rt/asm.S b/riscv-rt/asm.S index 910d3593..5dff38ac 100644 --- a/riscv-rt/asm.S +++ b/riscv-rt/asm.S @@ -58,9 +58,7 @@ _abs_start: li x7, 0 li x8, 0 li x9, 0 - li x10,0 - li x11,0 - li x12,0 + // a0..a2 (x10..x12) skipped li x13,0 li x14,0 li x15,0 @@ -87,23 +85,23 @@ _abs_start: .option pop // Check hart id - csrr a2, mhartid + csrr t2, mhartid lui t0, %hi(_max_hart_id) add t0, t0, %lo(_max_hart_id) - bgtu a2, t0, abort + bgtu t2, t0, abort // Allocate stacks la sp, _stack_start lui t0, %hi(_hart_stack_size) add t0, t0, %lo(_hart_stack_size) #ifdef __riscv_mul - mul t0, a2, t0 + mul t0, t2, t0 #else - beqz a2, 2f // Jump if single-hart - mv t1, a2 - mv t2, t0 + beqz t2, 2f // Jump if single-hart + mv t1, t2 + mv t3, t0 1: - add t0, t0, t2 + add t0, t0, t3 addi t1, t1, -1 bnez t1, 1b 2: diff --git a/riscv-rt/bin/riscv32i-unknown-none-elf.a b/riscv-rt/bin/riscv32i-unknown-none-elf.a index 50197c5abaee32ad321f672f4c368cb818d6b4f0..4749033ad768efb6016211199dd2718e23a5f47c 100644 GIT binary patch literal 7958 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 literal 8082 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 literal 8230 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 literal 8086 zcmdU!d2Ae49mn5z;~Z`dJC_qX$7YiLY(lbGA5G$rrjG46m*ZUIpx0*C-Xxnkw!6DF zIoigXhC7ImMg$2_kU&TUB&tf#NJSzx#$>$1v zqpS19#E{G>I+F*IO+0LKFqNica&2oXX0l$U7C%yTZc9(M=XpF4DW3V8vC5chb;iWF zsWoVBG<9a7xmsb&bLT5e;nKe3`7!UCFLT?mF=GmQ+LOGsmfF3|rOjSPsl)3mb$VT; zE^kX|i`QN1_O_O`dfQ6dyzQm!-j31^Z)a(z*Hh~8c9nK{y`^4ncWL)k9{#zKXA0E* z_RBg_-`{VTp|`&Ak6Lb7^9JqYIKlswYjzhN&We(pvyewTX@#GlKq>?|hm3*#zz5Y3K26nhoyfG{V znhI}e#Vk&iOJyKpbzaPy#<|$Mpcbx(usHuO^`v0tQcs+7Y{Gd>Oiny^IZEoFm3!d} zYxD}1JTEr!poxQj7$@3)ls`2bdxTeOzhWsDPN~b z@>&IehXt17MW`JmWr9``VSKB@$ zkMorxdUhza|L{76f%;qkA0P>*#}ye%R5E zJ38a&6OPV1deqTp9Q~A|pKrZsMGrtZ;+w~`TyZ%Jm z^(We{KhZr-e`U!}cYOBt{t#{N2hsL^5N(gYFF4-bPonMpB0741qwhWC4rG2d?~Xs) zx&P()S3Z2g`UqY&%gr%9+MWw+Io_R5`2g+Dou6%&`MLA8?KQ!8cKwOA`5GH#iWz%l z(GWA!ocYRlz2&21{wE?DJw~55wXDY??PX+$nend&F*7UL%`F&4R(@lV!(wK> zvG*R{TPh9SO~QinUK0x5Lt`z3XI;(rpS{F)w&pj>C6x-RCTa{op&fUVU)r$4?S2VA2fkX}=1tF<{cn z0cKy9B$zbw2>j_>aRHNN(#-x0xW<4Z~H@xk<<@J09! zStiX~hTkqem^AZM_?yKClV+ZW-yuGjH1lovo#KN@Gv9^ZB|exm^CJ8$;)6*uKZ4&a zKA1G~WB6Oe2a{%Qz~3f5m^5<}{&w-fq?y;@?+_nMnz;>sr}$vf%p34~#0QgR{s4cM z_+Zk^pWye34<^n01^#aF!K9gc@b`!hCe6GHf3Nsp(#-qt_lXZC%}lCbf4}%((o7Zn zkBbi`%~ZobAU>EhGavpz@xi2-Meq-a4<^m{@DGa*Ce1X$|AhEp(o6#W!{UQUGp+C+ z5g$yN*#Q4h@xi2-cKDBp4<^lY!+%_SFlnX-eoA~WX=We%BjSTeGl$`)#RrpS9)*8G zd@yNd2!5aVV9E%O!0)$AnmG$UD?XSsa}NF!;)6*uQ`z#)h(7~-R=5T{AUqHJN#TXy zQ^JeEr-dhjhlQ)bPYTcF-SWKU2K5&pQxG3tnahio8`O`p<&B8Hf_KYDEjOqi%=x7F z7|R0^D)Z}>YGI2^vPm6!~0@h_QylYX9v=WV)j(gB>L0Ev`J(N z1(OKe++dDf3E&@3g8kXd$g$KwZZOM7l$qc2^Wy@!!J|WAAf3tNv!mmh)A{t^u`G`y zUARZ*2agTp3j9AU88dr4bu^zo$s-1T5l*Cw#e6O^QsfT)*AnL-FMWg05~YbMfoCBk2 zWN{(9XpuI2l|=iy&HeGu{9t~(D_=i6+R$H;Hdt>%5`g z@T2PIhE=S?f*i^#yn)+!L%9~|56_;kzt@=gQVb)5a)}!n1%n!6p+v`ozQ(yY-vIov jnDClaGvl7%{>tSJKlENGE9nOk&+KUKF3<1o2ju<*Ou0cX diff --git a/riscv-rt/bin/riscv32ifd-unknown-none-elf.a b/riscv-rt/bin/riscv32ifd-unknown-none-elf.a index 41068e68c51645dd67672ecc67df34f9dd95dab9..46718e187d0f40eb8ae3c6be7bd2fb9daa2913fa 100644 GIT binary patch literal 7966 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 P@tGaZO=ErU_Wk%bY6nVy diff --git a/riscv-rt/bin/riscv32ifdc-unknown-none-elf.a b/riscv-rt/bin/riscv32ifdc-unknown-none-elf.a index 223b16942f02ec543c7b2db11439df241a76a5bf..de75f1571976ca64ac75739be65327f8265d059a 100644 GIT binary patch literal 7838 zcmb_hZE#dq8Gdh;1jZg!JEwhc+TyNMKO z%hFmItsMqBcGMsCkB*K`NBKkls2%M%$~ej}wc}{V8TE(#qay8$T1WAH?)%<7Hz%|* z)_3Nd`#jHi&U?=NIOpC?R%}US2S*;7yFNZWn%XwBHMKUiwKm1$jX_hij>k8)hyH=N zL^O-brD#d!@~Lc|Qt5H7hlWq2CP(w4CG*+Tgq4Q#lM~6zSbjL0ot(($h_ad7;MBTo zJ~1wHiq52|v5}{-slAm4XWZ7xU}IZLv&>~+?laqac6gr06Or)fU9ybmoux#j+|(L0 zucDD}wtCwN+X_3p zorRrVccI(cRoLb2F6{R96!v&Mg&uEjVXxO)==J&veJ}ICmkT_D`i{R|)iDO&%hLGG z+wWI%TNTf`*(}CucKv_$KK@MHa$`H`jQ{kzOnqr*`G{Z zJM*)rf4=5=;zskEZEtP<)kDATdV9xjTS`6p%grDB>wL$hE`RHltzEr0deeQk`brL7 zI_Mv|a;WR@jl=09w~nkxaHgf%sg~wU^F(9v1garagIq=X+zH2~?Mzscv1ztgu&G)p z#yc10G^Z$)()=O@5RR=_Lb&U9xy>PdoO87Q!jNkI@LGlAEpggw9A4{idp%`5Ttf-r z@sR3xzQY?FZXAx=BO&?LgjDn48IzFqL`b#W-Z*KOCkZCu^6s#_&FSCn@XZe2;_!zY z-r?{rhi`NE4u^L;yx-xEIQ)pik2!qE;iC?paCqL~ryYLA;b$HGw8PIi{5gkTaQF)j zzZl^~$RI|uo%JJJ_8&Nf&nk8jUgmJSo}?Y0LlVO6`Vw9qHf#P0huifge!Jd;+w~^g zt~cR!y$QGLO}Jfe!sE{PcD+fvU0=fOdJ=BelW@D9gf}|*?Rt`SyPkyG^(5S`C*gKI z3AgJ>xLr@eJDlyu#aG zOeo{q=SBR*X5F9M{3 z`qM7a(-@~jPjg8V*G*g}lP5>V)2Y$q#CY&~u7Q%LQm2z6{5vq28PcDE=sftirjRyO zGG~TKe<5Zkb9emFsLl8RnVjyK@heiMUHw9F`qZKj`+3ciLV!aZ*LB@zL`Pj~KTC@q z`0G@U_Qidyeiprmdbrf+OAhba+UKAW0f%GZom;0maHtP4u6~{?4&YE9VO;ZRs6@b_ zj{8~rS*S$7p+3R5PIcf=A7EUm=a^?)p%3#p;HS9az$L4^5J1A-U->z~tNGyRVmyjp zi@Fha@e9*SiU;HPvn@92-vnKkBd}4=!_f7G32fA}9r`@3IDn0M_AvJ6LnQ(>>efRE*M~=p5xH(<%$E?sArI|A3W$pz(ze8=-3Q6fQ@>_8TiHI9e;HIFV56SzGWK=z0ygTo3SB=qfQ@>-2mOAo zIDn0Me#F?1bHxE{)bmru{tBo>z$Okv^b0P&ey{)=_52cgJy#sSMm@h_>^DFq0ygUT z9b^9is6@aKKY#JYO^!Ps97l?d3V=Qd-1 z4OAjvqaOZ)4*4GoWCAwonFoEX=)gujmC)CT4s6tezccv>(SeP6?t{KwbYP>NdgzU! z0~__MhTbGPuu;!?==wniY}B&>dW-mhjd~u0-YPnV z6hE+0&pzmbq5~WC3_*WTbYP=<*JIG}Qsn?P>Y0H4anXT|dZwW32PUvl&spdXiyzpi z=REWd(SeP6E7bkLbWgJ=dY{ z6&={9=Pl^Hq5~WCybZlibYP>N-$U;g9oVSn9q9W+2R7>YGxYtU0~__c2mOHPz(zgq zLw`hcV51)V5z9X)I^kbp}8}&3oKQ213QBNE6M@0uV>e&o^NOWMMp1sfqL&n3Oy}4uu;!(=)Or1y(UGTq!s3;x$64~85WRs9^;wHosy+vv6QT$6KPfnv!-(Ku{u#l+ zxQ_`A=Kr|hI3G448AmWyyTvP2r$p|_Q~6YykNK<|M?#bx9!(|k!>99<7)s?+lt|}t zlnB(!ScX+G;2$>vhlbOWCzGR@vEgY#X6(c`rwAHT>2!8@YFcwDn;JVg%$dc(qfcuN zTZ6%dN0KM9sZ+?0e+VT~`Fu8$p3HOiyN@_qd07(fFQSzTu5B3nCi-(l+FKjSEkG zf)7Cqai`TG;UmUEM8^cb$iC}5dA==lo(smR;DUS2`HC^HK;{w(VLqHw)VFLY(Y4UT H$I$m5KSL_s literal 8094 zcmdU!d2Ae49mn5z;~Z`dJC_r?Nj8)8XA_)_uQ~^5YCDN@InG56dTn;?O}weE?yf_Q zw(+Ln4kDxxK>`XA2&sTXRSEh>kq8kgQ3X{MDpaZnDna=NB-((~3e<|Th>2(#myzXMRx4F34+fv-( zZ7pu~dWt>Xw&FH#dvUwBqqxJ{S={OED(>=ni@o0N;%=|6*yrsj?zzf`f4bz}h{VTUWl8^bc7 zsqmIn%;99IR0bke=f%7koQo|8YT=3qi}U|dPYGr&_2fCnCY{&hj)4e0W@9XZ9QKanGxtRWS|ArJ6VNjg~GmkGIfiU*u?hL~D`p>@^j=G;G%Kx^LqkA3Q=jcO@ ze!$U>I6Cd<6OPU~`lO@JIQnr%Kk4WRN1u1}1xJ6@(H9+k$#g zrI2X5{zOl8+U@$2_9~~{9z)t^JMDITO1oX3qV4(=ZP%x0yFNwR^(oq}PtkULijF(; z@f~f~qvY-S6W!$G?fR2;yZ%Jm^(We{KhbvmiMH!cv|WFq?fMgK*PrN4XMWv|w(C#w zcKwOA>rb>@f1-Px@k)}P?)dEO{UO@k52Ee;Alml7E9h_UC(-tP5gon1G4|fl05U(D zcaJ~Ux&P()SL!}#eFQI^rREs-w&wy{`n&TfbUt^<8 zF=MYR8e(RKGhaDgU#XYO|3pM%#OU*;mi0uWy@U)gQ~rh!GjpQN-0sfLu5<)rr8gJp z7BdTtz4!3`QfZb%M#OoqaWvLKc-GZ?|Ji$8-hcKu`J;{=D$~=Qr)&e}^Ws1Nu`Go%VLHIMd;sPekq?r9#aE$?zW^fulK71}<(#$ZkKL@TcVA4#U+1G~>m^5=5 zzCHrLq#0adUmpcv(#)se&*O>oFXoC1m^AZ4W?x@Az@(WU!LR3v3z#(XBD1eAC1BFb&)_fN ziVK)D^9yEwDO_W~q?una`^(@O118P#J#Rj4UM^tL z%v;R<3b@9ANi%VA4#?W4|%5 z4VW}D1O7+E2a{&zz+WXkm^8Bh{zt_JlV%;kSqnCe7Rrzg2uNX=W?@Hu1rvnO*SP#RrpS_QAhbd@yO|F#Hbj z!K9go;ja}ROq%J3uP>co(o7cqddY)HGo$b~hz};s`~gGn<#hTkJT zm^AYf_}jz>lV+~N-!49wG;;&~4)MXHnOETN6dz2Qc@6$9@xi2-H{kb*4<^mL34gcv zVA9N=;P;6SCe8c>{vPqcq?z0B_lgfD&AbPHpZH+X%m?uIiw`EvOsQc1fcRk2Ocnf( ziw`EvRKq_gKA1GK5dIr1)Uc%zpSs#RrpSj=)ce4<^k#1pkEi zVA9Me{C@GllolR`KVX?Oa~6I^d@yO|9Q;Sc2a{%|v*n!;e-`+xa1D4!cmep6!i&MD zgqMI%3r_`)30H$36Q0kz6*MuejFFw99R}?Has2^v`8y9~i?^c|&+@O9i=V9@2 zEN?`(4m>Ix=iPdoD3@TIk6CU|-z4&45bo<%&CG&45SJvlSt?D zCK0&Vku19sz(1e_2QumL{D$A_|c{@<1yGc%YxmP-xu5re-BCsKt%E}I@N@Bsg7iF1&bzQJdS(#{(`%dqfm z6O?+cr|{MpC}S?pHfAGpEpOKN})w#cqjBa70+8$O2rmcv(Fbbc7`3U6Tv z$7^9DI=>q{zv*J6~+OWsDMaO$}j+`IHo2G3Tua~!Q4veOe z#f9*qMcVLH5*_arkH97x@d5g!J3(yj_U1S|Hn%?7FI9KR!X?=z{dfb)#5IMyj zj*C+dkNY)dj2Dj4$PIWlgavKbzOVbx-@>_gC?aj&WsV;A>wMgm?BTdLAGG0ouknU) z!;fl!8=6>$1v!)#c>{OyhH@=39-ckncrP>ar5Hm7khep0sk69KL7v# diff --git a/riscv-rt/bin/riscv32im-unknown-none-elf.a b/riscv-rt/bin/riscv32im-unknown-none-elf.a index 94f45690c9278c5a78181d3a0ff8d64774a0eac3..25875f9eaeb0ed836696dc165fac95e07d447f50 100644 GIT binary patch literal 7638 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 N#QJ_6w`h_0{sqc&E~Wqg diff --git a/riscv-rt/bin/riscv32imc-unknown-none-elf.a b/riscv-rt/bin/riscv32imc-unknown-none-elf.a index f90bcc31d1add4d7055b65acea8e903a286a1a87..05296d7c7a9bec2130f36d78c5b889e8006cdacf 100644 GIT binary patch literal 7514 zcmcIpYit}>6~5!Ooiq;*>)3IUCM4@eoR{OgNMcIb^{&0KxAm*L zYZF39vmpp11d5W13J{_{00~i5A|NGyfC?&9A_P?gRRt9S{=gp~wD|!=D4cK3xqHXs zAR-<|nwjtW&UeqfGjs3Ej=gF}rZ6=>}c)S+|k0&8UD49%llJ~>8)0ye9l4$8tAv5KqTxohLou4S>3We#ZQqh<~zBn|q zp-@Up%9z3xs=d3mM_UK$mQwFz2geugG1#82|563D*zfxhL`8E1~+c zPxKYf-h1h!2G>O_kMI=<=7-@)dXMlfc=cvU?eW@JU31-Ib<1klv);A2M~k_V%*BoN z5n%T8ACGq)i*HJ_Z3@hHIp(&St30TZclN09&Us$*;;MNV^b+2%3c}IZ!Yt^~cn>kG zDa^EO%5R!VrpK`x;$7H22ghbTVX)3(vplij;pn88sR>%luShj!Q3V4C$0Jojc+?-| zu7>z=uHp7eE!Fz=8rl9vZ-noS@WT=Q!3ZCS z@KX^!9N}XTJ{94m2tO0y=OX+~8A)`xJnK7_mVA>6GG;ck5hck4sATOY#Xk@2|oA$hkRguD4K+|7UC zZvG2*^Iy1||H9q;7w+c2a5w*jyZJBN&41x;{tHh<&d<$%$-DV4+|7UCZvG43AF07#441O=Th?)Ax_~m@v{gv|>t~9|f2NyBp?iAEm z@D>l}mpKyTmm4=XaW*wP0v8xPUimh_lf2npmhk*>Ye9Z9bXzkY;djqo;e)gC^9+B+ zR04iCH{kcoNF^)nO*)e;>L*j8FBv!K^vKv`HZzuOXM5&+k;z~iKIsPCrm&iijryVhwmPomhVyFT zLsRIMS`Ylqs)yTRUNq>-rH^srH19ZY&6_?RzyRAic<(i<4s7*d#tqMlAK2=nj2mY} z2e$ecyXY78)` z2bbGl4%HZ7QqQLt`}(p5CiQ$4dIRq`fJr@98TlhmIFKvA+(gF~FpryNrGPF$7HN;XjBN z|NSg*0F!zaLSHXBFsY{=`UcT~Nj>=6jGqu4nAGzy^o^nelX_a9Cq)M)^{j*5DmpN! zXCrj|F$PTPX@mZ>_<>11z0mcA1WcR7(+7Qv!=#?0(6@>XOzIhczD;ysQqR-S^~W7B zsb?7acJTv~dY*xg?U zwk>&w*Qg%Uc}8^9X?fP+HLAy1^2S8RW4&eE;WetyhbJR?F#fFIU<^ZogYgdw4*Jar z4#t04aGVd@P>dt!tIgpxs+&adqvNGamXD=^97ioG5=qUej+zZ$WNS}y~|v0C0_v4 zdq8ujhh-bCcZx5N&zcRJ!($~}?`1Bumo?N|s5#Wb(zIQkU76 zR1XfgSBQ`B7Vh^BcX)<1^vkCd^VBa7Qp34T`6HJ43g?r8QDsh85`ErFx9Z;N8*!LC}x_J-ZKLHGr6MFyv literal 7778 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 Fe*yyO8I%A3 literal 7918 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 DFuWCl literal 7786 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 diff --git a/riscv-rt/bin/riscv32imfd-unknown-none-elf.a b/riscv-rt/bin/riscv32imfd-unknown-none-elf.a index 54fb2a4de8a00a0323f1b95c6b1119d44ccde33b..8d83c2efc301a8d708111cc9b6411bf0f4abf031 100644 GIT binary patch literal 7650 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 B8<_wA literal 7926 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 UBI%ENcG|Za^ZRvTLYw&h3GE*;fB*mh diff --git a/riscv-rt/bin/riscv32imfdc-unknown-none-elf.a b/riscv-rt/bin/riscv32imfdc-unknown-none-elf.a index e474cce63ef867be5ceef72b35e57f6456dfe5d0..389bac4efb2c6637a6414d138a6d1831ced5ee95 100644 GIT binary patch literal 7526 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 GzJCJq?-o=5 literal 7790 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 diff --git a/riscv-rt/bin/riscv64i-unknown-none-elf.a b/riscv-rt/bin/riscv64i-unknown-none-elf.a index 079f0968204f15c6a182657facb5e2039d9e6c85..37636b4654071f15d2edad5493092459e9af65b0 100644 GIT binary patch literal 12766 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 UkB@Vjw7)%^`vvWbZhZfL154&XY5)KL literal 13142 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 Fe*yReKP>URuGFXb(mddVPV-_XJ%oc z3Jj#RwQ8waHPy7#7~1qL#-{IyHl{U={bIkgUuGbyW$rIk0r)1r!7mPW1!k4OxQg=2jujWeDTU%M{ zwN=`@b(MAA`pSB5LuG^4UTOC>RyKMal@4!HWs|qLvf0~G+2VCpI=!uxtzK89%iC7j z_LL0m@rq|kOS6CZvF*9{!YgLz{MY|6N7l`fJyAaI)y7j#p8DEj56pUNLHyrM-fh{Y z37(h>|BgY;yRZJu*>7L@?t=G<=MP;tdhytY-+uG^Z@>8NkKX&)`Ij!da`Dvt;=j5iTyp?_MU!Noh_%`gpfcFu`UpFjQD>9gv_R(47=IA{IM$5wpA zRxqxyac=C|nOwUg*_di-HOnLu*Az;^U&`WnuiEUcwi?Xkc76QlcH`aedGn{m64*EJ ztL!?i)-IBF{?ResTxr%754AM+Hx8$By|OS9y~$Hpk8H=IkDiIkzo-)TC;i$raoNjo z2|gD$$L)iQ`r%Kd-k0hO_K}PF|1A$6OU+4gxU`kyFmqA9grT&RFLiL73tZI4e9J}o z4Gg8NJmuhN2XA!nW(RL^@Kp|elY_5u@LL=_>)>q;zTUyx9lXQAH#<1y2`+m4yBJDa zdAEaacktUC{0;}-<=}TY_&pAOuY>nF_=l_IhbokNpf5Jr1{|OU4|0hiJ{GTw<^MArb&;JRNb&Rvk!K3H@glTv9 z(er=8Y{H&@8s*W~g=eC#i`r+lAZLn+zV4=&=^^a=i|4>yPF*x^F@Pv%HdC} z%i-Vc-~$dm>hs#`<%Mj82c+y(Fm{XAEQ`w02kM8C)MjntZhd>m^n zdVS-0i=UPBIztXVOD#RNft(WxrQUDbcrJN3f``XHXr1{XUwPQq>l@>Fl=78_ecgAA zvqHY|uz%7z82^{ZS048DxgO(ZUwPO+WHT{i@aOfAF1*BboGA=;uGKIeSJu7`hxZKF~SpL3qE4t%~VD~HcH z-yk1zlNROhIp>>JKtARsEz03@&iAYUf1b)xD~HcHKd=sb%w<}X!{?lzS^+-hGA+vC zbI!|FfY0AGmBZ(pUy&a?lLbIIe9rj|`3r0tm2&u;^IPj+JPU0bm2&u;^Ly*SPueyr zF%|1m%q{AKdeq8u*gO!EQ*{&gx# ztsFk*%p!j|`O4vQ&OGw3Cto>y&I$g07>r-f8#MLB%Vxt{!#%2F$b z&p8?LSCX$BKIgQOpC(^9e9rkK`5E$+!{?lJmL6mBZ(pC&<5*eC6=@x$&#yXUSI%pL5QTzm|OE@Uz6vlHV4=;d9P+ z$zMmla`>F{BKhmdR}Py&iN(z8_8D=pL1R#zk__`@Hyvo z@;8yM96sm#j{ME!D~HcHZ;-!*eC6;t=N$Q+r-%h@A_?$D9{2k;ghtD}P$-kX^ zC z!{?keFnM*cnID~HcH9przSeC6;tr;Gf1$yW}ab8aU;N4|3SoO2iXyUAA$ zpL2GTpC?~A{N2R+$nS~Z@HuBc`3J~X4xe)>?sd`zBR7aV4WO76$UEa$&S= zQhV~{yh-(xN+#vg{=t5sfq?%s8#MP6dPer<2KomJvPHEmzpEF=3H^h8Ln`EZdWwZZ z<5uU3`N6#f=_!Z^Z(SVRJJ4T}|BoB=S=g8BE9MVMkN*EMOXbVuVt>y_SpxnSB`G1e zR`fj8%&cwbd8!Ge_Q{pNRpk{^o=07d&pcR^8eN)o{7s zyC*U~>h>+NZPfm2|KH-yY+sBr@+NBkJ1!5bi*~@+|2lbv_kXRhsQxbon~!_;0kUy+ zZEy`l^`D&`D0O-}6XU;3Ug7aSBMf6o%Ztki z+y7MzrLE)F`a8r}eb#P|>ywLar|hgWqQ*bb{%F-#=5tGDZA?2dIp`yQs&Q3-E diff --git a/riscv-rt/bin/riscv64if-unknown-none-elf.a b/riscv-rt/bin/riscv64if-unknown-none-elf.a index 87f299b58914c794798dea0906928dad30881da7..b72035b7e8d1fbc43aff68d28dc261e0592ce249 100644 GIT binary patch literal 12766 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 Z`{%RRpb{S+=QOFmy`1|6^+hw@|KFPRLlOW0 literal 13150 zcmd6tZH!!18OP6^yKj_j*>(zTX`usCke9N|>~43rvX(7xEm}&Ut(F&^o$YRS7q+|0 z%xo!Gq{~7;Em~={Mo56fAPJaM(O9F=VlW}-2S|wWp+*ot)PzVIAR&^d&;OqD%=~-j zo)E&IQ-4mDt^)$ovZDjC zq>&*@I+R|Pw49p*vZNcOmnGdKy)5Zw>19c`NH0tJH0fnY%lSMYOZs%_Wl6V6FH3r^ z^s=PqNiR$K4C!S#g#FG0rhH-l$)CCTZ-4(cX7a?JKUjqM$oZ)9)+U)(lQ}S(GA}$( zlKQ=Wy}c~_XJ>Fze`iA=W1c*T4t3Aj~cSQFE(WRUTeta-fGHrooveX2F=;N`OTe;fqD1DlON6I0yEn&W5UiL znC+Yi!Zkr^cFjyGyfO%9ubc_PRYAk-s+oqcJ7}Eko@oqwf~MJ?nWj*3W_xFvWiBmc zlgT|M$JS_C%q23vAP7F1Hy528Af90Vq&Fgn^u3U7t>MifVTL z|LcZm=5}2_+pzAq>dpFNx1;Pj+A1k>iVdC1nIH)32i8yElMv45`jce(#!`O$!5)@_ z<$;Yjt5&;QZ&#*R-r2s{t(VLBYBYgd)godQZ^7PRzG+*ubx}BP>AVZ(;og9@K^FUZ zjfO_-ldSBVYI9t-acgGn=1fO>XOFp9f^j{e$!*BCcY>cVGlpz;YU6EB@chu!+-DLuX_0F z9{z@hAM@}xJ^Zg8e%!;~iE%s(YwsS_t@gUBzLnJRhAOdz`Yj&b>fvo3zR<%Ld-yUB z&v^I>55LI6S9*BP!@E4Z*Teffyx+sG@$mH?zQMycdH5C&-{#@Bd-#Bd4|({ghmU*s zl!sS5e7A@1@$kJK{-B3H;^F%|e19UhR}*itBygYhYFm`I)=*R_Z%gF$pV_Q`y1`EY z+>|HhG@5rwNbmo5uO5!@6{xr!U`sT=DFWJKkj9 zcOK@)b$34J8~gdRw%P7izJb(GwF-^=xRB67gKs>iHk(s_-t0^o>+%;x!~N&&iBsdN zpWlwe_&F};%^1%*{(6k#VQA`Kx0cI~Ci8BRZ3*8;@SQB_ zIl02aaldYpvlJh*(c|Cd;o}~T`(0bY`}@~DKAu0!C*JP&_@;eBE@KMC!Ls|kuzf>5 z)gd&W%FDVVTIW-prcf9epByZX7p5ko-wIcl!p`FE!l?YlSQr~}KQkg@`<*VyZgXVp z-eKc@eJo9v6Mv9&oAKjh;Z&#Y7s}ev;q@H9S7B>sO^K=o_js}N_t7@xabKTLyaFF3 zUrX%wEBZis%|SlSwKmPcZwf66rPu2WIe0F$J>?4I>~%G|XI*`^^!r?mPI-L(&pT(S z^z18-`$wFQ`Fz9G=#epLI35xW5idx z8m|++J3r(uW$-oRmjI-p+a6VRwa(S&OV95)$}beo`8SZy@5;*IbIxY+`Ll*{_?&YK z`F!_R4xe)hEcH~D() z11X2kIeIU`eDK=RrW`)!=xY@|zY8jd&pBUpf$-C=MyDJ;=jgQtpWjWD!{?lD%VRY7 zXGWD>DTmKFk2?oGzbh+;&pA(%k9(6gpL1St z4t(6pv?+(rIX`y-eB8^lDTmKFzjgxrWhzUr96sm#);aL)XEFFHg#1fYmR>o0&ar<(wE6lT ziebv(bIt{ne;GvAl*8woOUZ9nS$gI0IVVs4<>V`e&pAEh=g3zMpL0G#ex7{g@Hyvd z@;k^^4xe+bC%=Ec75TT5uN*$- ztSA4A3*;+@&pEe}KR~{6_?$C9evy3T@CS(RAb&7{!{?kk z$iI_(v*9XvGT zOh=VnDM!z~eg;O)F7kU_jhwp^IC9w6^NgGc^7XjDCy8fW4L(IYK*PAc zsIn{N`0mBNX)oWivr-(CzEZONs8*%n@nU;rcz4CL4;3p#(>_=(oA!u~O^gY(0{%0v zEr*5&r$-9oV-v$NqFT%E>ZMbJv56g%Dij9?OT)WP*<36YCq{;4Pc|Yxx->B|K310h zCv5jQJX+XMD(;j$M*qvKy;!M~#s;S=67auh841C)qOViU?03aN1+H(1Jzgr0!TMu- z)D6^YXOV2jep;NTuLoSe;GyH%ZP6mu!{vtWp2+-f$9K!vq~qV_c5=e?+UflDabAj~ zWRR;`_&E!+0h} z>gUt%;KHO9ckx*|Y5ynO{&NfLVC)~)WqkiQ&&bsKkCag>Ayk@+u@7Xe`_~@#Y^|%3 z6py&^dVkSvad%WUB+Wl_u^qAB4aEFgWr@!p?*Z{l40+D&-yJ?s)Z*?wp>YQBs2jg2 z8dY1h)yk-PSk_7NKkVjz!ugp08M4IZ|F|&hKPL;fHoRD+Ewf#9t#j4>IoYChRgz+* z8-E$Y1os(XN%Mco{b;q`jmP|PF5~k*Dh&INy-dx3+kgDHbi53S+An0CwEyD?`^P1% zBGm8sF z*gx9)0d|vm!`Jc+L~IM+FF}Zsm97CUZzsFuTZ~p zx-n*o{XET|Y_XIpluWK`&@OxOy}99ml4IFYAvZLE@}=RSZ2$gJzEBt*Diw_>^cTAi zEGv}KgKkVblBUK+JB&M4wA#*XyRFqWnwndiv7SnGPCt5g$A+3HvIB7?GXF3WYf6o2 zzty!9w#rnR8FRI{%ABe(=9yzPrg(BkXDgjw*|+^7Ej^rN%>v>@@HmgwG0%aq8v z*>|pfxbFPi3)j4{;LXC=fwvF6d*r=upFexyyKj8&%~!^L`1ViVef7PT+Q|HE>__h( z>wK=Qs4e-dp#`^N(y8d3|JBu4qz?Lv}0)bFDqjDEfE( z47;qHOgo~;uh620`MyT_O76l6AT-I-c*U#dCX z(p(9>DCN?7n7rp~S&a_uFwx;Cnm?l^iIV`1r!ZdDEV86BIul)Oo3(`lZLR&yLyg&9 zEV}I?zDw15!aF14xyNi+T@sba-N*S#xb5x&hB;mnT-2Y+(6;L;>$P@9o?O)bUwQmo zYEEi$yquX@voOFH2l!0^eoKJM>t}qcj%VpOaSi3^0FPg7_1)b%v6J%F2~=q*Zwv4h z0sip-Ulri113VMpYXf|JfNu!!_5j};;FwRi==s^o(6*It5AYoUet&>J5a7E4yfeUi z0=zH42Likl;D-ZzG{BDs_=y02BEY{G;7qPr`is zdz9>{{*+jfayKtdY*apV0##bdrw91u0bU>A4FP^-fX@!_xdHB<&y(hwfbXBrlLp@< zxafIEF|=*v{&_xW{PTIz_~-4USsKXq&)Z4kpSP37KW`^ZYari0Zzqj^-cB0-yqz@u zc{^$R^LEl?0^{+|+ezb}x0A*{Zzqj^-cB0-yq&Ck59A@a>+6<2?tfk)<9{w9<9{w{ z%^422ZN0Dj?}f&?@eS^H!{@>8Cr#-5`2Ff} zx_;wlQ_p{ce1DusQ@?r-9Pf+?ky;6ZzfY=5!py9KF5fMAqcdx(uKT=-6u$1E_kR4n ze4XUP-)s0Y!Txn%;_pq+MAh943hp~Q;Io_%TPDn$7%}F4OB!sy@v@}CAD(c%95^2F+Rt7W|98u~p2@9#sjO?lkc>$%LjC&E+ zBmW9%qf!o^bM}aXV~Be9qB( z8~L*#N>L7V~Be9rlmIPhR8y4xe+b zAb%Ec7x}H^D~HcHcawh``O4vQ&KC0dw;bj0Ip<#TZ>N0a@Hyu} z@>h_r96smlCclS#jN7mBU|2e1!ZvJsdvg93h{7i&74sbB>dL7v(F5&pA(! zpCMm4e9k#Z{u=U?!_N?Zmi)CI4xe*QlfRC9F{D*2nqR}PfV3IYkdg4*Psud&t-0LVh3dl(fP7iR<{m zKSP|yxtF+(6aE14l(g@#^)%u*9+XA)gKb)r<8LPRO}cn+Un$pR>r%nhecCGI2Xg6B zexzj5J-JfOq`QhmldjPI{r#3Y0sj>0nmzfh;XT=b{{8t$pnrewppB?(%yo4Y@&_hu z&J}X|_vCG|Gi>jZHtW_(XZgNtZy~o2`S@qkbgon?^mh%H?C$@clCm*)#`ONy)QmLr zK2VP9!ezc)nPNW~hFG8Fz=-gN?9RIsAU>tv~{pkLB{A(=p^*?4gijKprIak}L@i&OC|8sMk zrTw7)r2WME$9FgxqT4~18G)tP1&_P<&g<*{=hFYKnJy6h<2j7?k9T4`6MMWU7jz+3 zsKnh}cAKyN6drtAPP(e{TjOQ69q%7=RXh{B{8swE5-U{V?qRzv&Y+LU{_*SAKv`(w z-R2wrIT`<$_&9&{_7flfla`_XM*HECL8vYIK67gmW7RQ#-EPpfI;cBk{|_7gv)1*E z|I95e?WC(J=O4F1eEerEL;tbc%$$?{L8%=USQcEC6~y989cGtVSX_43nORtA z1qM=Wty-#9O*JhwhBkeRvFUrFjcH9|zt}JB7uy&$#wMoHls2^5rqBQ0^UVC`&OI^J ze&``{&ojUKyZ?Lc%-nPD414L?d~tB!4b!hl*0)SYTSr@GduB~%GMV;Q@iLk0T&@1@ z>Bg8T@_2+Fxl%b_ESvnmm@M}chVm05<$&eN#r${;70MIix#7`rp;(+4FPDrd4wnWG zUR^Aw#)2{NNUlw1WVfyUP%`OsM|*oRnQ84@)9Mdq_w=J1d%I(vCj$wZXZ~tx&y*T7 zd1X+?rOWzd)?8#3nkQn$JbFB4N+-9ck00|+Jt6B(JZH@DW4=^fl=`!2d9+uu-nz;< zudCAKt*@;2HdHov8!H>V?n<|}sj|uIsq}c8E1SJ7l`Y1R>9I=D=G348+t7(o)>T2uyFt%hj2dEA1BkbE#)^J>~nIkykQew)j+#O zrv{TR9Z2o4%O&!9H5qRzK860r5(PK!m^a6?%-=abK6}yZ%Vy7Os;%smGWg8;o7Yx+ z#3~q9ZJe9>b|%;DNVcZhI?YPS#5skQ@Rzc9)~lBN)vCpuZ`a2UZ#Uj&J#W#hSOUie zez9H0-MY)=ng8k-?-D7SiU&K|hg-+fxgjhDWnrdz(`WED;W{4u>Y2Fwi)wLy(r;W7 zm!k}~;C*p(Tt2v|AAVPweW}STU|DMQ|63k@Ej1_U$Y1K<%N=}$gX6QnP4|oWmYedc z7)q@?<=|-tZ*}l?2k&t3)ee50gRgb)8yr0A;9U;B!NI#7yvM<}I5_4BZu%d4$X9(`VTCi=W+yj=@&W|-*nZib0IkD5$)J_&LX zroT2sztV9==gc+H<9FTHx#p!{FQHw_{1#5v^VgN{KCW=~haGRU?>S!2Ibq$-19MFD z{3+i)8n(cE9)8yYDQ@s>r@ra?QcsNuM$*)fKi?PKubb<-AHFW*y9BbHoS@a%64?yFiNzK>kt^ZM=a?0N^s ze9Uc`J%(e{RGAnZbu!yN%f|aCYK*5+27?-y_s06&`c~N z%T|AxiM5$rZtuw0Kz<}QKIZ=>x7_3o;gz8*WqSs`C}*gtL^jQ>mID-ZkkSqI~1UwPO+Xno9k{C+)P`Bl>EzJT;IgZJkI zfNiI2j~t%ERuJcV|D~4WjN5B#bl4vn_&&c178zTE4-;Qw>zMRBJAV$MH1HezDp(W& zq@f%1t6;Io)=Q=5YmRap2j_1kpJy56@HuA(`FyXT96smVNEcH&#l6&sQns@HyuYWNGmA+{bg}@Ht24BKY{s zX;TiLbM&(cpRa<-;d9OxY#{u3wnnEMKIiDU2LF7Bwke0tIbX5s;a^~Dbjsm#&QsQb z&sSyT@Hyuj~+`Maia_?+`A@`HP_04RsgIlm!)v8~Z5htD~`wGPI!#MbDP!{?me zTL*s9*65VO=bS%S2mYnDMyDKp62P`MZ4Vz0ZOY+u&Y!FRcbUr4D~HcH?^y?IxvkMD zhtD~Gvkv^rY>iGie9n2_I`FYhn{qJD@&9X082rmsmR>o0&hh^42HuN*$-WXQjUeC6;tr<43N`O4vQ&L_yvkgps*=d35cm3-y!IcGEZZR9J5&pF%3 zZzo?le9qZP{E+C%=&aIRpL3oke*^i-;d9PU$lpl5a`>F{0{PwKD~HcHza)PX`O4vQ&MV~i zkgps*=e$b(X7ZK8=bYb>zlD6|@Hyu-@^2(xIegA}gZy6dmBZ(pcgWvLzH<1S^Jnt= z$X5=ZbIy{#jeOi0* z&p93B-$uT2_?)wr{M*S_4xe+n$iIVpC!{?j|`FqG$4u6pN{p1%SIDF1| zi2Nb)mBZ(pFOxq)zH<1SGu1knhCW07EaIOfK8N@L;ujE~B)*XNJ;W~|ewcVO@wX;9vX5c{3=)|N6)_A10&}k`KxV>oI?>DIqd7} zjGR&O^|-*th%dD@_&D*Tt=C9DjX1`EwoD#t{VG@}$9FIGO{#RyfpUI8`f@So_i0ru zjO0`0!erT`_T_blzR#T6MJ(b!=nY+qFT%E>cu)?cywq? zh5W!kv2d_%b-tJ%-CK}71rgz`i=%r-hD-AIxWPUP`*K6Y`~lgc|5s+Ie7Rg49+)Ug z!2hBpB?RY+eoi$rYYY9HD#!c8ZIL{gB9AOXsb8HJ06ll+%Tw%UYJjW1`QZEok6W%? zzZRh$E;oGlMCM1`zC*T+I)2^%w|HlEUyL&HB{Kkf~~nb@+&!pB2zc-Y0gbkzQL+5M;IA}#n$ z5a(rh|GR`CGc6Bpf3$C?jj68E{cDdoTkEPM#aX-kGKLZEK4DSg|NP2e!;^M`a>#DIT3Ktixah(!4S#wanE6y*aZL?P-I{a`BwNl@{9=DzRp?45gv z7C(5Bd(XMQ`#aA$_s-lqGk5pgfpT@%@Y<6u&CD-7{j2+X@;&|eo=hg!*v0EiW=+BT zohLcxT4eb;FQr<&T&=tE;Fzq3D!a=QqxFcD>ecf2d#F;M7%z?Nt5>SkiSc^Px#~!5 z*ZxbY_3p7~PCS#ITu!EOSs^cjOS?ZWjh^1s{n2E0o^;n$o32g;flMSSfqT=vw`J71 zS1*p*n0B$zEV?t@Qg=Az+@ZTut~R?hw`a<^vBo~<4of|A#5pi7wavwxEcrtM(=yN@ zS<=XmB^^pFOIijwgr!Z|?NZB<1-<3H3n@A_NSjU9XRturtOIR|t6fzYLAWcf&%euI=rUXM0d^g+cN8K z%=C8m^)>?E)pBC#&ApZ=3hvnIf&)RYY*DHmCjuN-V!W)+3Te#F1!qdLwYtAQKhis% zEA7T=NLKMKP1|AO9U9lZ+&mLX*!Zw%-VwU^tARTOil5{D&&7PXHP0(@>z2|gpAhql z`Ts4CpG(Wh%#WX&{|XOZ>EWw9JpO9fxOtCX@bCc-FM9X}58vqFxQ@8kJU26xw(*-h ze7lF=;^8|ze8|IxJ$%%|$3496;gcSIz{96J{Gf;5>){W0_^gLN?BS1i_+uXaT@QcK z!=Lu>XFdEm4}adnf9l~cdiYBoe$>NX@$gqY{521MJ;t#aI{Bg*E7A4h=Pe$;!^0PP zc$bGS@$jV{zTCqz9=^iES9>8Ghu`Ai zJ3V~J!-qY5)WgR;yzb$X9)7^Xr#$?ihu`br4|w=&B9E><-W8F+bug5+@r54VmB?G& z>xsPGJ($RY#`ikj6^-lvzU0g2478&h|G3G1^L*fiPJR%_%KzIuqxr;N6*~`IF8coX z-a(k(+yloeKll?$==ljE3ZY-Df#O+EH?=dosq))|^*j z96uBA{rSZh$7bl{!A3#}n`RkF@+2d{M$TzX9QV7fgzx_sHF%TmF8A<_4IVVj=z5R8 z!^3gEi=TTz4)?FFgwN~yJ^mvN-u(LBiT<Kv-H(y;dE$6oQO=U(i;Y&aG9I7*W9lrEntkJO->z58=S$ib zmGQWLL>esZ599&~oaGj%of4R|$R=8iF;PvIZhcCK$g! zIOktMK7VUB4xe+bBwrpU&lThFIp^8Jr%b*)7N0A|;d9O&H83B%C#)EU&pCTlfRFct731(Zr=|k@Q%#oIIDF2z zT^;yoZKE;{pL6WJ4SxwlEym$<&ON#xK7TqIhtD~7Exn<~J^^F=Gh;d9P+RDh3rkQL+bIp+x#;Nu=-#W;M<`JM{!mzylL zarm6`j5_eo);22R@Hywl>cGddXe-9ybIuDYz(2=isg1+uoS&-$Kcj6_#^H0$FV%s6 zuC`Gbho1q^@@uW(W3gf!KIi;K1-Mz0r8W+qbAG1|*a~fTNB&RIr&H~GflbI!TsUrN4l_?&Yg`8o29 z!{?k!$nPQFIDF3OBR~2JP1MOae9pOy{65Mz4xe+@k)J2uIDF2ziu~2&8;8$1*OA{( zzH#`RvxWRMKJts?8;8$1v*fQQ-#Gjt@rTI&NCJn?IggNkCHcnTbI!NP-$1@` z_?+`N`B#x|96skfMgG;~8;8$1Pm_NQ`NrXM&X35q-va1n96skfPyV$KwHSxbIX@%+ zqb5sj96sl~ME-T;8;8$1zaoDV`NrXM&a32qjC|wpIp??JUr)Yq_?+_x@^2vDIDF3e z6ZxCTHx8e3j*-8GeBRBT4xe+Dkbg7z#^H0$S>$gg-#C2E$&mjE@{PmioD0bRB>BeSbIvOAcaU!! zKIin3e+&7>;d4%b{7;c@96sl)CI8dp8;8$18^|w_ZyY}7Y$U%zzH#`RQzE}izH#_F ziC4%UOyKZ2=T`D}k#8J6=ZulRn|$N&Ij2n>TxOpoenRvk@8tw{x^OO0_lblcuXxbDG2 zHXpNa8I^e7@!%6U;Ww~o7bosz~sf(u{DY*aO#HJ&W(`1rV2#WT@mP{%(N z8&u-%0ofO4(5JNjX6lQk-B%6cvn^@<#g&n9Ohuf(PFdpfzh4-}&&k5&sE%)+XSUDg zYV|i{hqcW?ee6G+|3l&?%|CZhlr|exjq{JULVW&D3B&lYx0x&AVv!O*F6$rdb?ymi zB#r;Pj=xbwoIl)>tiN3s&kB=!$GB>9)wqtoVva9mk*9xxG8^z=K5rL0Mf?P&{|X zTCAL>(YDxLh1RB;h)H8jqzSEUO4Fvr#wN!0g(Rl+1x>Z~1x-wasEMgb+uwKQ`R#t0 zohMCeU-Tg}&u>5TdA{?^?9S|;_Gu8!``+?t+rIvZ@_bvoTG zJZ$~5jWG?fJjqMGTq%?)rZ6xr>%ro#!sKWrWcf;|Fi}Ir%H%|TWUNvwl_n=DWn)Ss z<(+%3DplIX!#VLxR%dgv)AnF0xoozpvooE}wXZ=Zt$+4IH*CBy;dwHVuzBWvQ+uS; znATNcjcNApSyPJO7;@{MwA4{?msGF&{Y}Ro>Dl^J+8)rxWI- zhf7kw|Ic@p`v2(gZtLr4@MO%hXK;Kn=A%q@p2>9HW->hmlj*(JWU?>&na&e_rsr)x z(|g9xWS?uubpEg*)AMperuRfcCi`|{rt?f=rpIf_^v-MQNP6bI)6af9o%PIg`;_rJ zJa4*V%JbKHiRrad34fjEPp_Nu{ncK>^y;YwzspNbcTFYzZm)5=d#cfwoavsaCYeif z*`%{i%CRL)v$;a%=Xu`8bLXIw1H>~d#WIv8;Vny?D`vILsy^^Dp6|&C*7Z45C#YuU z|G#bsW*)BVXY1D;SG`$(?BS?z9c+~pImL#~<&@|7^#kiC@JR^gbNxv&U1KS~{$P*F z!ScW)&T6P#t+y*vDDQ6DV%N*$d?k%1SG9;(MVq(Zn`c@VZd>TjT{8F5xwto=ZImT^ zy#_-A_DNRZoN9BtY16j!`Yq}9wvKMIQi5?kp~-D1Z0~y2@=&c@pqsVuAGqCk`#f*S zoJ13j4}7Ug)UUr>9t3B|co#~UEbZy)9BH4(=67K=C@a(K&6c~IyZP~F(D?E%uKB^6 zQT-NQjyBrD=f=(P{=iNB=(8iYb7@Jlh-InO|4(`JTxw3*k-yx*S2(zR`>Sr%{A`tk zh4M}Z?{V;62k&$6>m7W9gX22krt{p)P-^8{9elfk?{M&b2Oo6sVFw>|@CgU6IQU)% z-{;`_9sCgof84TIQTOT{yhhO!NHF>_)!Nx=HSO2{1pd()xm$~;IBLQ z8xH=agP(Npw;cR04t~nP-;HoQ^lR@P)ve)mSA8p~;|*037V0-Uc#DI#I`{$yU*zCR z9X##e%N=}$gRgS%tb=ztc#nhkI(VOhU+>@>9DJjLZ+7sl4!+&NcQ|;zgAY3Ru!D~} z_=JO39DJ{X?{o0|4*rOPKkncM9DF90hgTDC3W;Yw?bWs@Z>gc6Qr;TN>p!lA{y7Fe z1#nXypOZB2vMhDzH!yr^!^=R6aBKCNvI_bcB(YN%TIMt)p~X}-ZXp0it+Q-9vVnI!A-7Y4)K=k1xZ z>9B+s16# z63`+H&A#$2LZXfBbHb$hVRB|1z#KQuZ%P#Dcmj0e9JE;sqzg}wP<`He9@GH8Eh zM8?j0Y*M(*l930B#{T+Pnk>iuAZa(_$I1NJPTen*wWGu9IeM?c){dGIR1Nm=BIzHb zZOWs*KA(66K0&^g*zcG1f%KY#e4J}-nuFgIniWc~*BNr~TxvUP3*_v#HM$pUeS!1` zY>iHNbpA)IvqXCKl}G(!*2jFlZfkVPqy8_fgLzKb8lCc}f808l|2J%n?zpX^{wtPa z{_HD{`aiaQ^!a+#ay$;dBWK3e=r-6I96z&byTlf_;)WDTzl!)U z@f`6H;%jV;*9qU9AGMb<_*(Ky0MgLy461N-ldUh2p5JqnUnZRMZy~?Q*65VO=bSCp zK|X)hP!6AS?jWD<{>tHVPM-W0TccABpL2@V!F=SW`D#-RpL6c927G>(RSutX?j@h! zrIf?xocqYvYad8Ce9qB(5$1!}mNw<^IY(cs@cCU(IegCfiVcLHvNby8@Ht1XHTe8) zsvJJ&d`ljq!9Opk!j*FPob$AG;Pbn(a`>F{9Qn96X;TiLbG~l{mYxbtfq$v3(J6<|IUidGKDKF74#qjbpVx%J zzg%VMmBZ(p;Ew^q;IEKHn{v3EGsg=J_$yVGUO9Zu!QWWX;N$Or+LXiRoWIegB!l=82FXq$5QoO31lZ7NHz96smd$iJF=&RCQpFcN#m;65RmBZ(p!{o0gUpf3f;?I+RZ48IcIY-F9j(p|tIp;^@Ur)Yr_?&Z$ z{2Rzu4xe*=N&b!GD~HcHuaJKe`O4vQ&THiBcM1$s4xe*gC;w)Mwke0tIlm|WGb&53 z96slqB>%JID~HcHe8oxF&sYU+)e&H8PU4S|UyR}KIp+!Tcag6gKIeRs{893i!{?l4 z>)ma9MYjp6?kTV%n;YvAr_VqI`a`uqlV{7Ex7sHXmzMf~~jFGR$1wKwZV{7mU;%Qs2 zk$x6&%mWSMdV?xlDaUs&_Dx&){@s7SB6inMdxop}3 zIx;pQG!*ckdBbwBI50Vs9~~Jh%7|($zpIzd5=O>$jjK=?7$_C@oVB@7DvS*kWlv#5 zbaZKKXmq43|4%sFXK^^ct5n!6dkp@USzDn}DUA$FRwUqm(b5uvYeiqDn%QTI1qy86 z5P7^r9)tBo_^=(Q*Um!Oj{P)SPhStXe!+dqwcDyiq=(B5-#wA}-;VE+v2n-0-R|VH z?X}bS>*JghamW9bJ^qjEgmL^yS#-P}|9W9@``=*49g^+bEUqG419AI*^ZZcJ{b2u1 zvPAcf&xX-VjMUGk-^PVWE$ZU4blm<=+x=(fhl8|xot%Oi%HYR)^ zYu&&0xMyo!m85vwj@SE(Zi~9ZvLSB%>6PJ#89Na3Z;>TBf4m1oGcn{vyMKH5KtYST z2ZTl$#N&4S=3rE9)mkfq>M>cz&Ht#K|7q)E{^!aPo&VFqu>Y(q+*|>#q1xKw2s&7>NR0<@0kd~XfEF5KNZMKX5Udl9}lAkC_-vj3!3^Q8IB^bcvmkiIIut`#k5@e*4^W zAP!G*pL3qi^Lf7KJa6Z@z3JlhsZ3|j!_!vBCYP$Z2kWY8tLkd2VzEkp6E9=2HTB}R zPg6=w(VrLilg#E)nVd>>4CrN7x;r)0mkU@jmq`sypmc6%Fxh)3m(FB{26I`ZGQHW( z!>cm6_&_iw9!XVYr5?uG`dZz&Zr9c7MpbofO|?Im_Gu?KwKNrZo*qb0JoOJXu_jch zwg-ZCv91z+Goj|GyVcnurCvN$q_U&CDo>4g=g;bGPratpsS#fqUu4@7mHJbgPk0Ua z2Cp&S=xxYv@HXZ*=9|3D`ORK)zS-N7-{Nh}Z}qn2w|Oo37H@lgyVsg;^>*ZUoYjMR zF|S9rH1WX?OrM=sGiqS$#=qw3Z58?$#`&3uTJ+SM=l}k~lNEnj6!}k$w=+>Q#nW!` z!+B4XT%L1f{(Fnw&x{?udhFVX>)*M2@yhq!`~LfHj{WHBPp`dwy{6bxe;fPpN2l5^ zbToFp(^+)l!imO{@0=`2znpIBez&{i$je8XhTk17O=VTAa!`*Yq894o^t^wU&CpB# zWa<%lDwXYz?+(sDsn&uLS?Wc+QoY$Mr&GI#+U(rC{qgp?dFIWxPVvVXEDOy@!BG^N zg<}r(3YPv>oubdCqBD0xpR~dq3kPsJg!8$5JDIM1DZlVwFM4u^1iKgGtOnX5eP)9D zX{zl}Ro;j zrrcI1wDT;}_KxjR-f_=cFrz4nlK_sVFkBjzYvPYic{p#ynZtFpz14%2$!;vVu;|o_ z@P4-Sh;?Sf^B=M4nqrbKED^<5B-kEYNH-5Bi9azR3S5&wVX;d3fEvB~k~ z%oM974!+F6?{jcmHZIbyc@2$k625Yr1P$SF2M=Fx@q@c|VkhCX6Uc7~uXFHv2mh3V zuXpf=9X#RSjSjxi!J8bs*}=CuIOY{Da(-GF>bCGU2jAu3dmQ{x2jA!5?GE1M;5`oB z=ioU9Kknco4u0Cf&p7xq4*r~jKkwk94*qoq|AvE~bMW&aj@5{Y7SP~6ar59EHnE%d zQznq#5+2Np6B~t3oj{ZPX%2pegO@pYxr5*3;IkZjj)U9h^QfBd@a^+?RN>voMb1x* zp>7Me&+}1bpU|A4jw<`S9aZ*uJF4vSc2wEt?Wk(8jwiUvyeS}_vOh1LvOgD|vOgEa>O6<* zw%k|t_kySF&yoB4k}E&d?JfJY`-S6y7g5v0`uO`UydgMV_j$1UQRO;6cE50(LBHX% zDd)dj+2_gfg7c65B5FpsTYo*G@OMgKiKv+cQ0}YnhQKT?=y$F!y05$Iy&rxr-(zyZ z@3p0dKNlX5UXK*q&4Cmt7^UzEOA2yk7w|orlw1BTSmE;mU9EF)JpbkTt_weRtqy;` zgZDZ3u+IzM%g;J|d=J2Q!sVpHSMiq0m`bKPvgY@&cuQ4LwWd`?ReD+NFRO}bR5E#> zZ=fU9mmD1Me+yftlKrXSWRLz0E!o>;envw^=RuPcY%`?ySX!B1*D^y{>kn>bGk$za zPId}@ftxrw+@D{aSRHTGjJJY@d{4pq`xtE#9`@yWuF~!q@}-G>zaT5RmK@|CCoWGu zzCZC?F3$~ezDWM#rj48@iFcVczGr;N!o%b5G0uXJFFfqa^NR6&nev5){bA!^oF~W^ z9`@y&VEp{uS$NnVF_{=Y`@+Nipz$$}@%1`wIIaVp0V$)V0X`y7*XK+dIe5mT$oDMp zuL#sN<_i>DU!Em9%_9iD4uUCd0J@-RN5hmgre30JekTY=|D692`8+!ahtD}1$e(7~ zsD#7koGr$|c=#v!8r52#3!( zPn+%V`RyniKIh1@0H6Oh5)PkpzNXhv;A2jaA{;*FoHYV`%qdcY!{?lD83F!0k##K` zKIeSfIPftCNf8d8b6zz9e9S>ogu~~Y?-~LALXmYX96sl~VI27Pm^Lcm@Hyv)#(~d& zI|_%-IX@x)6Q+$yIDF3enQ@RGGi_AD;d9O}jRSwNX`>PjKL%jRZ%hpzA1T7&bI$LL z0C%a#x)u(fbN*-?uw|x=N;rJZ`Ll80-)q{agu~~YzZwTVwn-5V#yKAt0sj3W>smN` z&iSWt;4e3ARKnqM&PT?9zrwUp35U-)5igM7KM*wirEvJ1Q%e3P$rlcvbM7R6CHcbP zbIxq?SCKCqKIbeTKTf`I_?)wt{MF7$rg~Lw}e~J7?3y04+=g8kczHs=QbAkMgxQ&pEG? zznOgD@HyvA@|(#Q4xe-0B7Y0{!r^ny+vIO0UpRcu`33pg$QKTubAC;J3;Dv~bI$L` z-%h@8_?+_x@>|Il4xe+bkiUa`;qW=SeBtmp=R@*$kuMxR=UgX$ zH~GThb52oFAT80=9`c35=bWkJ?nVi4&uYa%ZVQ)K8tvc_}#>Zh%Y35m^hE8pSbjk!#hM=^6@vsfQ93`Ir}l=AZO6D zQOS3BF*v@{XagdWCzuvTwleKWeVz5@Xw(^vn$;(bRgN+dni2#^d9OS&=LN|R7Xc9eR$I5R3>%kKw2jU zhVFgRX4&d@mhMS*XHxyh$3LCMQ@LEGw__-$cmMyCn2y0SCil0bCQL)_1L3$XTo&k+ zDf*LOsN2mI0T?!Xj;_(qRI@Jk5uSVSh~ZMTNh4Il<+4(*AoJtyU#IuA9l!K{UT^0j z;}?d%*=)!EmO1`wX23Z9V*Qc*<@g&kv-LlwIf{%USPNWfqsHGLw*D{84lL;h{YUjD z+&{jskC0L;ncK7LR zw*Hsn!PjLpsQlj=r|WjOf6P_kOziSo)Bjyqp%QkF>uq5Mea!41zJBGDg(lu@w((yw z;~z6V&R?1SgvbA^X6V0Cf4C$Ns*AkOg0+dU%9y{YH%MC?)a_>fTaEuE?b^ow%JLv> zG^qUZk6R%;{)?KS|IlrwUNilNk4yG9vFcUbu=QWRA~2ebi1UX>QudeU;*w_iQVkky zyt-`qH!Mod4{zckYR) z_CpVud(Qms?>^_;JNKS@XO_#>7D@wqZSH4^+lq#msKPt=J#lgb(aK*BGrBoQ3K*h@VSbk`vQY@9m$0}uGN<-y= z11n3F%%~j`kL22HPC9K4hmy-?+ge-G>0I;btQ}k5^rIWQI}<@51FD^Dlp1sF zD%)<5sy%GBn~Ti?^JK!9$BrjV`Q-NO@ngZMCuQA<=ZraiER<@Ca&LQ9Uai&kU|n@x z&{6FO)>qdD8>$XzW9>P7BFSd{#COK@|0 z%alOO#ec`37TnYL+J$dk{Pv=EN@ot7J$&xS``>)+yKg@K_7C3q$(a|0Ynf{J}*9Q_uo;lKS^!1~S#nZ*k!M6q*51u~QdFZV}(+Xvi&OR!mX)sgG z3ds(F;Jw+iP~k|*OB##OG>Kqw;yf{HWm@e`a%qqZrits8GpL=QHaq|S?J42N?XrHf z$-4cjH|zJ^Ze^F@T1k;ZZ0J~4gCJSIVf_F;3gLWif0Rt$wv=DLv(L%S@`epKs#d#3 zrv_6f@6YUT%f)iM8cZ-1XJL3+qQNCN7R)hC^LNfq&R#hC^4arn(Yw+uwLNFU%@u#> z+Ky{toSS-frq}IAH)mQ_ndOp-YYHV5E@km-P;2(qT21DBw?27zy9w?Kf`zjZDeN2g zC2k#8>#mk};n6X{5@|M+4z#rnHIHTUgIMgwVn7yVYA}5UZy3`~#vetKlz(w08BYH7 zYm&0J(PBRzKgVr^i~7+|r!kZo%tb6qTmAo*M~|uIq&@jK#$422#!%YIukdi36I|5C zyvs#7K4vb;GYqAzJnP}j9^UHVZ63bb!>{x3wH|(hhqrrphlg+Q@Jc`KwDbwij zqw}!lO!xRRJ$$x@H+lG656AtGi;m|)hSF9Ze_u$+v;X9xe*AqQWfo1=Yx!vpkH24} z%oQGgg@?z_|0$F4`0?|9$~1fY`1wC&;^+UAiJ$*dCVu`;nfUoXW#Z@mlxg>jv%|yV z=l_)H^!V}ff68p}`0?|B-K>&y4=S2X*B_BY-SJjZiRRCn{h z9MAkI-$LrPz_|`MI=;tz-8e>P&P?tYH6#d7|ci)fRmoIfW(fis`$4^EF zB=3`^{=9{jH0Qq! ze9F;JtjFWu;o-v`ekkPi*URTTKAtBqo@hDh@lB>Xn>P7Ef7$&$m+8(WnuX>PIaxM` z%Uq(x>*EuqDxM<@r$HGT}tPj>2l5uDgNoX^o`F05^tP{Niz*WiACKdn<9_4V^yDelAMYZLt*(Kk|S z4)SrVwdnPY=PiC#((4R4_$;;by9RQODU^DjYvZ}(p%@+=|A=!IMttQ_U$1YB=Mlz4%6o{aDMh*;(T0jdt4h8`a=QV8@B8s=i1;y#MiiXLTa9!KMhd|_zhvpE=mAW zPz{7FyV&H~OQdd$;n)w(-%38uGRom|&JObVSwlH|&bf_zp8b`>=bSwGGhG{%a`>E6 zbPo1+mTRL@4xe-Gb`E^K#(|W>=bU@6QVM*&ODTuXIR_z2fv?v--YbXCIXV}?$GN3N zIegC1a}_?{1(n0+oX@&I`14#Fm2&u;qt_bz^C7yT96slK(XEGnfor2u4xe+Lat?gH zD=UZ3IbS0mbCVY3@Hyw}PC!29CN0Y0bIy010DpnXQY(kgIp1>*e9UE9l*8woA3Fg) z<}xkH;d9Q5PJqwfHI>8XoL`V{pUEsx4xe*=MgAh!Mx`7+=lsSw7|&wYMx`7+=lsq& z@YAl1N;!Pa`Ga%dU*_7Vl*3O0xblXp;p3%6IegCflM~=BRat7~@HyvQ=YTD9ZB)wP zbI#wK1OIZ@Mx`7+=e*|}_*kb!IT+`Je_|5`|6?jktsFk*gntwe27kG{v?zzmIkN(5 zz`s&usg=X$oO$H0AYVCr&RIbIRpcv&&pGz*h<5yX55;E6;d9RAl)n<9E6U+>&Q;`R zRF+yfe9p;{e+~J{;d9O^^0VYChtD}5CqGBNa`>FHp8RI=mBZ(p&E&U`uN*$-Y$Lyw zeC6;tXD9jBlCK;-=iEVl8~MuNb54Q$Rpcv&&pCU@UroMp_?)w!{59k&htD}>@~E+CI2?^mBZ(p zHu7&LUpaivSxf#MFnM}C2P!{KwzKJxD-Upaivsgl2&eC6;5h(ADnF^0qEoQKID zBwsmv&iMlQ!{jT6&pA__gK6kf_#xs8h~G>6QsRe+Hxj>xc#~^m z_e#Vsa_wbOmt#1-E3lt-4st54jS3zLa>m1!T_{J*zCHsZ=K%SuT^l(EV>oiy*W-+w z5%P7vz(2Kb6s0E{5#72pvS)axEdMXp_F3GUA1oF2OON6IHp>($mC{iEctryK z7bPtrxK{K$)y#I+(DPI|J|`{<<;@g%wKJ6V@8?;d*Uo%-i+-kBT>H%j*DrX|ajkl_ z5vk#F!FNw&e%S5XWZSs?*Z#l3ow>dk<>XD={`a15t#fX`*#8E3MfZQ5u(SAiEw12HJXKTAAN#m^BeksEkcdxLx@t<67H$3UK$MKsfuju%3 z4~Xl3K0>9q-M4RK8Fe3uVUV+Kdp!@qP?~I2TRtGIxbdg2w8|N0V*KaHD?0wCgkels zd2u=B`oDysv~~Pie~TEaPrL1LeR9$5l%1AF-1wW^k5*ky#Q1S6qvQXXFl0tfQ}avL ze{{ced)Xu`Kb2)%|GQ%P$0e=X>vi>tFgex6!Z2E#bN#O*hGumC;M1& diff --git a/riscv-rt/bin/riscv64im-unknown-none-elf.a b/riscv-rt/bin/riscv64im-unknown-none-elf.a index 587320f69d86f75a7c283cdcb2a3fb7040479cb5..9674cd52e55bf53278de3439bc6ee82985151aec 100644 GIT binary patch literal 12254 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 literal 12638 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 diff --git a/riscv-rt/bin/riscv64imf-unknown-none-elf.a b/riscv-rt/bin/riscv64imf-unknown-none-elf.a index a9ebfeda6dc9c259906bb08890082cf290732875..c8a6c4505d6be4f552c5002be18ec9527847ffae 100644 GIT binary patch literal 12262 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 diff --git a/riscv-rt/bin/riscv64imfc-unknown-none-elf.a b/riscv-rt/bin/riscv64imfc-unknown-none-elf.a index 680159a2076f2ccec2d9ff6072b185a9a6111863..131ca27c95c4f81dd7e66c708b6bea51d5886355 100644 GIT binary patch literal 12142 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≤ zs0)ANyF}{v_#YAG+W$Lt|MTtk+Qr?^dA4uHprpmGe{+N)?n$=@=dpw`q;_g{l=^B4}b+lEN-5B=|&SiZ3 zKNg0}*llXQZucKQF5O->3EPik>DvE*WB-?ltJ~{y^@=dL)FWXSEq-VBzm^!v`0=~O y4zCH5g|yxF0~PywR9^A@yZnE_L^ny7T#BvWeIE{Dyw> zhtF}&HOul+_CX*RH=keRN+};#LG7;Y*_l`UB%BXX{ zU+epr_F&Q-beFh`-LWR;jvj7uwS{fPy@#BePPRFBOzQm0&Vg~O4Gk7$DIFD)J?GO4oU8gVEp@sw>R}hTL*iaBW!;M^Ox=K6^bid zp|sT%`YWz5@Q^DMUylo=H{(M8+i_vwbX+KYv$;_EUUQ-U_2$CBo6Uvd+pUGt>DEGj z)K(Z+(bn4%xxbux?)~{<fW} zU(_<+H`fwxh+5}2%(cdnGv7bgCUa@8xqNY(97pU{%j}}){f_fwoxG89G?A;+rn%%iYd~0(uPrq(7KVI72pp9_;7%a2Kab@PX_o* zfY$^3K!6_%@IwK9B*32t@TUTNA;7;D;Lis5@c{o$fWH{vuLSss0Dm>WUkmV`1o+7S zef5fbR(KT><_;fDZ@wXn>Cg_+)_31b98b4+QwZ06!GqM*{qb0DmgL z7c#lO`goHkk!xotedEgmyfc%xxHmF+n|nHwN6B**Z}Q`YpIbutoPoa236GoYH_iuM z?Bok)s{Oys)6XaUuGo3#bpAQ+%t4snxCf3`zEEeh*x?&PV~gF22I%wsnm2m0#ihr+ zD3QYN`vQkZ-zT@Y7gHQBV<$fZWVEIYmtiC4!Um4}U}whj_GJlg(B1j~$9=g| zjv{>?ZVveO1o&`(PbR$a@9g6NALkeINw-?ScU@bGc~`EC)bw|(t}We7Jwm&ix?Q=v zcXE29GFhIPPJXvq1SThcvbB?J1ANL4r#^H0$H&lRsiOEup z!{?lDs{cGeE zj@FFB=bYD7fd4U*r5cCNIX_beeqQ@1#^H0$FVum5x%N?v!_Na~`?Xg1SgaX`&pE$Q z0dB!$sm9@R&hOL#TcdpxkLtj`Qu`>z;d9QP)q#&~){KL3&S@3kUv08f zZ|cBbt9=yXa5?86>cGE7`zXfYb50z23I4Udo2-q)=bUBaf1G^d@Hyvv^4F1X96sk< zNd9%?8;8$1tH|#n-#C2Ext#p<h{l8@Ros7fh zoEymRrF`S?Ip;?5%j6q}&pA8D-$1@``25^*ANl>{8;8$1!{pyUzH#`RvxodokZ&A5 z=S-6SN%D=u=bS3}1LPZr&p8Lkzma_7@Hyu(@;8!i96sk9A^#@wjl<`hFOxq=zH#`R zvq1hP@{PkEB>oKfH)nA8obxRCw~%ifKIeRk{9DO44xe+LC;v9`jl<`hm&m`JeBcad)#KIij`C8;8$1e>%Gbe9mbne<%6I;d4$0`S+4<96sl)B>ywy8;8$1 zmy*AWeB8e9qZK{sZJ2hkrluJIMcB28Yi% zcai^j@{PmioUPTErioun{tWTe#2+Hg^BE^@ zzULE8-sC^W8XvmpNdVXabmHnbR$eGeUO277zvrqdd#*xE5 zAJ+)^c3jBcO+2rC@KNG6Pw+9~JkLGEZ9ee#63=TN&qT|J<9N{UU8j`v{K`1KL$L3< zYL86SDyZ$T zl9qN43QaSJL%RP^ve%iFo{mNEu=KL#zZn;Xv{Sw$za4f+KRy2^g<<@ndRC6>`1beA zxXsn-*JXqC%|U(bU!4Cl;%3diA2(iU3%(@tUm^YU{9h7=@lzi&*NKZoTKc$bf4|ka z7o?Ll{z)Bwvx<2CaY@?#c3qqhCijjR)fUU3j(^P}@tyR!%9=aO8QuRaePFpr*kiJ! k$Hz61zIO?7oArZ-W!RfA8F* z5jF8N_daKS_jmvI+&gn$X0{g$7AyNEwl3M6S=_q&di#3&^W9etWHPyE5zjN3e&M!_ zEHTEk$n+JS3e{S%QZvQTX_=3e_7`U-YnByimEueTm1?syh4NIbRH@9))T+i*%GG@b zuc*|zrtO$`BwKRbveBMsDBZbSUp}A7bob=*c5EX{9=v||hEx#9Kx_-lUrghbQe)O! zYWo=WP}ChV=bE+Vv6L~#9!i<&!p_|I5o4yKWyU-vb^bYHz_?X+4CQ3X9}}3C4IPsy zjSQL6p;VdDvXNslrCX)Slx~wMQ@UNMOz94(GNsRuDpOjH=P{YmXG)bRy;Q19>19%7 zN-vixQ~E5aGChXv&IP7=@z6UzbmQOm?$6Ei>EFG#8sm}Uq5S#O?Wx}2wxQmZ0L%X@ z%l?|ptuWdAZ6-TVG}*y>O*Z#Jn9aW$W(VF3vxD!1+1yht+5GofvI8%)WCveu$>!c{ z%jVx{%MJwX*})aVd9ZZoWZ|SE~u+{1g$h zcngjMD@^C=J*&gz>y}@%9A|l>4NKR4E~9|Pf)CiUBWsNG##{Dew(ZLFboKU|OC%HL z4Vqk5Y&#XyyT=>dRk~O^;R8EOa5xCoElagyFTvNVM0MNc@*+A;Cb&?#t(Aj)`Et)p zu5bXe{g{o(%ya}x&ZvmXAOhoA89lOFz}hri_Ezw+=`Jp45eKNaJ688)uw^`-XnU%#|B@s>KV9rZgr ze5r?bdiW|2U*qBHJv`$EoJhhOgDIS70wJp7P{ANKGg9{#Y0ANBA@J$xaN+p~!mSrWLXuf`JPOB*Qa zDep|=%}-9&Khwz9!bMGaa!#u`waC`{X1h6_$b;y)j~Chel_q)ozUM37b;+i2KKfx( zx{lMA@87R@w%wwCf0KRRaaa-8-E+taW1kZni|uyhdqD%$d!dmp?+Gn5_#U#j*_`I% zW=GQ6l)pM!-GAJkSR7w}jye(Jco~}J&!Oe=qeDUqP4n@w{>lU!`KvtqoFWM$923@_B#H)T;uU?_3#l7$91qX;eP#~$6tte^ZP45gEfs&kTG4uxr`|k zN2~7lwXWgrRFBZ^RJSP<#wVvoi<5FD>gjizv*c&IQTzrz*EWA3LothetTx3*p8 zNcn-1alg=2W~+%m+PTH}0k5#wY5El}8f|@s&*c~EuNs}+MmOrUxYui>^1VQL+}HOJ zpS;hxb-7@>_Y=?@fTr(GZA8P`8o>StXaMR|Pu&pKzF zRQ8p}{S(f|cphk7$1#5PmB;-bI6wY= zy+-`=u8*>v_!o%dw+A$wIipd}&MtR-@O{L)iH{M#()IDa^Hp=)os!_{K-~=>4dw2r zXJTseHsDUiR^^-+|==bVyr zu)p$?biFBu&pG!v13usVl*8wod&%d!jdJ*$b07J7E(0lt&pDqVAD=~S%Hea)yb~~f zzMCnB&pG-ThM#upq9}*YIbU`Te7-9xhtD}*CI4*KM^O%+a~^jN^7-zn96skfMLw=I z+LXiRoNqY+`MB0-Qx2bVzUu_|YgLx296skf?;QBJHfd81pL2fX1o*f%X;TiLbAILo z`0G`csvJJ&{K7f#@eHC(IegCfr4!(vud-C-@HyvI=fL0K`Y6ibbIxy^13%;XD9Yh; z&TpLq{{q)XQ4T)?;MyNtg^x*_a`>F{M<>9|sw`DGe9n2>Iba)IA4NHQ&Uw!{@Go+G z6y@+a=Y8kE$1-io!8j-SbCWRmA5vMWa`>DR{b()>{wA5UDTm8B%K~e_zeHuJ%HeYk z{{A4%ZwIcJ*uBKgYUj}WhtKc2whb54hIa9SQDe;M)nh_4_%LHumuRpM)j*NC4- ze3p0{@k!#Hu8-Y2KwQ5Y;u(J`fp3cW8RsBp+VxT3p&@4`>e-ocRQ7YuLC(Fdk22u; z$f>wKigM(zug4iVWr(inet~~Vp;Z0u1AY(jjO*js>I~u-2O8Gvk9u~d9N$IQH(k~H z57dgIQfn1kC$v{7O%}Uqr9(B-HCC(@P1k6(YPup?o+=Bq0{&B{?T(d3XU7YZ<*Aaa zQSZxd$CX7wd20W(3dPaUO6lOD#l=c-YP=*{vJvsMD^uf><*NLDQM=93L}7oWctExo z{qLl%Vy#vwkIvR4;J?u_5`uF@Kc|{GQj5EI zwoKaoTWCPkB|R;Vew3?GV8X#5-+I5-A83voIzi3>+hg-(d~@Aeneg; zjsJuj|7qvr_@5sYmZhZw7Wck5rlFu{FVSkm~P*<@GT z?$*cnaV+EGKPe1jiG55>4kw$m_JD&gm diff --git a/riscv-rt/bin/riscv64imfdc-unknown-none-elf.a b/riscv-rt/bin/riscv64imfdc-unknown-none-elf.a index 8141df3e22cfa412f1f8d7f556a78eca90035e8b..002d497e621b600dc52a0f19c3496e011b27b7b8 100644 GIT binary patch literal 12142 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 diff --git a/riscv-rt/macros/Cargo.toml b/riscv-rt/macros/Cargo.toml index ceaaf6c5..8c2d9c13 100644 --- a/riscv-rt/macros/Cargo.toml +++ b/riscv-rt/macros/Cargo.toml @@ -10,7 +10,7 @@ keywords = ["riscv", "runtime", "startup"] license = "MIT OR Apache-2.0" name = "riscv-rt-macros" repository = "https://github.com/rust-embedded/riscv-rt" -version = "0.1.6" +version = "0.2.0" [lib] proc-macro = true diff --git a/riscv-rt/macros/src/lib.rs b/riscv-rt/macros/src/lib.rs index 5767d2b1..3c79864b 100644 --- a/riscv-rt/macros/src/lib.rs +++ b/riscv-rt/macros/src/lib.rs @@ -9,7 +9,7 @@ extern crate proc_macro2; extern crate syn; use proc_macro2::Span; -use syn::{parse, spanned::Spanned, ItemFn, ReturnType, Type, Visibility}; +use syn::{parse, spanned::Spanned, FnArg, ItemFn, PathArguments, ReturnType, Type, Visibility}; use proc_macro::TokenStream; @@ -48,27 +48,49 @@ use proc_macro::TokenStream; pub fn entry(args: TokenStream, input: TokenStream) -> TokenStream { let f = parse_macro_input!(input as ItemFn); + // check the function arguments + if f.sig.inputs.len() > 3 { + return parse::Error::new( + f.sig.inputs.last().unwrap().span(), + "`#[entry]` function has too many arguments", + ) + .to_compile_error() + .into(); + } + for arg in &f.sig.inputs { + match arg { + FnArg::Receiver(_) => { + return parse::Error::new(arg.span(), "invalid argument") + .to_compile_error() + .into(); + } + FnArg::Typed(t) => { + if !is_simple_type(&t.ty, "usize") { + return parse::Error::new(t.ty.span(), "argument type must be usize") + .to_compile_error() + .into(); + } + } + } + } + // check the function signature let valid_signature = f.sig.constness.is_none() && f.sig.asyncness.is_none() && f.vis == Visibility::Inherited && f.sig.abi.is_none() - && f.sig.inputs.is_empty() && f.sig.generics.params.is_empty() && f.sig.generics.where_clause.is_none() && f.sig.variadic.is_none() && match f.sig.output { ReturnType::Default => false, - ReturnType::Type(_, ref ty) => match **ty { - Type::Never(_) => true, - _ => false, - }, + ReturnType::Type(_, ref ty) => matches!(**ty, Type::Never(_)), }; if !valid_signature { return parse::Error::new( f.span(), - "`#[entry]` function must have signature `[unsafe] fn() -> !`", + "`#[entry]` function must have signature `[unsafe] fn([arg0: usize, ...]) -> !`", ) .to_compile_error() .into(); @@ -83,18 +105,32 @@ pub fn entry(args: TokenStream, input: TokenStream) -> TokenStream { // XXX should we blacklist other attributes? let attrs = f.attrs; let unsafety = f.sig.unsafety; + let args = f.sig.inputs; let stmts = f.block.stmts; quote!( #[export_name = "main"] #(#attrs)* - pub #unsafety fn __risc_v_rt__main() -> ! { + pub #unsafety fn __risc_v_rt__main(#args) -> ! { #(#stmts)* } ) .into() } +#[allow(unused)] +fn is_simple_type(ty: &Type, name: &str) -> bool { + if let Type::Path(p) = ty { + if p.qself.is_none() && p.path.leading_colon.is_none() && p.path.segments.len() == 1 { + let segment = p.path.segments.first().unwrap(); + if segment.ident == name && segment.arguments == PathArguments::None { + return true; + } + } + } + false +} + /// Attribute to mark which function will be called at the beginning of the reset handler. /// /// **IMPORTANT**: This attribute can appear at most *once* in the dependency graph. Also, if you diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index 50b86cd1..f1c564a2 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -361,11 +361,11 @@ extern "C" { /// never returns. #[link_section = ".init.rust"] #[export_name = "_start_rust"] -pub unsafe extern "C" fn start_rust() -> ! { +pub unsafe extern "C" fn start_rust(a0: usize, a1: usize, a2: usize) -> ! { #[rustfmt::skip] extern "Rust" { // This symbol will be provided by the user via `#[entry]` - fn main() -> !; + fn main(a0: usize, a1: usize, a2: usize) -> !; // This symbol will be provided by the user via `#[pre_init]` fn __pre_init(); @@ -386,7 +386,7 @@ pub unsafe extern "C" fn start_rust() -> ! { _setup_interrupts(); - main(); + main(a0, a1, a2); } /// Registers saved in trap handler From 61aaa6cc54fc87bb7b4c3a13eace6d62724b5636 Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Thu, 30 Jun 2022 08:01:37 +0300 Subject: [PATCH 177/234] Add missing changelog entries --- riscv-rt/CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/riscv-rt/CHANGELOG.md b/riscv-rt/CHANGELOG.md index f8e6b3c6..b72ad219 100644 --- a/riscv-rt/CHANGELOG.md +++ b/riscv-rt/CHANGELOG.md @@ -7,9 +7,14 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] +### Added + +- Pass `a0..a2` register values to the `#[entry]` function. + ### Changed - Update `riscv` to version 0.8 +- Update `riscv-rt-macros` to 0.2.0 - Update Minimum Supported Rust Version to 1.59 - The main symbol is no longer randomly generated in the `#[entry]` macro, instead it uses `__risc_v_rt__main`. From 55b830dc3e0dc3efe912084a39a04d8b12c659ae Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Fri, 1 Jul 2022 07:41:55 +0300 Subject: [PATCH 178/234] Release v0.9.0 --- riscv-rt/CHANGELOG.md | 5 ++++- riscv-rt/Cargo.toml | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/riscv-rt/CHANGELOG.md b/riscv-rt/CHANGELOG.md index b72ad219..3378cf72 100644 --- a/riscv-rt/CHANGELOG.md +++ b/riscv-rt/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] +## [v0.9.0] - 2022-07-01 + ### Added - Pass `a0..a2` register values to the `#[entry]` function. @@ -80,7 +82,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Set MSRV to 1.38 -[Unreleased]: https://github.com/rust-embedded/riscv-rt/compare/v0.8.1..HEAD +[Unreleased]: https://github.com/rust-embedded/riscv-rt/compare/v0.9.0..HEAD +[v0.9.0]: https://github.com/rust-embedded/riscv-rt/compare/v0.8.1...v0.9.0 [v0.8.1]: https://github.com/rust-embedded/riscv-rt/compare/v0.8.0...v0.8.1 [v0.8.0]: https://github.com/rust-embedded/riscv-rt/compare/v0.7.2...v0.8.0 [v0.7.2]: https://github.com/rust-embedded/riscv-rt/compare/v0.7.1...v0.7.2 diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index 167d7c65..416b2046 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "riscv-rt" -version = "0.8.1" +version = "0.9.0" rust-version = "1.59" repository = "https://github.com/rust-embedded/riscv-rt" authors = ["The RISC-V Team "] From 01097fdd30a93db19f3ccc7b1c47b686a113673a Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Sun, 3 Jul 2022 12:04:55 +0300 Subject: [PATCH 179/234] Convert default_setup_interrupts into a Rust function --- riscv-rt/Cargo.toml | 1 + riscv-rt/asm.S | 10 +--------- riscv-rt/bin/riscv32i-unknown-none-elf.a | Bin 7958 -> 7712 bytes riscv-rt/bin/riscv32ic-unknown-none-elf.a | Bin 7826 -> 7588 bytes riscv-rt/bin/riscv32if-unknown-none-elf.a | Bin 7962 -> 7716 bytes riscv-rt/bin/riscv32ifc-unknown-none-elf.a | Bin 7830 -> 7592 bytes riscv-rt/bin/riscv32ifd-unknown-none-elf.a | Bin 7966 -> 7720 bytes riscv-rt/bin/riscv32ifdc-unknown-none-elf.a | Bin 7838 -> 7600 bytes riscv-rt/bin/riscv32im-unknown-none-elf.a | Bin 7638 -> 7400 bytes riscv-rt/bin/riscv32imc-unknown-none-elf.a | Bin 7514 -> 7276 bytes riscv-rt/bin/riscv32imf-unknown-none-elf.a | Bin 7642 -> 7404 bytes riscv-rt/bin/riscv32imfc-unknown-none-elf.a | Bin 7522 -> 7284 bytes riscv-rt/bin/riscv32imfd-unknown-none-elf.a | Bin 7650 -> 7412 bytes riscv-rt/bin/riscv32imfdc-unknown-none-elf.a | Bin 7526 -> 7288 bytes riscv-rt/bin/riscv64i-unknown-none-elf.a | Bin 12766 -> 12376 bytes riscv-rt/bin/riscv64ic-unknown-none-elf.a | Bin 12622 -> 12248 bytes riscv-rt/bin/riscv64if-unknown-none-elf.a | Bin 12766 -> 12376 bytes riscv-rt/bin/riscv64ifc-unknown-none-elf.a | Bin 12630 -> 12256 bytes riscv-rt/bin/riscv64ifd-unknown-none-elf.a | Bin 12774 -> 12384 bytes riscv-rt/bin/riscv64ifdc-unknown-none-elf.a | Bin 12638 -> 12264 bytes riscv-rt/bin/riscv64im-unknown-none-elf.a | Bin 12254 -> 11856 bytes riscv-rt/bin/riscv64imc-unknown-none-elf.a | Bin 12134 -> 11752 bytes riscv-rt/bin/riscv64imf-unknown-none-elf.a | Bin 12262 -> 11864 bytes riscv-rt/bin/riscv64imfc-unknown-none-elf.a | Bin 12142 -> 11760 bytes riscv-rt/bin/riscv64imfd-unknown-none-elf.a | Bin 12270 -> 11872 bytes riscv-rt/bin/riscv64imfdc-unknown-none-elf.a | Bin 12142 -> 11760 bytes riscv-rt/src/lib.rs | 19 +++++++++++++------ 27 files changed, 15 insertions(+), 15 deletions(-) diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index 416b2046..8fd31470 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -8,6 +8,7 @@ categories = ["embedded", "no-std"] description = "Minimal runtime / startup for RISC-V CPU's" keywords = ["riscv", "runtime", "startup"] license = "ISC" +edition = "2018" [dependencies] r0 = "1.0.0" diff --git a/riscv-rt/asm.S b/riscv-rt/asm.S index 5dff38ac..956b459d 100644 --- a/riscv-rt/asm.S +++ b/riscv-rt/asm.S @@ -167,16 +167,8 @@ default_start_trap: addi sp, sp, 16*REGBYTES mret -.section .text -.global default_setup_interrupts - -default_setup_interrupts: - // Set trap handler - la t0, _start_trap - csrw mtvec, t0 - ret - /* Make sure there is an abort when linking */ +.section .text.abort .globl abort abort: j abort diff --git a/riscv-rt/bin/riscv32i-unknown-none-elf.a b/riscv-rt/bin/riscv32i-unknown-none-elf.a index 4749033ad768efb6016211199dd2718e23a5f47c..8894afe85e9b8e719cf590cbffc3d1d16192c62c 100644 GIT binary patch literal 7712 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 L=v@~=>vI1A3+oe_ literal 7958 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 diff --git a/riscv-rt/bin/riscv32if-unknown-none-elf.a b/riscv-rt/bin/riscv32if-unknown-none-elf.a index e39ab3aceb344039fc850153a077f98c3dc93f59..7afee313b635a790ae88838fb0341f2579a26504 100644 GIT binary patch literal 7716 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 diff --git a/riscv-rt/bin/riscv32ifc-unknown-none-elf.a b/riscv-rt/bin/riscv32ifc-unknown-none-elf.a index 183d20eb74840dc42179df763cf2f334f3d05028..e863bd41d8613cc8d60d735cbffe64227c76db42 100644 GIT binary patch literal 7592 zcmb_hYitzP6~5y&4k6&!K#Z{yvW&^$QCR%K0YZsw-e7DKo@tY=cm2RljP0z~u0v_? zLZb46Mu=2O+doBBA3xguC{jgLsSmZNYNM(}s6|y9Rq8`3Kl-2~Qq@!~J>Q&j_l~bg zikcpI?tI^OzkBYT**P<_>*ZTAx!%F8^VTP4MnlVnmW@rD>RalQN&e%Ax5;GlM(gjH zXN*bkmbY7aJfF$sO(r|aZD0RDW@0!mS~{Q0jG5ffc<}KYIOW_So%X%QNF9Ssz^L;MF9| z!+e}U@XzuE+(xH}*A$q{_=(iP=xmrdY-3|hkO=PQuEax8E4U*`CC#qnPcSy=ECDZPd$I_#E2vb%#&Y>_M|9e?Lk*e;mJ`obNU^mVf4fel5Td zKJsPUM%RkrOZF}iOb3;wqU>;4qP({JvGPT8ik`J@WKnxBAXn#ldrL68Iu9q?4kjB@ zO^wm8I~?yd-u5k45S)C<1gC<`$(=Grx!dgqIdI;lAJJE{FJWtP;W(TB`Z& zIkNLrdHsCr)R6Htmg;zS9;F{wiG=W^rRonozQW_=@l_sQ<8fSD5;9-PQk~CzYSJ%P z5KO}5nc#SfH-4kXH+y`G$G3XC)#L3R-|q399^dWpZjT@G_%V+^^dNO+mYT|G%ZUSuSMyZRDd zZo75<3Xi*b6ThoB;jZ3P@(-H{q_{geSfEUA;-at1scMo`k!467K3rc)ge3 z)sytQdJ^vHNw}*g;jW&9yLuAt>PdL3H@~YV>38)c+|`qCS5LzCdigqHya*X2%v|sK z5+1)Eacy)L2T6W+{rThN{^O4?4%h3+&*%CjUp&9-!+Pg?>;3=F=V}2nS4Q)>dJ^YdXKwn7yh}%U7PaG(dGGjJU%>wmzmQuIFocHJFZ`(QXTb4lj>+J zY2dbj+jRQ)@MtzOoE{q;8p-$PR+#jO%v5@izjdXD`t*wz2KPR%DWp%8p_BbazmMf6 z#_#$SO}p`REggBVyc+kKXPR`qxX0G24s3Ot&n45`aG=hrKN>-Eh<7ywhpivavRc)F zt&VG8$yxCOTYZpm^_1wqR>yg*d0BK|tB*0RRUO#sJ&Y^QaKn-3t>VQ9nrUEt;GJh& z`HJYcr&fMKFxquGb~WQb3*u>h@eK54*Um*7^uQ@|hW9y4>fgjth!<}TU{cSMj6*FI zU{cQx=nrti0Zi)I$2go1)fiw>&jH5a0;t9SlX{La4z)CaNj=X(*AfCI_4Gp5A_pe* z3_;ft119y1Lf3~PFsWw(`XX*PfJr?cV;pK}0+V`hS%eR9!vRd{!N(BlLlv0R^GWEq zL2v+*dR}83Rzv0Q?!1wDKEpU%3e^~3QqSiYhx$+kCiQ#~dM!5`z@(n9Fb?&h4NU6! zI&{6E0F!#IK-Y&lFsbL;&>!W71DMqF1IA&J8xCMn&yN|0%b^+rOi3VPe#ToEMliyp zo?k$(6CIe;^K0lULiGxba5Yq8fJr@f7>8@18Usw~;U7m#_<=|^z@(lBpsy7jnAB4VeVypQq#pcc6Y5J3 zFsbJe=G!*nACF# z`VP^7Nj+bJzEgByQqNbR?-CuD)N>j7Zqb2BJ>P`BM|5CP&v&5j6&;w=a~1kN(Sb=l zZ$R%59hlT}4f=l3fk{0#pm&N6OzL?PdY9R10nvd;J%54zl<2^u zp0}YN6djn<^A7Ywq63q9@N-FcSae`gPZ{(hq63q9=0iU!IxwkcA#}VfZ~&8fs-ZtE zIxwkc8T1c{4ovD<0sX_G1Cx5zKz~MbU{X&#^k+o}CiS#H|A^?oq@K;tv!Vl&diFu@ z6&;v*1eftH$P1niJR!IOcvA3U;1>kraTVkQKMXuBILh;!;Arggf-$yk*x{9`M|n<& zjy!cE4zE-_$x<*XIvxXcV-BxWeJ(tGqDSlR7aXl&KybAFNfs}YR;8=;WB zDfy3u2z~w8iR0Zj&P+C&>z|y_oylcJj`#Ca;^39c=(fGl?EQo3 zfn4SU^5Y*OsZ2hf8_G`PdHB6YEnB&?_#31|v+nJVFRLh)a|>TWsPTR1L*S8&Q~Te1 zc$E3`USQ3J&9|0?Qr=p%V`>5C=guXnqYu}}7T)6dt}^fD&4$f~M^-%Fbh(U2KAZ!a z54YlYzQs)Jx!|s-5BqlB;`z?U^5Hz#e8(8uH83<)OuAzUZ69uN@qC}=d>xz!>zk*2 zI9^=hb__!^z$ZKe(6D`d%;Wj~P-UX;s>p{tc73=-*f9(Z|NF@-1kkX3=a^fJu1oBz zR}XeLX2e+Eyxp%n5B(=* z5z#a*m!l88gMQ75IO!71~tZ(PR8F#cZSl7`C%5h@W)7yHtd!EM=k?`nUvW)0=i-=;})E+c1 zr$tmxFI5m-xllocOZ$@-&U-Ik(a*8ymcs zcMmtk76i56iU=0vZtDN7*WG0PFweALo>EWs#HO6ZROi$=OE0N|R?foLFuY!O_)<;n zGgk83$Eq5u z9;m9VEPGbjo@MQ$fIP2j!YzY#^c{+K9f-Fk+FFBdcQ`((f7mu(fp>O4dFMQ@ac;#7 zOud>5R!TIwnwSM6lE>Q#Rpuw!T63*q$<#?y16)PzQ*dn3j)b*{9mz&4*i56mGUze0 zELGB+G6oQiEm%Uh>vy@$A%2`|wEw)2YX0yVh2t%B+Up(O;Bb2#Wjs7362jvl)$x3X zH#^)oe7VC{IvmfIgp8L6sg7swnzYLk1e0)iXIS3h^k47rjSk=B@XZeIba=PJw>o^g z!+RXQ*Wm{pe$?R)JABaL!ww&Fc+uf!9Ddf}=N$f&!_PbXS%+VA`120G6yasaAVxEs z^&?z%EI5TvD|Zq;-QjjUNjpA+B!t`bCA=zZ*8J5Dx9d&(cD)I=>rJ>_Z^G?*6K>a= zaJ$}w$DQ%*dXsj$zJ%NLB;2ki;dVU8@l6JeEgxmEb+^#3#yPSNz4lh&Qt#R+|^C8?m55n#9AUyiK!n?PeP{y~qYj%|L1u2+F<1BU_86tgxmR91b2+);!utl;VZ;O zjB1?u%lX>-E9Vp4?`pVvbib)%9^J2Oc8qWDB=lJD)nFYls*~*mj=I5qj+Q;}H>w`(i~Csj z40;jua;evs9Nx7J&q5^v4#&bfw^4QAP#Fy; zeT;FV>cF9Xf^m(WW07&SKFsHVpX7=Im#pSu01114%@+i(;De`&@fdz3>PFnnFHA2b z9*pD9u-K@719V-Ez(zd}LDv^1uu;!8=(D-v0593YHtHE=?CT2~*r;b5dM#HRz(zf|h5me~ zM8HNpCC2^&s6@a-&e+!v z24JI}Z$NM4iUZiF=i7|^#ZZZWje5Sz*w@Vq*r?|kbp7A}HtP8v^!vHu05Y~BFSz*n!2)d5^GoPWTyX#!_56mh-wc%q*r@0CjQt0o5&;|a z{E4xTMZf`U)bnS?{xYaUz(zgqGWM54CH{*O>+1OjV}AuyB4DGQJBFzzdiW1H zfsJ~apeIEKHtJacy+w3j zqn0WKd@2H1?Zik0~_^R zgx)1Ouu;zo(DkJbY}E52^ey5CHtP8*^sS-;8}+;leVgdOMm^tzzFl-+qn__T-yu4% zQO{NAJ)#2}^}Ggsr|7^&J>Q4EOLSnPo;RTH79H5A=Q{LW(SeP6Zb087I=5gpj5XCw4M(SeP6_CP-&If`dH6f`h)N1*31%h{elP z5AuwPjyz3c7B5ph&XV`I=*@g+%3Hil^_lRT6g`;#DZ#-Uh6D%m&j}93eN=ET|HlN! z`LF@WID)a(Tf9tlN)(SR8B z8u{^$phUV@%;z%WMect05oaqeOTzs{v~$6=4TB%0AR4)z#-%f0jH`$?Fny=?xIX~o^p>4?5%O&i?keZof!iyGZ!)qa$?;z)UkuL!9-J@;DhwUPo z?>W9eK5JowZAV#%=6k1(g5S!>H(T3~56dF#!;oI#eDeS_!nSkFLyV@^*_Tug4&f5P z_7NR7$qVibYZ#X=dC-P&zsLpo!W_3aAJ$_SXhZp$9z(sFlP?bmAH#9K%s4vkD?Dxw zYZ$ji+c55{T#z@s1?#!fD&}Dz2jW{?qWNxdzGl{tuU6ZT?=>zw^)WsKG02_Z3j<>z vqGN(zWZw;*Jl__&z=dhBu5hn8UpbD>mAQmMm=EU^_03;IbUifjG4%ZhVLm9? diff --git a/riscv-rt/bin/riscv32ifd-unknown-none-elf.a b/riscv-rt/bin/riscv32ifd-unknown-none-elf.a index 46718e187d0f40eb8ae3c6be7bd2fb9daa2913fa..8fa49cec31b1711cba0e0d7b6244865cd369ee0d 100644 GIT binary patch literal 7720 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 LdQNox4!-{YU?~jW literal 7838 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 H$I$m5KSL_s diff --git a/riscv-rt/bin/riscv32im-unknown-none-elf.a b/riscv-rt/bin/riscv32im-unknown-none-elf.a index 25875f9eaeb0ed836696dc165fac95e07d447f50..b460f2c1bb6c5f8cd789264791fe6ba52ddfa56b 100644 GIT binary patch literal 7400 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 GP41uT?EKmQ literal 7638 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 literal 7514 zcmcIpYit}>6~5!Ooiq;*>)3IUCM4@eoR{OgNMcIb^{&0KxAm*L zYZF39vmpp11d5W13J{_{00~i5A|NGyfC?&9A_P?gRRt9S{=gp~wD|!=D4cK3xqHXs zAR-<|nwjtW&UeqfGjs3Ej=gF}rZ6=>}c)S+|k0&8UD49%llJ~>8)0ye9l4$8tAv5KqTxohLou4S>3We#ZQqh<~zBn|q zp-@Up%9z3xs=d3mM_UK$mQwFz2geugG1#82|563D*zfxhL`8E1~+c zPxKYf-h1h!2G>O_kMI=<=7-@)dXMlfc=cvU?eW@JU31-Ib<1klv);A2M~k_V%*BoN z5n%T8ACGq)i*HJ_Z3@hHIp(&St30TZclN09&Us$*;;MNV^b+2%3c}IZ!Yt^~cn>kG zDa^EO%5R!VrpK`x;$7H22ghbTVX)3(vplij;pn88sR>%luShj!Q3V4C$0Jojc+?-| zu7>z=uHp7eE!Fz=8rl9vZ-noS@WT=Q!3ZCS z@KX^!9N}XTJ{94m2tO0y=OX+~8A)`xJnK7_mVA>6GG;ck5hck4sATOY#Xk@2|oA$hkRguD4K+|7UC zZvG2*^Iy1||H9q;7w+c2a5w*jyZJBN&41x;{tHh<&d<$%$-DV4+|7UCZvG43AF07#441O=Th?)Ax_~m@v{gv|>t~9|f2NyBp?iAEm z@D>l}mpKyTmm4=XaW*wP0v8xPUimh_lf2npmhk*>Ye9Z9bXzkY;djqo;e)gC^9+B+ zR04iCH{kcoNF^)nO*)e;>L*j8FBv!K^vKv`HZzuOXM5&+k;z~iKIsPCrm&iijryVhwmPomhVyFT zLsRIMS`Ylqs)yTRUNq>-rH^srH19ZY&6_?RzyRAic<(i<4s7*d#tqMlAK2=nj2mY} z2e$ecyXY78)` z2bbGl4%HZ7QqQLt`}(p5CiQ$4dIRq`fJr@98TlhmIFKvA+(gF~FpryNrGPF$7HN;XjBN z|NSg*0F!zaLSHXBFsY{=`UcT~Nj>=6jGqu4nAGzy^o^nelX_a9Cq)M)^{j*5DmpN! zXCrj|F$PTPX@mZ>_<>11z0mcA1WcR7(+7Qv!=#?0(6@>XOzIhczD;ysQqR-S^~W7B zsb?7acJTv~dY*xg?U zwk>&w*Qg%Uc}8^9X?fP+HLAy1^2S8RW4&eE;WetyhbJR?F#fFIU<^ZogYgdw4*Jar z4#t04aGVd@P>dt!tIgpxs+&adqvNGamXD=^97ioG5=qUej+zZ$WNS}y~|v0C0_v4 zdq8ujhh-bCcZx5N&zcRJ!($~}?`1Bumo?N|s5#Wb(zIQkU76 zR1XfgSBQ`B7Vh^BcX)<1^vkCd^VBa7Qp34T`6HJ43g?r8QDsh85`ErFx9Z;N8*!LC}x_J-ZKLHGr6MFyv diff --git a/riscv-rt/bin/riscv32imf-unknown-none-elf.a b/riscv-rt/bin/riscv32imf-unknown-none-elf.a index dd9247233e086898d1be7d7fd9ec545a5e8ce6ad..929902b898ec39b611e0dc06ef38ace045c460c9 100644 GIT binary patch literal 7404 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 Fe*yyO8I%A3 diff --git a/riscv-rt/bin/riscv32imfc-unknown-none-elf.a b/riscv-rt/bin/riscv32imfc-unknown-none-elf.a index 03365572871041a7bb3eb5a47861d88a030de11c..13d1f2171ccb6fab0a1f353d6202d6bde4388480 100644 GIT binary patch literal 7284 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 literal 7522 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 DFuWCl diff --git a/riscv-rt/bin/riscv32imfd-unknown-none-elf.a b/riscv-rt/bin/riscv32imfd-unknown-none-elf.a index 8d83c2efc301a8d708111cc9b6411bf0f4abf031..96d34eecae575ac210d9be086e37e018e152d610 100644 GIT binary patch literal 7412 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 B8<_wA diff --git a/riscv-rt/bin/riscv32imfdc-unknown-none-elf.a b/riscv-rt/bin/riscv32imfdc-unknown-none-elf.a index 389bac4efb2c6637a6414d138a6d1831ced5ee95..2403fb0e916edcabd750069b6ddef6bb6fbe284b 100644 GIT binary patch literal 7288 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 delta 723 zcmYk%&rcIU6bJBm`-9X_+ES4&-L0;aSb-3hwp0iQ;o!kY(hEdS#>6UCQGQAFLRzav z4{B(hM@_hS(L~*|7vou@2NMtc2Oc1XZ^Wn!hz%kr0Gq`7t;aTH8Shzr|Z^knG z!H!wS7v|~!98rp=0#LR=RhjQFVLda8O5tm(1c2YIk@#t9Y}U7~HWVC3us!@ZbRwL$ zi#=hxHw{VN*Bz!xBgWUlbl(b`Z%MjH#knV5qLO{^&n2O{MAeOQb~mq)GY|1|Vsh${ zyt?{dcb)7;IlH^-3c0_H!^!;6Vc>PoyqvrkYu=S8P6f8bDRx6Vz}^r$ z>`k%9-V*n)Z;JKaTVmdu=hM<)7ouE$=eCYjlRuQdBMWvRYWQSWlYE3qp07uPU5N4+ z8ETv=r7v(ztPgQrtS_)4)<3=>))%O&Fm!$awD5Vh3QuvLo-c92t->DexK-o#Abxcl zP{woKIC!|>U4Xav$*UTN8BFBHU=$a!M{zNi>RY#zYSDT47fr0^T>F4dw5$8Caw*%P I#!p`T1t;}pA^-pY diff --git a/riscv-rt/bin/riscv32im-unknown-none-elf-sbi.a b/riscv-rt/bin/riscv32im-unknown-none-elf-sbi.a new file mode 100644 index 0000000000000000000000000000000000000000..0e7ca1500a06528844631897f6d45b5cd50efc1f GIT binary patch literal 7420 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 literal 0 HcmV?d00001 diff --git a/riscv-rt/bin/riscv32imc-unknown-none-elf.a b/riscv-rt/bin/riscv32imc-unknown-none-elf.a index 374f06b5eb4143392b6d136d7c951ead1c899e0f..1d28508c3b839d02e6e2eb376a64357870e1c56a 100644 GIT binary patch delta 721 zcmYk&&1(};5CHI*-51@~jdX2klHDlVrn+sVHJg}JLGUP|n2Ul?skPsqY9lIYZ0bP| zo-Fehc=9a4TMvr<0rsFG2!7z92k{T^?(1h*MS!)Fy8nrU?-Ws!> zBgNJfPt<#qEaU`4NLf6By+yz6XLe;Yrd3r&n_j8`H{yx<;+^SxfQM;YWt4-R2Pjtg zmP-9f;i1--&ORi^y~I4{F5&ryaumQt&TL&1F7x0&+I86wuJRZpeQ~=#!_GXWf9Vrf z*3HtDJ+rsjLDCnucTKXr1{aPEPOm8fIL7Hc(bQ$6(ON(FeScH-a=4thrU_l*>&89e zRpYGqrg2_;%Xpu7&RFlAH&wNGvL6uw$KhjgK-{=$99XjgQaEtEx z_bt^+fBj)RLb>1qHfT1e;RkvX9LGWW85GiI6hO$IBBwtfFCXAF8p%hgonC;?^e)@| EAI8~Yr2qf` delta 715 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 BWM%*W diff --git a/riscv-rt/bin/riscv32imfc-unknown-none-elf-sbi.a b/riscv-rt/bin/riscv32imfc-unknown-none-elf-sbi.a new file mode 100644 index 0000000000000000000000000000000000000000..4c9e61a9610057090cd1c4c83e8650c93c1d7275 GIT binary patch literal 7304 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 FzX9dn_X+?2 literal 0 HcmV?d00001 diff --git a/riscv-rt/bin/riscv32imfc-unknown-none-elf.a b/riscv-rt/bin/riscv32imfc-unknown-none-elf.a index 13d1f2171ccb6fab0a1f353d6202d6bde4388480..978c886c8929ed42fb9b29728e47e85174ad0a5f 100644 GIT binary patch delta 733 zcmYk&%}*0i5CHI*{m=>vX_e4+x6v&nHhvVltSx#lUc49xy=cM-krouBf;G`7AJv2q zLqY?k8XXqz3Ilv;b5s4 zgyB|SE!(#52gPFXR4$iq`uMG3P+|D6`_s;{CU>6~G8bs-XxEcybp{9BRTC&t6m)x9c@_a+!?o z8xL3Xt8=Hi3v4f{i`%Ov*oh@hJl=66nj(P99EtaeDixMmYu&qNo3fUN!+|dpAufKT z-6O7Rr^L^-GvayeGvaA&wf2d&tj#?=aXzZ6eP(pMDI4Wx^@BJcHGDQc)AfFya&mbd z;(Sz(v2lVE4|RdZ+UgLK+Uf#TZS`UKtvu8Prl3_#{zm*uchVL7MH`&==?~`vD!3K= zPRs6V!|A1e?p3@Px# delta 656 zcmYk2yH6WI5Qlf}&f$@>&HG~C2`!jl3_=_>Hg=Uzq7+V~6p7kCWlqOQ76v;mjiGn7O+1*2Aq}}=UH;>)f54o%C$7p>zlTGE^j9cxV z>AGXihh5j@JeN&#$(fN6&PRvc>PZ4Vf2whScAV75a6&iniM9*|HtQCiYolVZeWZ7uz*IM>8JQxf3GJQ!xbY1fX7CU*++r$!g^tYK_}J>2a`sp7Y_Uic-q4j z2#dNq(^(6)nt88mz6RLFuR$xaqhc?~rTny4GrVo@8LyXUyC%Rci;KM;*#3+f;^?guzAEGoT+Tx{u{4B9)JY?wPV4j27MVlMRec7LC1#YIPS!$Mai-L0o2uEi2wiq diff --git a/riscv-rt/bin/riscv32imfd-unknown-none-elf-sbi.a b/riscv-rt/bin/riscv32imfd-unknown-none-elf-sbi.a new file mode 100644 index 0000000000000000000000000000000000000000..6ee7e54859c7ac00878971168be08660edce2482 GIT binary patch literal 7432 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 HedV|RC@W~J delta 661 zcmYk1OGq106o&7aM^!pT6H>=yE;4B%F}mnzVobU#xDX1ag1Z)4jn6h}wcsN$Dy}RP zsvPLDP$=j|p$>u@!7kmIrBK>M*9Db=OTBkaL@&(wzx$uZ+_UlYe|9rm+nvrNvrgLC zdOQ-jW!vs_9LKh^nQq(TbSh=rJzdGI?F6KLRK5Z{!is9*k2zz#C%k5kth@ z0>i}KkMqRd0wc`5GS2`8u@cHbFGj*Sc!9GbzQUg(I_S3+U=crB9l-Ixdaj%|p~Cwi ig9E$+5?JQZ`eTi;M)4FmeGzxL1*dqz<6^`GH*WyiP-X}K diff --git a/riscv-rt/bin/riscv32imfdc-unknown-none-elf-sbi.a b/riscv-rt/bin/riscv32imfdc-unknown-none-elf-sbi.a new file mode 100644 index 0000000000000000000000000000000000000000..8c09102c4ba15a615b68ff229f22c1e2a4aaddab GIT binary patch literal 7308 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 Lhvs+VF24T&{>%8> literal 0 HcmV?d00001 diff --git a/riscv-rt/bin/riscv32imfdc-unknown-none-elf.a b/riscv-rt/bin/riscv32imfdc-unknown-none-elf.a index 2403fb0e916edcabd750069b6ddef6bb6fbe284b..385e9a84005557e733e223b2c23b8650a3f1ae58 100644 GIT binary patch delta 663 zcmYk%%}*0S6aesfyIZKRZCcZ~wp+=TQZ{JBE^CXNj5iY#dXR%BzP~?IFwrPT9Bxz(I~ABn0rl0X%UaoOo|ujZ8A{{dV5W+nI|;U;8#P(Q?>RDh6R# zYah@3v*!iHV)0rmmmhjwZxGhLb-~Wot_QL74W+;Y9W6|nB^)$ud~D1^6uS)ve;K{T zI$&UoQei1&@kW{oKt&A7%KVOh%+F@2JHQ1i1QR!{4m+U2(#)H&w+ejRwQ^PzT3Ru% z+UkkOQ3P(*k6UtpDZ8Ke+@1yafInhRdYKz4H9#}eQtAa|cNzc29QcS$@dxQuDa>En z^P2apVt?EztVs0}rDRpy$zBt4yuVUkj~_Hw`4kPCCM;^I1baxFVlRkqvtNp{>{sF@ z_M}*!of7le{PchOjdk5;M%Js`C_gJ7Y`;Frn&G&K|%iK1o+#A8Qm(@Q~s;2AK+M<67pOk+_AInY+-21@{?z n!9}+MzwxJg4|?#-&BvZvN_lh@?*1O{WL=oXzN}9zMzYQo2L@u4 delta 714 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 delta 606 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 P$CLVx%K881L;C*@4Okyo literal 0 HcmV?d00001 diff --git a/riscv-rt/bin/riscv64ic-unknown-none-elf.a b/riscv-rt/bin/riscv64ic-unknown-none-elf.a index 375ecb0e3c71df739e8dd9da96029d5e69b3c029..6e0410a723083f905d21a58d2fc28fb86fc9d5b6 100644 GIT binary patch delta 674 zcmYjOOK1~O6rDSnl*A_HH(@fxlsGLj!6unc)8Imv5)_5Ha3La*R*|5!X^M4KBed2Z zO2gT>5I;MGDumg%@V62dB3-!9g}8N7=t7~36nt-H0=;n0x$oR}&wG#eqp{OiABof^ zohi$nbh_Hbu|ZuZ*p_AO!CI}#R*r2|yRS_8())RWD1pA1M=LarQE3=0agHLmAS(DL zo)zyCrbFLzQdAI#r9dP^MaEu)-r1+e@`- z(`i|aSq4Ic_6?&e9dtLsGf_(8S>gpgg@@dyi4nqP@-sdp)9!kzPqd1M8Ix|~y@y*2 z?;tNX=q{FJli_QIYxpJC)qDPJJk*0a#rOeEOBqaOC0cXOWPc}dQjf)B!3JV{1E+LF zy%Z>%!&C;nz0MV51j8;Uybt$pAs zk8zeQ95oc0$F8AZ)sS(^kkq!<_2F<(^O*(jyst(qKJe$CaGCp~&(wi0SDT(=sThk7 z9JqSLEf-frdWqhl4n2oG(V@5KG2Db*>d<5KN*}3+g>s!nks8Y4TX{yz8E`5$`B0@! mW1hU<)UtmhX2_xt_nF^m1;@;ZXe8|`PrSX4OpUhDGmZa=eT$?3 delta 683 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 diff --git a/riscv-rt/bin/riscv64ifc-unknown-none-elf-sbi.a b/riscv-rt/bin/riscv64ifc-unknown-none-elf-sbi.a new file mode 100644 index 0000000000000000000000000000000000000000..011281003f85ce4f59c7586a78c3527e6bcc5e01 GIT binary patch literal 12280 zcmbuFZH!b`9mdbyS#B2ux)jQ5ivy)V5r%z%g$kv^0?XU-URsp4!^|=Z+b+9wc6cea z(1BVJO@q}G(^Nw+sn`$I7_A14R%2>EXwqn6^ousNHbk4aDybN$dY*g#|KZs)_s|F@ znS0Lt-QRi6nLGEMxjWfuOY^0!y~{?-PY*54ZEdYB3!9o-Thr;L=n!wy=>?0`-!;M* zld`X}zH$TQe5q{mg?_u;UF^;u=q<-AS1#rEn^Mm}*TH$Ea;85XmB(ssYO(`Ww{2|; z>|RTAldWvoHR9N+&W^euutUWqF#j-D_mmp*#_YI_iDjc^)=V~&%o*E0@hxMHKNZ31 zW?*x+(Z0r2vcdAo@}Rxa9;~RW2v$~BRyu;!mDRzT%9>zpWo@vovMyL(Ss!#(I)e?B z4Z+6B#$Z!r(-}L7FIEEc@`>-&+1Bwo({-t2`Umg**93cHtetU{pG=vlC&oYf_vfA* z`^TxN|Fi~MvaR)jb&tJo%%sP{x5mFS`Qp^~N`nV49l3n;%FA!P^3Jy}zWUyU!5>}v z>E+k2v@TQ{~kTcZllv@XBC+Iz`o43_#6zkT3k|h1gT)SJuKUi)V_(@>|DED zcU`@%oq6q}_0fo7w2j;Br)uU?>(tIU?iFvNqc+8!O+#nyR1lnz%KUhPZt`kV0; zJztj?vwGw9^zv=#mQ3ryOtX#suaxT_VQ9~BvYR@x)dWuj!IV*TH{m3J!Nd zvopc%wmGbHux&w4%l@WZH#S{%V;X`HA94HfekyUr!(Cpzhgr8At6*(Onfe+Se}I1O z9#Ox+NeZL=dNa}C>i@soJ(rr3_T*3Z@EIOH)5GO!q*4JlzS6@xJbaCZuk&!MCtUP%*~rkgm2dX&tsZ`#hu`nv zJ3M@shZj7&+ruC6@RElg@$jP_e%!;K@$i!#e#*l?@8QpS_;ViqyobNw;a_z)c2g#- zq49O%=XFjG^^@1hux14H-St!X2v7b<4Zigm$-40EQCqH@J4o&j99h&5IJ2c7b zc4(5zx*eKz9^YNJp{0y_SLo;NjgJwLHudmYByU7h3DlyO&QWAMDvnDCr`SH$Cfyj|kqxStyn?#GQDf2W7{diddp z*M84_&f}X*XH(kb@`VBUwJFotT-Rc0b6vCDwnW?Jx>l3R?dk0=ZaEta-JstL1`n0pXmz1@xA+LX`@o!N({|z*`H!-_LaN7-Upb^ zXQVGG<*t8F9L)1m(nh7+_4U1A{wK*-?)pc?!Ti}*?)rV=RGWM0j=bU{wXbXH?D_WGp=bQl%;PbbF za`>F1YYY6b(ifF-_?&Z09Qge0q8vWw=vo2)R_TjMIegC1djURwODTuXIbX2*DDbh? zXi*NIbIynWA8U;kF{b8+COrHx8Ce9rl$ zIPj-Q8ap2>a7Uf`^^EVOT&r;de%Hea)KgEGRTiU3U!{wY0#DRa8v{5OC&pD|emf+8c zo6%M|e9jq8{>R8y4xe*wCVwvZ%Hea)t>n)mUpaivnL>VseC6;tXBzqQ$yW}ab7qm> zM80zPoHLL7X7ZK8=bTpZTgX=qpL6aezmEcf&4Y(D~HcHuaUo&eC6;t=XLVek*^#+ z=lp{F_2esu&pE#$zmt6B@HywVm1FB89w_yOWPpI+iRF5ccg;+l_V_Pzv;XJPi!;vlDA+NkuI z89DnCIF7U5Bo1;OBY&~9kyA?G$YGz~S2y|kzL39%cv{-vdx`7(!F!1FJRc#h^MwB> z@wBw>w)Jr0ct0rkTMEatD97I@?3>KM`h-40`&y`)y`)FkdK?iU)@r&X@9i zdy00b*swDha#)W>qZjw)x=Z_GB6}oh{Ijxv={Oi4pOHI0p7oN(Z<2xB&&wUZ-8268 z6UN8b?)W=od|M4EEizESnSeV!o;8x*|C=)Y8?qqb{g1FOcYLfZZl*=%OL9R?#|{#rXIRa>vJag`0^kugdsx839Gbbx&IAGKg3~4 z$rqg5NWQWC)Q-*AFmjIL__SCY}Cnr%;1~H&^qb64=fD^L7 zx_nH&O*o=_jjKUPA|4Wv6qMPwOnHNG^|?~W=CG?kD*5y9#{X=ve_xo&Gz=xKuv);hYXqj$e zA!@U}W?jUuXo+qi6BBd?N7X(p!z~xxiP%b*=CC^@P)X^baQloBv7bVf=|iS*AH9S} zOvjma`Dg{7QzB9A5YKI{8RYmp{-;FDpEbM^HW~X(fqkZ$sI@^$txoLu3z#rPV#b%< z)rq~GXK~jQG~;!r(|F5!{WkTG(W&s>d>X4v`z;;QrcP&(v;>`V3)Z|$PthEzV<{cQ zp>&0o&`j6q3&w`)^Z?D_WwLN3Q=$R9%Uq^7#b@w Qs=X(;=6xpHH_*_w4LTKuI{*Lx delta 665 zcmYk2PiWI{6vy+Lq_&u7yC%d)r(r8eS=J`bt#sfHo{EBE!Gq$VFx~J^H?pb2%cwZ# zh9IndubX#;jY-6#-aIL+w|NkE@TlTN@iO%H%Tnk&yzlq-dGGh$kKfZh_P~w7uD7gHzVBPscy-K*d}VZ$>4;zT+b=!Ze*O78(P11B`w@r*oRE?@DJs|z zFS2vrAt@~gBubbQ4g5}ArGMB<=&X8~btUmmoMtNLSd%~`q!Ub|5I1o~+7d?u0Y9W` zL^vlGl|fdTzjgQef}EcMZ?k`hmav)g=rO)T zS=Bsxf(flbE7)Lu1)o@6#=cfFSL3x@?AT|SK1E&1A&&Grcr#uQc>lg?e ziDuDXG$_C`$1vv(iczk{p5F-gE_14<+TFrGdYW&+cSljX(>cA#=OSNJ)b1osZ-*C( zO9@&-XQ)N1sJks(ay5K&o7izvxH9~J9-=e+o-$~cYLo{hb^I(%l7M=-#qX7CRETKV g8&Xs1!JGJV9%0IJ)4%w4vsjOMw!8t_MaOgg1MY2%TL1t6 diff --git a/riscv-rt/bin/riscv64ifd-unknown-none-elf-sbi.a b/riscv-rt/bin/riscv64ifd-unknown-none-elf-sbi.a new file mode 100644 index 0000000000000000000000000000000000000000..f500705df35b57593fd6bf6ccd09e9527a600c78 GIT binary patch literal 12408 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 Bh}8f9 diff --git a/riscv-rt/bin/riscv64ifdc-unknown-none-elf-sbi.a b/riscv-rt/bin/riscv64ifdc-unknown-none-elf-sbi.a new file mode 100644 index 0000000000000000000000000000000000000000..0ecce8dd3f41d1837deb3d5d9b8e24c0851c8ef4 GIT binary patch literal 12288 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 a_;Z$V#wo-S$-oev1!rD3dD=$TG5-MrV}}X= delta 636 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 delta 638 zcmYk2PiPZC6vp@MpOWB)B+ZshMBBmcE@_*XZB5n`5%nOoqM%2y+M-p7u@WQJfNi39 z^J2nR1aDp{2u3V>RyQROWo)uoVB6Zu=Q+o{qT70rBewSS9nmgyb6QTnNk74^9?AxSu_ohQOmExmV8lB8UgY$aAvedNvw}HLj)w+}B^e%%( X-@`_BjG74VKN3FSbp0=ArHB3l&BKa8 diff --git a/riscv-rt/bin/riscv64imc-unknown-none-elf-sbi.a b/riscv-rt/bin/riscv64imc-unknown-none-elf-sbi.a new file mode 100644 index 0000000000000000000000000000000000000000..2bb848e4e901e240470e6f6318eca5e378d61a21 GIT binary patch literal 11776 zcmcJVdyG_99mmg|S%zf`%Tg#5XmOwvD8jH0x}}xJu)y+K9_3N7R%d5+XJOlYb#|6+ zNd;!9#$eK*CelANA(&L{AC>q_(D;g}{GmysiNSxgX|QRuiEAVlBaNQ#y}#e`-81)K zqqdgG>wyUTF=5OZKno?ulSf<;J$%f6WSzzXy^R|8Fk}+eaLpZS* z-k)u-pE;Fmu(`51XsfgZTPjm@TdzUd$H?3USf#LB-tb}-QrJf3Z-39$XW zXbAJ4O}#ny+Jbi$y;~YTe*MIalQ&;|^R;W=dgpuZULOC^^`G5%{btLQ!2D(W$M27I zUM#eAz15XCdGTc1skct0imw#gd*1FzJ@?9U?W1pxPRkFQbVG0o!hq)ceK~-GjG4OChRd4E~7U4 z$*S>0BfKl*(bkaIb$h%F9h<>8o5xaj%X%h0x!@AvQn9)8HfpYZS_9^UEU1rP7>@TWbzv`!5B1~ct5j7F>bvup@;XocbPuoh@CFaR+r#zw zqMLO*a}`LfJbqqH*>~H?Mg91BHD&N*=c0a^p=~Q);^E6Ye5HrS&z~t1KYyl7{QQ|R z&7S=D`7>qW=g*XhpFdM3e*R3E`1vzs;^)tl$$G}w=Hc=4XUepD{P_7ZWp;Udcm9Ny zH11uY=iSF^jC)_}brL_{)>gf_M811hXus}VeT)10b-wPzb?X~Xyk9-e==iv^z^(Db z=lG9Lyq_{3bez%goaM&LahTzUO8s zc04mr0-ceagUlg6EGjlq4@5cB?wclx+vw#LITUo^zrU%3C{a`t(6 zr-%22y!yF$%Hx|%M`POL@`Yjfl_t~ClxViJDbZwdxubo9g?wLbXs~ynTr4d$x&HiU z?wI{GC)e98Kj>h;u4iQLXq%AU6GbDx^OQ!0V}JUQ&G;E87dm#BVZrq>ENxVJ<=}Z& zCa%XUVHwX(dOacMQ{+D-ZRCs)FGw5DO@230-a;;#J+i*g*6b^HeZ7t`p3|}~D&?+! zTpWy3+d$fOeSOcv_$v^lD0h7wGse%pa@QY_JltWpmbAPi4e&9Awq8d3MdI3AZ5y2P zkZizthtD}*6$d`%8ZFA0&zmBZ(p?}`Ke zercmp4xe*=AP)RR(nh5mKIi;Y9QYrSHY(-tIp-JRz)wpXm2&u;^DA-SFP1hcIu&iSJ_@E?>mD&_Dw=g;E6$2Kj> z!8qryBEVm+vaOZF=bZP%fxkl9sFcIyocG0n|B$p%DTmKF$sm&8uZ)`EQaOCinMVGH z$yW}ab7qpiihSkpIp-eoSCg+CKIbeXKSRE9_?)wt{59k&htE07$!{cIIegApO@0&k z%HeZP3;E6DD~HcHkCNX)zH<1Svw{3ikgps*=Nuyc5%QJ8=l7N;$zMmla`>FnN&chc zD~HcHJ>)+|zH<1S(?|YC$X5=Zb4ui|Cto>y&KV_t1Nq9~bIwWfHib51?^Pmr%1KIhCK z|D)t9htD|+$Uj29a`>E+CjVpPD~HcH%gBF{eC6;tXC?WcBwsmv&e=qMj(p|tpCX=; zHcs=i#HSN45pN*gNnHPiLe2p3d!-FNNL=6f!H0-1mA2?dHT}6f+$)wG?HSE23EZ0-Y_ah(w_?F3+%cb7JNZIcG!OKD$ zfooo`b4|=@!>Mt8xGc6S*gwh8wzJNsy&v!{8rT2T(3wZvS}p#`S+i`oB6eipBS@vmdvA z%&~4J_85>0Y6(`TxNf)I7T5m;Of0sXi>mN9Fg%0Y{zoixGqKA#>Hlu5P;uSQ+HEd_ zeo6M&^RwbJwh=e}#-))lE+UQ}4y8N(^Om9iM*Epm5NZqmR)uvPtJYs5hV5F? zvj2Y?|3$k)-1yV-qs}=A#Q1S6-SJsHCi Z{H4cFx48X7i`)N(eE;9-j#9h({~HYd3C92c literal 0 HcmV?d00001 diff --git a/riscv-rt/bin/riscv64imc-unknown-none-elf.a b/riscv-rt/bin/riscv64imc-unknown-none-elf.a index 94c9b08b95dc0bd64825eae787ea1de46cdd7340..417487034ffb4dac315c4f83dbf436d779fafc2d 100644 GIT binary patch delta 661 zcmYk2PfQa*6vp@M?3Pt`ZQZV{CA4W|xAYICTad;B#^R+HNjS(wAQ~hph(<9n9Mn?v zq#-GO#G}!p2NOv>)@W~BjJ=wm(VH5En|)ekbY#pc zkB)4dTo?#_I$icW??A0oPVujD#q&1al&HJ)^&Is?4@nX+LRU^=ilwk8NAQwe=2(ZtM@y1AH(`^bmjj znv9od4U_Rp)WBQr8~Da+9foBm9`PaJ$^_;Z*C%{X98;D;_13iYFN#@5H}v2Dab3Zj zV<#>LM2Ho5(Y=Lr$3~mq=|4bkqv+Ul4eO>2#kHQhN@6i+3po+^EZ6Hux^`kIAVLHc z%i;S5CS9ABU}S7;x)z!|>89WPUrq;J+*$U=?YO!T=F6PUi+t!A-3W69UGNjfISms8 zz1ljHc`Q>GoopSSauzP+mQl@X*v_reHYW0QdWBB@BY9{PYLvoH^*Fv4<|&Pdp*p=o gXQ)P5pQeg=V>S4V;yL#*T`W))jpA9_MW;Bp50poXu>b%7 delta 643 zcmYk2PiPZC6vp@M?1qRN5}UM}716ET4V$DPTWw;Btragh33@ZO#h_J*HKGwz&~{V2 z6j5mSMC`@82f-2#Jyi7KQS_n^P^cFXvGvq*oUs$=9On1E@BL$@IsI#Dd4IT2EFB&5 zi+=0y>`+hJ_K5HMwmnuV*#C8Lbd+6f;1M~_5+8cI6QSecl;$B+!j3Gr) z8nxS(?kHqoMmN#W?DkXrcNiz4kJ@(BCVY-1aWeL-y%qaO^Z;M_@-z=UF75)q16+<@ zpe8Zuyji-!uHFZy= zHFUgy|6L^=;9NR^Kk4iA8kI~yOXy_YQ4%ZJG9AE=>|F|@G91uzbcW01U@$issTw4R^=?ib3ztKa~`XMF0Q* diff --git a/riscv-rt/bin/riscv64imf-unknown-none-elf-sbi.a b/riscv-rt/bin/riscv64imf-unknown-none-elf-sbi.a new file mode 100644 index 0000000000000000000000000000000000000000..026428372643beaadb80e7fe8b73ee39b7be3a86 GIT binary patch literal 11888 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 DBWMUq literal 0 HcmV?d00001 diff --git a/riscv-rt/bin/riscv64imf-unknown-none-elf.a b/riscv-rt/bin/riscv64imf-unknown-none-elf.a index a5f60d0c43acaca0df7b2f305f19915d960c1d4d..3667454a41222a8ced98b460b52b61a1015e6bbe 100644 GIT binary patch delta 645 zcmYk2%WD%+6vpSw+@w(_-tS!I%hcbg_F$x1DUUmD zrLu8s?s&h>WL(E__Gz_xf`7Ru-SWnp64kq3Khi+#fFzMZm{ijEp$y}@+@uH+OvjRP zD)fj*kBlHADB1 z)=FH@bM?^DbmKms(O+kSBEkJ3pOfODjJ)2q_9uqVrW#d)1H^p=JEm@24u~)U14@NgcPd8X8$bZ}tJt;+)WNQOhUVdpjr;=>M2PAD delta 617 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 delta 655 zcmYk2!D|yy5XN`*ZI-CJ8k23;NGOZVhHR3hTTMcWR>4cW2=;1QOsv|5wrDFA!L~{1 zr3Vi!A9&JYkBR}ydKBzGP`n9(N^=n@h#tg~8sAGd&^gTaz2D56dAn<4KS$S3hYQ8h zxgoFUZJfE)-}RO?=y{%H4V4O3#~1T?u7ibAe&fXe?QDO%Omqw@%)}VWpe?J|WY=+x zMe$x%Nx=xOe3#FM+7dAt+pLT|*2jBPJZ2i+vJ2u&gf{D?CVG`O?5reVR~hBZ38l5P zBuVqN`x6f&>ce;_fqA9he;V2k`?d+%ptf_7{vFC-5n$=~~c0T<5TqG_lC3 zafr^M$>}Rj6Nl(sTuqvE2hFHSlhAE5J{44joC>`7$Vm*_W=}03LIf3&#E5O8VJlRF zn=)w{&-k2~gJLI_0xxb%i(TYB(f9E;p-nsYA?9Hz2DV2|o?pV4tQ(fA+x;omo<=Z+sGMRj^i`SVD?H%lTsCeX2Gm7x0`d)o`2Ptk&^*j zT+Qq&q-1G5DkG8nNw zSch%){hIlNGrT3>;ogAAwwy0MH_v#U|NlN5&gV8C!vCrr<_GKAgMHn@FmeVyDC_Y0 zXq4-wws}O<4rO*7$h7A=w&mI+ z@1M5ZM09MIR!jXSA2Hqu&s)7L(SU;o$K4byyEY36W@o&0(yS{V>*^e9pUxL2uo}i{ zP*$eVTPlyE8x}wINs9Y;@h+|E?+1_lDimz^22b7U5`KVg9^Iq9JX))YJbI-h&B`i@ zr^?Oo=sDG#j3a-&gKu(hd^}t)?G3zR$rAI{0A+KjPs14nFAMqYggq;L{FX zaq!~~e!{^|I{0Y^KjYxfI`~3_W79W{H8i}xTsMtbP|_*^V+tobDp`nN`Gy|0r_ z?ix4R;or?C-mje}Jl`}$^~LYm=#Fq)_xXwU>y7KY#rw7M499JW>UN$jHBVgiQ#Czs zyz+-}Oz{m~F;tgu#H5MltOzvs=NP>X^}M}O9UpA@M*cvLDZZ&aUTD6ly{R`Lx3~xxReH6iWj$_U%xv zuPxCov@OwQip7!fse#gXae8WOvNBX&Z;BJ8Vi&PvNv@ep-@91N;ceu}zu_uR& zeZN$mor!(rWOw8BQ!#L4nnA(!GGp7Q^vc2aFF#xLI>TQ={B+Xm2{~VoMT_27$eC3r z^?BP~CG}G=yn`5;FWT+ZQnRl->g#ok`J9wRi}I-dsueKLV=7CnJnCPx4(2~czVfJl z$vT)n`^uyK1?%Gu!?mR4ifw?OQYba<7ZmW*L92Qd&AH3&#^;Fl1zPro4}#z?-7bYv zw?mYIiog4}2h^B#QuAG)e1mY#zn6S@ZMayJ!{?m)tbu%f`YDIcIS-Q0f9ETQ&pEi? zQIOvhw8E8g_?&adI`HK+=3-F}pL0HA4fy<2R}P4P=bR_VPun&sF{O)J31vqp<@_?+`?E5Ki)vee4qbI$jy1OE=&Mx`7+=lsAr@bMl~i*op!bJ+^; zKcuqM%Hea)kE{bfW80{d!{?kITL=DH+eW1veg?pnpV=Bd7A?x*bIvcU05_|$)XL#= z&abQkw%)c;DTmKFzqJnhJ8c`4a`>F{d+Wf*J}t_@IOn<*;BQn}YUS`b=dad*zsa^y zDTm8B|F91HyKEbka`>F%d!YpX?ywoGmBZ(pCFFmYeC6;tXF2(s$yW}ab8aJl3;D|7 zbIxk=bL1IegCfA^9IuS!(6*Ip-?*A17Zqe9rkP`F-RohtD~0lm7|w zmBZ(pUy}b2`O4vQ&Tq(nn0)2%Ip=re?;~G1e9pN>{(kb6!{?m8kpBqz%Hea)-^o8f zzH<1SlSqWpI;jqluN*$-G?IUaeC6;trEcH~F6pkb z&Lr`bwhcZ-Tz~U}PZQ_)j1bpxad@M|H6OoW$6`2s8?v9V4st$k+o<57Am_256|R({ zWv17}fOy8X!H*Kxd4dlT=Xnkh*ZII7CZ4fv z{03P<9LIx#zb!h0R=84*-|Xz0+{_abmC}IJm2y~*YO6AIykc^LrAo=<24-eVt~@ke z%8gBq2@RUTf4kYHxVi8@;zBSuG%!0-93Pt;vT_K1jYyr0Y_FAV z^!FpY5ZTsExLoi#HOg|c{qfuVM)Us(4`#<=v{^QAOa+G0?!7exSL}pW$R<3@6-Dm{ z{1%NHKV|zp7ufHwEM5fo?H)IN%09q!9E^|8C^|lV`^1g^vK=V;c}2(H?HGSk%=j2P zI{slhzEo93e=qLA4NWCFKE8Y7j=x~Xe|ve@8OOg=mgx9+#zr&I;}7!l1_2+f8M^-S+Jp)Kh9-z z{;vtcTq2j5`L!KCdR*FHx&#I9{o=;ov?1Kz8&<(PP+XGQU+>E|g~_EhZMDTJRTnn- z-3W-DHx=XNj(r8&|2Qr>DH!jBEYb1t9T$Ce3Nn{kur@}|U$|8}KD4<0)Asm(t{rV1 Ho&Uc8;}Z%{ literal 0 HcmV?d00001 diff --git a/riscv-rt/bin/riscv64imfd-unknown-none-elf.a b/riscv-rt/bin/riscv64imfd-unknown-none-elf.a index 47ba78e5f40a1641998a9a37f544aa9b40a8d7d7..8a70b49567cb1d013a5bff045e34298307eebb7b 100644 GIT binary patch delta 634 zcmYjMO-vI}7~F5)wiMZwmaZ-}{A{qhDYQ$slvWx;&=Xwb=D|pU1W}O^Q4{4Lu2oN- zz`;Zlxe`5+jfo^R;K9U$y_%>ofr~K&<5h0HZMVt3!_2(-=6#d5H}!97^;D#oA1c_n ze15I(>glG|^_*?n0W21W`7L*5$Xh-NuKchQp++MEx*vzJfp8?J{Jg zGvMArx1piRv*Cby9TyBOal>~!YQ9NwJ&zSbI}x1fUW6YJANjUjLrN?(j5?-#?eR_g z4>kr&5KY>jmlm-&0y5jP&Q>n_Y)%LSuAq*wJGDbA=4Z-c>bFE&U_-$1WNr5 zMg~-T=`T|Xr2&V|VVh$oO6eVXgQN5~_27KwKE1?t#_=-NI9aGzW6HAJXz@P!05vO3 R?{Q>}wJw= zuzB_(IPgV5p~A?kqW%Gc>60SD6y}2{^Kox_Z%tqqa?as%Z_YQl2a~&#YsccFe(7}C z^S$*Gv;9$aoMF%N9H(3wbvoG}8R0(cm;Ln@Me?>jzau(=9r+x-$SZgz_oAkp(f&%L z$kYbUp5*^33mcn_E?PxupwZDb*A~87Q}h61c9H86*CsY?mVC(D zqjf$ECihi*Q!Po@4^LFH}voTabL#oG{dj7ZrF$D68c<*6hE6fL~r6vn$bM^ zEJh1xxGcFC?h5M-v-r^kv|ZLy4T&&8#Y*EnZ~o(|RK;e7Q4L0hCF}n;J6Z~}c%vp} zC8t9oESe(od`(P2J);{@yPz|o7f(2ingpE-wlk|Td8lMt@_~hq*(P?fHfD2mT+YSu zDYrrrDuZun4Q76vQdo}l;70yBzvd7579~(Aj8nElUlnr3ba;v4d+uScFi1~f4xObd Is0^L_2f%2E2LJ#7 diff --git a/riscv-rt/bin/riscv64imfdc-unknown-none-elf-sbi.a b/riscv-rt/bin/riscv64imfdc-unknown-none-elf-sbi.a new file mode 100644 index 0000000000000000000000000000000000000000..6040a04e94c2239d0904e98ab9ed6c33e2585867 GIT binary patch literal 11792 zcmcJVZH!b`9mda{SuV>KmZeZA(BeQTP=sM$=$2Mqh6NT_mY4EUu~uhic4uMRee29D z-I5B-QjNi+K~2ODnlzZy+7FfZnxIiMrusp@Xkze-k_MYbo47_|YoyWh+;jfRGiUC> zNcALh&$++*JI^_D=iW1SC%bfGuGo8gbHln+b!lmDZ)<(HxutD=D%Bhv;%zFmeuMZu z4N9q`ewF2wEtPY{vdZO0^tP|ipBo!28bEB#_Q0hIgwpdP&m{EDGmgZ(X(A2iQ zU60?=(%#Y@4cF6fdPjF>A_(+QrUdG5>eil6rLL_o?PANzN7ce-o&Ykr#eo*c{(h-Qt0e|t3Q11mFGIg-x{BhE2&gd@N!1aBdPAw@j>v< z##wqBoi;t2K;=q9=|g7V8Co+X`9P2iX6VCqJCoYesm;#q+lf2sb^FZQAFYc<45O`S zv!AS)kD1|J5jRI8qWAUrQgm+41wr!v{dPE?+x!;(S8bCYZEN4`4+9LN&%hGBHP=Ud z+)bu}Gr=6y6dnnajf)!}Y@Ca`t-5sUU7JvS;12i9mAg)s5VdpPk<`{hsn&Gc!|4{C z`7c}UFutbSJWG-%531mWAXq#rF&(D@9QT%6wqg>|>{PH)H>VX(w67m%9c|7IVbhOI zA2z*uqw0f(yWE7@{bcM4hr4^~-mU7CjF#gn6zwEcT@5rJtDn0^#IJXf!f3xv-Rp4i z|6A^!Tggdz@|St|au2s(4^u}af7KK*4dJUje2s^vJ-pe&TRnWehqrt91`mJC!#8^P zW)IJJc!!5?_wY^+-{s+59**^ei+o=D80xn010H_R!w-A-6CQrl!+ShD@8SI({_q(50~#7IV|&;FTmEqc4Q5A228PRp z;&PQ8%8h4_>tA=W1AX=f9`x&d#`ZSHEEzaiQ1*A9;#ev6ryzS6KMQ3eM^7^j_~Z5!X4{A?t=ja)SQ?fzn2voGBBtLSJ29mbx%X1#)Ux8?gaMzbPWB%+5cl}|ThdT_{l9ZQh1AIcDu2&F$ zk+?M1>IUaLWDnqTjIxwb>Z+i=XuDw zz@Hnn%tknT&XH>pK7Tt1htD~mHgQq@J+_TXIDF3eoOO^t-?mW+htD~mw+?))9a4nD z=bQ^xfRD99ig5Ux^HnRrUnsJ!g~R8ZuUQ8^)*30o;d9P6tN>JfPbIJ zx)u(fbG~aG`1jj3D&g=s=Lgn-zr?mt35U-)Kd}z{57{;<;qW=<=hlIrvTant;d9Qf ztOI|kZKDznKLudRZ)^=8FDb&|bI$Lq0QUirbuAn|=lsDsV9RYAm2mi+^GEBzf6%s3 z35U-)f3^;M9Frm(jC1~K1^6pP*0pf>ob#@A;IFc6RKnqM&imGZ|B!8?5)Pkpl7W%n zuQttSD;z%O%pm{6;fg~R8ZN6Bv^UpRcu*+l*)$QKTua}JaL2>HU{^K;9S zdrpL1R$e+&7-;d9P8@-yTMhtE0Z$=^!8aQGSGUn0LFhQsHauaLiueBtmp=OX#r z$rlcvb6zEX2l>L`bI$AJcakq0KIeRg{GH?rhtD~e$;aQ+QiQ|joGaw-7FpNA;d9O# z0?&Z@`c0aoJ7J%%XD>^eBtmpr=I*H#O0YEe3UrP=NNGr7jN%4 zammLs>_801vmyH_>mcW8+eQTs1v$?|Ewd4hn*C<$AZO6FQEjko_nJ0K3ah_*^xXcHBKk<}p;~8WIal9WC{B5y5YMG62JhQW}(xvBz z%DKF*%SBTkmsYtjURLS8Tsf!G`BF)xi-o~ldSG}!)2JE!7n*HqH*Nk?&49i_e(YFw zaA3G#WdjC=`$u$UbTF6C7Yiq<4(E!w;bR3olri*7st(K1X!OGIY=1E~gnaxXTsl`S z7YFiVW!?RQm&G~)*SuWkl9-W(Q{(gDvQ+P&f0ChYXPkZ6h06t>Q@wuOX@5Ms-){b2 z=E3Y(jMnI#I{nHp)a`3?4ETke@B+OH4|7G4`vK3QapPZ&tm^MNAou;_**$LjSLd1l z83*IzGjhkrvrpXktL#AT=jD#yq5H>;etb+ksdVRmK{JfstY1|Hp}O#I zRoIugO8s?WI4&h+`~Ro;U(_Aq=HG08)H!bhF@Ky(cm9_(!(5!pOpV&{-S;K^b(g5% zcfYvtuh{W-Sr6mmnL_%@efcxZ^hY&nwW;c5JAUgFF%3Cyg5&0nV^?keaa?q|V7wRf m%N-xzarRQtty|@QUBBe~$q{#aXmS1PSC}5Zm5#P{`~MpWwG80^ literal 0 HcmV?d00001 diff --git a/riscv-rt/bin/riscv64imfdc-unknown-none-elf.a b/riscv-rt/bin/riscv64imfdc-unknown-none-elf.a index 7866563c2081aaeeef2eb5f7a82950dbb953136d..2fc054c389bb3b39ecdb43245a987970f40b6519 100644 GIT binary patch delta 664 zcmYk1KWGzi6vyw~@9uil3%Mk1&j`lY=3?69%w1zo2SE`e1R})2#TvBKf7KSLf_7+) zRR^m}>UULV1%;I8R?x*ELs1v0ppr!g7hT+x`n%);_lEcVzR!EV_xSyute>v$RNcb( zgzXdxtHb9;dOn$SY}*cG*WJ%6$93G*=Xq+ceLhNk;eJ6NM))A^LWL!;B`SEzPH`W_ zdr|3AJADyf#IpQ=h>2KZMYP!n9pU(K?2tS8QURgAHkt7)Irc<_Lmt zZRYy)4T1KeD({h0+O{3@(s1*!{8MF7LBNz^zz*MU>ft1zVM!?KkKpQ2G-RduP5(i( zgm=+A-NK(vHe-3Zjgzr6w2ar>FXMYGAFuI4y{P*p!u1ZU0fX-GlQG%ib*)()_!Xvk z98VcoOlcwAA11D6vBc>MPIm<8RlMZ1%&8Kf7x6V^#4q{8lir&Y_cI8Y#$d3U^hS7y zIAI#7m{R;o7j$yQ_nuzHoN2^o1KoqZ_cqVriD}TRcb%rN!FT;NwNTQZ5V=m{AE&vr zh6Pij^RUteU1%Ol-xaBiR;EVJP#Ue#TeNuIL}{!>4YbDI&=IU;i`k&!%5`RP lMH)xMIxx5?b#E+aUG=`Zh^m#P3RbMc{c5_)KOvIY{U3XQkCXra delta 649 zcmYk1O=}ZT6o%)_oe34EWZER1Mrs}HOh}W)Of-op3W^}vSgBjvV$q_EwNfK~fTn42 zBchP++^XRj0+cn{Q(xcQE=CdV#Lz=12o>-+(7T*JnwnW7q>pSJyGA+RVbE@ zj(SCJ`OwTzN85JJ^E}%gEfwq?UCie>bA?iVxsj#Sm2ans_F{=ym}Dum)DT{>3m9j; z_^gIV!+BoWRFCT|g_w#JR>lS!S(4ul8r{XOau6nzDp+jk)58AG95-Pb1b&5wXaMY ZZHf=yM>Ufs4~@*pJwM&H{}s99f&Y!JkRSj6 From 67b2fcd8f6c3ed235b5e88a385b5fda8b7b881b9 Mon Sep 17 00:00:00 2001 From: Pablo Graubner <2234137+pgraubner@users.noreply.github.com> Date: Fri, 16 Sep 2022 19:13:19 +0200 Subject: [PATCH 185/234] SBI: fix formatting and CHANGELOG --- riscv-rt/CHANGELOG.md | 5 +++++ riscv-rt/build.rs | 2 +- riscv-rt/src/lib.rs | 34 +++++++++++++++++----------------- 3 files changed, 23 insertions(+), 18 deletions(-) diff --git a/riscv-rt/CHANGELOG.md b/riscv-rt/CHANGELOG.md index b2337141..0b195276 100644 --- a/riscv-rt/CHANGELOG.md +++ b/riscv-rt/CHANGELOG.md @@ -7,9 +7,14 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] +### Added + +- Optional cargo feature `sbi` for SBI compatibility, including conditional compilation for machine mode instructions. + ### Changed - Remove superfluous parentheses from link.x, which caused linker errors with nightly. +- Changed `mp_hook` signature, hartid as passed as usize parameter by the caller (required for `sbi` feature). ## [v0.9.0] - 2022-07-01 diff --git a/riscv-rt/build.rs b/riscv-rt/build.rs index 9eea713c..e0382da8 100644 --- a/riscv-rt/build.rs +++ b/riscv-rt/build.rs @@ -14,7 +14,7 @@ fn main() { if target.starts_with("riscv") { let mut target = Target::from_target_str(&target); target.retain_extensions("imfdc"); - let archive:String; + let archive: String; if cfg!(feature = "sbi") { println!("======== compiling riscv-rt for sbi"); archive = format!("bin/{}-sbi.a", target.to_string()); diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index 39769edf..3d0918fd 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -21,8 +21,8 @@ //! filename can be use instead of `memory.x`. //! //! - A `_sheap` symbol at whose address you can locate a heap. -//! -//! - Support for a runtime in supervisor mode, bootstrapped via [Supervisor Binary Interface (SBI)](https://github.com/riscv-non-isa/riscv-sbi-doc) +//! +//! - Support for a runtime in supervisor mode, bootstrapped via [Supervisor Binary Interface (SBI)](https://github.com/riscv-non-isa/riscv-sbi-doc) //! //! ``` text //! $ cargo new --bin app && cd $_ @@ -322,25 +322,25 @@ //! ``` //! //! Default implementation of this function stucks in a busy-loop. -//! +//! //! # Features -//! +//! //! ## `sbi` -//! +//! //! The SBI runtime feature (`sbi`) can be activated via [Cargo features](https://doc.rust-lang.org/cargo/reference/features.html). -//! -//! For example: +//! +//! For example: //! ``` text //! [dependencies] //! riscv-rt = {features=["sbi"]} -//! ``` +//! ``` //! Using the SBI requires riscv-rt to be run in supervisor mode instead of machine code. -//! Internally, riscv-rt uses different versions of precompiled static libraries -//! for (i) machine mode and (ii) sbi. If the `sbi` feature was activated, -//! the build script selects the sbi library. While most registers/instructions have variants for -//! both `mcause` and `scause`, the `mhartid` hardware thread register is not available in supervisor +//! Internally, riscv-rt uses different versions of precompiled static libraries +//! for (i) machine mode and (ii) sbi. If the `sbi` feature was activated, +//! the build script selects the sbi library. While most registers/instructions have variants for +//! both `mcause` and `scause`, the `mhartid` hardware thread register is not available in supervisor //! mode. Instead, the hartid is passed as parameter by the calling SBI. -//! +//! //! QEMU supports [OpenSBI](https://github.com/riscv-software-src/opensbi) as default firmware. //! ``` text //! APP_BINARY=$(find target -name app) @@ -359,7 +359,7 @@ #![no_std] #![deny(missing_docs)] -use riscv::register::{scause,mcause,mhartid}; +use riscv::register::{mcause, mhartid, scause}; pub use riscv_rt_macros::{entry, pre_init}; #[export_name = "error: riscv-rt appears more than once in the dependency graph"] @@ -400,7 +400,7 @@ pub unsafe extern "C" fn start_rust(a0: usize, a1: usize, a2: usize) -> ! { } // sbi passes hartid as first parameter (a0) - let hartid : usize; + let hartid: usize; if cfg!(feature = "sbi") { hartid = a0; } else { @@ -458,7 +458,7 @@ pub extern "C" fn start_trap_rust(trap_frame: *const TrapFrame) { } unsafe { - let code : usize; + let code: usize; let is_exception: bool; if cfg!(feature = "sbi") { @@ -484,7 +484,7 @@ pub extern "C" fn start_trap_rust(trap_frame: *const TrapFrame) { } else { DefaultHandler(); } - } + } } } From 3e4c04f53780dabcb27ed5f17e40d8a9ca80e082 Mon Sep 17 00:00:00 2001 From: Pablo Graubner <2234137+pgraubner@users.noreply.github.com> Date: Sat, 17 Sep 2022 01:14:46 +0200 Subject: [PATCH 186/234] SMODE: rename feature sbi to s-mode --- riscv-rt/CHANGELOG.md | 4 ++-- riscv-rt/Cargo.toml | 2 +- riscv-rt/asm.S | 8 ++++---- riscv-rt/assemble.sh | 10 +++++----- riscv-rt/build.rs | 6 +++--- riscv-rt/examples/multi_core.rs | 3 +-- riscv-rt/src/lib.rs | 24 ++++++++++++------------ 7 files changed, 28 insertions(+), 29 deletions(-) diff --git a/riscv-rt/CHANGELOG.md b/riscv-rt/CHANGELOG.md index 0b195276..251205d6 100644 --- a/riscv-rt/CHANGELOG.md +++ b/riscv-rt/CHANGELOG.md @@ -9,12 +9,12 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ### Added -- Optional cargo feature `sbi` for SBI compatibility, including conditional compilation for machine mode instructions. +- Optional cargo feature `s-mode` for supervisor mode, including conditional compilation for supervisor/machine mode instructions. ### Changed - Remove superfluous parentheses from link.x, which caused linker errors with nightly. -- Changed `mp_hook` signature, hartid as passed as usize parameter by the caller (required for `sbi` feature). +- Changed `mp_hook` signature, hartid as passed as usize parameter by the caller (required for `s-mode` feature). ## [v0.9.0] - 2022-07-01 diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index aa1ecb95..31f74450 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -11,7 +11,7 @@ license = "ISC" edition = "2018" [features] -sbi = [] +s-mode = [] [dependencies] r0 = "1.0.0" diff --git a/riscv-rt/asm.S b/riscv-rt/asm.S index 4a4eecbb..17f10937 100644 --- a/riscv-rt/asm.S +++ b/riscv-rt/asm.S @@ -46,7 +46,7 @@ _abs_start: .cfi_startproc .cfi_undefined ra - #ifdef SBI + #ifdef SMODE csrw sie, 0 // interrupt disable csrw sip, 0 // no pending interrupts #else @@ -90,9 +90,9 @@ _abs_start: la gp, __global_pointer$ .option pop - #ifdef SBI + #ifdef SMODE // there is no equivalent of mhartid in supervisor mode. - // instead, the hartid is passed as paramter by SBI + // instead, the hartid is passed as paramter by SMODE mv t2, a0 #else csrr t2, mhartid @@ -176,7 +176,7 @@ default_start_trap: LOAD a7, 15*REGBYTES(sp) addi sp, sp, 16*REGBYTES - #ifdef SBI + #ifdef SMODE sret #else mret diff --git a/riscv-rt/assemble.sh b/riscv-rt/assemble.sh index de38c244..296a6dd6 100755 --- a/riscv-rt/assemble.sh +++ b/riscv-rt/assemble.sh @@ -32,12 +32,12 @@ do riscv64-unknown-elf-gcc -ggdb3 -fdebug-prefix-map=$(pwd)=/riscv-rt -c -mabi=lp64${abi} -march=rv64${ext} asm.S -o bin/$crate.o riscv64-unknown-elf-ar crs bin/riscv64${ext}-unknown-none-elf.a bin/$crate.o - #sbi - riscv64-unknown-elf-gcc -DSBI -ggdb3 -fdebug-prefix-map=$(pwd)=/riscv-rt -c -mabi=ilp32${abi} -march=rv32${ext} asm.S -o bin/$crate.o - riscv64-unknown-elf-ar crs bin/riscv32${ext}-unknown-none-elf-sbi.a bin/$crate.o + #s-mode + riscv64-unknown-elf-gcc -DSMODE -ggdb3 -fdebug-prefix-map=$(pwd)=/riscv-rt -c -mabi=ilp32${abi} -march=rv32${ext} asm.S -o bin/$crate.o + riscv64-unknown-elf-ar crs bin/riscv32${ext}-unknown-none-elf-smode.a bin/$crate.o - riscv64-unknown-elf-gcc -DSBI -ggdb3 -fdebug-prefix-map=$(pwd)=/riscv-rt -c -mabi=lp64${abi} -march=rv64${ext} asm.S -o bin/$crate.o - riscv64-unknown-elf-ar crs bin/riscv64${ext}-unknown-none-elf-sbi.a bin/$crate.o + riscv64-unknown-elf-gcc -DSMODE -ggdb3 -fdebug-prefix-map=$(pwd)=/riscv-rt -c -mabi=lp64${abi} -march=rv64${ext} asm.S -o bin/$crate.o + riscv64-unknown-elf-ar crs bin/riscv64${ext}-unknown-none-elf-smode.a bin/$crate.o done diff --git a/riscv-rt/build.rs b/riscv-rt/build.rs index e0382da8..aa987ad4 100644 --- a/riscv-rt/build.rs +++ b/riscv-rt/build.rs @@ -15,9 +15,9 @@ fn main() { let mut target = Target::from_target_str(&target); target.retain_extensions("imfdc"); let archive: String; - if cfg!(feature = "sbi") { - println!("======== compiling riscv-rt for sbi"); - archive = format!("bin/{}-sbi.a", target.to_string()); + if cfg!(feature = "s-mode") { + println!("======== compiling riscv-rt for s-mode"); + archive = format!("bin/{}-smode.a", target.to_string()); } else { archive = format!("bin/{}.a", target.to_string()); } diff --git a/riscv-rt/examples/multi_core.rs b/riscv-rt/examples/multi_core.rs index 1df8425e..a3cbab79 100644 --- a/riscv-rt/examples/multi_core.rs +++ b/riscv-rt/examples/multi_core.rs @@ -6,13 +6,12 @@ extern crate riscv; extern crate riscv_rt; use riscv::asm::wfi; -use riscv::register::{mhartid, mie, mip}; +use riscv::register::{mie, mip}; use riscv_rt::entry; #[export_name = "_mp_hook"] #[rustfmt::skip] pub extern "Rust" fn user_mp_hook(hartid: usize) -> bool { - let hartid = mhartid::read(); if hartid == 0 { true } else { diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index 3d0918fd..ce19c668 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -22,7 +22,7 @@ //! //! - A `_sheap` symbol at whose address you can locate a heap. //! -//! - Support for a runtime in supervisor mode, bootstrapped via [Supervisor Binary Interface (SBI)](https://github.com/riscv-non-isa/riscv-sbi-doc) +//! - Support for a runtime in supervisor mode, that can be bootstrapped via [Supervisor Binary Interface (SBI)](https://github.com/riscv-non-isa/riscv-sbi-doc) //! //! ``` text //! $ cargo new --bin app && cd $_ @@ -325,23 +325,23 @@ //! //! # Features //! -//! ## `sbi` +//! ## `s-mode` //! -//! The SBI runtime feature (`sbi`) can be activated via [Cargo features](https://doc.rust-lang.org/cargo/reference/features.html). +//! The supervisor mode feature (`s-mode`) can be activated via [Cargo features](https://doc.rust-lang.org/cargo/reference/features.html). //! //! For example: //! ``` text //! [dependencies] -//! riscv-rt = {features=["sbi"]} +//! riscv-rt = {features=["s-mode"]} //! ``` -//! Using the SBI requires riscv-rt to be run in supervisor mode instead of machine code. //! Internally, riscv-rt uses different versions of precompiled static libraries -//! for (i) machine mode and (ii) sbi. If the `sbi` feature was activated, -//! the build script selects the sbi library. While most registers/instructions have variants for +//! for (i) machine mode and (ii) supervisor mode. If the `s-mode` feature was activated, +//! the build script selects the s-mode library. While most registers/instructions have variants for //! both `mcause` and `scause`, the `mhartid` hardware thread register is not available in supervisor -//! mode. Instead, the hartid is passed as parameter by the calling SBI. +//! mode. Instead, the hartid is passed as parameter by a bootstrapping firmware (i.e., SBI). //! -//! QEMU supports [OpenSBI](https://github.com/riscv-software-src/opensbi) as default firmware. +//! Use case: QEMU supports [OpenSBI](https://github.com/riscv-software-src/opensbi) as default firmware. +//! Using the SBI requires riscv-rt to be run in supervisor mode instead of machine mode. //! ``` text //! APP_BINARY=$(find target -name app) //! sudo qemu-system-riscv64 -m 2G -nographic -machine virt -kernel $APP_BINARY @@ -401,7 +401,7 @@ pub unsafe extern "C" fn start_rust(a0: usize, a1: usize, a2: usize) -> ! { // sbi passes hartid as first parameter (a0) let hartid: usize; - if cfg!(feature = "sbi") { + if cfg!(feature = "s-mode") { hartid = a0; } else { hartid = mhartid::read(); @@ -461,7 +461,7 @@ pub extern "C" fn start_trap_rust(trap_frame: *const TrapFrame) { let code: usize; let is_exception: bool; - if cfg!(feature = "sbi") { + if cfg!(feature = "s-mode") { let cause = scause::read(); is_exception = cause.is_exception(); code = cause.code(); @@ -601,7 +601,7 @@ pub unsafe extern "Rust" fn default_setup_interrupts() { fn _start_trap(); } - if cfg!(feature = "sbi") { + if cfg!(feature = "s-mode") { use riscv::register::stvec::{self, TrapMode}; stvec::write(_start_trap as usize, TrapMode::Direct); } else { From 20837cf0680a6ed12b52e9aa110de06d64409c45 Mon Sep 17 00:00:00 2001 From: Pablo Graubner <2234137+pgraubner@users.noreply.github.com> Date: Sat, 17 Sep 2022 01:17:08 +0200 Subject: [PATCH 187/234] SMODE: upload static libs --- ...bi.a => riscv32i-unknown-none-elf-smode.a} | Bin 7732 -> 7732 bytes riscv-rt/bin/riscv32i-unknown-none-elf.a | Bin 7732 -> 7732 bytes ...i.a => riscv32ic-unknown-none-elf-smode.a} | Bin 7600 -> 7600 bytes riscv-rt/bin/riscv32ic-unknown-none-elf.a | Bin 7608 -> 7608 bytes ...i.a => riscv32if-unknown-none-elf-smode.a} | Bin 7736 -> 7736 bytes riscv-rt/bin/riscv32if-unknown-none-elf.a | Bin 7736 -> 7736 bytes ....a => riscv32ifc-unknown-none-elf-smode.a} | Bin 7604 -> 7604 bytes riscv-rt/bin/riscv32ifc-unknown-none-elf.a | Bin 7612 -> 7612 bytes ....a => riscv32ifd-unknown-none-elf-smode.a} | Bin 7740 -> 7740 bytes riscv-rt/bin/riscv32ifd-unknown-none-elf.a | Bin 7740 -> 7740 bytes ...a => riscv32ifdc-unknown-none-elf-smode.a} | Bin 7612 -> 7612 bytes riscv-rt/bin/riscv32ifdc-unknown-none-elf.a | Bin 7620 -> 7620 bytes ...i.a => riscv32im-unknown-none-elf-smode.a} | Bin 7420 -> 7420 bytes riscv-rt/bin/riscv32im-unknown-none-elf.a | Bin 7420 -> 7420 bytes ....a => riscv32imc-unknown-none-elf-smode.a} | Bin 7296 -> 7296 bytes riscv-rt/bin/riscv32imc-unknown-none-elf.a | Bin 7296 -> 7296 bytes ....a => riscv32imf-unknown-none-elf-smode.a} | Bin 7424 -> 7424 bytes riscv-rt/bin/riscv32imf-unknown-none-elf.a | Bin 7424 -> 7424 bytes ...a => riscv32imfc-unknown-none-elf-smode.a} | Bin 7304 -> 7304 bytes riscv-rt/bin/riscv32imfc-unknown-none-elf.a | Bin 7304 -> 7304 bytes ...a => riscv32imfd-unknown-none-elf-smode.a} | Bin 7432 -> 7432 bytes riscv-rt/bin/riscv32imfd-unknown-none-elf.a | Bin 7432 -> 7432 bytes ... => riscv32imfdc-unknown-none-elf-smode.a} | Bin 7308 -> 7308 bytes riscv-rt/bin/riscv32imfdc-unknown-none-elf.a | Bin 7308 -> 7308 bytes ...bi.a => riscv64i-unknown-none-elf-smode.a} | Bin 12400 -> 12400 bytes riscv-rt/bin/riscv64i-unknown-none-elf.a | Bin 12400 -> 12400 bytes ...i.a => riscv64ic-unknown-none-elf-smode.a} | Bin 12280 -> 12280 bytes riscv-rt/bin/riscv64ic-unknown-none-elf.a | Bin 12280 -> 12280 bytes ...i.a => riscv64if-unknown-none-elf-smode.a} | Bin 12408 -> 12408 bytes riscv-rt/bin/riscv64if-unknown-none-elf.a | Bin 12408 -> 12408 bytes ....a => riscv64ifc-unknown-none-elf-smode.a} | Bin 12280 -> 12280 bytes riscv-rt/bin/riscv64ifc-unknown-none-elf.a | Bin 12280 -> 12280 bytes ....a => riscv64ifd-unknown-none-elf-smode.a} | Bin 12408 -> 12408 bytes riscv-rt/bin/riscv64ifd-unknown-none-elf.a | Bin 12408 -> 12408 bytes ...a => riscv64ifdc-unknown-none-elf-smode.a} | Bin 12288 -> 12288 bytes riscv-rt/bin/riscv64ifdc-unknown-none-elf.a | Bin 12288 -> 12288 bytes ...i.a => riscv64im-unknown-none-elf-smode.a} | Bin 11888 -> 11888 bytes riscv-rt/bin/riscv64im-unknown-none-elf.a | Bin 11888 -> 11888 bytes ....a => riscv64imc-unknown-none-elf-smode.a} | Bin 11776 -> 11776 bytes riscv-rt/bin/riscv64imc-unknown-none-elf.a | Bin 11776 -> 11776 bytes ....a => riscv64imf-unknown-none-elf-smode.a} | Bin 11888 -> 11888 bytes riscv-rt/bin/riscv64imf-unknown-none-elf.a | Bin 11888 -> 11888 bytes ...a => riscv64imfc-unknown-none-elf-smode.a} | Bin 11784 -> 11784 bytes riscv-rt/bin/riscv64imfc-unknown-none-elf.a | Bin 11784 -> 11784 bytes ...a => riscv64imfd-unknown-none-elf-smode.a} | Bin 11896 -> 11896 bytes riscv-rt/bin/riscv64imfd-unknown-none-elf.a | Bin 11896 -> 11896 bytes ... => riscv64imfdc-unknown-none-elf-smode.a} | Bin 11792 -> 11792 bytes riscv-rt/bin/riscv64imfdc-unknown-none-elf.a | Bin 11792 -> 11792 bytes 48 files changed, 0 insertions(+), 0 deletions(-) rename riscv-rt/bin/{riscv32i-unknown-none-elf-sbi.a => riscv32i-unknown-none-elf-smode.a} (98%) rename riscv-rt/bin/{riscv32ic-unknown-none-elf-sbi.a => riscv32ic-unknown-none-elf-smode.a} (98%) rename riscv-rt/bin/{riscv32if-unknown-none-elf-sbi.a => riscv32if-unknown-none-elf-smode.a} (98%) rename riscv-rt/bin/{riscv32ifc-unknown-none-elf-sbi.a => riscv32ifc-unknown-none-elf-smode.a} (98%) rename riscv-rt/bin/{riscv32ifd-unknown-none-elf-sbi.a => riscv32ifd-unknown-none-elf-smode.a} (98%) rename riscv-rt/bin/{riscv32ifdc-unknown-none-elf-sbi.a => riscv32ifdc-unknown-none-elf-smode.a} (98%) rename riscv-rt/bin/{riscv32im-unknown-none-elf-sbi.a => riscv32im-unknown-none-elf-smode.a} (98%) rename riscv-rt/bin/{riscv32imc-unknown-none-elf-sbi.a => riscv32imc-unknown-none-elf-smode.a} (98%) rename riscv-rt/bin/{riscv32imf-unknown-none-elf-sbi.a => riscv32imf-unknown-none-elf-smode.a} (98%) rename riscv-rt/bin/{riscv32imfc-unknown-none-elf-sbi.a => riscv32imfc-unknown-none-elf-smode.a} (98%) rename riscv-rt/bin/{riscv32imfd-unknown-none-elf-sbi.a => riscv32imfd-unknown-none-elf-smode.a} (98%) rename riscv-rt/bin/{riscv32imfdc-unknown-none-elf-sbi.a => riscv32imfdc-unknown-none-elf-smode.a} (98%) rename riscv-rt/bin/{riscv64i-unknown-none-elf-sbi.a => riscv64i-unknown-none-elf-smode.a} (99%) rename riscv-rt/bin/{riscv64ic-unknown-none-elf-sbi.a => riscv64ic-unknown-none-elf-smode.a} (99%) rename riscv-rt/bin/{riscv64if-unknown-none-elf-sbi.a => riscv64if-unknown-none-elf-smode.a} (99%) rename riscv-rt/bin/{riscv64ifc-unknown-none-elf-sbi.a => riscv64ifc-unknown-none-elf-smode.a} (99%) rename riscv-rt/bin/{riscv64ifd-unknown-none-elf-sbi.a => riscv64ifd-unknown-none-elf-smode.a} (99%) rename riscv-rt/bin/{riscv64ifdc-unknown-none-elf-sbi.a => riscv64ifdc-unknown-none-elf-smode.a} (99%) rename riscv-rt/bin/{riscv64im-unknown-none-elf-sbi.a => riscv64im-unknown-none-elf-smode.a} (99%) rename riscv-rt/bin/{riscv64imc-unknown-none-elf-sbi.a => riscv64imc-unknown-none-elf-smode.a} (99%) rename riscv-rt/bin/{riscv64imf-unknown-none-elf-sbi.a => riscv64imf-unknown-none-elf-smode.a} (99%) rename riscv-rt/bin/{riscv64imfc-unknown-none-elf-sbi.a => riscv64imfc-unknown-none-elf-smode.a} (99%) rename riscv-rt/bin/{riscv64imfd-unknown-none-elf-sbi.a => riscv64imfd-unknown-none-elf-smode.a} (99%) rename riscv-rt/bin/{riscv64imfdc-unknown-none-elf-sbi.a => riscv64imfdc-unknown-none-elf-smode.a} (99%) diff --git a/riscv-rt/bin/riscv32i-unknown-none-elf-sbi.a b/riscv-rt/bin/riscv32i-unknown-none-elf-smode.a similarity index 98% rename from riscv-rt/bin/riscv32i-unknown-none-elf-sbi.a rename to riscv-rt/bin/riscv32i-unknown-none-elf-smode.a index 69a8508ae12111165199dc877622e89cc38d5579..40260c7fc3d68672f89ecec834fe1b7440fde578 100644 GIT binary patch delta 27 dcmdmDv&CkD44bi;rLmd$M5Qz+Yh&LsSpak<2si)$ delta 27 dcmdmDv&CkD44aXufuXU{M5Qz+Yh&LsSpae@2o3-M diff --git a/riscv-rt/bin/riscv32i-unknown-none-elf.a b/riscv-rt/bin/riscv32i-unknown-none-elf.a index 4b012b6763b0c06d7261ec3bbe949218daa0189f..bbf60ba6cd7246091644547cc66d722346da9496 100644 GIT binary patch delta 27 ecmdmDv&CkD44bi;rLmd$M5Qzc%WPxcGFbq0AqY1B delta 27 ecmdmDv&CkD44aXufuXU{M5Qzc%Wz}gGFbp}CkPDy diff --git a/riscv-rt/bin/riscv32ic-unknown-none-elf-sbi.a b/riscv-rt/bin/riscv32ic-unknown-none-elf-smode.a similarity index 98% rename from riscv-rt/bin/riscv32ic-unknown-none-elf-sbi.a rename to riscv-rt/bin/riscv32ic-unknown-none-elf-smode.a index 31587d81c01ad5d2d6cb05a4f23ef99a9c96759a..8e74f5eec9760c26f65a9e560755dcc1d4de3f41 100644 GIT binary patch delta 27 dcmdmBy}^2d44bi;rLmd$M5Qz+Yh$01EC6yG2dV%7 delta 27 dcmdmBy}^2d44aXufuXU{M5Qz+Yh$01EC6sK2Y>(o diff --git a/riscv-rt/bin/riscv32ic-unknown-none-elf.a b/riscv-rt/bin/riscv32ic-unknown-none-elf.a index 1eda54bcf28bd643f54273e479cfee1b1cc27c48..5418605e17563ffc181dbc67029f2ed178cc0557 100644 GIT binary patch delta 27 dcmdmCy~BEf44bi;rLmd$M5Qz+Yh$05EC6%N2f_dV delta 27 dcmdmCy~BEf44aXufuXU{M5Qz+Yh$05EC6xR2bcf= diff --git a/riscv-rt/bin/riscv32if-unknown-none-elf-sbi.a b/riscv-rt/bin/riscv32if-unknown-none-elf-smode.a similarity index 98% rename from riscv-rt/bin/riscv32if-unknown-none-elf-sbi.a rename to riscv-rt/bin/riscv32if-unknown-none-elf-smode.a index 4b67f91c63f9120ebcabe3e905cee0ccfa346971..3fa6ea326a1a0789dfafdcab913ff12f2e2fe9be 100644 GIT binary patch delta 27 dcmdmCv%_YB44bi;rLmd$M5Qz+Yh&LkSpanY2t)t? delta 27 dcmdmCv%_YB44aXufuXU{M5Qz+Yh&LkSpahc2pRwY diff --git a/riscv-rt/bin/riscv32if-unknown-none-elf.a b/riscv-rt/bin/riscv32if-unknown-none-elf.a index c8aa87196db0d625cca6fbca4238eff38df8e74c..a966014159fa73c391c0f20adf95340604461e94 100644 GIT binary patch delta 27 dcmdmCv%_YB44bi;rLmd$M5Qz+Yh&LkSpanY2t)t? delta 27 dcmdmCv%_YB44aXufuXU{M5Qz+Yh&LkSpahc2pRwY diff --git a/riscv-rt/bin/riscv32ifc-unknown-none-elf-sbi.a b/riscv-rt/bin/riscv32ifc-unknown-none-elf-smode.a similarity index 98% rename from riscv-rt/bin/riscv32ifc-unknown-none-elf-sbi.a rename to riscv-rt/bin/riscv32ifc-unknown-none-elf-smode.a index 7abb52f4f2dd2d74ddc6bdf2d36697e8d8c00285..b671efb16879d13fa77bc0becd95ba0498973d08 100644 GIT binary patch delta 27 dcmdmDy~TQh44bi;rLmdCM5Qz+Yh$09EC6!|2e<$L delta 27 dcmdmDy~TQh44aXufuXVSM5Qz+Yh$09EC6v12aW&$ diff --git a/riscv-rt/bin/riscv32ifc-unknown-none-elf.a b/riscv-rt/bin/riscv32ifc-unknown-none-elf.a index 670ec4381741f132c7994a290835022e54c403e4..1d78a2d23f619331a3eb5ea2294a1b9772f2d39a 100644 GIT binary patch delta 27 dcmdmEy~lcj44bi;rLmdCM5Qz+Yh$0DEC6)42hacj delta 27 dcmdmEy~lcj44aXufuXU{M5Qz+Yh$0DEC6z<2c!T1 diff --git a/riscv-rt/bin/riscv32ifd-unknown-none-elf-sbi.a b/riscv-rt/bin/riscv32ifd-unknown-none-elf-smode.a similarity index 98% rename from riscv-rt/bin/riscv32ifd-unknown-none-elf-sbi.a rename to riscv-rt/bin/riscv32ifd-unknown-none-elf-smode.a index 0b0c7cb54c54346aa55c817c5842cb9f41c22bee..09b227acc2889518451bcfd86d8f31a15753e1d8 100644 GIT binary patch delta 27 dcmdmEv&UwF44bi;rLmdCM5Qz+Yh&L!SpaqF2vPt5 delta 27 dcmdmEv&UwF44aXufuXVSM5Qz+Yh&L!SpakJ2q*vm diff --git a/riscv-rt/bin/riscv32ifd-unknown-none-elf.a b/riscv-rt/bin/riscv32ifd-unknown-none-elf.a index 1de4e64732323f37d62d1b808418630785b60f17..549caacd5d4aecaf8f622ecdc86e56350a59a2d8 100644 GIT binary patch delta 27 dcmdmEv&UwF44bi;rLmdCM5Qz+Yh&L!SpaqF2vPt5 delta 27 dcmdmEv&UwF44aXufuXVSM5Qz+Yh&L!SpakJ2q*vm diff --git a/riscv-rt/bin/riscv32ifdc-unknown-none-elf-sbi.a b/riscv-rt/bin/riscv32ifdc-unknown-none-elf-smode.a similarity index 98% rename from riscv-rt/bin/riscv32ifdc-unknown-none-elf-sbi.a rename to riscv-rt/bin/riscv32ifdc-unknown-none-elf-smode.a index 39cc21f0560a199f16e07f26eeb2da1a5a5fb0f0..9729b5adcb77478b99787577c4b3fe2637bbd905 100644 GIT binary patch delta 27 dcmdmEy~lcj44bi;rLmdCM5Qz+Yh$0DEC6)42hacj delta 27 dcmdmEy~lcj44aXufuXVSM5Qz+Yh$0DEC6!82c`f3 diff --git a/riscv-rt/bin/riscv32ifdc-unknown-none-elf.a b/riscv-rt/bin/riscv32ifdc-unknown-none-elf.a index 8086113f3afedd8175f968cd147025516c8d8f26..626737a414f0a0f301edd439797c79f838cd8807 100644 GIT binary patch delta 27 dcmX?NeZ+c#44bi;rLmdCM5Qz+Yh$08EC64XbQ7H||+SvC=8USgQ2owMS delta 27 dcmZp$Y_Oal!)9b^U}$VKQ7H||+SvC=8USaU2kHO- diff --git a/riscv-rt/bin/riscv32imc-unknown-none-elf.a b/riscv-rt/bin/riscv32imc-unknown-none-elf.a index 1d28508c3b839d02e6e2eb376a64357870e1c56a..7c7806a0c792ceaf625f448fb3cfd7c9e7fcd403 100644 GIT binary patch delta 27 dcmZp$Y_Oal!)9z|X>4XbQ7H||+SvC=8USgQ2owMS delta 27 dcmZp$Y_Oal!)9b^U}$VKQ7H||+SvC=8USaU2kHO- diff --git a/riscv-rt/bin/riscv32imf-unknown-none-elf-sbi.a b/riscv-rt/bin/riscv32imf-unknown-none-elf-smode.a similarity index 98% rename from riscv-rt/bin/riscv32imf-unknown-none-elf-sbi.a rename to riscv-rt/bin/riscv32imf-unknown-none-elf-smode.a index 467fd6acac9b8222e9224cf8f78d92758b41ce8f..837b09d8b4a710fac68043a03ea660bf3e32a39c 100644 GIT binary patch delta 27 dcmZp$YOtCh!)9z|X>4XOQ7H||+Spel0|02<2bll> delta 27 dcmZp$YOtCh!)9b^U}$VSQ7H||+Spel0{~{@2X6oX diff --git a/riscv-rt/bin/riscv32imf-unknown-none-elf.a b/riscv-rt/bin/riscv32imf-unknown-none-elf.a index bfc8eb27e89c04126679eddd0d27431c82437775..af20afbd582b0f160a0385d4864873f5f7cacc74 100644 GIT binary patch delta 27 dcmZp$YOtCh!)9z|X>4XOQ7H||+Spel0|02<2bll> delta 27 dcmZp$YOtCh!)9b^U}$VSQ7H||+Spel0{~{@2X6oX diff --git a/riscv-rt/bin/riscv32imfc-unknown-none-elf-sbi.a b/riscv-rt/bin/riscv32imfc-unknown-none-elf-smode.a similarity index 98% rename from riscv-rt/bin/riscv32imfc-unknown-none-elf-sbi.a rename to riscv-rt/bin/riscv32imfc-unknown-none-elf-smode.a index 4c9e61a9610057090cd1c4c83e8650c93c1d7275..f1e86383bec12df9512e0c01f02974ec2680e66c 100644 GIT binary patch delta 27 dcmeCM?6905!)9z|X>4XOQ7H||+SvC?8USlr2rd8s delta 27 dcmeCM?6905!)9b^U}$VSQ7H||+SvC?8USfv2m}BC diff --git a/riscv-rt/bin/riscv32imfc-unknown-none-elf.a b/riscv-rt/bin/riscv32imfc-unknown-none-elf.a index 978c886c8929ed42fb9b29728e47e85174ad0a5f..08443736149fbd781df5cd170dde215795a20762 100644 GIT binary patch delta 27 dcmeCM?6905!)9z|X>4XOQ7H||+SvC?8USlr2rd8s delta 27 dcmeCM?6905!)9b^U}$VSQ7H||+SvC?8USfv2m}BC diff --git a/riscv-rt/bin/riscv32imfd-unknown-none-elf-sbi.a b/riscv-rt/bin/riscv32imfd-unknown-none-elf-smode.a similarity index 98% rename from riscv-rt/bin/riscv32imfd-unknown-none-elf-sbi.a rename to riscv-rt/bin/riscv32imfd-unknown-none-elf-smode.a index 6ee7e54859c7ac00878971168be08660edce2482..8f27bd4c1151d621b737a6ba12468d0a5da2d61e 100644 GIT binary patch delta 27 dcmeCM>adz1!)9z|X>4XOQ7H||+Spem0|07`2eAME delta 27 dcmeCM>adz1!)9b^U}$VSQ7H||+Spem0|01~2ZsOv diff --git a/riscv-rt/bin/riscv32imfd-unknown-none-elf.a b/riscv-rt/bin/riscv32imfd-unknown-none-elf.a index 343f4c2aef7d46ec9d65c0b1ab364e905ba8a724..a6e8387f1dd08bb1f61d6c55ce891347595ef35e 100644 GIT binary patch delta 27 dcmeCM>adz1!)9z|X>4XOQ7H||+Spem0|07`2eAME delta 27 dcmeCM>adz1!)9b^U}$VSQ7H||+Spem0|01~2ZsOv diff --git a/riscv-rt/bin/riscv32imfdc-unknown-none-elf-sbi.a b/riscv-rt/bin/riscv32imfdc-unknown-none-elf-smode.a similarity index 98% rename from riscv-rt/bin/riscv32imfdc-unknown-none-elf-sbi.a rename to riscv-rt/bin/riscv32imfdc-unknown-none-elf-smode.a index 8c09102c4ba15a615b68ff229f22c1e2a4aaddab..e8b0c4b63227dc2900c123bd662ab6e03b7c0ecc 100644 GIT binary patch delta 27 bcmeCN?6I66!)9z|2}Bc>(x9x3egC8ZY(@w? delta 27 ecmeCN?6I66!)9b^U}$VIQ7H|=GTzwtPZ|JfM+gxB diff --git a/riscv-rt/bin/riscv32imfdc-unknown-none-elf.a b/riscv-rt/bin/riscv32imfdc-unknown-none-elf.a index 385e9a84005557e733e223b2c23b8650a3f1ae58..83ffff761ac618367f45016fda03132f431e1cd8 100644 GIT binary patch delta 27 bcmeCN?6I66!)9z|2}Bc>(x9x3egC8ZY(@w? delta 27 dcmeCN?6I66!)9b^U}$VSQ7H||+SvC`8USiI2oL}O diff --git a/riscv-rt/bin/riscv64i-unknown-none-elf-sbi.a b/riscv-rt/bin/riscv64i-unknown-none-elf-smode.a similarity index 99% rename from riscv-rt/bin/riscv64i-unknown-none-elf-sbi.a rename to riscv-rt/bin/riscv64i-unknown-none-elf-smode.a index 29c790a2857fe75b84f0b632ae1228328e92c062..58f194262d124194f763e618ad4a9e20b6664ba3 100644 GIT binary patch delta 27 dcmey6@F8J>44bi;rLmd$M5Qz+Yh&LdeE^5(2}S?_ delta 27 dcmey6@F8J>44aXufuXU{M5Qz+Yh&LdeE@~-2^;_b diff --git a/riscv-rt/bin/riscv64i-unknown-none-elf.a b/riscv-rt/bin/riscv64i-unknown-none-elf.a index 77cc42dbc5b2227d5dde4f132711331bcc10854c..c4bb936f51d0b335f23e0408ac76b5ad6d270a08 100644 GIT binary patch delta 27 dcmey6@F8J>44bi;rLmd$M5Qz+Yh&LdeE^5(2}S?_ delta 27 dcmey6@F8J>44aXufuXU{M5Qz+Yh&LdeE@~-2^;_b diff --git a/riscv-rt/bin/riscv64ic-unknown-none-elf-sbi.a b/riscv-rt/bin/riscv64ic-unknown-none-elf-smode.a similarity index 99% rename from riscv-rt/bin/riscv64ic-unknown-none-elf-sbi.a rename to riscv-rt/bin/riscv64ic-unknown-none-elf-smode.a index 35d6d91ba748da35f8f4a8f7c9b6d2dc1e4c0ff8..a078472bfa8a627df9dba5bf5ab150cfb161e589 100644 GIT binary patch delta 27 dcmewn|08~a44bi;rLmd$M5Qz+Yhz!QJ^+Yj2;2Yw delta 27 dcmewn|08~a44aXufuXU{M5Qz+Yhz!QJ^+Sn2(kbG diff --git a/riscv-rt/bin/riscv64ic-unknown-none-elf.a b/riscv-rt/bin/riscv64ic-unknown-none-elf.a index 6e0410a723083f905d21a58d2fc28fb86fc9d5b6..ee453fe279ba43f25b40f04aca7f7b98835f7710 100644 GIT binary patch delta 27 dcmewn|08~a44bi;rLmd$M5Qz+Yhz!QJ^+Yj2;2Yw delta 27 dcmewn|08~a44aXufuXU{M5Qz+Yhz!QJ^+Sn2(kbG diff --git a/riscv-rt/bin/riscv64if-unknown-none-elf-sbi.a b/riscv-rt/bin/riscv64if-unknown-none-elf-smode.a similarity index 99% rename from riscv-rt/bin/riscv64if-unknown-none-elf-sbi.a rename to riscv-rt/bin/riscv64if-unknown-none-elf-smode.a index 36bfce073da288c13fe49bf1ec47cc8a3d745e0c..310211ff4878237048aba3a98603717e5eef929d 100644 GIT binary patch delta 27 dcmey7@FQV@44bi;rLmd$M5Qz+Yh&LleE^A=30?pI delta 27 dcmey7@FQV@44aXufuXU{M5Qz+Yh&LleE^4^2{Zrz diff --git a/riscv-rt/bin/riscv64if-unknown-none-elf.a b/riscv-rt/bin/riscv64if-unknown-none-elf.a index 633ad9190e8a274e500dc1a953a9945ec38df401..2b52368c11fa6f5e57d4b770f886762ce08ae58a 100644 GIT binary patch delta 27 dcmey7@FQV@44bi;rLmd$M5Qz+Yh&LleE^A=30?pI delta 27 dcmey7@FQV@44aXufuXU{M5Qz+Yh&LleE^4^2{Zrz diff --git a/riscv-rt/bin/riscv64ifc-unknown-none-elf-sbi.a b/riscv-rt/bin/riscv64ifc-unknown-none-elf-smode.a similarity index 99% rename from riscv-rt/bin/riscv64ifc-unknown-none-elf-sbi.a rename to riscv-rt/bin/riscv64ifc-unknown-none-elf-smode.a index 011281003f85ce4f59c7586a78c3527e6bcc5e01..907e93809bc54f4012554db49313197ab88c5df6 100644 GIT binary patch delta 27 dcmewn|08~a44bi;rLmdCM5Qz+Yhz!QJ^+Y%2;Kky delta 27 dcmewn|08~a44aXufuXVSM5Qz+Yhz!QJ^+S*2($nI diff --git a/riscv-rt/bin/riscv64ifc-unknown-none-elf.a b/riscv-rt/bin/riscv64ifc-unknown-none-elf.a index 8200507efe993bc2e924f338aaafb8b9cdd57a00..04573b2dc43559c6396d4a5b8181663b58837286 100644 GIT binary patch delta 27 dcmewn|08~a44bi;rLmdCM5Qz+Yhz!QJ^+Y%2;Kky delta 27 dcmewn|08~a44aXufuXU{M5Qz+Yhz!QJ^+Sn2(kbG diff --git a/riscv-rt/bin/riscv64ifd-unknown-none-elf-sbi.a b/riscv-rt/bin/riscv64ifd-unknown-none-elf-smode.a similarity index 99% rename from riscv-rt/bin/riscv64ifd-unknown-none-elf-sbi.a rename to riscv-rt/bin/riscv64ifd-unknown-none-elf-smode.a index f500705df35b57593fd6bf6ccd09e9527a600c78..60c99cda1e1d5e67aa8acd59453e75e6fc89ef3b 100644 GIT binary patch delta 27 dcmey7@FQV@44bi;rLmdCM5Qz+Yh&LleE^B9319#K delta 27 dcmey7@FQV@44aXufuXVSM5Qz+Yh&LleE^5D2{r%# diff --git a/riscv-rt/bin/riscv64ifd-unknown-none-elf.a b/riscv-rt/bin/riscv64ifd-unknown-none-elf.a index 621f1556d9558d13801704d4f2b9f04fe621770a..f75a8874055a0de647681942e3927d73aeea1908 100644 GIT binary patch delta 27 dcmey7@FQV@44bi;rLmdCM5Qz+Yh&LleE^B9319#K delta 27 dcmey7@FQV@44aXufuXVSM5Qz+Yh&LleE^5D2{r%# diff --git a/riscv-rt/bin/riscv64ifdc-unknown-none-elf-sbi.a b/riscv-rt/bin/riscv64ifdc-unknown-none-elf-smode.a similarity index 99% rename from riscv-rt/bin/riscv64ifdc-unknown-none-elf-sbi.a rename to riscv-rt/bin/riscv64ifdc-unknown-none-elf-smode.a index 0ecce8dd3f41d1837deb3d5d9b8e24c0851c8ef4..a038d7d957e92092684d1bd26a25a72bbf597ee0 100644 GIT binary patch delta 27 dcmZojXh@hK!)9z|X>4XOQ7H||+Spg54*+mn2lxO0 delta 27 dcmZojXh@hK!)9b^U}$VSQ7H||+Spg54*+gr2hIQh diff --git a/riscv-rt/bin/riscv64ifdc-unknown-none-elf.a b/riscv-rt/bin/riscv64ifdc-unknown-none-elf.a index ebbf2f69f8f3673c699fb385547140f35da43ab0..fb7fe2f09950a0b6596193146e270f39f5613875 100644 GIT binary patch delta 27 dcmZojXh@hK!)9z|X>4XOQ7H||+Spg54*+mn2lxO0 delta 27 dcmZojXh@hK!)9b^U}$VSQ7H||+Spg54*+gr2hIQh diff --git a/riscv-rt/bin/riscv64im-unknown-none-elf-sbi.a b/riscv-rt/bin/riscv64im-unknown-none-elf-smode.a similarity index 99% rename from riscv-rt/bin/riscv64im-unknown-none-elf-sbi.a rename to riscv-rt/bin/riscv64im-unknown-none-elf-smode.a index d5a32897e47ea75875d3d5da02a259ede487cffd..aafe0a057e9d505b31654b3a4d038e6286fe9ca8 100644 GIT binary patch delta 27 dcmewm^C4z}44bi;rLmd$M5Qz+Yh&LdT>yt32|NG* delta 27 dcmewm^C4z}44aXufuXU{M5Qz+Yh&LdT>yn72@(JR diff --git a/riscv-rt/bin/riscv64im-unknown-none-elf.a b/riscv-rt/bin/riscv64im-unknown-none-elf.a index e2fc324ceaa61ca0cf0d66c74007fc0b29249838..126631b4d4c7215c81350611915469904d68e523 100644 GIT binary patch delta 27 dcmewm^C4z}44bi;rLmd$M5Qz+Yh&LdT>yt32|NG* delta 27 dcmewm^C4z}44aXufuXU{M5Qz+Yh&LdT>yn72@(JR diff --git a/riscv-rt/bin/riscv64imc-unknown-none-elf-sbi.a b/riscv-rt/bin/riscv64imc-unknown-none-elf-smode.a similarity index 99% rename from riscv-rt/bin/riscv64imc-unknown-none-elf-sbi.a rename to riscv-rt/bin/riscv64imc-unknown-none-elf-smode.a index 2bb848e4e901e240470e6f6318eca5e378d61a21..d5d0000109f6df083845a053263a9974064081fb 100644 GIT binary patch delta 27 dcmZpOX^5F1!)9z|X>4XbQ7H||+Spg53jl9^2kZa< delta 27 dcmZpOX^5F1!)9b^U}$VKQ7H||+Spg53jl3|2f_dV diff --git a/riscv-rt/bin/riscv64imc-unknown-none-elf.a b/riscv-rt/bin/riscv64imc-unknown-none-elf.a index 417487034ffb4dac315c4f83dbf436d779fafc2d..6b7f7f7fb19079ab8cddf1168765c12b35e5024c 100644 GIT binary patch delta 27 dcmZpOX^5F1!)9z|X>4XbQ7H||+Spg53jl9^2kZa< delta 27 dcmZpOX^5F1!)9b^U}$VKQ7H||+Spg53jl3|2f_dV diff --git a/riscv-rt/bin/riscv64imf-unknown-none-elf-sbi.a b/riscv-rt/bin/riscv64imf-unknown-none-elf-smode.a similarity index 99% rename from riscv-rt/bin/riscv64imf-unknown-none-elf-sbi.a rename to riscv-rt/bin/riscv64imf-unknown-none-elf-smode.a index 026428372643beaadb80e7fe8b73ee39b7be3a86..264d2d83a3a8da79d2d3acee4dc4d84dac58a802 100644 GIT binary patch delta 27 dcmewm^C4z}44bi;rLmdCM5Qz+Yh&LdT>ytN2|fS- delta 27 dcmewm^C4z}44aXufuXVSM5Qz+Yh&LdT>ynR2^0VT diff --git a/riscv-rt/bin/riscv64imf-unknown-none-elf.a b/riscv-rt/bin/riscv64imf-unknown-none-elf.a index 3667454a41222a8ced98b460b52b61a1015e6bbe..e90f1b95f15a151381635fccce09da33a48dc166 100644 GIT binary patch delta 27 dcmewm^C4z}44bi;rLmdCM5Qz+Yh&LdT>ytN2|fS- delta 27 dcmewm^C4z}44aXufuXVSM5Qz+Yh&LdT>ynR2^0VT diff --git a/riscv-rt/bin/riscv64imfc-unknown-none-elf-sbi.a b/riscv-rt/bin/riscv64imfc-unknown-none-elf-smode.a similarity index 99% rename from riscv-rt/bin/riscv64imfc-unknown-none-elf-sbi.a rename to riscv-rt/bin/riscv64imfc-unknown-none-elf-smode.a index c9dc0813d6a8e3e706f89d68fdd901a6ba141e21..fad4683e8217fe605cdb0a5429af9603bbd5be88 100644 GIT binary patch delta 27 dcmeB(>4=#i!)9z|X>4XOQ7H||+Spg63jlFK2nGNE delta 27 dcmeB(>4=#i!)9b^U}$VSQ7H||+Spg63jl9O2iyPv diff --git a/riscv-rt/bin/riscv64imfc-unknown-none-elf.a b/riscv-rt/bin/riscv64imfc-unknown-none-elf.a index 2976e285a0985a49d6dd471882a1a88b8fc14f09..6ad9e5958a40712072e25b4d1c214adbcb74423a 100644 GIT binary patch delta 27 dcmeB(>4=#i!)9z|X>4XOQ7H||+Spg63jlFK2nGNE delta 27 dcmeB(>4=#i!)9b^U}$VSQ7H||+Spg63jl9O2iyPv diff --git a/riscv-rt/bin/riscv64imfd-unknown-none-elf-sbi.a b/riscv-rt/bin/riscv64imfd-unknown-none-elf-smode.a similarity index 99% rename from riscv-rt/bin/riscv64imfd-unknown-none-elf-sbi.a rename to riscv-rt/bin/riscv64imfd-unknown-none-elf-smode.a index e5b2922c46327ff74662c753444a1c310df0a993..083f18f1877ee4e74740a0c3a6cc2ae083084374 100644 GIT binary patch delta 27 dcmewn^CM=044bi;rLmdCM5Qz+Yh&LlT>yyU3043A delta 27 dcmewn^CM=044aXufuXVSM5Qz+Yh&LlT>ysY2`m5r diff --git a/riscv-rt/bin/riscv64imfd-unknown-none-elf.a b/riscv-rt/bin/riscv64imfd-unknown-none-elf.a index 8a70b49567cb1d013a5bff045e34298307eebb7b..80f2c2149edd7081a4225bb8a7cc7685943d7219 100644 GIT binary patch delta 27 dcmewn^CM=044bi;rLmdCM5Qz+Yh&LlT>yyU3043A delta 27 dcmewn^CM=044aXufuXVSM5Qz+Yh&LlT>ysY2`m5r diff --git a/riscv-rt/bin/riscv64imfdc-unknown-none-elf-sbi.a b/riscv-rt/bin/riscv64imfdc-unknown-none-elf-smode.a similarity index 99% rename from riscv-rt/bin/riscv64imfdc-unknown-none-elf-sbi.a rename to riscv-rt/bin/riscv64imfdc-unknown-none-elf-smode.a index 6040a04e94c2239d0904e98ab9ed6c33e2585867..59eaff9f9f4336d9aeca33cdde1d66e17a102b21 100644 GIT binary patch delta 27 ccmbObGa+Vz44bi;B@j(iN`taC_BH7O0CNTiAOHXW delta 27 dcmbObGa+Vz44aXufuXU12lfB} diff --git a/riscv-rt/bin/riscv64imfdc-unknown-none-elf.a b/riscv-rt/bin/riscv64imfdc-unknown-none-elf.a index 2fc054c389bb3b39ecdb43245a987970f40b6519..7e4aa4a9890618f19c412e350726daa6a8082775 100644 GIT binary patch delta 27 ccmbObGa+Vz44bi;B@j(iN`taC_BH7O0CNTiAOHXW delta 27 dcmbObGa+Vz44aXufuXVSM5Qz+Yhz!NE&y=&2lM~{ From 68e99b335261f611606f94c46dc7a7438f827af9 Mon Sep 17 00:00:00 2001 From: Pablo Graubner <2234137+pgraubner@users.noreply.github.com> Date: Tue, 20 Sep 2022 00:24:03 +0200 Subject: [PATCH 188/234] SMODE: remove redundand paths --- riscv-rt/src/lib.rs | 44 +++++++++++++++----------------------------- 1 file changed, 15 insertions(+), 29 deletions(-) diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index ce19c668..3027452c 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -359,7 +359,12 @@ #![no_std] #![deny(missing_docs)] -use riscv::register::{mcause, mhartid, scause}; +#[cfg(feature = "s-mode")] +use riscv::register::{scause as xcause, stvec as xtvec, stvec::TrapMode as xTrapMode}; + +#[cfg(not(feature = "s-mode"))] +use riscv::register::{mcause as xcause, mhartid, mtvec as xtvec, mtvec::TrapMode as xTrapMode}; + pub use riscv_rt_macros::{entry, pre_init}; #[export_name = "error: riscv-rt appears more than once in the dependency graph"] @@ -400,12 +405,10 @@ pub unsafe extern "C" fn start_rust(a0: usize, a1: usize, a2: usize) -> ! { } // sbi passes hartid as first parameter (a0) - let hartid: usize; - if cfg!(feature = "s-mode") { - hartid = a0; - } else { - hartid = mhartid::read(); - } + #[cfg(feature = "s-mode")] + let hartid = a0; + #[cfg(not(feature = "s-mode"))] + let hartid = mhartid::read(); if _mp_hook(hartid) { __pre_init(); @@ -458,24 +461,13 @@ pub extern "C" fn start_trap_rust(trap_frame: *const TrapFrame) { } unsafe { - let code: usize; - let is_exception: bool; + let cause = xcause::read(); - if cfg!(feature = "s-mode") { - let cause = scause::read(); - is_exception = cause.is_exception(); - code = cause.code(); - } else { - let cause = mcause::read(); - is_exception = cause.is_exception(); - code = cause.code(); - } - - if is_exception { + if cause.is_exception() { ExceptionHandler(&*trap_frame) } else { - if code < __INTERRUPTS.len() { - let h = &__INTERRUPTS[code]; + if cause.code() < __INTERRUPTS.len() { + let h = &__INTERRUPTS[cause.code()]; if h.reserved == 0 { DefaultHandler(); } else { @@ -601,11 +593,5 @@ pub unsafe extern "Rust" fn default_setup_interrupts() { fn _start_trap(); } - if cfg!(feature = "s-mode") { - use riscv::register::stvec::{self, TrapMode}; - stvec::write(_start_trap as usize, TrapMode::Direct); - } else { - use riscv::register::mtvec::{self, TrapMode}; - mtvec::write(_start_trap as usize, TrapMode::Direct); - } + xtvec::write(_start_trap as usize, xTrapMode::Direct); } From edf0387398497f0fe7545aef3c875ce1f20427ae Mon Sep 17 00:00:00 2001 From: Ales Katona Date: Fri, 4 Nov 2022 20:00:21 -0700 Subject: [PATCH 189/234] release v0.10.0 --- riscv-rt/CHANGELOG.md | 6 +++++- riscv-rt/Cargo.toml | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/riscv-rt/CHANGELOG.md b/riscv-rt/CHANGELOG.md index 251205d6..5ab83981 100644 --- a/riscv-rt/CHANGELOG.md +++ b/riscv-rt/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] +## [v0.10.0] - 2022-11-04 + ### Added - Optional cargo feature `s-mode` for supervisor mode, including conditional compilation for supervisor/machine mode instructions. @@ -15,6 +17,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Remove superfluous parentheses from link.x, which caused linker errors with nightly. - Changed `mp_hook` signature, hartid as passed as usize parameter by the caller (required for `s-mode` feature). +- Update `riscv` to version 0.9 ## [v0.9.0] - 2022-07-01 @@ -91,7 +94,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Set MSRV to 1.38 -[Unreleased]: https://github.com/rust-embedded/riscv-rt/compare/v0.9.0..HEAD +[Unreleased]: https://github.com/rust-embedded/riscv-rt/compare/v0.10.0..HEAD +[v0.10.0]: https://github.com/rust-embedded/riscv-rt/compare/v0.9.1...v0.10.0 [v0.9.0]: https://github.com/rust-embedded/riscv-rt/compare/v0.8.1...v0.9.0 [v0.8.1]: https://github.com/rust-embedded/riscv-rt/compare/v0.8.0...v0.8.1 [v0.8.0]: https://github.com/rust-embedded/riscv-rt/compare/v0.7.2...v0.8.0 diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index 31f74450..c0f76cb3 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "riscv-rt" -version = "0.9.0" +version = "0.10.0" rust-version = "1.59" repository = "https://github.com/rust-embedded/riscv-rt" authors = ["The RISC-V Team "] @@ -15,7 +15,7 @@ s-mode = [] [dependencies] r0 = "1.0.0" -riscv = "0.8" +riscv = "0.9" riscv-rt-macros = { path = "macros", version = "0.2.0" } [dev-dependencies] From d66bf9fe7ee91667cf0850c6d291ab8e60150dd9 Mon Sep 17 00:00:00 2001 From: tfx2001 Date: Sat, 24 Dec 2022 09:58:16 +0000 Subject: [PATCH 190/234] update to riscv 0.10 --- riscv-rt/CHANGELOG.md | 4 ++++ riscv-rt/Cargo.toml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/riscv-rt/CHANGELOG.md b/riscv-rt/CHANGELOG.md index 5ab83981..102e8ed2 100644 --- a/riscv-rt/CHANGELOG.md +++ b/riscv-rt/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] +### Changed + +- Update `riscv` to version 0.10 + ## [v0.10.0] - 2022-11-04 ### Added diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index c0f76cb3..31cb8ef3 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -15,7 +15,7 @@ s-mode = [] [dependencies] r0 = "1.0.0" -riscv = "0.9" +riscv = "0.10" riscv-rt-macros = { path = "macros", version = "0.2.0" } [dev-dependencies] From bb86d3485fd009be3359b9f2a31531476a1032bf Mon Sep 17 00:00:00 2001 From: Ales Katona Date: Wed, 18 Jan 2023 11:39:13 -0800 Subject: [PATCH 191/234] release v0.10.1 with riscv CS fix --- riscv-rt/CHANGELOG.md | 7 +++++-- riscv-rt/Cargo.toml | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/riscv-rt/CHANGELOG.md b/riscv-rt/CHANGELOG.md index 102e8ed2..af563848 100644 --- a/riscv-rt/CHANGELOG.md +++ b/riscv-rt/CHANGELOG.md @@ -7,9 +7,11 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] +## [v0.10.1] - 2023-01-18 + ### Changed -- Update `riscv` to version 0.10 +- Update `riscv` to version 0.10.1 fixing a critical section bug ## [v0.10.0] - 2022-11-04 @@ -98,7 +100,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Set MSRV to 1.38 -[Unreleased]: https://github.com/rust-embedded/riscv-rt/compare/v0.10.0..HEAD +[Unreleased]: https://github.com/rust-embedded/riscv-rt/compare/v0.10.1..HEAD +[v0.10.1]: https://github.com/rust-embedded/riscv-rt/compare/v0.10.0...v0.10.1 [v0.10.0]: https://github.com/rust-embedded/riscv-rt/compare/v0.9.1...v0.10.0 [v0.9.0]: https://github.com/rust-embedded/riscv-rt/compare/v0.8.1...v0.9.0 [v0.8.1]: https://github.com/rust-embedded/riscv-rt/compare/v0.8.0...v0.8.1 diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index 31cb8ef3..497ee4e2 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "riscv-rt" -version = "0.10.0" +version = "0.10.1" rust-version = "1.59" repository = "https://github.com/rust-embedded/riscv-rt" authors = ["The RISC-V Team "] From fcc69ab4909c298708bb339c40e0cbf91fa7b345 Mon Sep 17 00:00:00 2001 From: Ales Katona Date: Wed, 18 Jan 2023 12:11:38 -0800 Subject: [PATCH 192/234] use v0.11.0 due to major dependency bump --- riscv-rt/CHANGELOG.md | 6 +++--- riscv-rt/Cargo.toml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/riscv-rt/CHANGELOG.md b/riscv-rt/CHANGELOG.md index af563848..95f4e334 100644 --- a/riscv-rt/CHANGELOG.md +++ b/riscv-rt/CHANGELOG.md @@ -7,7 +7,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] -## [v0.10.1] - 2023-01-18 +## [v0.11.0] - 2023-01-18 ### Changed @@ -100,8 +100,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Set MSRV to 1.38 -[Unreleased]: https://github.com/rust-embedded/riscv-rt/compare/v0.10.1..HEAD -[v0.10.1]: https://github.com/rust-embedded/riscv-rt/compare/v0.10.0...v0.10.1 +[Unreleased]: https://github.com/rust-embedded/riscv-rt/compare/v0.11.0..HEAD +[v0.10.1]: https://github.com/rust-embedded/riscv-rt/compare/v0.10.0...v0.11.0 [v0.10.0]: https://github.com/rust-embedded/riscv-rt/compare/v0.9.1...v0.10.0 [v0.9.0]: https://github.com/rust-embedded/riscv-rt/compare/v0.8.1...v0.9.0 [v0.8.1]: https://github.com/rust-embedded/riscv-rt/compare/v0.8.0...v0.8.1 diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index 497ee4e2..5fc45ccf 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "riscv-rt" -version = "0.10.1" +version = "0.11.0" rust-version = "1.59" repository = "https://github.com/rust-embedded/riscv-rt" authors = ["The RISC-V Team "] From 527ed05eaef818187242e9213088baf5cde10b6e Mon Sep 17 00:00:00 2001 From: sethp Date: Sat, 21 Jan 2023 09:47:24 -0800 Subject: [PATCH 193/234] fix: avoid rust-analyzer snake case warning It seems that rust-analyzer needs to operate over the expanded text of the proc macro (in order to e.g. support completion in the function body, see #11014 for way more details), so it "sees" the non-snake-case name emitted by riscv-rt's `entry` here. Without this change, rust-analyzer will show a "weak warning" on invocations of `#[entry]` with the text: ``` Function `__risc_v_rt__main` should have snake_case name, e.g. `__risc_v_rt_main` ``` --- riscv-rt/macros/src/lib.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/riscv-rt/macros/src/lib.rs b/riscv-rt/macros/src/lib.rs index 3c79864b..f63d8ceb 100644 --- a/riscv-rt/macros/src/lib.rs +++ b/riscv-rt/macros/src/lib.rs @@ -109,6 +109,7 @@ pub fn entry(args: TokenStream, input: TokenStream) -> TokenStream { let stmts = f.block.stmts; quote!( + #[allow(non_snake_case)] #[export_name = "main"] #(#attrs)* pub #unsafety fn __risc_v_rt__main(#args) -> ! { From a47997756eb6ab99d0aab4247da5dd51cc77ba42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rom=C3=A1n=20C=C3=A1rdenas?= Date: Tue, 4 Jul 2023 16:16:36 +0200 Subject: [PATCH 194/234] moving to ghmq --- riscv-rt/.github/bors.toml | 8 ----- riscv-rt/.github/workflows/blobs.yaml | 17 ++++++++++ riscv-rt/.github/workflows/build.yaml | 45 +++++++++++++++++++++++++ riscv-rt/.github/workflows/ci.yaml | 40 ---------------------- riscv-rt/.github/workflows/rustfmt.yaml | 21 +++++------- 5 files changed, 70 insertions(+), 61 deletions(-) delete mode 100644 riscv-rt/.github/bors.toml create mode 100644 riscv-rt/.github/workflows/blobs.yaml create mode 100644 riscv-rt/.github/workflows/build.yaml delete mode 100644 riscv-rt/.github/workflows/ci.yaml diff --git a/riscv-rt/.github/bors.toml b/riscv-rt/.github/bors.toml deleted file mode 100644 index b50b7c62..00000000 --- a/riscv-rt/.github/bors.toml +++ /dev/null @@ -1,8 +0,0 @@ -block_labels = ["needs-decision"] -delete_merged_branches = true -required_approvals = 1 -status = [ - "ci-linux (stable)", - "ci-linux (1.59.0)", - "Rustfmt" -] diff --git a/riscv-rt/.github/workflows/blobs.yaml b/riscv-rt/.github/workflows/blobs.yaml new file mode 100644 index 00000000..b0b6b640 --- /dev/null +++ b/riscv-rt/.github/workflows/blobs.yaml @@ -0,0 +1,17 @@ +on: + push: + branches: [ master, ghmq ] + pull_request: + merge_group: + +name: Check blobs + +jobs: + blobs: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Install riscv gcc + run: sudo apt-get update && sudo apt-get install -y gcc-riscv64-unknown-elf + - name: Check blobs + run: ./check-blobs.sh diff --git a/riscv-rt/.github/workflows/build.yaml b/riscv-rt/.github/workflows/build.yaml new file mode 100644 index 00000000..da7c7154 --- /dev/null +++ b/riscv-rt/.github/workflows/build.yaml @@ -0,0 +1,45 @@ +on: + push: + branches: [ master, ghmq ] + pull_request: + merge_group: + +name: Build check + +jobs: + build-riscv: + strategy: + matrix: + # All generated code should be running on stable now, MRSV is 1.59.0 + toolchain: [ stable, nightly, 1.59.0 ] + target: + - riscv32i-unknown-none-elf + - riscv32imc-unknown-none-elf + - riscv32imac-unknown-none-elf + - riscv64imac-unknown-none-elf + - riscv64gc-unknown-none-elf + cargo_flags: [ "--no-default-features", "--all-features" ] + include: + # Nightly is only for reference and allowed to fail + - toolchain: nightly + experimental: true + runs-on: ubuntu-latest + continue-on-error: ${{ matrix.experimental || false }} + steps: + - uses: actions/checkout@v3 + - uses: dtolnay/rust-toolchain@master + with: + toolchain: ${{ matrix.toolchain }} + targets: ${{ matrix.target }} + - name: Build library + run: cargo build --target ${{ matrix.target }} ${{ matrix.cargo_flags }} + + # Job to check that all the builds succeeded + build-check: + needs: + - build-riscv + runs-on: ubuntu-latest + if: always() + steps: + - run: jq --exit-status 'all(.result == "success")' <<< '${{ toJson(needs) }}' + \ No newline at end of file diff --git a/riscv-rt/.github/workflows/ci.yaml b/riscv-rt/.github/workflows/ci.yaml deleted file mode 100644 index 94d99f49..00000000 --- a/riscv-rt/.github/workflows/ci.yaml +++ /dev/null @@ -1,40 +0,0 @@ -on: - push: - branches: [ staging, trying, master ] - pull_request: - -name: Continuous integration - -jobs: - ci-linux: - runs-on: ubuntu-20.04 - continue-on-error: ${{ matrix.experimental || false }} - strategy: - matrix: - # All generated code should be running on stable now, MSRV is 1.59.0 - rust: [nightly, stable, 1.59.0] - - include: - # Nightly is only for reference and allowed to fail - - rust: nightly - experimental: true - - steps: - - uses: actions/checkout@v2 - - uses: actions-rs/toolchain@v1 - with: - profile: minimal - toolchain: ${{ matrix.rust }} - override: true - - name: Install all Rust targets for ${{ matrix.rust }} - run: rustup target install --toolchain=${{ matrix.rust }} riscv32imac-unknown-none-elf riscv64imac-unknown-none-elf riscv64gc-unknown-none-elf - - name: Install riscv gcc - run: sudo apt-get update && sudo apt-get install -y gcc-riscv64-unknown-elf - - name: Run CI script for riscv32imac-unknown-none-elf under ${{ matrix.rust }} - run: cargo check --target riscv32imac-unknown-none-elf - - name: Run CI script for riscv64imac-unknown-none-elf under ${{ matrix.rust }} - run: cargo check --target riscv64imac-unknown-none-elf - - name: Run CI script for riscv64gc-unknown-none-elf under ${{ matrix.rust }} - run: cargo check --target riscv64gc-unknown-none-elf - - name: Check blobs - run: ./check-blobs.sh diff --git a/riscv-rt/.github/workflows/rustfmt.yaml b/riscv-rt/.github/workflows/rustfmt.yaml index 07273842..79854611 100644 --- a/riscv-rt/.github/workflows/rustfmt.yaml +++ b/riscv-rt/.github/workflows/rustfmt.yaml @@ -1,24 +1,19 @@ on: push: - branches: [ staging, trying, master ] + branches: [ master, ghmq ] pull_request: + merge_group: name: Code formatting check jobs: - fmt: - name: Rustfmt - runs-on: ubuntu-20.04 + rustfmt: + runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - uses: actions-rs/toolchain@v1 + - uses: actions/checkout@v3 + - uses: dtolnay/rust-toolchain@stable with: - profile: minimal - toolchain: stable - override: true components: rustfmt - - uses: actions-rs/cargo@v1 - with: - command: fmt - args: --all -- --check \ No newline at end of file + - name: Run Rustfmt + run: cargo fmt --all -- --check --verbose From 86d70ab7df5d95919b5578833218f103b1f8805f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rom=C3=A1n=20C=C3=A1rdenas?= Date: Tue, 4 Jul 2023 16:25:01 +0200 Subject: [PATCH 195/234] ready to merge --- riscv-rt/.github/workflows/blobs.yaml | 2 +- riscv-rt/.github/workflows/build.yaml | 2 +- riscv-rt/.github/workflows/rustfmt.yaml | 2 +- riscv-rt/CHANGELOG.md | 4 ++++ 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/riscv-rt/.github/workflows/blobs.yaml b/riscv-rt/.github/workflows/blobs.yaml index b0b6b640..0c9bea51 100644 --- a/riscv-rt/.github/workflows/blobs.yaml +++ b/riscv-rt/.github/workflows/blobs.yaml @@ -1,6 +1,6 @@ on: push: - branches: [ master, ghmq ] + branches: [ master ] pull_request: merge_group: diff --git a/riscv-rt/.github/workflows/build.yaml b/riscv-rt/.github/workflows/build.yaml index da7c7154..71333df4 100644 --- a/riscv-rt/.github/workflows/build.yaml +++ b/riscv-rt/.github/workflows/build.yaml @@ -1,6 +1,6 @@ on: push: - branches: [ master, ghmq ] + branches: [ master ] pull_request: merge_group: diff --git a/riscv-rt/.github/workflows/rustfmt.yaml b/riscv-rt/.github/workflows/rustfmt.yaml index 79854611..72993e73 100644 --- a/riscv-rt/.github/workflows/rustfmt.yaml +++ b/riscv-rt/.github/workflows/rustfmt.yaml @@ -1,7 +1,7 @@ on: push: - branches: [ master, ghmq ] + branches: [ master ] pull_request: merge_group: diff --git a/riscv-rt/CHANGELOG.md b/riscv-rt/CHANGELOG.md index 95f4e334..50b44407 100644 --- a/riscv-rt/CHANGELOG.md +++ b/riscv-rt/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] +### Changed + +- Removed bors in favor of GitHub Merge Queue + ## [v0.11.0] - 2023-01-18 ### Changed From 0abe2ab583aa37d14eeb503c95bdf26dd0d34066 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rom=C3=A1n=20C=C3=A1rdenas?= Date: Thu, 6 Jul 2023 11:00:04 +0200 Subject: [PATCH 196/234] use core::arch::global_asm --- riscv-rt/{asm.S => asm/original_asm.S} | 0 riscv-rt/asm/riscv32i-unknown-none-elf-m.s | 123 ++++++++++++ riscv-rt/asm/riscv32i-unknown-none-elf-s.s | 123 ++++++++++++ riscv-rt/asm/riscv32imac-unknown-none-elf-m.s | 116 +++++++++++ riscv-rt/asm/riscv32imac-unknown-none-elf-s.s | 116 +++++++++++ riscv-rt/asm/riscv64imac-unknown-none-elf-m.s | 126 ++++++++++++ riscv-rt/asm/riscv64imac-unknown-none-elf-s.s | 126 ++++++++++++ riscv-rt/assemble.ps1 | 27 --- riscv-rt/assemble.sh | 44 ----- .../bin/riscv32i-unknown-none-elf-smode.a | Bin 7732 -> 0 bytes riscv-rt/bin/riscv32i-unknown-none-elf.a | Bin 7732 -> 0 bytes .../bin/riscv32ic-unknown-none-elf-smode.a | Bin 7600 -> 0 bytes riscv-rt/bin/riscv32ic-unknown-none-elf.a | Bin 7608 -> 0 bytes .../bin/riscv32if-unknown-none-elf-smode.a | Bin 7736 -> 0 bytes riscv-rt/bin/riscv32if-unknown-none-elf.a | Bin 7736 -> 0 bytes .../bin/riscv32ifc-unknown-none-elf-smode.a | Bin 7604 -> 0 bytes riscv-rt/bin/riscv32ifc-unknown-none-elf.a | Bin 7612 -> 0 bytes .../bin/riscv32ifd-unknown-none-elf-smode.a | Bin 7740 -> 0 bytes riscv-rt/bin/riscv32ifd-unknown-none-elf.a | Bin 7740 -> 0 bytes .../bin/riscv32ifdc-unknown-none-elf-smode.a | Bin 7612 -> 0 bytes riscv-rt/bin/riscv32ifdc-unknown-none-elf.a | Bin 7620 -> 0 bytes .../bin/riscv32im-unknown-none-elf-smode.a | Bin 7420 -> 0 bytes riscv-rt/bin/riscv32im-unknown-none-elf.a | Bin 7420 -> 0 bytes .../bin/riscv32imc-unknown-none-elf-smode.a | Bin 7296 -> 0 bytes riscv-rt/bin/riscv32imc-unknown-none-elf.a | Bin 7296 -> 0 bytes .../bin/riscv32imf-unknown-none-elf-smode.a | Bin 7424 -> 0 bytes riscv-rt/bin/riscv32imf-unknown-none-elf.a | Bin 7424 -> 0 bytes .../bin/riscv32imfc-unknown-none-elf-smode.a | Bin 7304 -> 0 bytes riscv-rt/bin/riscv32imfc-unknown-none-elf.a | Bin 7304 -> 0 bytes .../bin/riscv32imfd-unknown-none-elf-smode.a | Bin 7432 -> 0 bytes riscv-rt/bin/riscv32imfd-unknown-none-elf.a | Bin 7432 -> 0 bytes .../bin/riscv32imfdc-unknown-none-elf-smode.a | Bin 7308 -> 0 bytes riscv-rt/bin/riscv32imfdc-unknown-none-elf.a | Bin 7308 -> 0 bytes .../bin/riscv64i-unknown-none-elf-smode.a | Bin 12400 -> 0 bytes riscv-rt/bin/riscv64i-unknown-none-elf.a | Bin 12400 -> 0 bytes .../bin/riscv64ic-unknown-none-elf-smode.a | Bin 12280 -> 0 bytes riscv-rt/bin/riscv64ic-unknown-none-elf.a | Bin 12280 -> 0 bytes .../bin/riscv64if-unknown-none-elf-smode.a | Bin 12408 -> 0 bytes riscv-rt/bin/riscv64if-unknown-none-elf.a | Bin 12408 -> 0 bytes .../bin/riscv64ifc-unknown-none-elf-smode.a | Bin 12280 -> 0 bytes riscv-rt/bin/riscv64ifc-unknown-none-elf.a | Bin 12280 -> 0 bytes .../bin/riscv64ifd-unknown-none-elf-smode.a | Bin 12408 -> 0 bytes riscv-rt/bin/riscv64ifd-unknown-none-elf.a | Bin 12408 -> 0 bytes .../bin/riscv64ifdc-unknown-none-elf-smode.a | Bin 12288 -> 0 bytes riscv-rt/bin/riscv64ifdc-unknown-none-elf.a | Bin 12288 -> 0 bytes .../bin/riscv64im-unknown-none-elf-smode.a | Bin 11888 -> 0 bytes riscv-rt/bin/riscv64im-unknown-none-elf.a | Bin 11888 -> 0 bytes .../bin/riscv64imc-unknown-none-elf-smode.a | Bin 11776 -> 0 bytes riscv-rt/bin/riscv64imc-unknown-none-elf.a | Bin 11776 -> 0 bytes .../bin/riscv64imf-unknown-none-elf-smode.a | Bin 11888 -> 0 bytes riscv-rt/bin/riscv64imf-unknown-none-elf.a | Bin 11888 -> 0 bytes .../bin/riscv64imfc-unknown-none-elf-smode.a | Bin 11784 -> 0 bytes riscv-rt/bin/riscv64imfc-unknown-none-elf.a | Bin 11784 -> 0 bytes .../bin/riscv64imfd-unknown-none-elf-smode.a | Bin 11896 -> 0 bytes riscv-rt/bin/riscv64imfd-unknown-none-elf.a | Bin 11896 -> 0 bytes .../bin/riscv64imfdc-unknown-none-elf-smode.a | Bin 11792 -> 0 bytes riscv-rt/bin/riscv64imfdc-unknown-none-elf.a | Bin 11792 -> 0 bytes riscv-rt/build.rs | 29 +-- riscv-rt/check-blobs.sh | 20 +- riscv-rt/examples/device.x | 14 ++ riscv-rt/src/asm.rs | 186 ++++++++++++++++++ riscv-rt/src/lib.rs | 3 + 62 files changed, 949 insertions(+), 104 deletions(-) rename riscv-rt/{asm.S => asm/original_asm.S} (100%) create mode 100644 riscv-rt/asm/riscv32i-unknown-none-elf-m.s create mode 100644 riscv-rt/asm/riscv32i-unknown-none-elf-s.s create mode 100644 riscv-rt/asm/riscv32imac-unknown-none-elf-m.s create mode 100644 riscv-rt/asm/riscv32imac-unknown-none-elf-s.s create mode 100644 riscv-rt/asm/riscv64imac-unknown-none-elf-m.s create mode 100644 riscv-rt/asm/riscv64imac-unknown-none-elf-s.s delete mode 100644 riscv-rt/assemble.ps1 delete mode 100755 riscv-rt/assemble.sh delete mode 100644 riscv-rt/bin/riscv32i-unknown-none-elf-smode.a delete mode 100644 riscv-rt/bin/riscv32i-unknown-none-elf.a delete mode 100644 riscv-rt/bin/riscv32ic-unknown-none-elf-smode.a delete mode 100644 riscv-rt/bin/riscv32ic-unknown-none-elf.a delete mode 100644 riscv-rt/bin/riscv32if-unknown-none-elf-smode.a delete mode 100644 riscv-rt/bin/riscv32if-unknown-none-elf.a delete mode 100644 riscv-rt/bin/riscv32ifc-unknown-none-elf-smode.a delete mode 100644 riscv-rt/bin/riscv32ifc-unknown-none-elf.a delete mode 100644 riscv-rt/bin/riscv32ifd-unknown-none-elf-smode.a delete mode 100644 riscv-rt/bin/riscv32ifd-unknown-none-elf.a delete mode 100644 riscv-rt/bin/riscv32ifdc-unknown-none-elf-smode.a delete mode 100644 riscv-rt/bin/riscv32ifdc-unknown-none-elf.a delete mode 100644 riscv-rt/bin/riscv32im-unknown-none-elf-smode.a delete mode 100644 riscv-rt/bin/riscv32im-unknown-none-elf.a delete mode 100644 riscv-rt/bin/riscv32imc-unknown-none-elf-smode.a delete mode 100644 riscv-rt/bin/riscv32imc-unknown-none-elf.a delete mode 100644 riscv-rt/bin/riscv32imf-unknown-none-elf-smode.a delete mode 100644 riscv-rt/bin/riscv32imf-unknown-none-elf.a delete mode 100644 riscv-rt/bin/riscv32imfc-unknown-none-elf-smode.a delete mode 100644 riscv-rt/bin/riscv32imfc-unknown-none-elf.a delete mode 100644 riscv-rt/bin/riscv32imfd-unknown-none-elf-smode.a delete mode 100644 riscv-rt/bin/riscv32imfd-unknown-none-elf.a delete mode 100644 riscv-rt/bin/riscv32imfdc-unknown-none-elf-smode.a delete mode 100644 riscv-rt/bin/riscv32imfdc-unknown-none-elf.a delete mode 100644 riscv-rt/bin/riscv64i-unknown-none-elf-smode.a delete mode 100644 riscv-rt/bin/riscv64i-unknown-none-elf.a delete mode 100644 riscv-rt/bin/riscv64ic-unknown-none-elf-smode.a delete mode 100644 riscv-rt/bin/riscv64ic-unknown-none-elf.a delete mode 100644 riscv-rt/bin/riscv64if-unknown-none-elf-smode.a delete mode 100644 riscv-rt/bin/riscv64if-unknown-none-elf.a delete mode 100644 riscv-rt/bin/riscv64ifc-unknown-none-elf-smode.a delete mode 100644 riscv-rt/bin/riscv64ifc-unknown-none-elf.a delete mode 100644 riscv-rt/bin/riscv64ifd-unknown-none-elf-smode.a delete mode 100644 riscv-rt/bin/riscv64ifd-unknown-none-elf.a delete mode 100644 riscv-rt/bin/riscv64ifdc-unknown-none-elf-smode.a delete mode 100644 riscv-rt/bin/riscv64ifdc-unknown-none-elf.a delete mode 100644 riscv-rt/bin/riscv64im-unknown-none-elf-smode.a delete mode 100644 riscv-rt/bin/riscv64im-unknown-none-elf.a delete mode 100644 riscv-rt/bin/riscv64imc-unknown-none-elf-smode.a delete mode 100644 riscv-rt/bin/riscv64imc-unknown-none-elf.a delete mode 100644 riscv-rt/bin/riscv64imf-unknown-none-elf-smode.a delete mode 100644 riscv-rt/bin/riscv64imf-unknown-none-elf.a delete mode 100644 riscv-rt/bin/riscv64imfc-unknown-none-elf-smode.a delete mode 100644 riscv-rt/bin/riscv64imfc-unknown-none-elf.a delete mode 100644 riscv-rt/bin/riscv64imfd-unknown-none-elf-smode.a delete mode 100644 riscv-rt/bin/riscv64imfd-unknown-none-elf.a delete mode 100644 riscv-rt/bin/riscv64imfdc-unknown-none-elf-smode.a delete mode 100644 riscv-rt/bin/riscv64imfdc-unknown-none-elf.a create mode 100644 riscv-rt/examples/device.x create mode 100644 riscv-rt/src/asm.rs diff --git a/riscv-rt/asm.S b/riscv-rt/asm/original_asm.S similarity index 100% rename from riscv-rt/asm.S rename to riscv-rt/asm/original_asm.S diff --git a/riscv-rt/asm/riscv32i-unknown-none-elf-m.s b/riscv-rt/asm/riscv32i-unknown-none-elf-m.s new file mode 100644 index 00000000..f501993c --- /dev/null +++ b/riscv-rt/asm/riscv32i-unknown-none-elf-m.s @@ -0,0 +1,123 @@ + .text + .attribute 4, 16 + .attribute 5, "rv32i2p0" + .file "zk0t2u2b1an050m" + + .section .init,"ax",@progbits + .globl _start + +_start: + + lui ra, %hi(_abs_start) + jalr zero, %lo(_abs_start)(ra) + +_abs_start: + .cfi_startproc + .cfi_undefined ra + csrwi mie, 0 + csrwi mip, 0 + li ra, 0 + li sp, 0 + li gp, 0 + li tp, 0 + li t0, 0 + li t1, 0 + li t2, 0 + li s0, 0 + li s1, 0 + li a3, 0 + li a4, 0 + li a5, 0 + li a6, 0 + li a7, 0 + li s2, 0 + li s3, 0 + li s4, 0 + li s5, 0 + li s6, 0 + li s7, 0 + li s8, 0 + li s9, 0 + li s10, 0 + li s11, 0 + li t3, 0 + li t4, 0 + li t5, 0 + li t6, 0 + + .option push + + .option norelax + +.Lpcrel_hi0: + auipc gp, %pcrel_hi(__global_pointer$) + addi gp, gp, %pcrel_lo(.Lpcrel_hi0) + .option pop + + csrr t2, mhartid + lui t0, %hi(_max_hart_id) + addi t0, t0, %lo(_max_hart_id) + bltu t0, t2, abort + +.Lpcrel_hi1: + auipc sp, %pcrel_hi(_stack_start) + addi sp, sp, %pcrel_lo(.Lpcrel_hi1) + lui t0, %hi(_hart_stack_size) + addi t0, t0, %lo(_hart_stack_size) + beqz t2, .Ltmp0 + mv t1, t2 + mv t3, t0 +.Ltmp1: + add t0, t0, t3 + addi t1, t1, -1 + bnez t1, .Ltmp1 +.Ltmp0: + sub sp, sp, t0 + add s0, sp, zero + j _start_rust + + .cfi_endproc + .section .trap,"ax",@progbits + .globl default_start_trap +default_start_trap: + addi sp, sp, -64 + sw ra, 0(sp) + sw t0, 4(sp) + sw t1, 8(sp) + sw t2, 12(sp) + sw t3, 16(sp) + sw t4, 20(sp) + sw t5, 24(sp) + sw t6, 28(sp) + sw a0, 32(sp) + sw a1, 36(sp) + sw a2, 40(sp) + sw a3, 44(sp) + sw a4, 48(sp) + sw a5, 52(sp) + sw a6, 56(sp) + sw a7, 60(sp) + mv a0, sp + jal _start_trap_rust + lw ra, 0(sp) + lw t0, 4(sp) + lw t1, 8(sp) + lw t2, 12(sp) + lw t3, 16(sp) + lw t4, 20(sp) + lw t5, 24(sp) + lw t6, 28(sp) + lw a0, 32(sp) + lw a1, 36(sp) + lw a2, 40(sp) + lw a3, 44(sp) + lw a4, 48(sp) + lw a5, 52(sp) + lw a6, 56(sp) + lw a7, 60(sp) + addi sp, sp, 64 + mret + .section .text.abort,"ax",@progbits + .globl abort +abort: + j abort diff --git a/riscv-rt/asm/riscv32i-unknown-none-elf-s.s b/riscv-rt/asm/riscv32i-unknown-none-elf-s.s new file mode 100644 index 00000000..52b84f70 --- /dev/null +++ b/riscv-rt/asm/riscv32i-unknown-none-elf-s.s @@ -0,0 +1,123 @@ + .text + .attribute 4, 16 + .attribute 5, "rv32i2p0" + .file "eaqpawb8fun9h0d" + + .section .init,"ax",@progbits + .globl _start + +_start: + + lui ra, %hi(_abs_start) + jalr zero, %lo(_abs_start)(ra) + +_abs_start: + .cfi_startproc + .cfi_undefined ra + csrwi sie, 0 + csrwi sip, 0 + li ra, 0 + li sp, 0 + li gp, 0 + li tp, 0 + li t0, 0 + li t1, 0 + li t2, 0 + li s0, 0 + li s1, 0 + li a3, 0 + li a4, 0 + li a5, 0 + li a6, 0 + li a7, 0 + li s2, 0 + li s3, 0 + li s4, 0 + li s5, 0 + li s6, 0 + li s7, 0 + li s8, 0 + li s9, 0 + li s10, 0 + li s11, 0 + li t3, 0 + li t4, 0 + li t5, 0 + li t6, 0 + + .option push + + .option norelax + +.Lpcrel_hi0: + auipc gp, %pcrel_hi(__global_pointer$) + addi gp, gp, %pcrel_lo(.Lpcrel_hi0) + .option pop + + mv t2, a0 + lui t0, %hi(_max_hart_id) + addi t0, t0, %lo(_max_hart_id) + bltu t0, t2, abort + +.Lpcrel_hi1: + auipc sp, %pcrel_hi(_stack_start) + addi sp, sp, %pcrel_lo(.Lpcrel_hi1) + lui t0, %hi(_hart_stack_size) + addi t0, t0, %lo(_hart_stack_size) + beqz t2, .Ltmp0 + mv t1, t2 + mv t3, t0 +.Ltmp1: + add t0, t0, t3 + addi t1, t1, -1 + bnez t1, .Ltmp1 +.Ltmp0: + sub sp, sp, t0 + add s0, sp, zero + j _start_rust + + .cfi_endproc + .section .trap,"ax",@progbits + .globl default_start_trap +default_start_trap: + addi sp, sp, -64 + sw ra, 0(sp) + sw t0, 4(sp) + sw t1, 8(sp) + sw t2, 12(sp) + sw t3, 16(sp) + sw t4, 20(sp) + sw t5, 24(sp) + sw t6, 28(sp) + sw a0, 32(sp) + sw a1, 36(sp) + sw a2, 40(sp) + sw a3, 44(sp) + sw a4, 48(sp) + sw a5, 52(sp) + sw a6, 56(sp) + sw a7, 60(sp) + mv a0, sp + jal _start_trap_rust + lw ra, 0(sp) + lw t0, 4(sp) + lw t1, 8(sp) + lw t2, 12(sp) + lw t3, 16(sp) + lw t4, 20(sp) + lw t5, 24(sp) + lw t6, 28(sp) + lw a0, 32(sp) + lw a1, 36(sp) + lw a2, 40(sp) + lw a3, 44(sp) + lw a4, 48(sp) + lw a5, 52(sp) + lw a6, 56(sp) + lw a7, 60(sp) + addi sp, sp, 64 + sret + .section .text.abort,"ax",@progbits + .globl abort +abort: + j abort diff --git a/riscv-rt/asm/riscv32imac-unknown-none-elf-m.s b/riscv-rt/asm/riscv32imac-unknown-none-elf-m.s new file mode 100644 index 00000000..eee62b9f --- /dev/null +++ b/riscv-rt/asm/riscv32imac-unknown-none-elf-m.s @@ -0,0 +1,116 @@ + .text + .attribute 4, 16 + .attribute 5, "rv32i2p0_m2p0_a2p0_c2p0" + .file "3wdx7lxc78dgym21" + + .section .init,"ax",@progbits + .globl _start + +_start: + + lui ra, %hi(_abs_start) + jalr zero, %lo(_abs_start)(ra) + +_abs_start: + .cfi_startproc + .cfi_undefined ra + csrwi mie, 0 + csrwi mip, 0 + li ra, 0 + li sp, 0 + li gp, 0 + li tp, 0 + li t0, 0 + li t1, 0 + li t2, 0 + li s0, 0 + li s1, 0 + li a3, 0 + li a4, 0 + li a5, 0 + li a6, 0 + li a7, 0 + li s2, 0 + li s3, 0 + li s4, 0 + li s5, 0 + li s6, 0 + li s7, 0 + li s8, 0 + li s9, 0 + li s10, 0 + li s11, 0 + li t3, 0 + li t4, 0 + li t5, 0 + li t6, 0 + + .option push + + .option norelax + +.Lpcrel_hi0: + auipc gp, %pcrel_hi(__global_pointer$) + addi gp, gp, %pcrel_lo(.Lpcrel_hi0) + .option pop + + csrr t2, mhartid + lui t0, %hi(_max_hart_id) + addi t0, t0, %lo(_max_hart_id) + bltu t0, t2, abort + +.Lpcrel_hi1: + auipc sp, %pcrel_hi(_stack_start) + addi sp, sp, %pcrel_lo(.Lpcrel_hi1) + lui t0, %hi(_hart_stack_size) + addi t0, t0, %lo(_hart_stack_size) + mul t0, t2, t0 + sub sp, sp, t0 + mv s0, sp + j _start_rust + + .cfi_endproc + .section .trap,"ax",@progbits + .globl default_start_trap +default_start_trap: + addi sp, sp, -64 + sw ra, 0(sp) + sw t0, 4(sp) + sw t1, 8(sp) + sw t2, 12(sp) + sw t3, 16(sp) + sw t4, 20(sp) + sw t5, 24(sp) + sw t6, 28(sp) + sw a0, 32(sp) + sw a1, 36(sp) + sw a2, 40(sp) + sw a3, 44(sp) + sw a4, 48(sp) + sw a5, 52(sp) + sw a6, 56(sp) + sw a7, 60(sp) + mv a0, sp + jal _start_trap_rust + lw ra, 0(sp) + lw t0, 4(sp) + lw t1, 8(sp) + lw t2, 12(sp) + lw t3, 16(sp) + lw t4, 20(sp) + lw t5, 24(sp) + lw t6, 28(sp) + lw a0, 32(sp) + lw a1, 36(sp) + lw a2, 40(sp) + lw a3, 44(sp) + lw a4, 48(sp) + lw a5, 52(sp) + lw a6, 56(sp) + lw a7, 60(sp) + addi sp, sp, 64 + mret + .section .text.abort,"ax",@progbits + .globl abort +abort: + j abort diff --git a/riscv-rt/asm/riscv32imac-unknown-none-elf-s.s b/riscv-rt/asm/riscv32imac-unknown-none-elf-s.s new file mode 100644 index 00000000..32d504a9 --- /dev/null +++ b/riscv-rt/asm/riscv32imac-unknown-none-elf-s.s @@ -0,0 +1,116 @@ + .text + .attribute 4, 16 + .attribute 5, "rv32i2p0_m2p0_a2p0_c2p0" + .file "2mpkjzuft8hmeuib" + + .section .init,"ax",@progbits + .globl _start + +_start: + + lui ra, %hi(_abs_start) + jalr zero, %lo(_abs_start)(ra) + +_abs_start: + .cfi_startproc + .cfi_undefined ra + csrwi sie, 0 + csrwi sip, 0 + li ra, 0 + li sp, 0 + li gp, 0 + li tp, 0 + li t0, 0 + li t1, 0 + li t2, 0 + li s0, 0 + li s1, 0 + li a3, 0 + li a4, 0 + li a5, 0 + li a6, 0 + li a7, 0 + li s2, 0 + li s3, 0 + li s4, 0 + li s5, 0 + li s6, 0 + li s7, 0 + li s8, 0 + li s9, 0 + li s10, 0 + li s11, 0 + li t3, 0 + li t4, 0 + li t5, 0 + li t6, 0 + + .option push + + .option norelax + +.Lpcrel_hi0: + auipc gp, %pcrel_hi(__global_pointer$) + addi gp, gp, %pcrel_lo(.Lpcrel_hi0) + .option pop + + mv t2, a0 + lui t0, %hi(_max_hart_id) + addi t0, t0, %lo(_max_hart_id) + bltu t0, t2, abort + +.Lpcrel_hi1: + auipc sp, %pcrel_hi(_stack_start) + addi sp, sp, %pcrel_lo(.Lpcrel_hi1) + lui t0, %hi(_hart_stack_size) + addi t0, t0, %lo(_hart_stack_size) + mul t0, t2, t0 + sub sp, sp, t0 + mv s0, sp + j _start_rust + + .cfi_endproc + .section .trap,"ax",@progbits + .globl default_start_trap +default_start_trap: + addi sp, sp, -64 + sw ra, 0(sp) + sw t0, 4(sp) + sw t1, 8(sp) + sw t2, 12(sp) + sw t3, 16(sp) + sw t4, 20(sp) + sw t5, 24(sp) + sw t6, 28(sp) + sw a0, 32(sp) + sw a1, 36(sp) + sw a2, 40(sp) + sw a3, 44(sp) + sw a4, 48(sp) + sw a5, 52(sp) + sw a6, 56(sp) + sw a7, 60(sp) + mv a0, sp + jal _start_trap_rust + lw ra, 0(sp) + lw t0, 4(sp) + lw t1, 8(sp) + lw t2, 12(sp) + lw t3, 16(sp) + lw t4, 20(sp) + lw t5, 24(sp) + lw t6, 28(sp) + lw a0, 32(sp) + lw a1, 36(sp) + lw a2, 40(sp) + lw a3, 44(sp) + lw a4, 48(sp) + lw a5, 52(sp) + lw a6, 56(sp) + lw a7, 60(sp) + addi sp, sp, 64 + sret + .section .text.abort,"ax",@progbits + .globl abort +abort: + j abort diff --git a/riscv-rt/asm/riscv64imac-unknown-none-elf-m.s b/riscv-rt/asm/riscv64imac-unknown-none-elf-m.s new file mode 100644 index 00000000..3d57d129 --- /dev/null +++ b/riscv-rt/asm/riscv64imac-unknown-none-elf-m.s @@ -0,0 +1,126 @@ + .text + .attribute 4, 16 + .attribute 5, "rv64i2p0_m2p0_a2p0_c2p0" + .file "1ruuache5c4x1fns" + + .section .init,"ax",@progbits + .globl _start + +_start: + + .option push + + .option norelax +.Ltmp0: + auipc ra, %pcrel_hi(.Ltmp1) + ld ra, %pcrel_lo(.Ltmp0)(ra) + ret + .p2align 3 +.Ltmp1: + .quad _abs_start + .option pop + + +_abs_start: + .cfi_startproc + .cfi_undefined ra + csrwi mie, 0 + csrwi mip, 0 + li ra, 0 + li sp, 0 + li gp, 0 + li tp, 0 + li t0, 0 + li t1, 0 + li t2, 0 + li s0, 0 + li s1, 0 + li a3, 0 + li a4, 0 + li a5, 0 + li a6, 0 + li a7, 0 + li s2, 0 + li s3, 0 + li s4, 0 + li s5, 0 + li s6, 0 + li s7, 0 + li s8, 0 + li s9, 0 + li s10, 0 + li s11, 0 + li t3, 0 + li t4, 0 + li t5, 0 + li t6, 0 + + .option push + + .option norelax + +.Lpcrel_hi0: + auipc gp, %pcrel_hi(__global_pointer$) + addi gp, gp, %pcrel_lo(.Lpcrel_hi0) + .option pop + + csrr t2, mhartid + lui t0, %hi(_max_hart_id) + addi t0, t0, %lo(_max_hart_id) + bltu t0, t2, abort + +.Lpcrel_hi1: + auipc sp, %pcrel_hi(_stack_start) + addi sp, sp, %pcrel_lo(.Lpcrel_hi1) + lui t0, %hi(_hart_stack_size) + addi t0, t0, %lo(_hart_stack_size) + mul t0, t2, t0 + sub sp, sp, t0 + mv s0, sp + j _start_rust + + .cfi_endproc + .section .trap,"ax",@progbits + .globl default_start_trap +default_start_trap: + addi sp, sp, -128 + sd ra, 0(sp) + sd t0, 8(sp) + sd t1, 16(sp) + sd t2, 24(sp) + sd t3, 32(sp) + sd t4, 40(sp) + sd t5, 48(sp) + sd t6, 56(sp) + sd a0, 64(sp) + sd a1, 72(sp) + sd a2, 80(sp) + sd a3, 88(sp) + sd a4, 96(sp) + sd a5, 104(sp) + sd a6, 112(sp) + sd a7, 120(sp) + mv a0, sp + jal _start_trap_rust + ld ra, 0(sp) + ld t0, 8(sp) + ld t1, 16(sp) + ld t2, 24(sp) + ld t3, 32(sp) + ld t4, 40(sp) + ld t5, 48(sp) + ld t6, 56(sp) + ld a0, 64(sp) + ld a1, 72(sp) + ld a2, 80(sp) + ld a3, 88(sp) + ld a4, 96(sp) + ld a5, 104(sp) + ld a6, 112(sp) + ld a7, 120(sp) + addi sp, sp, 128 + mret + .section .text.abort,"ax",@progbits + .globl abort +abort: + j abort diff --git a/riscv-rt/asm/riscv64imac-unknown-none-elf-s.s b/riscv-rt/asm/riscv64imac-unknown-none-elf-s.s new file mode 100644 index 00000000..5626f5d5 --- /dev/null +++ b/riscv-rt/asm/riscv64imac-unknown-none-elf-s.s @@ -0,0 +1,126 @@ + .text + .attribute 4, 16 + .attribute 5, "rv64i2p0_m2p0_a2p0_c2p0" + .file "5194e8m2dkkkh98p" + + .section .init,"ax",@progbits + .globl _start + +_start: + + .option push + + .option norelax +.Ltmp0: + auipc ra, %pcrel_hi(.Ltmp1) + ld ra, %pcrel_lo(.Ltmp0)(ra) + ret + .p2align 3 +.Ltmp1: + .quad _abs_start + .option pop + + +_abs_start: + .cfi_startproc + .cfi_undefined ra + csrwi sie, 0 + csrwi sip, 0 + li ra, 0 + li sp, 0 + li gp, 0 + li tp, 0 + li t0, 0 + li t1, 0 + li t2, 0 + li s0, 0 + li s1, 0 + li a3, 0 + li a4, 0 + li a5, 0 + li a6, 0 + li a7, 0 + li s2, 0 + li s3, 0 + li s4, 0 + li s5, 0 + li s6, 0 + li s7, 0 + li s8, 0 + li s9, 0 + li s10, 0 + li s11, 0 + li t3, 0 + li t4, 0 + li t5, 0 + li t6, 0 + + .option push + + .option norelax + +.Lpcrel_hi0: + auipc gp, %pcrel_hi(__global_pointer$) + addi gp, gp, %pcrel_lo(.Lpcrel_hi0) + .option pop + + mv t2, a0 + lui t0, %hi(_max_hart_id) + addi t0, t0, %lo(_max_hart_id) + bltu t0, t2, abort + +.Lpcrel_hi1: + auipc sp, %pcrel_hi(_stack_start) + addi sp, sp, %pcrel_lo(.Lpcrel_hi1) + lui t0, %hi(_hart_stack_size) + addi t0, t0, %lo(_hart_stack_size) + mul t0, t2, t0 + sub sp, sp, t0 + mv s0, sp + j _start_rust + + .cfi_endproc + .section .trap,"ax",@progbits + .globl default_start_trap +default_start_trap: + addi sp, sp, -128 + sd ra, 0(sp) + sd t0, 8(sp) + sd t1, 16(sp) + sd t2, 24(sp) + sd t3, 32(sp) + sd t4, 40(sp) + sd t5, 48(sp) + sd t6, 56(sp) + sd a0, 64(sp) + sd a1, 72(sp) + sd a2, 80(sp) + sd a3, 88(sp) + sd a4, 96(sp) + sd a5, 104(sp) + sd a6, 112(sp) + sd a7, 120(sp) + mv a0, sp + jal _start_trap_rust + ld ra, 0(sp) + ld t0, 8(sp) + ld t1, 16(sp) + ld t2, 24(sp) + ld t3, 32(sp) + ld t4, 40(sp) + ld t5, 48(sp) + ld t6, 56(sp) + ld a0, 64(sp) + ld a1, 72(sp) + ld a2, 80(sp) + ld a3, 88(sp) + ld a4, 96(sp) + ld a5, 104(sp) + ld a6, 112(sp) + ld a7, 120(sp) + addi sp, sp, 128 + sret + .section .text.abort,"ax",@progbits + .globl abort +abort: + j abort diff --git a/riscv-rt/assemble.ps1 b/riscv-rt/assemble.ps1 deleted file mode 100644 index c5e67f67..00000000 --- a/riscv-rt/assemble.ps1 +++ /dev/null @@ -1,27 +0,0 @@ -New-Item -Force -Name bin -Type Directory - -# remove existing blobs because otherwise this will append object files to the old blobs -Remove-Item -Force bin/*.a - -$crate = "riscv-rt" - -$extension_sets = @("i", "im", "ic", "imc", "if", "ifc", "imf", "imfc", "ifd", "ifdc", "imfd", "imfdc") - -$pwd = Get-Location - -foreach ($ext in $extension_sets) -{ - $abi = "" - if ($ext.contains("d")) - {$abi = "d"} - elseif ($ext.contains("f")) - {$abi = "f"} - - riscv64-unknown-elf-gcc -ggdb3 -fdebug-prefix-map=$pwd=/riscv-rt -c "-mabi=ilp32$abi" "-march=rv32$ext" asm.S -o bin/$crate.o - riscv64-unknown-elf-ar crs bin/riscv32$ext-unknown-none-elf.a bin/$crate.o - - riscv64-unknown-elf-gcc -ggdb3 -fdebug-prefix-map=$pwd=/riscv-rt -c "-mabi=lp64$abi" "-march=rv64$ext" asm.S -o bin/$crate.o - riscv64-unknown-elf-ar crs bin/riscv64$ext-unknown-none-elf.a bin/$crate.o -} - -Remove-Item bin/$crate.o diff --git a/riscv-rt/assemble.sh b/riscv-rt/assemble.sh deleted file mode 100755 index 296a6dd6..00000000 --- a/riscv-rt/assemble.sh +++ /dev/null @@ -1,44 +0,0 @@ -#!/bin/bash - -set -euxo pipefail - -crate=riscv-rt - -# remove existing blobs because otherwise this will append object files to the old blobs -rm -f bin/*.a - -exts=('i' 'ic' 'im' 'imc' 'if' 'ifc' 'imf' 'imfc' 'ifd' 'ifdc' 'imfd' 'imfdc') - -for ext in ${exts[@]} -do - case $ext in - - *'d'*) - abi='d' - ;; - - *'f'*) - abi='f' - ;; - - *) - abi='' - ;; - esac - - riscv64-unknown-elf-gcc -ggdb3 -fdebug-prefix-map=$(pwd)=/riscv-rt -c -mabi=ilp32${abi} -march=rv32${ext} asm.S -o bin/$crate.o - riscv64-unknown-elf-ar crs bin/riscv32${ext}-unknown-none-elf.a bin/$crate.o - - riscv64-unknown-elf-gcc -ggdb3 -fdebug-prefix-map=$(pwd)=/riscv-rt -c -mabi=lp64${abi} -march=rv64${ext} asm.S -o bin/$crate.o - riscv64-unknown-elf-ar crs bin/riscv64${ext}-unknown-none-elf.a bin/$crate.o - - #s-mode - riscv64-unknown-elf-gcc -DSMODE -ggdb3 -fdebug-prefix-map=$(pwd)=/riscv-rt -c -mabi=ilp32${abi} -march=rv32${ext} asm.S -o bin/$crate.o - riscv64-unknown-elf-ar crs bin/riscv32${ext}-unknown-none-elf-smode.a bin/$crate.o - - riscv64-unknown-elf-gcc -DSMODE -ggdb3 -fdebug-prefix-map=$(pwd)=/riscv-rt -c -mabi=lp64${abi} -march=rv64${ext} asm.S -o bin/$crate.o - riscv64-unknown-elf-ar crs bin/riscv64${ext}-unknown-none-elf-smode.a bin/$crate.o - -done - -rm bin/$crate.o diff --git a/riscv-rt/bin/riscv32i-unknown-none-elf-smode.a b/riscv-rt/bin/riscv32i-unknown-none-elf-smode.a deleted file mode 100644 index 40260c7fc3d68672f89ecec834fe1b7440fde578..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7732 zcmb`MZ){a(9mk(@PbnQMUCTu%lx>%D%hQ70ZA+oRh8sl~DBT7F98>1)EiJTLq228T z8Ir8fsl?zy0?E*jFwN8@^1}Hi5HroHyil`5_QJiioe@Xr<&6P*#i-}C!D_ntmQ zCC(>#&hzrnN@3D zzHg2(CPXi}o*yq2iX~I%AH{ZHaDUqLP1v&?0#cQR%6y;n4&?_B)rLLLLor|h2&O?ndj#gzH($sY&l@W##G zE(!nH73|p1RTW^L{0-#)k(X4YHZ9rn1p% zsciF9Dr?_LWm~VOvMb(AW!r)C|Z**+D7%YxM8vYu3EPoyU8R4Qx$PPR^kIF_n$lc^uYXWEN%3(XQx z5WHVE7u)y;g)7$-L?&%3npYrr+PoMGhIZt2k^ediz)zgghI5cX)c0r`LLVy{9*LdXuNOdb-!s+daL@(|bI<*VBET9`N*#r$;NH;+^KpiUx0qk{v~}soYqCjwvhydv z3r}E!_5yn2XJRzGCl{Zru*;u;)ucYz`Mf3;vH%*{`7eVT^?^Zl{wv_cpTh=??EF{3 zP3n`Ke;(X0i4EE%^!n#wG;ffP3BQS<;q$`0P8v=LbL;k94i5B&c#>~l_e*9YzA6TN z!dx@LyDb~pYJMF!;@599venE(;D~SfXk@FI&EQDCvy!c5w$ZP}290brvjZIA9hr@6 zHS+{G(p!^kHS-jGy`{)jGyCZC;zuJ}%?yJh-mqw7tC>-7q_-Z~YUVKgG&X2ttC`P& zBfT}rRx`Yeq7Pw%Mz)&y0ytVg*BG+Z%$L9s9~fw4tC_RlsF5!I9)NB&^JQ?fh^{eY ztC@@7Xfa)5$W}972S-hGjUijjdFZH8pbFVLeX#+a>Uen~$oKG|yKSM;03CtJ;2r@u^m zvenG*>09y1Rx^L1-y%NQYUT$0R`JPJGk>GMTzs6L zw~0@-nrWbapZH{}8U7t8%85_5nz@^PyZB_QnJoPd@yS**%jtKDPqvzAr@vBsvenFL z`d#9at!5seze;?v)l3il)#8(_X137p7N2Z2^9cPl;*+grcF-?~PqvyFp#OmQWUJ4v zr|GX3pKLWVM*kz?ldWcs(0@>TvenFS`VWauwwgIfe}njBtC>^ud&DPO&Ado|qxfX2 znRE0%Dn8k2<}36!iBGngd71uZ@yS**-=P1n_++b@OZ2yhPqv!*4t@SYKqFhtT%rFl z@yS**KcfF}@yS**SLtsPpKLYrbNapFldWd1(SJmIvenGn^dA+UY&G+1`j3fEwwn13 z{q5qDt!Dl}e~0*FtC>I3e_VXB)y#YJcZyH8n)y5ZUE-6iX87lmXt(%etC?#0pAesH zHB(Ff3GvBRGxO;05ua=|(@6hG@yS**_t5{O_++b@X8NBJpKLX=g8p9d$yPHR^q&%+ zY&FwO|I^}=t!D10-!DGdYGxb#ed3dCpKvvX;IMEl`G{~mc|dqRxhTwESHZaO5^_m6 zuJep=yzhuG_st%xaEtnJokQZYPIk1yE$U}r1!LkjW5_;R;TH94m>Cp5KK}i}@i80_ zj*ovxI9_*HI6nTTg)lv2c*}`OleLp;Rgk_a81{_uFqxh~n158-%n~I=Z1s zVJSxDLe+kbb8P&T%#ZfJ<@l@2U-ue3*Id0e7(9jzI#E@J`j}j(KIeFitVd7QtAaQO z&ox(%zp|3`YVVT$S&yHAtH(!ivfgoucZFADMa=I9*HmzTTS2Wb9?4?H4hb8`dG$$Dcbv=tufv5q@FJ}%roKvRc_ zc?4~4?i93RPGykm&|&$Pu)$4qF3yGIs%m L-i~Kv<8uE3$TSe% diff --git a/riscv-rt/bin/riscv32i-unknown-none-elf.a b/riscv-rt/bin/riscv32i-unknown-none-elf.a deleted file mode 100644 index bbf60ba6cd7246091644547cc66d722346da9496..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7732 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 Q=*ir96nZ_Lk%Pi_@% diff --git a/riscv-rt/bin/riscv32ic-unknown-none-elf-smode.a b/riscv-rt/bin/riscv32ic-unknown-none-elf-smode.a deleted file mode 100644 index 8e74f5eec9760c26f65a9e560755dcc1d4de3f41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7600 zcmcIpYit}>6~5zjoYYNRI|)u|x9Mi=o;*l4e#Ln-B=+W=ICdW7(L%f4wVh;B$9C6i zlZMh{69`cxqAIOa;13ZJAVL2S2?ZfuDiJCbf+~UtL4^eTpg(v-X(U7ul=ICwcklQ* zh=__K&7JT2&Nt`Y8PA#7T`%5{EessrSiLGaHCj76+uJ+WwRf&bCR?IZd`u=g)>?mm zwJ|2aThVTr@nW`6G}+uJkAp);vlGKb(K5wCcFYv=;{%f`3&qr^%o?AowWWn8DvzC= z9m(XHjy4_<{ncl-_G}A+fTxlO%)7=hV{R`r5$}l7OHG4$*j#6P?5r{4d%J3Rn_ub* zx=YcxvEA_p~ z6TMst%-7FfuV8ep!VKIkn9<`lm1cZ24QMn{B`7ytV#U8-JaCd)sf@X9VW2w}0@@ zb6r=`;pS_b)4ex)bA5OEDh^&b7#_NID1G?m;oOlsM;2$tO|mw)+QX|!m`C_5gWw-E zb9js{5U(jP+3}O91JSiGGuXz)h9D6!=l{JSn)p{bw8E=lczG8u__t` z$DN63>zVGEzGgW}#wg2G_!`>lbtwoE(+`SI`@wO%ejI=B%F`=I{b-zeqTdZ*<}+W! zV|1?=zGd$b!P%hB)K(p=O4KygJYF+z276YxWA1UpbV=^ZRrXO}w)Y-Pb{|N#rP^1g zTG{?S$MmD7EAv%KoZfGO7lNR1PQ^?tx|TO|L_E4fX3>l$;KziSQJ8FR%eRfSWCnOJ zvx4denGu^pM<-967Kp*c$arRX^*>p62I#w;jW*A@A8iCiSaUIkTA2n z`%8HIe#E`u`cvw=`_Dgqu2)Zs6{@MTc`CM;c=DKJ;*I&Y2 zf7Hd7$Ln*QghawrN5{Lrmt3D*`KU^s!I*O~zJPK3`BP3YNSKG>l(|2@>r@yM#&xRj zdgIoD&k&X7(O5;C*D8;@dl~*&Chg_>Jl^l|;VHbzoSDLzWU{$&{X&)MX-S$?Pg_MR zkF7jrGRKBTbJ^j{*l2#FI8H3pc}^9{zKzQln^J>P_`4-{Zh z&voefk_RUBd=L6#Ja7P$dVa(>O!B}1OzQaw<8U!lV}L0MWX#Wb3&RLTnAG!2=uM&n zlX`vwy;*c%QqS+8KQ1~jsppT-(GVQKq@F)B4wpbR2AI_IF5_@1RKvgCu&$oJGY*$Q zH3pc}^FHHnIaK~$$Q!ALehnT6ADi&nwV3iw;cc`6Bc!q63q9u0r1`Ixwl{ ztI)TJ4ovEK4f=M`fk{2rpyNfy0Zi)oHuRmM1Cx5b4}F*Dz@(lV(07XtOzL?PdXMP9 zq@K5+?-3oC)N>1Zujs&}p0}a*i4IKa`91W#q63q9-hsYPbYN1?U!d<79hlT}7y1Fw zfk{2@LI0@ez@#4hd=efM9hlTp1^tldz@(np&<~3aOzN2n{fOwmq@IP)pA;RK)Uycs zQ=$WtdYYksOmtvU&vNJ=7af??(*pfz(Sb=lozR~V9hlU!9(qo6U{cR+=mVkyQ@`LU z-USnaX9G_Pt_2X9Y*c4hzPyO(z{*qIy(kM0C_?8g+Py z>PeP@G0~fO*YupjOH`i)&yeWR`i}~Z)^JR4wEp9Qqj~d!qxGKg;lulG9hy}a45_3+Ay*SlCF$D<}F_Dl~_Go2V3t5W4i{1Wv4S>-M_jz#Rj${=g|NPA&Eb4;yW3+J znnAwcA%KR>4Kk0{`%}G%zN?}h>e%(+abb^PXfANQxd0kAcagcpNPV7tE$YDz=ZrYd zTYTOQp70cFnD-&gVg6TnLp@vL4X(F{xees7eNFdPe}{cbE#bYL_sfjq^S;It?qCh` z;(YA+eupvY+CM=pCsr`G0UzR9yv6I?T15ARgd7*DJ?up5&!6bM@+2i~AOGp diff --git a/riscv-rt/bin/riscv32ic-unknown-none-elf.a b/riscv-rt/bin/riscv32ic-unknown-none-elf.a deleted file mode 100644 index 5418605e17563ffc181dbc67029f2ed178cc0557..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7608 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 Oc=6l?6ngtMxqktVp%SqG diff --git a/riscv-rt/bin/riscv32if-unknown-none-elf.a b/riscv-rt/bin/riscv32if-unknown-none-elf.a deleted file mode 100644 index a966014159fa73c391c0f20adf95340604461e94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7736 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 O@RGUnDD>_va{mRmJrutH diff --git a/riscv-rt/bin/riscv32ifc-unknown-none-elf-smode.a b/riscv-rt/bin/riscv32ifc-unknown-none-elf-smode.a deleted file mode 100644 index b671efb16879d13fa77bc0becd95ba0498973d08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7604 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 diff --git a/riscv-rt/bin/riscv32ifc-unknown-none-elf.a b/riscv-rt/bin/riscv32ifc-unknown-none-elf.a deleted file mode 100644 index 1d78a2d23f619331a3eb5ea2294a1b9772f2d39a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7612 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 AJpcdz diff --git a/riscv-rt/bin/riscv32ifd-unknown-none-elf-smode.a b/riscv-rt/bin/riscv32ifd-unknown-none-elf-smode.a deleted file mode 100644 index 09b227acc2889518451bcfd86d8f31a15753e1d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7740 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 Uw7Giq(8=6c6nf8vFuL4-0HMMbn*aa+ diff --git a/riscv-rt/bin/riscv32ifdc-unknown-none-elf-smode.a b/riscv-rt/bin/riscv32ifdc-unknown-none-elf-smode.a deleted file mode 100644 index 9729b5adcb77478b99787577c4b3fe2637bbd905..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7612 zcmcIpYiwLc6`t#LoYYNRI|)u|x9;Y~J$aC9{7Bp+4T-&ZCyt#5d9=`OcKt{;b!>ON zHfab=)`1X35LIcV0)L2*015hsNGKKJr4pf1A*dpV5L8IO5BdkF(n>%nl=IzlX6Jew zL`21rX72ZW^UayL*Z17JyI!;*Tj)E!v3gZSXef)$JX2t+QLZw*^7KOGyOgZR40R?=3WD1`n-{hL@TKbHBOH_}DpP#`bpBa+_c3 z47y5PLAsO+k)+-?ZJ-Hj$mhLXRxcZE7)Dy9dwtvgFU4^K~JeC=q>fW z$O}DR3d}doU$0;^Sz-F#DVUMBHod!mN9OUa%KF8GX*yqj`Sz7h&HF=B;$Q8-zRvc_ zfW2q`y6)+!AJ)IpaHHwRg;ytDJN?sVf42Pf)XlbEblh71tBt=-zp?GN?K1-Nm$!cK z&&kd!>2UM4&FP+-J-Oc7y%h(q91IU#JCr_r^KkCS?IVk_VFziV?&S#?%|_1-u?J~d>1gQYs(T~isyy&@qzX{q{goh4+v*-{-Rk1zH3a*yLrC?WY$ zmTJBhkGFYT-U|?Aeup={*5m6vzQN-gJ>Kc@w8yu2e4EF2czmzN_j~-1#~=52&f_OM zKJ4*=$0s~~%HyX!e#Ya^dVJF37d(E+hR$l~+H)E6OI}uAYQfdE>60WE>x6 zB!s*A5?*76b$wTFGVbb4xT`neuHJ;ZdK2#IO}MK!;jZ3W4sI* zB+M-D{t_O)A8~KE`jq_c{`2S0_43K{$Is{XAo=|KZd~%m*K=do|Lp(!dagFGa$U5Z zt1scMKI-Dzms}D17R2|srPcp7M&mBjBTkSIuGJ4{^aoq*c3HYL5^ec7lGR8rb=#Sysm_Gc{6^xIHjy1!X4wL%VLC42&4q#HxCdOek zRAYciJzE)v`k@t=)UzA97Ai2QXCL%A+;IStdJZ!VwKRcAJx@T_k^(06^g-7m2PXC8 zp=-$jlX^y=Yv}=#dd8v8iII`umP$uz@(n9G7cM|8Usw~`6lB~U*f=|o^L_d z2MRE$=Q?zK$pe#mz6bpw?l^!+JwIX`Cb{DPCiVP;akvPoF~F1rGUn&p!Z3mnCiVOh z`eM<6Nj<-T-YhyWspogl9~K>$)bmH^CXq@H`BuMi!W)Kdq2rRcz<9{iFMrbGuO z^*jiDmFU2vp2g5xLs39hmglbppD+=zvK*qtHJheqd711oVxf z1Cx5rK;I-fFsWw}dZ*~Xq@Ih=yF>>j^<0LY79E(>^8)nEq63q9z65=X=)k0&tI)TK z4ovF#8uV?V1Cx4Qg1%jJU{cRD=y=g_0F!!NhQ3pDU{cTbq3;qMnACFv`fkyINjApk@*B!-FH7GaAh1a)p73DZ|-9cKFx;FC`A%$&_I`8m&HXJTq9x zorV0b0t(*8Fe zUSW#?aAlk8I!;&-V)Rz1(cre0XKW^Sw|b^N|nN zz~;lFIG%4V6MHRqC>p~t%`KkqYAheFgUxq@vE2hhGoQ)cSVB97M_fGLOPsHp6JdYV zI)?Mb?QZ8VH2r+RLjVms*3Uei?{D=c`mTz6$Yb}1$Az84&|Khra{)B$*hS_RW9SR) zYf%plIA_FpZt-Bi(#-w7Z@xJ*dwtKncfHFur}HD@TWZ$D=SEvsS4T(J#*VHH@pv*EiuUn%C+Qr+ zHA<-%wW4jQLNT2$s&rcFfzL~UrbE#s?oLDl1W;q+;??# z#^aB5c2bWRu6b#D{|>D+EybbL+sZMeDwioWkA^zK;gzaUEmM~WA3dd1VW>Mvt+Ujv zdrCdJx74e*mbU6`rER4hdS_{;?kn}_U8P-mcWJlYQ`)2ZOZ|FpX|EnA4d}tr;On%| zt0h{orTg!fDhQvhP$Tc;)ztMz-d###i)deE{cKD%pIP$Cjq@K{^vCAde>(KO?v6@L z-qb%fK4105k{>o+ZvJupC$n#!_}Pm;UwtKUwf&b}*Eaon%Wrz$+VQ)Nd0PGL`Vann zy8C=@u=V2B-hrzFnZX-_6$j5B3=Um9)O+~q;mna6N0z4xDxTCA`e`>Y^$>kdt^ZZK zfco$h(VnzQ7mg+Nhi600BO4hTbxhw+L$PIH&$u#zS-G3O;+|&RP3GHqc%Rkbx;L*L zyJ-zb{o7mJ(@p??=9P%XL0`U#LWGm-_@8%pS+p+ z@LExH$=)LLDP6DXst#7gYMW{wtzCqQ<5)unnQ5gv9{K8AXKx8==fJ^u&;EFOqGNrc zjb^?_amNHQxLA&{6Hh9AQtPG#758E5b<|K7(dfY@!xfbd2+qsTcC_c(r<18Mbff4- zs8iLt=7H$MTj1E7yAP_6KfSfa!ds(d7_SUxRF|bnHNT7jm{*oH=Dy$OE(iPZxjC3G zv{drj^JUjt;*B?WywT(CoN|6#F&xa}mdbiK&m277YN?DHkFWIjYLDYj$iev%mP)>) z$J;&5&j*M+zsnon;PFi!-|X=%9`E*eugAA}e22&TJU-;{10Fx(@uxjL>hTGWPkX%R z@#7vp;qj9mf6?QoJpOTypY{059zPf1Wk?{Vs=WGP?y8V^WqA_wDv!H*;&Hsxa4>iE z#k|%I%ldU5clE}8S8vQ+y)k$7#@y8#b60Q7UA-}nd+WP;<8fDC%w0V(clE^F)f4li zm*3SBkGpze?&^uTt0(5Jo|wCOV(#jRdAGN|t0x|J^~BuO6LVKj%y)bF`Xjsy3B**j zcYQIBUXQpohRTyTzq|hY`3t>#eE;$DmD9=f<>zV#-w#^O|tJ`+M>EiQd1EA$tEmj9QX5p$FS*bgzJ_L-vb%Zj%2VT4EFGuHhq$5743Uw8PeqXIqo# zz*fgKu~aSuV5^T4Za7XI1+dj|UK>9FRViSrPZMqu9oXu_gzL{xM^U6!_d*EODPVa3 zzD&6OldR(&TYr`@`n5856=5v}@f5z3$<42qidGN9$!iApIc&tgk)!}G|DLG&xo+;>3dca0JGtd`NM*(ca^HIWqlqRqd4=$tNebi9^8}WRKa3Bv^U?ZN- zK*tS(0@#S>Rl-37RQg^|&4}l-go9;Jl>#>6`2yiU9@4-@JYRy|L>&dN5zp5M2l5aH zHsbjPbh)7b8}VF%E)RKNBcAU;e}p;;U?ZL%5f0+iQ2-n9{FHF89I8^lCJv<3FQ^4U z2t#bd^DF2rtOFbI{1$pE>%c}lzlZ)P>%c}le}ayJpa3@F`3vD-1yrSgjdebCda0~_&-LVuifU?cagXQ9i34%moi8u|y= z4{XFU3te97fQ@)gLVtq&z(zc$p?9+mY{YXGdJpTsMm(=T?`0j>i03uvTUiG-;`to( zZL9+u@mzquopoR%o-ae+!8))J&)1>vWF6Ru=OXkz)`5+9z72gB>%c}l--o`Nbzmc& z%h30*4s68pCiH&RfsJ^sK;O$cuo2HS=mV?+8}YmaeUNovBc4A%A7UNYi09AH_puIa z#Pe6^PqGed#PbgH{j38U@w^ND0PDa;JoxuXaFBIiBc3Yghgb(T;+YTqFzdiZJPV=Y zWq|_Nh^GPiQ>+6U@iasKAnU+JJgv|_#5%AM&uZvTvkq*;lZ5^Z>%c}lUC=+wIT~fsJ_fKp$Zp*bFnSqJy4cJRf+LaUJj|LJzi9a(R4Ab5}86lCGy#cbRsvI zBQ=EKFBJmGo8VtFSQyP_W{##Na+6sxvyht{o1&cIU^IITE;Cc4>31JZWTn!gZ;%|FayrV=uL6zOP2|;XK%UM+nl699Jk`GjSUjL;H#xt$v++D=nd; zUH6NGqwBsw3-*zQbr;GQ*8L7ODsgt>q$gl)1|}1s4OE!oyq)u&+m6`PajZ; znNRYZ^Z9_p~c}%9X>z_sv^ZnBCTQcXxGlZ|&;dTqtxVL)m4auyIS8 zKQvE7LiB3dOB2;{r7GotF)Rm%j+9S~R@Ez2E9G&ij7%IpxwcX*j_It~xz=}fVxroz zyL)4yuzABqEZGjtdv1IGjvxpym9{|MlNlw_)2#l+WYsRqVj$Gn=XL54*Mn%T1U;OJb?gNe|^?!I~Z>}rY-P=_caQp_w{uvjV zB#w4V+*+2{JuPwj)gWH;RuFew3*zFtL0tG|E{_uJQOlxLi}G`l zOvlVtx7g-pORv3k=_5uSdSrj0Z*O5kv1?OtJ>nmr-MrP!&Jwf2XZJ{OItW@8=H_y@ z8_{{yXIozcmCPssA3t*{C%ZO`Y#8q>9m7Hzf_ZpI{D&6KdV=x3(({yV5+;w=RB^m6 z*#eIwYjuLhPo}BHW6YXrKkw_A8k*;^YEzw_6T$q<+M^bvdgi>SF6hR!@m5c_dzzoM zHr>86l~!M$=`?kGi#Oim>0VE7^Yl(n_j`Jmr}ugKfTs_7`jDpwJw5E{QBRM1y6Wju zo<8mANl%~i^z)v6!P6H!{gS6&@${>ne$CV0_w2^(AeQ zu~$#G_v_Wl+4b$$pBdNsbv2`*MuZTvEtute`18%K-;~UUpUl=&H>OgWYD5SHKaMjk zlzGYalQmEG_oa-kAs`g|sLr(TruvIBqs%Yy^it``IF0x|$?hTdJDxQz(m6{vNcSu) z@}Q^pdHT>ST`v=}G(@R9FkvrF#s1EMluAcO#|FxyrSY+mp#) zw3jPxaQG?POvlU_d3H$bovU(U;+C&rHq2MDQj*~=E!Ur2$=-D(OMcsmw3ts${Ymh$ zXR$!zz1LhxP}Fl#5ZL$va`%~aAZFZ$<8tl)3=+9>@2gJKHf3e$j&m4f+M@F$j&m4)3@7& z>@0JbJ}-1Mva`$xII^38>@34~zQ}GXva`$y`gttS$j&nSm?OLG$j&l6-O)#|KqEWL zdqmiY=eT1Hod>@0I095vI$`!u?<%-6xuU35jr&N3Il(Q>*XWM`RggQFI@ zB4lTo?}4KgbVbO{GOvT9yXlIMonyXD?)ab`58DWV1Y(4$j&m?z|ktYB4lToKY$}gSA^^= z^CxiBMpuOFEb|^XYNsps3k-bA{2d&vrYk~rmiYi2t)Yu|Fmz`b{Aog>k0rK{on_|J z?@*uYEYn1Pt@>nV8U7t5DymO*mbsh$I`zrUGBN#5^~ugMtLd*-pX@BNj{XMq$<8ue z^be{}c9z*e-@YWsZj)yE>2IE4XPG_px2R8cmN`IwtNLVTnJ4IfTz#^$%pm=H)h9d4 zJW0PteX_I6IQ>tkPj;3$N&i0e$<8vT>EEwD*;(cc{a*FS&NAod_o+{Imia3E2h=A! z%Uq!Up!#HInQzeFraswO=4JZZ)h9d4e24xH^~ugMuhD-Pj;4hhyG{OCp*jh zp8hWN$<8u=q`zBzva`&e>F-gW>@0JG{$BOT&NBa?Z$E0t&NBQ{MYLb@WM`Rr`kz&w z>@2f@{-f%Xon;o&KcGI@S*Dr(=hP=V%dDXPxcX#gnYHwvP@n7`Q?AD<7*}3EepT+|H!yQZ{bc{k%E>+qC@1@WSUH(@P&wKEA>{&ATUiV(nX7At+sv2Z#52dLKEaA@Gf(bDM1@gWPV zF>?IK7-}Yi<$;09(8*cDA zB0B4(H450sem26@F^+%Nm>yd%a_x%AGM)EZP}zC^mN{M?563v~8|bW?egwl9=zvZe zb8J6G&(`b30kp#7aqt<$G1hw%9j9U(tE64PK%5G!({q-clf##hD`4mO40{Hh^%~Ld bKu5h=`z^!NAn_V4KJ-&QE}BtzL{q0qNI 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 diff --git a/riscv-rt/bin/riscv32imc-unknown-none-elf.a b/riscv-rt/bin/riscv32imc-unknown-none-elf.a deleted file mode 100644 index 7c7806a0c792ceaf625f448fb3cfd7c9e7fcd403..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7296 zcmcIoTWnOv8J_Vj#xa**NWj=6S&qpVQdrhrV<4f#7cd5lxdm_)!m?{G_9nh%cZ~?8 z2}_Y0RcaoRNKyMzRH^Ml`%kEx^r_PkqWD#Wg^kB#rjXy zE2Uy|lWV|F50qm{U0tC<-Vs)>RZVK8xDRj}yY-&R9=*4+R}WMM^uEeIJy;pk`z!n3qK@9E zP>(HLf4@>g_(F{u{;;T~?mYI<3aVR1w{hCxJLayw!T<4jPH`{;PbF1(7>3LfH?aq(>eWC01o}l+~Z_nV3!QB4$ z_tzYG{YY^1^3k4SH;(0o-XB_>EvZCGUrN#lVrms#o7VqYyokzhT4)?vWlIyu!{H35 zd1NDFlaA>Js4BKHEE&fmn3a1eYwoMny=49*50A4h?00VOu{q;m&w^0r+E5`*vt(!F zi(1F#Ci|oz+@BuJAI0~V?Z3C;{NYs1zR-6x8q$?NN@chj6fMfTgg&nu)RNjGwXwy` ziyvRSY#w>myEb=eF<0W1x6y8KwQKN5qWf^7J(=E=Y$N-}6mwh6RUQ&4cJ`3c=d^BK zR5KrgUP1@fd^EaSiG@8X{RqK%#nb8bLi=bJZ?O`*5glj9P5jN`%79X{iQtK?s2})L*(|IUi}u2Kk4yp9^dZqE|2$k ze22&TJl^l|10H|I<3k=l?(q?ik9&OD<7JPZ@%TB9pZEC12(Ll{F;(lWcjj)_FppOo zF|YNwTmM{-mkAE$Za*+zY^$Yzw?DYv?GNT|e=v9ZgSp!u%-#NA?)C?Bw?CLCyz#jG z!S!xGFn8;pxm*9t-TG(l)<1K%{+YY=&)ltl=5GBnck7?ITmQ`6`e)wdU7uV3T<_LD zbGQDPyYTO;_fxZYopNiP-wS$Y)hqRk$4}1UwW>6W6Uk(ACHZ(s z4x|z)lNlYK%4Nqh(^G}Xa=y4mWhSy`GGp|0lPQeI2M!txzaY)HPL#sgypr#p;!NqT zpF&cN&!SA|!H}Bp;w6!mGiJY8bYQFF_gZn5P1s9~MaH=Hrq4QT{dm4Kiw(j<9X8_M3LUS!6u?G2PZJL00RwErvlF_!9ReHi?1e6y4A_Y0 zAoN94Pyie893vdawgNWdc@Da47hofvVdz-s6u?G21;T-B24EweDd@7TfQ@)&pf96> z0@#QLKXV}44%mnX(;Yla1qHAX&ld;>@_+<3;`tJE`mRO*8}YnBIFJV@uo2Ifp|7NZ z0@#S>tAqo2zycfbd>wi-6%@cmJl`T5tb(c(uo2I92nTr4rvNtMxk5OQ2Q;t|&kvwK zMg;}15zkKu2MH=DfQ@*5PB>T%RViST08;8#bOb>NLu|zJYv?Vk0~_)D4*D9_fsJ_n z2>o%^fsJ_n3>_PS0@#S>FNA|us7e7F@q9oySPNCrzaXTG=bwawbx@T8Hsbl1a3C)r zz(zdu$Abz!MFIt|5zhkX>sbdj;%R`sfpuUb9{dLq$O{ax5ziygH?kkth^Ga5igjQk zo^{aMSO+%Z*$BOzbzmc&H1y-F0~_)5L6?UFu-U|(0qC0@HsU!1eGBWrMm$5%x3Ugw z#B&0=yifrf@r*!!iv7SwJkLYl#yYSO&ouN;vkq*;a~k?~)`5+9&Ov{gbzmc&3(&h* z2R7n)6?!-8z(zc;LGNK5*ofy%=)J518}WPv`VQ8Cjd(6W-^n_#5zjZE_puIa#Pe0#>*4sbjKeYH7>DB@W*qiA!Z;j%o^gUsTak<+ z>?`eXtLQ3OdTFAZ&C$7BpNZus> z6VJj(J~uO(881xc#mqus^3)XN3@fv_Trq!oR&}YP2=QpXcOF)%pEO)A^4Rgs5VmaysuPrNDS(8ndzHAwsG25UN<28> znh~F;Bie6#xl(6HL%$D79r}NZ4&<{rE>S*tZ6uZJQ2$NA&=6P2x0Yd8+J3)AEZXlm z>bIXX^o#4U*ZY0K$ZLOs+mvrTaU1X&}Mwn7e({8VcbT(1Pvbdu$SmSz9n=#KnLZk#&Mdgi&f@+g9g%~zS}gun|Ja32mZzOqyPW_ diff --git a/riscv-rt/bin/riscv32imf-unknown-none-elf-smode.a b/riscv-rt/bin/riscv32imf-unknown-none-elf-smode.a deleted file mode 100644 index 837b09d8b4a710fac68043a03ea660bf3e32a39c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7424 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 LO<>2~xlQgr5RLu{ diff --git a/riscv-rt/bin/riscv32imf-unknown-none-elf.a b/riscv-rt/bin/riscv32imf-unknown-none-elf.a deleted file mode 100644 index af20afbd582b0f160a0385d4864873f5f7cacc74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7424 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 PYTzYv!&un+x5@nny3hb8 diff --git a/riscv-rt/bin/riscv32imfc-unknown-none-elf-smode.a b/riscv-rt/bin/riscv32imfc-unknown-none-elf-smode.a deleted file mode 100644 index f1e86383bec12df9512e0c01f02974ec2680e66c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7304 zcmcIoZH!b`89rxcS?Kc7U7!oyrF6KvJqrlKvIE;f5tdz8zLo_R7tpp0GrO}ebiXTiOa?gF9=Y8&b&b@Qa{g^d7vc=(ZJL@+k=f>u)u5`L;TH z^-8G(ZDqG*O66>^tg^XDYDe;;+3B$|YngH}JEe++((ug2VmUR*y~g|6+|fZDRokwv zEy?7=n>(eqGxg8z?eEiCQ&${Xy{9}=>a`U-m@PKFRyC{p)m6f0pHr%Iw7Y?}<&|!| zyRuvNRC;u8rC0B%?5XtWeU*KBe`UWuP&uFvRu1Yzl|#C}(ytF!4(ox+fId<=@(OkI zaz(3eK7X}_&}@wwe!r+DZ|(YE1!b1esGR=Y+2b{7eXKiOtC9cvwx{Y|ZTeaBwbj2U zzBcpv#W$Y$)%rJ6*E`?py0QK3oxkmQr|s`f(f|{{IVeecR4G(I07aL1(_2T00vQP0Bljeoi;4hPt7;#FCaJ4=q_X z&w4iaqwa9b?Gn$uO>T*+eFH%&lkO~ZPIY9)(Tt)QrbaE$^$X(%-T^1(+)c2?_?kIu!rtl} zL%!A?v7jo|szp@{z`VAqF%SJA_chp$^X6c_)KRJLu9xetDafx3cyqx0HRbx4EgZ~~ zj!J*H&K#U?b5!ys;A;cEKH&HXIk;ZRQK{Dv@Xmnq{T?D8-xcH^3HbJa?+EzLfOiMH zC*XSm-WTxw0Y4h>!GNC#_@@G%3;6kfPXxRe@R@*L4EQqvpN;VDXco(#ql z1>CO(_WSwI+|PgJe*QD}^Pjn&|IGdTXYS`eb3gx?`}xn@&wu8A{xk0m&Zj5fe*UxH z&wu8A{xd%q9N!<~RY)MA76kK)d3-)%Zus@Y_5J({k6#+p&N@^ zIgEeNN8X=b8|b;w_UG3ZbH6?s-&|+ zdA|~wHz_~&@O-bOGw^|Nw|Z)y{~dGq0_EpAzaR9@$t(4VfS;Me>r`nDCz8qLO7ant z>hDOZOy=y^WG*|FnVKw2l=HF=R_%7%q#i+DNdK} z_(>#bd>&=22SaM+S1>!ev~BTpQ>sODV5j5vS|K-atfiH5!yhEv{Ap?^fSvyY;TF+> zosQpm#b>CY0CxH);guz*N&!0^&z)v@SO7a6&z~02ft`MuaN{LvD3ES^) z>%c}le}MiF>%c}le};|)K>=*U^B2NVJ5;5Bjd%c}l_%|d(KjI2R7n) z6Z&D+fsJ@>Kp$Wo*ofyH=to!wHsbjs^rNf;8}ZzPevEZsBc8uPA7mZai06Ii$5{t9 z;`so&ywm_2@!+qDXo&s5Mm%-UPp}Sb#Ip$cN!Edlc$Pvx#X7JN&r0Z@WF6RuXBG4( zSO+%Z*$DkK>%itQ#&xvQQ;Zh@KgGBKIKvo^B0bJ{CGZ4e+~V~lV_RpGu|4)IV;tLh z&f|8`ZJh$^sMC7h<95-LB^7r=9dbvynnV>^Z%V>|v~#7VbJ=_xG_3DVYYe6ZS!@h^Mc)dTx>ft)LdRWSC3T#;K6hOk|UL@`? zQd8vX5D#`ZXT2f2FJ2vdnE z+Syo6iH(lX-d(eJpGfZ^Uy=rod)U*opxC-w^%_Zw`)<+rZrs85 EZ-$EZGynhq diff --git a/riscv-rt/bin/riscv32imfc-unknown-none-elf.a b/riscv-rt/bin/riscv32imfc-unknown-none-elf.a deleted file mode 100644 index 08443736149fbd781df5cd170dde215795a20762..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7304 zcmcIoTWnlM8J_Vvj_X_+Cv7fv+HQ{1aZ=*V+UvMU8&Y2q$4MMJmpUJj62EljeBbwf^Us{KGw1B?rrnvs=)|77?eT@t+R>3pb?i!Y?2N~gVJh0jk_r=bayMvx9J>3J>2eN}7 z3|0-jJQSR`a-#d>^^@7*4~92oiYlJemlHIDnA%9!ruDy8uAnx&Ei@0UGR3LH@$e3) zC1fLGgO2IDC>7ffwv4MIn3daUtL~`R?Nt6W56`nU9Cz{Pu|@M?&$3YGY^V^YyJYXk zm$i;9F7|0txHCOkKZ@_H+JEoG^}}1W@Irs2(UGqFerm(jplDIvBJ>4auU6Fz)x=gd zu6%IinkD4f=K9>C$6|?B-gdji)&7B@c-QfGTOze1(MtADC>HlxtlT3~?A$S>&uiVd zqG~B7y^0R3`Dk=ulHrI-2LzWC&ZOG%ZL`Vr6q<1~qtvKcUAHXS@fJ9?;Aw&##&^tG zW8tIDGUThn9<>#zS}m_&0Or*djk)jlxvRl`TsH^v)s{+qd%x^>YrXt>k2iSS-BYfQ zwZg$XZmEoi`^>@l&6Y~uczlb;AM!XpLJqE%uvF?LJ>KSVe%?dm{vBR^r^g@h_->Ey z@pz}lyFI?wT4_@xN1KmsvUz}z>|IFR`XYSTNbGQDPcY4?7 z)<5Un`e*LeKXbSKnIH7(^+$LG5{RiyrF^T?UT&2^eCug#m$@J_@e!7$^Y*y*1%-Qq={mMz_$K;0&I*dLe-8d&o{#;JU z@1Me4@s>Y{B#oa(>Cl5IHQ)=FL`u%M`;DRlTOFU*x^ry8URqyZjB9WByu;Ry_e-Pb zz*fiSyzUF^2e$eI;q^tON0Y?K>{1`d<8oFzD58W@w`GfkQXSh z5zkklZ=i+(*of!rgadiO0vqvs6M7>x6u?G2-ys}qgsK#<5zqGs2lqi$3fPF}D&at0 z(7;AKKZgDQH59-`JU=HK#HpbGHsbju;b0R~rGQNwNU2}b5d%is-#x-=(vy7JmKg)O(aGEh*MS6F?f#^D^YjKlelG7iTbV;s&u z$2d->T_{Eoj+Jt_S#*^sJ~vg$Wa(Tg@Oi?bQtoU?CB`zPj7nsSMU^PzCNqirbe_}@ zhX1w;ByWQMk!N8nmz_JEp3G0@#LPl|dVGdzhRIAeTgaVRkj@k`)2DMZ6gy}p3(__l zj-H!Hj~6misENd)012CWk+{W3 z&5|!E9-MH^h%eF+9e4R!rOuLuaqpHK#(#|t)U!1%Q$6|GNGj)$|F&Rgh&RZ$g<;s* zalb(RAVUOj11-#pFl#w~pR E0nMuTwg3PC diff --git a/riscv-rt/bin/riscv32imfd-unknown-none-elf-smode.a b/riscv-rt/bin/riscv32imfd-unknown-none-elf-smode.a deleted file mode 100644 index 8f27bd4c1151d621b737a6ba12468d0a5da2d61e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7432 zcmcJUU2Ggz8HT^vaU3^)wX-2{;}kZt&ao4mwPPo4LQQM8NgAjr`K3WkyIKDvcI(9M zdL5-9&^V4ngaWFRNCi|W1r?}7FDO4sR0Sl9-oOo1g5J=ZASAc}QZ+(?B9-@@@0<1b zBtV49k#XUyHg$AhqUy4{ zdvh*#U+0$YWUl9T^zRIU08?oTeZ@uS zEH=7`p3Pv5p2ZPdM9*U5i|n=Fg;=9!>##=8-i0-K7Ds#$J-Zld^z0I>(X&gjM$az8 z8a;bA*61&CuIT{v7swUPcQzw~H_I}9>uiwU@K%s-yB_2V?*{qYw=((Y^-R8bHj{U6W%8}pGx-hgX7X)8 zm@hPhT?+#F>y69r&*TD`iTWhWPs>bxR>DFM%oO^9uzfn1X`c6Ebu@OMah8%Z z@|7S6|KEp_uAk=g?tfUU_2cFI1HBe-3LN=Iv5c<nwC_DQrUg1GHPWy46`>R(NW!1gC?bX=!F5 zce@^)SADwmaVO&$C5V6v$|t%yM>{7vipRJ(!o?64QWq@3cZ};>rPxpIzx2N}e`kF*HXHQfKY0^>s@tC zHKe-E(@Q*E@97nuZuImTPv<<{?CDldw|Tn5)0;iL)zdwm?)CI`Pw(<{zo&P5dcUU+ zdis#34|{sZ(<7c9^YnzLE1o{->C>J*L>2lwa#AcF9UC7gjTI-xM~_#A%gs_eRytW6 z!CO{wbjV(`xWV8vwwaEZGkR)R?ER}eHF?`tG8^XWSuxIVmsaanuz2sf;-$V@HJQ(A zF7eNRSDn%j@4d#dGVin1Uzp=0&-<;(d~)LR@4V`ZnkOgz%izXI^~s6<3V8LG)F&tY ztKcT{$%+4UaKmXV(5|94JRhU%B2O!GnPk?31G|{-=iAK|%{1d{S@481Ye#rbWFtGv zZv#jC@{2}xmU$2y@vRw+>@2eb9N8B{va`&i^z9}iJIm~$kM~VBva`(N;K*((va`&S z^zC*bJIf5x=Y@_&c9t0hM|Lxion`p`7ujt^c9xl@34Sb7Z$2*;$6CJNgI~ zXk=%ZFN33%bVbO{GG7HptLTc5on`f0T1{7k>@4#g zaMVOsgzPNyeQ>mft_ay#=5=s%FI^F`v&57n@Wj+8$8|dPF4Bc4@pZR(SqWg6&jRG;iD!{1b*g8F1XV&ihUnj~ zKG|93Y5G0tlbvNI=zmguva`$y`VXj2c9uC!|3UT1&N64|_o`2JmN`$qPkpkp%-85Y zq(0eM<`Vsf)h9d4e3Slm^~ugMFVo+lKG|93yYzRePj;4hjs7F*lbvOLNS_}FXk=%Z ztMosmKG|93XY@an2 ze@=a}v&<6ukE>61mRU~!p!#HInMV4bSD)-GvxfeY>XV&iHqw7eeX@H(xfZKnLU{@K zS><|iQJEh_!7=4V@^NK8;)8MJxXuyfc-y1O+%`Wl$1Uc^bw<@^o&3{t++uzXR`87a zd>rS;=D5ZDI%W>5AMbxjIo^i><#_)GmE(Dbl;iy$R?cCyjm6O7xw_`K#e6ADK6k8A z8o;_z*7Zn2mEn^WDGZe=B`FL{PD-IXJXR`<9v_7pWBhBsA+iPikANCO!vj-Ci({k5 zhb^qe=8%BAB+hcT5VuqX3|lhJtg;gRBza_JcB^B)d{Ql(NJ z9hjhY17u6GWCV@XTuJp?0N zZzxrd=OL-bTRGW=HTe0^nIUOQ#`vg7*PB4S-z?PQU1VcCUfxd0Hb8j;Cp;opOU8zv z)AhEm#Q%`s@pxG$*}o}pvJFt)LA~V!YsuJo=!7|R1Gx^%aK&S0n?X;{dja#FgvWXB zwlU8CB0B3OHFDUyd%a;=K-GMV?=Q0aMVFyStEoR`PLG0yu2I_oBX zf)Na~K_`tlwx6J<>-D2hGd$MgGl*lX_a-_{#ROJyyM%#_iNHEJXX!aP{3dca>^z@g i&!MwkJ^Eefs8?-&z$E9YYOY=bymW2?JNEW%a{mG@bN>(k diff --git a/riscv-rt/bin/riscv32imfd-unknown-none-elf.a b/riscv-rt/bin/riscv32imfd-unknown-none-elf.a deleted file mode 100644 index a6e8387f1dd08bb1f61d6c55ce891347595ef35e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7432 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 I#$9~>0lXdg2LJ#7 diff --git a/riscv-rt/bin/riscv32imfdc-unknown-none-elf.a b/riscv-rt/bin/riscv32imfdc-unknown-none-elf.a deleted file mode 100644 index 83ffff761ac618367f45016fda03132f431e1cd8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7308 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 diff --git a/riscv-rt/bin/riscv64i-unknown-none-elf-smode.a b/riscv-rt/bin/riscv64i-unknown-none-elf-smode.a deleted file mode 100644 index 58f194262d124194f763e618ad4a9e20b6664ba3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12400 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 t^Yda8`!3Jk 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 diff --git a/riscv-rt/bin/riscv64if-unknown-none-elf.a b/riscv-rt/bin/riscv64if-unknown-none-elf.a deleted file mode 100644 index 2b52368c11fa6f5e57d4b770f886762ce08ae58a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12408 zcmbuFZ;Tve9mk*9*p_OWZ?OyNNJGu6b zy=^Us(&JDo5>r!Rc~JwRiI@<@h>;*Kz!2pHCZNP%LbODEqc3d5KP0I5`_BA+>-T2o zDNvqd=6U8bpXd8LGdnZ8H@Ovkwfe4+^>Z)H&n%riJ>_!GW#yiA`Fttb#p`^&yVv}k zbDeXcEDc+#lZ{%v;cA29vK|`VUE4p_h*`B!uT8l6=;W>gm(&}@@px1otFu&+ftu@{ zo^ILd>MD0d!|j}V@70^H$pnE66_>!h>HfcE)VcnP<90@>O4O{lrS4pJOxn{=I=AOg z1e>eLfl5i1?xR9-5_nXWoOC`aOHPjNs4Tgx)L7c2JzHv7a_v&flA9y7EIBzFM`g)< zNNQPf^Q4v~H(zR5atoxECAUy&S&m_>DLINl<+f|pe)5rjoP#;Yu{QaG zq03Fn^0kcn(S1J)a^air{9$?c-*T{}QqBg_r}{VX-zt08-C_Ybp$-siK0zE`q^(i?4s?o(}r-e7j2Z_(`Xtib*CY>X$!R^W= z)?Te$&Va<%@}>5ObJyOmEx+;Rd{?o&w%93o?`S!L=+rKYm4 z@-R)5_@ndl;FBU(z<;TXA?|9*M$Tv|?^!=-I}m4~nP@HHM@^6+jC@AdFL z53hLmCJ*oTaNI{+>^uxGl(zA$9=_efZ}sq<9zNvZBOX5H;S(O-@bH5kevgMA^6>jT z{IG{V=;22^{9zA2?%|Jm_;)<~2@ikD!=Lu>XFdEm4}ZbKU-a;oJp5%3f7QcZ^YGU_ z{6vCdGj#D&i+9EMi=Ss%mbUrr9zM^*J3M@`hcEH)Y@OwP`kcZ#z;fFo^ zK@UHY;MfdZdkc;4FCWjk6Nw&nKR%So+gpAC#r|0d+wSYEm!C-Nv2hc)`F!xrC*5zI zC%n+jOX|(<_vDUvKK}EQ?zg!QI?s6AMag)b=c1M;uK67;J#f78hkHs19bSRVEb)k0 zm&`dQ()^!e@;bEh_QcG1cb?|Fn&1WHFD5uPLnkjBQcCDr&kwZFwO)rYU!0Nx|HCbO ztB{VCtK7MZBi^FB%RRh5;;r}H4IY1ohvWH`{7eKnJdZkBt_J76>hWE1b1CntwZTb! z+g04$nduVRndy{uSG4ZTlwGyDXKZ}1HddV&AKlj&uCH>{y|shY5qU#a9Uan_WXRZc zhbG1Ql#Jdz?DXAPeg9onbsS8LVC!SPtZ^~TRyyYiL@zsn@4?VR8*I6ljEJtBvn zwRT@3=Wbc79M{HDslRAYYU5>MXg;dj%cN%Cc+$7~0Q32>_C;kp=|8Cs=J`2oqcWcK zpHc_&Kdfz3#*_Zj>R|rt8&CR=tB*VGOWH>DthVtv@OR+L#6PcXRIh6rIbYE>s(x*Q zDm9SLPg~>gIp;d^`HhBg_?&Yi`SY}m$~b(^*`^NWBd>Lv#W;M<*`Wq}{uVI~ zpL6Wo!sn;9arm6GN48Pm;~KJJ96smlRRKP(2`k3obIzm+@cCQ8IDF2rXAAtC_C;kJ zKIh!44*bR1Mr9m6=h(9X{@D<<7>Ca}b}zu^Zz<#OIp^z|2OrNGE5_k-&M_6><5^?H zIDF3erV8-SHCbxo@Hyw(>cGdd$%=9Kobx>u;N#h3#W;M<`GE@XmzylLarm6`V|C!4 zr)^Zm;d9PU)q#&UwN{M7=bYzNfd3Jbr8W+qbAF)?{JgeN8Hdj~zf=eQ3T>k@4nGf| z<=0xn$701ee9rl;3UCW1OKluJ=lotBuvOYdWgI@|{7D`77ib%marm6`7j@ucpB3X^ zoO4PA_!pThwQ=~I^DlMauhupy<8V3WKkC50Slg(K!{?kZh$Z+RjhoThIDF2TL;lCe zHx8e37Lvb)eBTNB&RIr&k$mIuIcEj=my&NBKIdFSeu;eJ@Hyua@;k{l z4xe+%U|k$mIuE5yG+{*@^lKIa@K|0?p0!{?mG$lpZ1arm6`IQdtTZyY}7 ze4qSl$Ttq3bDkpqTJnv<=bUHAx4#k4%{Y9{d5-++AZjrVpL2dr{>M$0+Bkg9d5Qe% z$u|z4bACnsX7Y{0=bYEb{{;EQ;d9RK$iIPnkL2G-zH#`R^Jnr0$Ttq3b54@K zg?!`iIp?3`-$cG~_?+`^@^2>JIDF2@WMXNhR9ne64xe+{$=^o4arm6Gfc#IAZyY}7 zEGGXJ@{PmioTcP%C*L@H&dHPiDe{fO=bQ`4|1|l=;d9O!@^_GL96slCk$)@s#^G~L zFZs8TZyY}7tSA3=@{PmioK56c$u|z4bNb2OMZR(PoO2ubL*yHWUnAb8ZCus|h|eSb zS>heUhlwvHK1qBD@dokb#P<{D`HT^_adCKiiCaE?v+qmc_$|zSULE9&Ya5mQW=76L z3der-OX?u!PV#%TjhuQ4M-KaZT)WA)<3j!(;(2X@j}W){gO3vDd47ht%@h6|#Piy| zOzJtraXcvaTMGNE7{}iz?7QORU3(j~L8%+{xE`@qWB6dh6^Ck#nkx=YPP$@!c&t_& z-8U*UYDWLb9Z!r93Q{+(#E&nkIBy~IsTQ>KW+Tpl<_fk za{TQ&zEm^H(>l-~ZfGjW@$p+DZTtZp|3!Tu;rQpuk{ln;mSm&B{rxe-67eR zHvW)d57ij028~u@YCmYwXkzq>l8Q~EO~E4hs)PU^{9@!pi1I~@`WCr@$hC3 zZ}srS9^UTZOFaDJ9=^=OmwR~D!#g~DwTE|l_&N{Y;Ne(LxajAyiJ@&P-{RrhJp5h{ zzt6*Wc=#?4FL-#bhd=D$B@aK~;RikZu!le6;YU6En1_Gf!;gFTNe_S4!=Ll;uR0vN zDHGPv_&V|PI;V&F$?IfTGlKf=`l-CplYg~`PxSC655LC4^?OYZ>wKvm{5J$~}K9hwau-(9z%rHp%5=;!X^^~Sxg^*Tvj z=NoFCm}1|(D|B4lkA7)O6M7$&&h7Q zoQKJt_0aygP}2j~gS)!LQp&iiq%rY`^))%yM_v4%qwo8=K*4LzPwdxThcS0o=QuWH+|}6_Jg+n*Jm=pU@wgvvmwGtv=ca`Fag)d2>EZnz zzCYr%-?N|d_$JfUoHn_9VOV}`%5=5VwOZOz*J8J=(YB?o&E#^s`-cko{@mW7zQJ;_ zbhF6~aeu&IXoe4 zRL7+a{-m@~JtuACd{)}1=1LnJ*RER@S-|7sK19Li&cBOv#|vk~mqtds*#glPRQaeC zZ|;!xY+Hv39P{G*yT~6$zH<1SvxkuN*$-4B((G@NunZQ4XJThDCtS z-wMj%bB?Yp@TW*$RLbFV&LMH&^S6s~_?)9_1^jEJFDm8mIY;jW`1~!U96slK!S18L z$6BLBIegAJB?5e`HCmLz=bW#I0RIM+ZLJ(W=X^~Z_*k2?D2LBE-w**l)+Q~=;d9P6 zMS#zL8!3m+Io~D!CTXKm4xe*=AP(|pN*k4O_?+_-ao~Sc+NhMn=bWF513xWoRLbFV z&M(D*KTF!El*3O0NcpwY@bS{396sm#P6W7fRJOHp_?+_xalmetHY(-tIp zsFcI!oWFV4 ze?i=gw#wmi&Uo@aM!s_RoHL31h2$%T&pFqUzleP0@HuA&`5E$+!{?k?Dx zkNjrxmBZ(pMdY`TuN*$-w2|LRzH<1Sb0_(2q zCto>y&Uu>r733?2&pF4)&yuekKIfbueUw%GuN*$-JV<^I`O4wviHFk0 zWj#XtYT}O(Zz5hKK9%?|@oB`%#BU_Nk2ue#pSX^Tw>Lms^YP3+n85KY%zj!NarT?VLC&M(FOfEKN(me}?DPBTC12kc@^=$YOB;L-ah*SSA90@N!^Cx- z@E;+bmiC>t9#0(a2L*pi;g}ZX_#1_NlNo+|pqww*x?GCuJ=!W4_m@qkCtuE+OksG~ zWJ<;Ue5P-(&(f$F{kNest(%GeBQXX&#lpVbx&FSvqR27m8|)pjnbE;~p-?K0j5(Yy zpUwN5fBXF{n9ltxF8e0 z-tNNF{(3*)**j_cvzDW5iL2_?egAjZBT3`GAPbm|gYoehx#QzmFKPT{8OZ&--0?d+ z<9|P4e2ndmzeC2i)tJ&M0~MSJxZ~qlBkBFWDdWE(3liRcqkXyKV{LIWEizw{3u-oY zsJL#AJ(e{7m*q#46Veys<2%S5AKw*jCc3;TqkyUl!eU^ z`%0Ss{JF6*8duS8mXmDTo&PDzFn+UmTBQ+c%gnf{Zgs9&f88F@c2%;Ctn~k|`Jc9K z()_1kVX);yTt)N8xpe1$#xjiWTxRBkjPJfL?Ju#>@0>~Fza-@N}4;&ccg!MLfjAI;j?zf$9J4uDzPZr2D$K_A46+DtI3}J Mqw@ZL^CA8J2e_djEC2ui diff --git a/riscv-rt/bin/riscv64ifc-unknown-none-elf.a b/riscv-rt/bin/riscv64ifc-unknown-none-elf.a deleted file mode 100644 index 04573b2dc43559c6396d4a5b8181663b58837286..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12280 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 Fe*q|QBEtXx diff --git a/riscv-rt/bin/riscv64ifd-unknown-none-elf.a b/riscv-rt/bin/riscv64ifd-unknown-none-elf.a deleted file mode 100644 index f75a8874055a0de647681942e3927d73aeea1908..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12408 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 F{|}iIB+&o> diff --git a/riscv-rt/bin/riscv64ifdc-unknown-none-elf-smode.a b/riscv-rt/bin/riscv64ifdc-unknown-none-elf-smode.a deleted file mode 100644 index a038d7d957e92092684d1bd26a25a72bbf597ee0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 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 SYp>NLPyZ|O{(t)s{r?9nEF&=h diff --git a/riscv-rt/bin/riscv64ifdc-unknown-none-elf.a b/riscv-rt/bin/riscv64ifdc-unknown-none-elf.a deleted file mode 100644 index fb7fe2f09950a0b6596193146e270f39f5613875..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 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 diff --git a/riscv-rt/bin/riscv64im-unknown-none-elf-smode.a b/riscv-rt/bin/riscv64im-unknown-none-elf-smode.a deleted file mode 100644 index aafe0a057e9d505b31654b3a4d038e6286fe9ca8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11888 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 A*#H0l diff --git a/riscv-rt/bin/riscv64imc-unknown-none-elf-smode.a b/riscv-rt/bin/riscv64imc-unknown-none-elf-smode.a deleted file mode 100644 index d5d0000109f6df083845a053263a9974064081fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11776 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 diff --git a/riscv-rt/bin/riscv64imf-unknown-none-elf-smode.a b/riscv-rt/bin/riscv64imf-unknown-none-elf-smode.a deleted file mode 100644 index 264d2d83a3a8da79d2d3acee4dc4d84dac58a802..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11888 zcmcJVZH!b`9mdbyJNp7%mf6l$C{Q~v6ljHEc4t`z-NHbjrMk9IK(V5;v+S$gx6aNI z+F;AFn2_2JYiPs|m||^WO&Z0Bv8nw~l1BM}iPgl^FKQG0q9#J>TT+ewpL@@LdG^jd zXi!gb?>YB(f9E;p-nsYA?9Hz3E?15YZ(qDQy|A=*b>;J2+wxt7bUGL8;&nRRDLgE_ zi;Xe9ELB}fQ`K^%YRY{RvhE)kEKiSCLsqI*%9ExtGIjLWrb;zC5su1ZwdZm&(EPfq zt5dexx3+f#gY_QgU=>Wl1HZ#?m0|MyX{NzsVHJCe!_-$>c8kna;QUOyONW(|z5~*|~YU?v{GpJoDyz6TyfL z!8&ZS@7K&HoZ)Q&5BCN{w&i^Bxp~g>{Qvjia6Y&B5dK%~Fh5w=9_$+)hLJPyL0N~_ zN0VGPwZ%K>wVGtZp$5NYWy?J+sd`a*WU+l}JKO>Zuhq@^$TAN-awxs?K)NHF-;!;Y zynotq3(>J%+AQ^-e$03$Ja6Tax<(v4IPRus*@@>|FgxSjCC&QEv98XMj>%kU468v| znI>%?n;ksq;B5}R+`(5lc-q0&I`{?$ z-{{~u2k&(7f`fNEc+tUkJNRA)?{V;b4t~(V4?Fk~2k&+8eg_|R@KFb!bnvQ!A9wH* z4t~}33D~lL+{5IVtG@|FOkr{J!0#9op5s3xX}*( zZa(pT?L6W6ra7w5f6qpDgyXu;PrTn?T<0y`ubpQ&ZfjJx^K7ko;;Nsl>4D>wKZs+B zZ}4hiVF^b}m}t(jKy!bN(d$sp+p7!XgDv04ALcQ|H?_wL%{R5zRmj_7Qs94}hVK=U zths89!EgHLv7+;42gh?Z8FPQ_a`=xrc&~$x2E6ur^I3;)vOT%9DV6)C>|3F1PkUX5 z(Du4^Qz{LOPV|*WOOq2Lg#ok`J9wRi}I*{(F&O7F_ooO9`!F-2lJmHUwPDj%{rJr z`^uyKE7r#yhHFX7725zmrBG_zFDT%rgVw@TH0NHs8=oWI6KL5JJ_v%pbh{Kv-2qVw zD*o=@8c<`_NX>VF@^!*F|9Vzb4xe)#um8Bh%=R8b4|B%f=Sm-9tAe9rl_HQ@78T{(QtDU-j{woxgE&pAWZLB8IbK+55B&KPz| zfsboKi*op!Gi3$%{8U#CpL3ofKV{pfl*8v7y|$6x2GJJf@HyuTc0c?(Y#Wtw_?+`a z>%ix48RhUf=S$?{*`Y-_e9k#%1?1z|p+z}-&iSep;NPjT)XL#=&eyF2AI};s%Hea) zH?064&l)Yt;d9QntpIlCK;-=iEX5Ci0cT=bV+~ zXUSI%pL14|znOgH@HuBa`8o2H!{?k$DxO8!U4R}P$r-ORXF}=UgTKW8^D`&pAIOzlVI~@Hyul@;^?#a`>F{ zOY$EfUpaiv`3?DxlCK;-=lqWRedH^L&pFq~-%q}B_?+_>@*g8#IegCfJNXC5R}PgqyijZ_E8R}PBqWbIuC#50kGPKIf##{}lPk z;d9P9@*gK(IegB!kNnS)uN*$->>$5HzH<0Sh&R|aKISKhHxsWAPZIAXu75)zXPo$Q z+XkN?uD|)gCyDcXhKTF9IJ{xvnvdVGBQYGm4cSjy2RWa!ZB+13kn=>)3RlWev!AmL zaz-o@xckn40e|L`YHp*7VIup%Hu-=GE`{D zOcw0cy}{@M!==GWc?|jZN4spfTCI%qO;@G+e_vKg1g?3#&NZ>9jYyq{Y_FDW^!FpY z7}?fMxLoi#HOX?T{qfuVX7m3E4`#<=v{5#2Ohty+zC8q2?1Y!eCOpg)Mehgv7L6M} zY5Tnp*f&-d&jb8+j~l8nh+`94k={B^u{=@e8f3Bjfqx1h4 Dv_S}U diff --git a/riscv-rt/bin/riscv64imf-unknown-none-elf.a b/riscv-rt/bin/riscv64imf-unknown-none-elf.a deleted file mode 100644 index e90f1b95f15a151381635fccce09da33a48dc166..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11888 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 G^ZzgUlnR3Y diff --git a/riscv-rt/bin/riscv64imfc-unknown-none-elf-smode.a b/riscv-rt/bin/riscv64imfc-unknown-none-elf-smode.a deleted file mode 100644 index fad4683e8217fe605cdb0a5429af9603bbd5be88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11784 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 diff --git a/riscv-rt/bin/riscv64imfc-unknown-none-elf.a b/riscv-rt/bin/riscv64imfc-unknown-none-elf.a deleted file mode 100644 index 6ad9e5958a40712072e25b4d1c214adbcb74423a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11784 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 D^Dqp0 diff --git a/riscv-rt/bin/riscv64imfd-unknown-none-elf-smode.a b/riscv-rt/bin/riscv64imfd-unknown-none-elf-smode.a deleted file mode 100644 index 083f18f1877ee4e74740a0c3a6cc2ae083084374..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11896 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 I9i9Kb0Ch_WdH?_b diff --git a/riscv-rt/bin/riscv64imfd-unknown-none-elf.a b/riscv-rt/bin/riscv64imfd-unknown-none-elf.a deleted file mode 100644 index 80f2c2149edd7081a4225bb8a7cc7685943d7219..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11896 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 diff --git a/riscv-rt/bin/riscv64imfdc-unknown-none-elf.a b/riscv-rt/bin/riscv64imfdc-unknown-none-elf.a deleted file mode 100644 index 7e4aa4a9890618f19c412e350726daa6a8082775..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11792 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 yZC7Ofaa?q^pudy$ { + println!("cargo:rustc-cfg=riscv32"); + } + 64 => { + println!("cargo:rustc-cfg=riscv64"); + } + _ => panic!("Unsupported bit width"), + } + if target.has_extension('m') { + println!("cargo:rustc-cfg=riscvm"); // we can expose extensions this way } - - fs::copy(&archive, out_dir.join(format!("lib{}.a", name))).unwrap(); - println!("cargo:rerun-if-changed={}", archive); - println!("cargo:rustc-link-lib=static={}", name); } // Put the linker script somewhere the linker can find it diff --git a/riscv-rt/check-blobs.sh b/riscv-rt/check-blobs.sh index 36d885e6..471470a1 100755 --- a/riscv-rt/check-blobs.sh +++ b/riscv-rt/check-blobs.sh @@ -1,21 +1,3 @@ #!/bin/bash -# Checks that the blobs are up to date with the committed assembly files - -set -euxo pipefail - -for lib in $(ls bin/*.a); do - filename=$(basename $lib) - riscv64-unknown-elf-objdump -Cd $lib > bin/${filename%.a}.before -done - -./assemble.sh - -for lib in $(ls bin/*.a); do - filename=$(basename $lib) - riscv64-unknown-elf-objdump -Cd $lib > bin/${filename%.a}.after -done - -for cksum in $(ls bin/*.after); do - diff -u $cksum ${cksum%.after}.before -done +return 0 # not needed anymore diff --git a/riscv-rt/examples/device.x b/riscv-rt/examples/device.x new file mode 100644 index 00000000..78e7bac8 --- /dev/null +++ b/riscv-rt/examples/device.x @@ -0,0 +1,14 @@ +MEMORY +{ + RAM : ORIGIN = 0x80000000, LENGTH = 16K + FLASH : ORIGIN = 0x20000000, LENGTH = 4M +} + +REGION_ALIAS("REGION_TEXT", FLASH); +REGION_ALIAS("REGION_RODATA", FLASH); +REGION_ALIAS("REGION_DATA", RAM); +REGION_ALIAS("REGION_BSS", RAM); +REGION_ALIAS("REGION_HEAP", RAM); +REGION_ALIAS("REGION_STACK", RAM); + +INCLUDE link.x diff --git a/riscv-rt/src/asm.rs b/riscv-rt/src/asm.rs new file mode 100644 index 00000000..f4dbf5d8 --- /dev/null +++ b/riscv-rt/src/asm.rs @@ -0,0 +1,186 @@ +use core::arch::global_asm; + +/// Parse cfg attributes inside a global_asm call. +macro_rules! cfg_global_asm { + {@inner, [$($x:tt)*], } => { + global_asm!{$($x)*} + }; + (@inner, [$($x:tt)*], #[cfg($meta:meta)] $asm:literal, $($rest:tt)*) => { + #[cfg($meta)] + cfg_global_asm!{@inner, [$($x)* $asm,], $($rest)*} + #[cfg(not($meta))] + cfg_global_asm!{@inner, [$($x)*], $($rest)*} + }; + {@inner, [$($x:tt)*], $asm:literal, $($rest:tt)*} => { + cfg_global_asm!{@inner, [$($x)* $asm,], $($rest)*} + }; + {$($asms:tt)*} => { + cfg_global_asm!{@inner, [], $($asms)*} + }; +} + +// Entry point of all programs (_start). It initializes DWARF call frame information, +// the stack pointer, the frame pointer (needed for closures to work in start_rust) +// and the global pointer. Then it calls _start_rust. +cfg_global_asm!( + ".section .init, \"ax\" + .global _start + +_start:", + #[cfg(riscv32)] + "lui ra, %hi(_abs_start) + jr %lo(_abs_start)(ra)", + #[cfg(riscv64)] + ".option push + .option norelax // to prevent an unsupported R_RISCV_ALIGN relocation from being generated +1: + auipc ra, %pcrel_hi(1f) + ld ra, %pcrel_lo(1b)(ra) + jr ra + .align 3 +1: + .dword _abs_start + .option pop", + " +_abs_start: + .option norelax + .cfi_startproc + .cfi_undefined ra", + #[cfg(feature = "s-mode")] + "csrw sie, 0 + csrw sip, 0", + #[cfg(not(feature = "s-mode"))] + "csrw mie, 0 + csrw mip, 0", + "li x1, 0 + li x2, 0 + li x3, 0 + li x4, 0 + li x5, 0 + li x6, 0 + li x7, 0 + li x8, 0 + li x9, 0 + // a0..a2 (x10..x12) skipped + li x13, 0 + li x14, 0 + li x15, 0 + li x16, 0 + li x17, 0 + li x18, 0 + li x19, 0 + li x20, 0 + li x21, 0 + li x22, 0 + li x23, 0 + li x24, 0 + li x25, 0 + li x26, 0 + li x27, 0 + li x28, 0 + li x29, 0 + li x30, 0 + li x31, 0 + + .option push + .option norelax + la gp, __global_pointer$ + .option pop", + #[cfg(feature = "s-mode")] + "mv t2, a0 // the hartid is passed as parameter by SMODE", + #[cfg(not(feature = "s-mode"))] + "csrr t2, mhartid", + "lui t0, %hi(_max_hart_id) + add t0, t0, %lo(_max_hart_id) + bgtu t2, t0, abort + + // Allocate stacks + la sp, _stack_start + lui t0, %hi(_hart_stack_size) + add t0, t0, %lo(_hart_stack_size)", + #[cfg(riscvm)] + "mul t0, t2, t0", + #[cfg(not(riscvm))] + "beqz t2, 2f // Jump if single-hart + mv t1, t2 + mv t3, t0 +1: + add t0, t0, t3 + addi t1, t1, -1 + bnez t1, 1b +2: ", + "sub sp, sp, t0 + + // Set frame pointer + add s0, sp, zero + + jal zero, _start_rust + + .cfi_endproc", +); + +/// Trap entry point (_start_trap). It saves caller saved registers, calls +/// _start_trap_rust, restores caller saved registers and then returns. +/// +/// # Usage +/// +/// The macro takes 5 arguments: +/// - `$STORE`: the instruction used to store a register in the stack (e.g. `sd` for riscv64) +/// - `$LOAD`: the instruction used to load a register from the stack (e.g. `ld` for riscv64) +/// - `$BYTES`: the number of bytes used to store a register (e.g. 8 for riscv64) +/// - `$TRAP_SIZE`: the number of registers to store in the stack (e.g. 32 for all the user registers) +/// - list of tuples of the form `($REG, $LOCATION)`, where: +/// - `$REG`: the register to store/load +/// - `$LOCATION`: the location in the stack where to store/load the register +#[rustfmt::skip] +macro_rules! trap_handler { + ($STORE:ident, $LOAD:ident, $BYTES:literal, $TRAP_SIZE:literal, [$(($REG:ident, $LOCATION:literal)),*]) => { + global_asm!( + " + .section .trap, \"ax\" + .global default_start_trap + default_start_trap:", + // save space for trap handler in stack + concat!("addi sp, sp, -", stringify!($TRAP_SIZE * $BYTES)), + // save registers in the desired order + $(concat!(stringify!($STORE), " ", stringify!($REG), ", ", stringify!($LOCATION * $BYTES), "(sp)"),)* + // call rust trap handler + "add a0, sp, zero + jal ra, _start_trap_rust", + // restore registers in the desired order + $(concat!(stringify!($LOAD), " ", stringify!($REG), ", ", stringify!($LOCATION * $BYTES), "(sp)"),)* + // free stack + concat!("addi sp, sp, ", stringify!($TRAP_SIZE * $BYTES)), + ); + cfg_global_asm!( + // return from trap + #[cfg(feature = "s-mode")] + "sret", + #[cfg(not(feature = "s-mode"))] + "mret", + ); + }; +} + +#[rustfmt::skip] +#[cfg(riscv32)] +trap_handler!( + sw, lw, 4, 16, + [(ra, 0), (t0, 1), (t1, 2), (t2, 3), (t3, 4), (t4, 5), (t5, 6), (t6, 7), + (a0, 8), (a1, 9), (a2, 10), (a3, 11), (a4, 12), (a5, 13), (a6, 14), (a7, 15)] +); +#[rustfmt::skip] +#[cfg(riscv64)] +trap_handler!( + sd, ld, 8, 16, + [(ra, 0), (t0, 1), (t1, 2), (t2, 3), (t3, 4), (t4, 5), (t5, 6), (t6, 7), + (a0, 8), (a1, 9), (a2, 10), (a3, 11), (a4, 12), (a5, 13), (a6, 14), (a7, 15)] +); + +// Make sure there is an abort when linking +global_asm!( + ".section .text.abort + .globl abort +abort: + j abort" +); diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index 3027452c..e0613127 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -359,6 +359,9 @@ #![no_std] #![deny(missing_docs)] +#[cfg(riscv)] +mod asm; + #[cfg(feature = "s-mode")] use riscv::register::{scause as xcause, stvec as xtvec, stvec::TrapMode as xTrapMode}; From 19c30c6ecad11cb45b61a0d0e078bb9a8102f394 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rom=C3=A1n=20C=C3=A1rdenas?= Date: Thu, 6 Jul 2023 11:01:07 +0200 Subject: [PATCH 197/234] add .vscode to .gitignore --- riscv-rt/.gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/riscv-rt/.gitignore b/riscv-rt/.gitignore index e38997ad..7f8712d0 100644 --- a/riscv-rt/.gitignore +++ b/riscv-rt/.gitignore @@ -3,3 +3,5 @@ target/ bin/*.after bin/*.before bin/*.o + +.vscode/ \ No newline at end of file From 11049a4dba43bd507e7134def559b1c833b700e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rom=C3=A1n=20C=C3=A1rdenas?= Date: Thu, 6 Jul 2023 11:07:55 +0200 Subject: [PATCH 198/234] modify build CI task --- riscv-rt/.github/workflows/blobs.yaml | 17 ----------------- riscv-rt/.github/workflows/build.yaml | 7 ++++++- riscv-rt/check-blobs.sh | 3 --- 3 files changed, 6 insertions(+), 21 deletions(-) delete mode 100644 riscv-rt/.github/workflows/blobs.yaml delete mode 100755 riscv-rt/check-blobs.sh diff --git a/riscv-rt/.github/workflows/blobs.yaml b/riscv-rt/.github/workflows/blobs.yaml deleted file mode 100644 index 0c9bea51..00000000 --- a/riscv-rt/.github/workflows/blobs.yaml +++ /dev/null @@ -1,17 +0,0 @@ -on: - push: - branches: [ master ] - pull_request: - merge_group: - -name: Check blobs - -jobs: - blobs: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: Install riscv gcc - run: sudo apt-get update && sudo apt-get install -y gcc-riscv64-unknown-elf - - name: Check blobs - run: ./check-blobs.sh diff --git a/riscv-rt/.github/workflows/build.yaml b/riscv-rt/.github/workflows/build.yaml index 71333df4..5f7e7840 100644 --- a/riscv-rt/.github/workflows/build.yaml +++ b/riscv-rt/.github/workflows/build.yaml @@ -1,6 +1,6 @@ on: push: - branches: [ master ] + branches: [ master, global_asm ] pull_request: merge_group: @@ -18,6 +18,9 @@ jobs: - riscv32imac-unknown-none-elf - riscv64imac-unknown-none-elf - riscv64gc-unknown-none-elf + example: + - empty + - multi_core cargo_flags: [ "--no-default-features", "--all-features" ] include: # Nightly is only for reference and allowed to fail @@ -33,6 +36,8 @@ jobs: targets: ${{ matrix.target }} - name: Build library run: cargo build --target ${{ matrix.target }} ${{ matrix.cargo_flags }} + - name: Build example + run: RUSTFLAGS="-C link-arg=-Texamples/device.x" cargo build --target ${{ matrix.target }} --example ${{ matrix.example }} ${{ matrix.cargo_flags }} # Job to check that all the builds succeeded build-check: diff --git a/riscv-rt/check-blobs.sh b/riscv-rt/check-blobs.sh deleted file mode 100755 index 471470a1..00000000 --- a/riscv-rt/check-blobs.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -return 0 # not needed anymore From a94931687fabbcb8be5e97fbd2e99f25d777eb6c Mon Sep 17 00:00:00 2001 From: onsdagens Date: Thu, 6 Jul 2023 15:41:46 +0200 Subject: [PATCH 199/234] testing oor branch --- riscv-rt/src/asm.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/riscv-rt/src/asm.rs b/riscv-rt/src/asm.rs index f4dbf5d8..4817f6c7 100644 --- a/riscv-rt/src/asm.rs +++ b/riscv-rt/src/asm.rs @@ -92,7 +92,11 @@ _abs_start: "csrr t2, mhartid", "lui t0, %hi(_max_hart_id) add t0, t0, %lo(_max_hart_id) - bgtu t2, t0, abort + // bgtu t2, t0, abort + bleu t2, t0, not_abort + la t0, abort + jr t0 + not_abort: // Allocate stacks la sp, _stack_start From f823dd9c823e72bb4e8c911cb72aae96a713e733 Mon Sep 17 00:00:00 2001 From: onsdagens Date: Thu, 6 Jul 2023 15:51:24 +0200 Subject: [PATCH 200/234] fix oor branch via linking --- riscv-rt/link.x | 1 + riscv-rt/src/asm.rs | 6 +----- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/riscv-rt/link.x b/riscv-rt/link.x index 1f52024c..fd6f6165 100644 --- a/riscv-rt/link.x +++ b/riscv-rt/link.x @@ -55,6 +55,7 @@ SECTIONS KEEP(*(.init)); KEEP(*(.init.rust)); . = ALIGN(4); + *(.abort) *(.trap); *(.trap.rust); diff --git a/riscv-rt/src/asm.rs b/riscv-rt/src/asm.rs index 4817f6c7..f4dbf5d8 100644 --- a/riscv-rt/src/asm.rs +++ b/riscv-rt/src/asm.rs @@ -92,11 +92,7 @@ _abs_start: "csrr t2, mhartid", "lui t0, %hi(_max_hart_id) add t0, t0, %lo(_max_hart_id) - // bgtu t2, t0, abort - bleu t2, t0, not_abort - la t0, abort - jr t0 - not_abort: + bgtu t2, t0, abort // Allocate stacks la sp, _stack_start From 47082d0cbf59bb1dacc61a8438b8de41a1386a38 Mon Sep 17 00:00:00 2001 From: onsdagens <112828711+onsdagens@users.noreply.github.com> Date: Thu, 6 Jul 2023 15:56:52 +0200 Subject: [PATCH 201/234] run workflow on new branch --- riscv-rt/.github/workflows/build.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/riscv-rt/.github/workflows/build.yaml b/riscv-rt/.github/workflows/build.yaml index 5f7e7840..4c7bb21d 100644 --- a/riscv-rt/.github/workflows/build.yaml +++ b/riscv-rt/.github/workflows/build.yaml @@ -1,6 +1,6 @@ on: push: - branches: [ master, global_asm ] + branches: [ master, global_asm, global_asm_link ] pull_request: merge_group: @@ -47,4 +47,4 @@ jobs: if: always() steps: - run: jq --exit-status 'all(.result == "success")' <<< '${{ toJson(needs) }}' - \ No newline at end of file + From 3358321837780d2ccd8a5c0271e93d5af257a150 Mon Sep 17 00:00:00 2001 From: onsdagens Date: Thu, 6 Jul 2023 16:09:27 +0200 Subject: [PATCH 202/234] fix oor branch via linking --- riscv-rt/link.x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/riscv-rt/link.x b/riscv-rt/link.x index fd6f6165..31b9d388 100644 --- a/riscv-rt/link.x +++ b/riscv-rt/link.x @@ -55,7 +55,7 @@ SECTIONS KEEP(*(.init)); KEEP(*(.init.rust)); . = ALIGN(4); - *(.abort) + *(.abort); *(.trap); *(.trap.rust); From f18290127eecc0ee2f0f177e1cc575847b0f8350 Mon Sep 17 00:00:00 2001 From: onsdagens Date: Thu, 6 Jul 2023 16:14:06 +0200 Subject: [PATCH 203/234] does this even matter --- riscv-rt/link.x | 2 ++ 1 file changed, 2 insertions(+) diff --git a/riscv-rt/link.x b/riscv-rt/link.x index 31b9d388..69fa5a03 100644 --- a/riscv-rt/link.x +++ b/riscv-rt/link.x @@ -4,6 +4,8 @@ PROVIDE(_max_hart_id = 0); PROVIDE(_hart_stack_size = 2K); PROVIDE(_heap_size = 0); +beep boop xdd + PROVIDE(UserSoft = DefaultHandler); PROVIDE(SupervisorSoft = DefaultHandler); PROVIDE(MachineSoft = DefaultHandler); From 3fa3c37fdb5a409e0f131e4d6af8e62ce0391cbd Mon Sep 17 00:00:00 2001 From: onsdagens Date: Thu, 6 Jul 2023 16:29:30 +0200 Subject: [PATCH 204/234] fix oor branch via linking --- riscv-rt/link.x | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/riscv-rt/link.x b/riscv-rt/link.x index 69fa5a03..da1caab4 100644 --- a/riscv-rt/link.x +++ b/riscv-rt/link.x @@ -4,7 +4,6 @@ PROVIDE(_max_hart_id = 0); PROVIDE(_hart_stack_size = 2K); PROVIDE(_heap_size = 0); -beep boop xdd PROVIDE(UserSoft = DefaultHandler); PROVIDE(SupervisorSoft = DefaultHandler); @@ -57,10 +56,9 @@ SECTIONS KEEP(*(.init)); KEEP(*(.init.rust)); . = ALIGN(4); - *(.abort); *(.trap); *(.trap.rust); - + *(.text.abort); *(.text .text.*); } > REGION_TEXT From fc48c008e253aff08295ecd26b83d5099445e25a Mon Sep 17 00:00:00 2001 From: onsdagens Date: Thu, 6 Jul 2023 16:43:41 +0200 Subject: [PATCH 205/234] fix oor branch via linking --- riscv-rt/.github/workflows/build.yaml | 3 +-- riscv-rt/link.x | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/riscv-rt/.github/workflows/build.yaml b/riscv-rt/.github/workflows/build.yaml index 4c7bb21d..3b532aa2 100644 --- a/riscv-rt/.github/workflows/build.yaml +++ b/riscv-rt/.github/workflows/build.yaml @@ -1,6 +1,6 @@ on: push: - branches: [ master, global_asm, global_asm_link ] + branches: [ master, global_asm ] pull_request: merge_group: @@ -47,4 +47,3 @@ jobs: if: always() steps: - run: jq --exit-status 'all(.result == "success")' <<< '${{ toJson(needs) }}' - diff --git a/riscv-rt/link.x b/riscv-rt/link.x index da1caab4..57301e2c 100644 --- a/riscv-rt/link.x +++ b/riscv-rt/link.x @@ -4,7 +4,6 @@ PROVIDE(_max_hart_id = 0); PROVIDE(_hart_stack_size = 2K); PROVIDE(_heap_size = 0); - PROVIDE(UserSoft = DefaultHandler); PROVIDE(SupervisorSoft = DefaultHandler); PROVIDE(MachineSoft = DefaultHandler); From 9e589b549344a76a43806f0c4c6d6d31e18653a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rom=C3=A1n=20C=C3=A1rdenas?= Date: Sat, 8 Jul 2023 19:26:40 +0200 Subject: [PATCH 206/234] Ready for PR --- riscv-rt/.github/workflows/build.yaml | 2 +- riscv-rt/CHANGELOG.md | 1 + riscv-rt/asm/original_asm.S | 189 ------------------ riscv-rt/asm/riscv32i-unknown-none-elf-m.s | 123 ------------ riscv-rt/asm/riscv32i-unknown-none-elf-s.s | 123 ------------ riscv-rt/asm/riscv32imac-unknown-none-elf-m.s | 116 ----------- riscv-rt/asm/riscv32imac-unknown-none-elf-s.s | 116 ----------- riscv-rt/asm/riscv64imac-unknown-none-elf-m.s | 126 ------------ riscv-rt/asm/riscv64imac-unknown-none-elf-s.s | 126 ------------ 9 files changed, 2 insertions(+), 920 deletions(-) delete mode 100644 riscv-rt/asm/original_asm.S delete mode 100644 riscv-rt/asm/riscv32i-unknown-none-elf-m.s delete mode 100644 riscv-rt/asm/riscv32i-unknown-none-elf-s.s delete mode 100644 riscv-rt/asm/riscv32imac-unknown-none-elf-m.s delete mode 100644 riscv-rt/asm/riscv32imac-unknown-none-elf-s.s delete mode 100644 riscv-rt/asm/riscv64imac-unknown-none-elf-m.s delete mode 100644 riscv-rt/asm/riscv64imac-unknown-none-elf-s.s diff --git a/riscv-rt/.github/workflows/build.yaml b/riscv-rt/.github/workflows/build.yaml index 3b532aa2..4c95f06a 100644 --- a/riscv-rt/.github/workflows/build.yaml +++ b/riscv-rt/.github/workflows/build.yaml @@ -1,6 +1,6 @@ on: push: - branches: [ master, global_asm ] + branches: [ master ] pull_request: merge_group: diff --git a/riscv-rt/CHANGELOG.md b/riscv-rt/CHANGELOG.md index 50b44407..3cb7aeb0 100644 --- a/riscv-rt/CHANGELOG.md +++ b/riscv-rt/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ### Changed +- Use inline assembly instead of pre-compiled blobs - Removed bors in favor of GitHub Merge Queue ## [v0.11.0] - 2023-01-18 diff --git a/riscv-rt/asm/original_asm.S b/riscv-rt/asm/original_asm.S deleted file mode 100644 index 17f10937..00000000 --- a/riscv-rt/asm/original_asm.S +++ /dev/null @@ -1,189 +0,0 @@ -#if __riscv_xlen == 64 -# define STORE sd -# define LOAD ld -# define LOG_REGBYTES 3 -#else -# define STORE sw -# define LOAD lw -# define LOG_REGBYTES 2 -#endif -#define REGBYTES (1 << LOG_REGBYTES) - -/* - Entry point of all programs (_start). - - It initializes DWARF call frame information, the stack pointer, the - frame pointer (needed for closures to work in start_rust) and the global - pointer. Then it calls _start_rust. -*/ - -.section .init, "ax" -.global _start - -_start: - /* Jump to the absolute address defined by the linker script. */ - // for 32bit - .if __riscv_xlen == 32 - lui ra, %hi(_abs_start) - jr %lo(_abs_start)(ra) - .endif - - // for 64bit - .if __riscv_xlen == 64 -.option push -.option norelax // to prevent an unsupported R_RISCV_ALIGN relocation from being generated -1: - auipc ra, %pcrel_hi(1f) - ld ra, %pcrel_lo(1b)(ra) - jr ra - .align 3 -1: - .dword _abs_start -.option pop - .endif - -_abs_start: - .cfi_startproc - .cfi_undefined ra - - #ifdef SMODE - csrw sie, 0 // interrupt disable - csrw sip, 0 // no pending interrupts - #else - csrw mie, 0 - csrw mip, 0 - #endif - - - li x1, 0 - li x2, 0 - li x3, 0 - li x4, 0 - li x5, 0 - li x6, 0 - li x7, 0 - li x8, 0 - li x9, 0 - // a0..a2 (x10..x12) skipped - li x13,0 - li x14,0 - li x15,0 - li x16,0 - li x17,0 - li x18,0 - li x19,0 - li x20,0 - li x21,0 - li x22,0 - li x23,0 - li x24,0 - li x25,0 - li x26,0 - li x27,0 - li x28,0 - li x29,0 - li x30,0 - li x31,0 - - .option push - .option norelax - la gp, __global_pointer$ - .option pop - - #ifdef SMODE - // there is no equivalent of mhartid in supervisor mode. - // instead, the hartid is passed as paramter by SMODE - mv t2, a0 - #else - csrr t2, mhartid - #endif - lui t0, %hi(_max_hart_id) - add t0, t0, %lo(_max_hart_id) - bgtu t2, t0, abort - - // Allocate stacks - la sp, _stack_start - lui t0, %hi(_hart_stack_size) - add t0, t0, %lo(_hart_stack_size) -#ifdef __riscv_mul - mul t0, t2, t0 -#else - beqz t2, 2f // Jump if single-hart - mv t1, t2 - mv t3, t0 -1: - add t0, t0, t3 - addi t1, t1, -1 - bnez t1, 1b -2: -#endif - sub sp, sp, t0 - - // Set frame pointer - add s0, sp, zero - - jal zero, _start_rust - - .cfi_endproc - -/* - Trap entry point (_start_trap) - - Saves caller saved registers ra, t0..6, a0..7, calls _start_trap_rust, - restores caller saved registers and then returns. -*/ -.section .trap, "ax" -.global default_start_trap - -default_start_trap: - addi sp, sp, -16*REGBYTES - - STORE ra, 0*REGBYTES(sp) - STORE t0, 1*REGBYTES(sp) - STORE t1, 2*REGBYTES(sp) - STORE t2, 3*REGBYTES(sp) - STORE t3, 4*REGBYTES(sp) - STORE t4, 5*REGBYTES(sp) - STORE t5, 6*REGBYTES(sp) - STORE t6, 7*REGBYTES(sp) - STORE a0, 8*REGBYTES(sp) - STORE a1, 9*REGBYTES(sp) - STORE a2, 10*REGBYTES(sp) - STORE a3, 11*REGBYTES(sp) - STORE a4, 12*REGBYTES(sp) - STORE a5, 13*REGBYTES(sp) - STORE a6, 14*REGBYTES(sp) - STORE a7, 15*REGBYTES(sp) - - add a0, sp, zero - jal ra, _start_trap_rust - - LOAD ra, 0*REGBYTES(sp) - LOAD t0, 1*REGBYTES(sp) - LOAD t1, 2*REGBYTES(sp) - LOAD t2, 3*REGBYTES(sp) - LOAD t3, 4*REGBYTES(sp) - LOAD t4, 5*REGBYTES(sp) - LOAD t5, 6*REGBYTES(sp) - LOAD t6, 7*REGBYTES(sp) - LOAD a0, 8*REGBYTES(sp) - LOAD a1, 9*REGBYTES(sp) - LOAD a2, 10*REGBYTES(sp) - LOAD a3, 11*REGBYTES(sp) - LOAD a4, 12*REGBYTES(sp) - LOAD a5, 13*REGBYTES(sp) - LOAD a6, 14*REGBYTES(sp) - LOAD a7, 15*REGBYTES(sp) - - addi sp, sp, 16*REGBYTES - #ifdef SMODE - sret - #else - mret - #endif - -/* Make sure there is an abort when linking */ -.section .text.abort -.globl abort -abort: - j abort diff --git a/riscv-rt/asm/riscv32i-unknown-none-elf-m.s b/riscv-rt/asm/riscv32i-unknown-none-elf-m.s deleted file mode 100644 index f501993c..00000000 --- a/riscv-rt/asm/riscv32i-unknown-none-elf-m.s +++ /dev/null @@ -1,123 +0,0 @@ - .text - .attribute 4, 16 - .attribute 5, "rv32i2p0" - .file "zk0t2u2b1an050m" - - .section .init,"ax",@progbits - .globl _start - -_start: - - lui ra, %hi(_abs_start) - jalr zero, %lo(_abs_start)(ra) - -_abs_start: - .cfi_startproc - .cfi_undefined ra - csrwi mie, 0 - csrwi mip, 0 - li ra, 0 - li sp, 0 - li gp, 0 - li tp, 0 - li t0, 0 - li t1, 0 - li t2, 0 - li s0, 0 - li s1, 0 - li a3, 0 - li a4, 0 - li a5, 0 - li a6, 0 - li a7, 0 - li s2, 0 - li s3, 0 - li s4, 0 - li s5, 0 - li s6, 0 - li s7, 0 - li s8, 0 - li s9, 0 - li s10, 0 - li s11, 0 - li t3, 0 - li t4, 0 - li t5, 0 - li t6, 0 - - .option push - - .option norelax - -.Lpcrel_hi0: - auipc gp, %pcrel_hi(__global_pointer$) - addi gp, gp, %pcrel_lo(.Lpcrel_hi0) - .option pop - - csrr t2, mhartid - lui t0, %hi(_max_hart_id) - addi t0, t0, %lo(_max_hart_id) - bltu t0, t2, abort - -.Lpcrel_hi1: - auipc sp, %pcrel_hi(_stack_start) - addi sp, sp, %pcrel_lo(.Lpcrel_hi1) - lui t0, %hi(_hart_stack_size) - addi t0, t0, %lo(_hart_stack_size) - beqz t2, .Ltmp0 - mv t1, t2 - mv t3, t0 -.Ltmp1: - add t0, t0, t3 - addi t1, t1, -1 - bnez t1, .Ltmp1 -.Ltmp0: - sub sp, sp, t0 - add s0, sp, zero - j _start_rust - - .cfi_endproc - .section .trap,"ax",@progbits - .globl default_start_trap -default_start_trap: - addi sp, sp, -64 - sw ra, 0(sp) - sw t0, 4(sp) - sw t1, 8(sp) - sw t2, 12(sp) - sw t3, 16(sp) - sw t4, 20(sp) - sw t5, 24(sp) - sw t6, 28(sp) - sw a0, 32(sp) - sw a1, 36(sp) - sw a2, 40(sp) - sw a3, 44(sp) - sw a4, 48(sp) - sw a5, 52(sp) - sw a6, 56(sp) - sw a7, 60(sp) - mv a0, sp - jal _start_trap_rust - lw ra, 0(sp) - lw t0, 4(sp) - lw t1, 8(sp) - lw t2, 12(sp) - lw t3, 16(sp) - lw t4, 20(sp) - lw t5, 24(sp) - lw t6, 28(sp) - lw a0, 32(sp) - lw a1, 36(sp) - lw a2, 40(sp) - lw a3, 44(sp) - lw a4, 48(sp) - lw a5, 52(sp) - lw a6, 56(sp) - lw a7, 60(sp) - addi sp, sp, 64 - mret - .section .text.abort,"ax",@progbits - .globl abort -abort: - j abort diff --git a/riscv-rt/asm/riscv32i-unknown-none-elf-s.s b/riscv-rt/asm/riscv32i-unknown-none-elf-s.s deleted file mode 100644 index 52b84f70..00000000 --- a/riscv-rt/asm/riscv32i-unknown-none-elf-s.s +++ /dev/null @@ -1,123 +0,0 @@ - .text - .attribute 4, 16 - .attribute 5, "rv32i2p0" - .file "eaqpawb8fun9h0d" - - .section .init,"ax",@progbits - .globl _start - -_start: - - lui ra, %hi(_abs_start) - jalr zero, %lo(_abs_start)(ra) - -_abs_start: - .cfi_startproc - .cfi_undefined ra - csrwi sie, 0 - csrwi sip, 0 - li ra, 0 - li sp, 0 - li gp, 0 - li tp, 0 - li t0, 0 - li t1, 0 - li t2, 0 - li s0, 0 - li s1, 0 - li a3, 0 - li a4, 0 - li a5, 0 - li a6, 0 - li a7, 0 - li s2, 0 - li s3, 0 - li s4, 0 - li s5, 0 - li s6, 0 - li s7, 0 - li s8, 0 - li s9, 0 - li s10, 0 - li s11, 0 - li t3, 0 - li t4, 0 - li t5, 0 - li t6, 0 - - .option push - - .option norelax - -.Lpcrel_hi0: - auipc gp, %pcrel_hi(__global_pointer$) - addi gp, gp, %pcrel_lo(.Lpcrel_hi0) - .option pop - - mv t2, a0 - lui t0, %hi(_max_hart_id) - addi t0, t0, %lo(_max_hart_id) - bltu t0, t2, abort - -.Lpcrel_hi1: - auipc sp, %pcrel_hi(_stack_start) - addi sp, sp, %pcrel_lo(.Lpcrel_hi1) - lui t0, %hi(_hart_stack_size) - addi t0, t0, %lo(_hart_stack_size) - beqz t2, .Ltmp0 - mv t1, t2 - mv t3, t0 -.Ltmp1: - add t0, t0, t3 - addi t1, t1, -1 - bnez t1, .Ltmp1 -.Ltmp0: - sub sp, sp, t0 - add s0, sp, zero - j _start_rust - - .cfi_endproc - .section .trap,"ax",@progbits - .globl default_start_trap -default_start_trap: - addi sp, sp, -64 - sw ra, 0(sp) - sw t0, 4(sp) - sw t1, 8(sp) - sw t2, 12(sp) - sw t3, 16(sp) - sw t4, 20(sp) - sw t5, 24(sp) - sw t6, 28(sp) - sw a0, 32(sp) - sw a1, 36(sp) - sw a2, 40(sp) - sw a3, 44(sp) - sw a4, 48(sp) - sw a5, 52(sp) - sw a6, 56(sp) - sw a7, 60(sp) - mv a0, sp - jal _start_trap_rust - lw ra, 0(sp) - lw t0, 4(sp) - lw t1, 8(sp) - lw t2, 12(sp) - lw t3, 16(sp) - lw t4, 20(sp) - lw t5, 24(sp) - lw t6, 28(sp) - lw a0, 32(sp) - lw a1, 36(sp) - lw a2, 40(sp) - lw a3, 44(sp) - lw a4, 48(sp) - lw a5, 52(sp) - lw a6, 56(sp) - lw a7, 60(sp) - addi sp, sp, 64 - sret - .section .text.abort,"ax",@progbits - .globl abort -abort: - j abort diff --git a/riscv-rt/asm/riscv32imac-unknown-none-elf-m.s b/riscv-rt/asm/riscv32imac-unknown-none-elf-m.s deleted file mode 100644 index eee62b9f..00000000 --- a/riscv-rt/asm/riscv32imac-unknown-none-elf-m.s +++ /dev/null @@ -1,116 +0,0 @@ - .text - .attribute 4, 16 - .attribute 5, "rv32i2p0_m2p0_a2p0_c2p0" - .file "3wdx7lxc78dgym21" - - .section .init,"ax",@progbits - .globl _start - -_start: - - lui ra, %hi(_abs_start) - jalr zero, %lo(_abs_start)(ra) - -_abs_start: - .cfi_startproc - .cfi_undefined ra - csrwi mie, 0 - csrwi mip, 0 - li ra, 0 - li sp, 0 - li gp, 0 - li tp, 0 - li t0, 0 - li t1, 0 - li t2, 0 - li s0, 0 - li s1, 0 - li a3, 0 - li a4, 0 - li a5, 0 - li a6, 0 - li a7, 0 - li s2, 0 - li s3, 0 - li s4, 0 - li s5, 0 - li s6, 0 - li s7, 0 - li s8, 0 - li s9, 0 - li s10, 0 - li s11, 0 - li t3, 0 - li t4, 0 - li t5, 0 - li t6, 0 - - .option push - - .option norelax - -.Lpcrel_hi0: - auipc gp, %pcrel_hi(__global_pointer$) - addi gp, gp, %pcrel_lo(.Lpcrel_hi0) - .option pop - - csrr t2, mhartid - lui t0, %hi(_max_hart_id) - addi t0, t0, %lo(_max_hart_id) - bltu t0, t2, abort - -.Lpcrel_hi1: - auipc sp, %pcrel_hi(_stack_start) - addi sp, sp, %pcrel_lo(.Lpcrel_hi1) - lui t0, %hi(_hart_stack_size) - addi t0, t0, %lo(_hart_stack_size) - mul t0, t2, t0 - sub sp, sp, t0 - mv s0, sp - j _start_rust - - .cfi_endproc - .section .trap,"ax",@progbits - .globl default_start_trap -default_start_trap: - addi sp, sp, -64 - sw ra, 0(sp) - sw t0, 4(sp) - sw t1, 8(sp) - sw t2, 12(sp) - sw t3, 16(sp) - sw t4, 20(sp) - sw t5, 24(sp) - sw t6, 28(sp) - sw a0, 32(sp) - sw a1, 36(sp) - sw a2, 40(sp) - sw a3, 44(sp) - sw a4, 48(sp) - sw a5, 52(sp) - sw a6, 56(sp) - sw a7, 60(sp) - mv a0, sp - jal _start_trap_rust - lw ra, 0(sp) - lw t0, 4(sp) - lw t1, 8(sp) - lw t2, 12(sp) - lw t3, 16(sp) - lw t4, 20(sp) - lw t5, 24(sp) - lw t6, 28(sp) - lw a0, 32(sp) - lw a1, 36(sp) - lw a2, 40(sp) - lw a3, 44(sp) - lw a4, 48(sp) - lw a5, 52(sp) - lw a6, 56(sp) - lw a7, 60(sp) - addi sp, sp, 64 - mret - .section .text.abort,"ax",@progbits - .globl abort -abort: - j abort diff --git a/riscv-rt/asm/riscv32imac-unknown-none-elf-s.s b/riscv-rt/asm/riscv32imac-unknown-none-elf-s.s deleted file mode 100644 index 32d504a9..00000000 --- a/riscv-rt/asm/riscv32imac-unknown-none-elf-s.s +++ /dev/null @@ -1,116 +0,0 @@ - .text - .attribute 4, 16 - .attribute 5, "rv32i2p0_m2p0_a2p0_c2p0" - .file "2mpkjzuft8hmeuib" - - .section .init,"ax",@progbits - .globl _start - -_start: - - lui ra, %hi(_abs_start) - jalr zero, %lo(_abs_start)(ra) - -_abs_start: - .cfi_startproc - .cfi_undefined ra - csrwi sie, 0 - csrwi sip, 0 - li ra, 0 - li sp, 0 - li gp, 0 - li tp, 0 - li t0, 0 - li t1, 0 - li t2, 0 - li s0, 0 - li s1, 0 - li a3, 0 - li a4, 0 - li a5, 0 - li a6, 0 - li a7, 0 - li s2, 0 - li s3, 0 - li s4, 0 - li s5, 0 - li s6, 0 - li s7, 0 - li s8, 0 - li s9, 0 - li s10, 0 - li s11, 0 - li t3, 0 - li t4, 0 - li t5, 0 - li t6, 0 - - .option push - - .option norelax - -.Lpcrel_hi0: - auipc gp, %pcrel_hi(__global_pointer$) - addi gp, gp, %pcrel_lo(.Lpcrel_hi0) - .option pop - - mv t2, a0 - lui t0, %hi(_max_hart_id) - addi t0, t0, %lo(_max_hart_id) - bltu t0, t2, abort - -.Lpcrel_hi1: - auipc sp, %pcrel_hi(_stack_start) - addi sp, sp, %pcrel_lo(.Lpcrel_hi1) - lui t0, %hi(_hart_stack_size) - addi t0, t0, %lo(_hart_stack_size) - mul t0, t2, t0 - sub sp, sp, t0 - mv s0, sp - j _start_rust - - .cfi_endproc - .section .trap,"ax",@progbits - .globl default_start_trap -default_start_trap: - addi sp, sp, -64 - sw ra, 0(sp) - sw t0, 4(sp) - sw t1, 8(sp) - sw t2, 12(sp) - sw t3, 16(sp) - sw t4, 20(sp) - sw t5, 24(sp) - sw t6, 28(sp) - sw a0, 32(sp) - sw a1, 36(sp) - sw a2, 40(sp) - sw a3, 44(sp) - sw a4, 48(sp) - sw a5, 52(sp) - sw a6, 56(sp) - sw a7, 60(sp) - mv a0, sp - jal _start_trap_rust - lw ra, 0(sp) - lw t0, 4(sp) - lw t1, 8(sp) - lw t2, 12(sp) - lw t3, 16(sp) - lw t4, 20(sp) - lw t5, 24(sp) - lw t6, 28(sp) - lw a0, 32(sp) - lw a1, 36(sp) - lw a2, 40(sp) - lw a3, 44(sp) - lw a4, 48(sp) - lw a5, 52(sp) - lw a6, 56(sp) - lw a7, 60(sp) - addi sp, sp, 64 - sret - .section .text.abort,"ax",@progbits - .globl abort -abort: - j abort diff --git a/riscv-rt/asm/riscv64imac-unknown-none-elf-m.s b/riscv-rt/asm/riscv64imac-unknown-none-elf-m.s deleted file mode 100644 index 3d57d129..00000000 --- a/riscv-rt/asm/riscv64imac-unknown-none-elf-m.s +++ /dev/null @@ -1,126 +0,0 @@ - .text - .attribute 4, 16 - .attribute 5, "rv64i2p0_m2p0_a2p0_c2p0" - .file "1ruuache5c4x1fns" - - .section .init,"ax",@progbits - .globl _start - -_start: - - .option push - - .option norelax -.Ltmp0: - auipc ra, %pcrel_hi(.Ltmp1) - ld ra, %pcrel_lo(.Ltmp0)(ra) - ret - .p2align 3 -.Ltmp1: - .quad _abs_start - .option pop - - -_abs_start: - .cfi_startproc - .cfi_undefined ra - csrwi mie, 0 - csrwi mip, 0 - li ra, 0 - li sp, 0 - li gp, 0 - li tp, 0 - li t0, 0 - li t1, 0 - li t2, 0 - li s0, 0 - li s1, 0 - li a3, 0 - li a4, 0 - li a5, 0 - li a6, 0 - li a7, 0 - li s2, 0 - li s3, 0 - li s4, 0 - li s5, 0 - li s6, 0 - li s7, 0 - li s8, 0 - li s9, 0 - li s10, 0 - li s11, 0 - li t3, 0 - li t4, 0 - li t5, 0 - li t6, 0 - - .option push - - .option norelax - -.Lpcrel_hi0: - auipc gp, %pcrel_hi(__global_pointer$) - addi gp, gp, %pcrel_lo(.Lpcrel_hi0) - .option pop - - csrr t2, mhartid - lui t0, %hi(_max_hart_id) - addi t0, t0, %lo(_max_hart_id) - bltu t0, t2, abort - -.Lpcrel_hi1: - auipc sp, %pcrel_hi(_stack_start) - addi sp, sp, %pcrel_lo(.Lpcrel_hi1) - lui t0, %hi(_hart_stack_size) - addi t0, t0, %lo(_hart_stack_size) - mul t0, t2, t0 - sub sp, sp, t0 - mv s0, sp - j _start_rust - - .cfi_endproc - .section .trap,"ax",@progbits - .globl default_start_trap -default_start_trap: - addi sp, sp, -128 - sd ra, 0(sp) - sd t0, 8(sp) - sd t1, 16(sp) - sd t2, 24(sp) - sd t3, 32(sp) - sd t4, 40(sp) - sd t5, 48(sp) - sd t6, 56(sp) - sd a0, 64(sp) - sd a1, 72(sp) - sd a2, 80(sp) - sd a3, 88(sp) - sd a4, 96(sp) - sd a5, 104(sp) - sd a6, 112(sp) - sd a7, 120(sp) - mv a0, sp - jal _start_trap_rust - ld ra, 0(sp) - ld t0, 8(sp) - ld t1, 16(sp) - ld t2, 24(sp) - ld t3, 32(sp) - ld t4, 40(sp) - ld t5, 48(sp) - ld t6, 56(sp) - ld a0, 64(sp) - ld a1, 72(sp) - ld a2, 80(sp) - ld a3, 88(sp) - ld a4, 96(sp) - ld a5, 104(sp) - ld a6, 112(sp) - ld a7, 120(sp) - addi sp, sp, 128 - mret - .section .text.abort,"ax",@progbits - .globl abort -abort: - j abort diff --git a/riscv-rt/asm/riscv64imac-unknown-none-elf-s.s b/riscv-rt/asm/riscv64imac-unknown-none-elf-s.s deleted file mode 100644 index 5626f5d5..00000000 --- a/riscv-rt/asm/riscv64imac-unknown-none-elf-s.s +++ /dev/null @@ -1,126 +0,0 @@ - .text - .attribute 4, 16 - .attribute 5, "rv64i2p0_m2p0_a2p0_c2p0" - .file "5194e8m2dkkkh98p" - - .section .init,"ax",@progbits - .globl _start - -_start: - - .option push - - .option norelax -.Ltmp0: - auipc ra, %pcrel_hi(.Ltmp1) - ld ra, %pcrel_lo(.Ltmp0)(ra) - ret - .p2align 3 -.Ltmp1: - .quad _abs_start - .option pop - - -_abs_start: - .cfi_startproc - .cfi_undefined ra - csrwi sie, 0 - csrwi sip, 0 - li ra, 0 - li sp, 0 - li gp, 0 - li tp, 0 - li t0, 0 - li t1, 0 - li t2, 0 - li s0, 0 - li s1, 0 - li a3, 0 - li a4, 0 - li a5, 0 - li a6, 0 - li a7, 0 - li s2, 0 - li s3, 0 - li s4, 0 - li s5, 0 - li s6, 0 - li s7, 0 - li s8, 0 - li s9, 0 - li s10, 0 - li s11, 0 - li t3, 0 - li t4, 0 - li t5, 0 - li t6, 0 - - .option push - - .option norelax - -.Lpcrel_hi0: - auipc gp, %pcrel_hi(__global_pointer$) - addi gp, gp, %pcrel_lo(.Lpcrel_hi0) - .option pop - - mv t2, a0 - lui t0, %hi(_max_hart_id) - addi t0, t0, %lo(_max_hart_id) - bltu t0, t2, abort - -.Lpcrel_hi1: - auipc sp, %pcrel_hi(_stack_start) - addi sp, sp, %pcrel_lo(.Lpcrel_hi1) - lui t0, %hi(_hart_stack_size) - addi t0, t0, %lo(_hart_stack_size) - mul t0, t2, t0 - sub sp, sp, t0 - mv s0, sp - j _start_rust - - .cfi_endproc - .section .trap,"ax",@progbits - .globl default_start_trap -default_start_trap: - addi sp, sp, -128 - sd ra, 0(sp) - sd t0, 8(sp) - sd t1, 16(sp) - sd t2, 24(sp) - sd t3, 32(sp) - sd t4, 40(sp) - sd t5, 48(sp) - sd t6, 56(sp) - sd a0, 64(sp) - sd a1, 72(sp) - sd a2, 80(sp) - sd a3, 88(sp) - sd a4, 96(sp) - sd a5, 104(sp) - sd a6, 112(sp) - sd a7, 120(sp) - mv a0, sp - jal _start_trap_rust - ld ra, 0(sp) - ld t0, 8(sp) - ld t1, 16(sp) - ld t2, 24(sp) - ld t3, 32(sp) - ld t4, 40(sp) - ld t5, 48(sp) - ld t6, 56(sp) - ld a0, 64(sp) - ld a1, 72(sp) - ld a2, 80(sp) - ld a3, 88(sp) - ld a4, 96(sp) - ld a5, 104(sp) - ld a6, 112(sp) - ld a7, 120(sp) - addi sp, sp, 128 - sret - .section .text.abort,"ax",@progbits - .globl abort -abort: - j abort From e540f1e410d5d010f9b9d90c5aea99c1742bd2ac Mon Sep 17 00:00:00 2001 From: Chien Wong Date: Sun, 30 Jul 2023 23:18:44 +0800 Subject: [PATCH 207/234] Add feature single-hart Signed-off-by: Chien Wong --- riscv-rt/Cargo.toml | 1 + riscv-rt/src/asm.rs | 22 +++++++++++----------- riscv-rt/src/lib.rs | 4 ++++ 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index 5fc45ccf..719beb50 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -12,6 +12,7 @@ edition = "2018" [features] s-mode = [] +single-hart = [] [dependencies] r0 = "1.0.0" diff --git a/riscv-rt/src/asm.rs b/riscv-rt/src/asm.rs index f4dbf5d8..c29d9183 100644 --- a/riscv-rt/src/asm.rs +++ b/riscv-rt/src/asm.rs @@ -86,21 +86,21 @@ _abs_start: .option norelax la gp, __global_pointer$ .option pop", - #[cfg(feature = "s-mode")] + #[cfg(all(not(feature = "single-hart"), feature = "s-mode"))] "mv t2, a0 // the hartid is passed as parameter by SMODE", - #[cfg(not(feature = "s-mode"))] + #[cfg(all(not(feature = "single-hart"), not(feature = "s-mode")))] "csrr t2, mhartid", + #[cfg(not(feature = "single-hart"))] "lui t0, %hi(_max_hart_id) add t0, t0, %lo(_max_hart_id) - bgtu t2, t0, abort - - // Allocate stacks + bgtu t2, t0, abort", + "// Allocate stacks la sp, _stack_start lui t0, %hi(_hart_stack_size) add t0, t0, %lo(_hart_stack_size)", - #[cfg(riscvm)] + #[cfg(all(not(feature = "single-hart"), riscvm))] "mul t0, t2, t0", - #[cfg(not(riscvm))] + #[cfg(all(not(feature = "single-hart"), not(riscvm)))] "beqz t2, 2f // Jump if single-hart mv t1, t2 mv t3, t0 @@ -110,8 +110,8 @@ _abs_start: bnez t1, 1b 2: ", "sub sp, sp, t0 - - // Set frame pointer + + // Set frame pointer add s0, sp, zero jal zero, _start_rust @@ -121,9 +121,9 @@ _abs_start: /// Trap entry point (_start_trap). It saves caller saved registers, calls /// _start_trap_rust, restores caller saved registers and then returns. -/// +/// /// # Usage -/// +/// /// The macro takes 5 arguments: /// - `$STORE`: the instruction used to store a register in the stack (e.g. `sd` for riscv64) /// - `$LOAD`: the instruction used to load a register from the stack (e.g. `ld` for riscv64) diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index e0613127..3aff50ef 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -325,6 +325,10 @@ //! //! # Features //! +//! ## `single-hart` +//! +//! This feature saves a little code size by removing unnecessary stack space calculation if there is only one hart on the target. +//! //! ## `s-mode` //! //! The supervisor mode feature (`s-mode`) can be activated via [Cargo features](https://doc.rust-lang.org/cargo/reference/features.html). From 89be0f4d1fb228d92e2e8a22dfc10d46749c8e68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rom=C3=A1n=20C=C3=A1rdenas?= Date: Fri, 11 Aug 2023 16:49:41 +0200 Subject: [PATCH 208/234] cargo clippy --fix --- riscv-rt/src/lib.rs | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index 3aff50ef..f8bf60a2 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -472,17 +472,15 @@ pub extern "C" fn start_trap_rust(trap_frame: *const TrapFrame) { if cause.is_exception() { ExceptionHandler(&*trap_frame) - } else { - if cause.code() < __INTERRUPTS.len() { - let h = &__INTERRUPTS[cause.code()]; - if h.reserved == 0 { - DefaultHandler(); - } else { - (h.handler)(); - } - } else { + } else if cause.code() < __INTERRUPTS.len() { + let h = &__INTERRUPTS[cause.code()]; + if h.reserved == 0 { DefaultHandler(); + } else { + (h.handler)(); } + } else { + DefaultHandler(); } } } From a47aca14412374641f7909ecd035da9776e6209d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rom=C3=A1n=20C=C3=A1rdenas?= Date: Fri, 11 Aug 2023 17:07:20 +0200 Subject: [PATCH 209/234] Added clippy workflow --- riscv-rt/.github/workflows/clippy.yaml | 42 ++++++++++++++++++++++++ riscv-rt/CHANGELOG.md | 5 +++ riscv-rt/src/lib.rs | 45 +++++++++++++++----------- 3 files changed, 73 insertions(+), 19 deletions(-) create mode 100644 riscv-rt/.github/workflows/clippy.yaml diff --git a/riscv-rt/.github/workflows/clippy.yaml b/riscv-rt/.github/workflows/clippy.yaml new file mode 100644 index 00000000..7c0d5474 --- /dev/null +++ b/riscv-rt/.github/workflows/clippy.yaml @@ -0,0 +1,42 @@ +on: + push: + branches: [ master ] + pull_request: + merge_group: + +name: Lints compliance check + +env: + CLIPPY_PARAMS: -W clippy::all -W clippy::pedantic -W clippy::nursery -W clippy::cargo + +jobs: + clippy: + strategy: + matrix: + toolchain: [ stable, nightly ] + cargo_flags: + - "--no-default-features" + - "--all-features" + include: + # Nightly is only for reference and allowed to fail + - toolchain: nightly + experimental: true + runs-on: ubuntu-latest + continue-on-error: ${{ matrix.experimental || false }} + steps: + - uses: actions/checkout@v3 + - uses: dtolnay/rust-toolchain@master + with: + toolchain: ${{ matrix.toolchain }} + components: clippy + - name: Run clippy + run: cargo clippy --all ${{ matrix.cargo_flags }} -- -D warnings + + # Job to check that all the lint checks succeeded + clippy-check: + needs: + - clippy + runs-on: ubuntu-latest + if: always() + steps: + - run: jq --exit-status 'all(.result == "success")' <<< '${{ toJson(needs) }}' diff --git a/riscv-rt/CHANGELOG.md b/riscv-rt/CHANGELOG.md index 3cb7aeb0..ed532c57 100644 --- a/riscv-rt/CHANGELOG.md +++ b/riscv-rt/CHANGELOG.md @@ -7,10 +7,15 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] +### Added + +- New GitHub workflow for checking clippy lints in PRs + ### Changed - Use inline assembly instead of pre-compiled blobs - Removed bors in favor of GitHub Merge Queue +- `start_trap_rust` is now marked as `unsafe` ## [v0.11.0] - 2023-01-18 diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index f8bf60a2..b96c4283 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -106,9 +106,9 @@ //! Disassembly of section .text: //! //! 20000000 <_start>: -//! 20000000: 800011b7 lui gp,0x80001 -//! 20000004: 80018193 addi gp,gp,-2048 # 80000800 <_stack_start+0xffffc800> -//! 20000008: 80004137 lui sp,0x80004 +//! 20000000: 800011b7 lui gp,0x80001 +//! 20000004: 80018193 addi gp,gp,-2048 # 80000800 <_stack_start+0xffffc800> +//! 20000008: 80004137 lui sp,0x80004 //! ``` //! //! # Symbol interfaces @@ -393,8 +393,12 @@ extern "C" { /// Rust entry point (_start_rust) /// -/// Zeros bss section, initializes data section and calls main. This function -/// never returns. +/// Zeros bss section, initializes data section and calls main. This function never returns. +/// +/// # Safety +/// +/// This function must be called only from assembly `_start` function. +/// Do **NOT** call this function directly. #[link_section = ".init.rust"] #[export_name = "_start_rust"] pub unsafe extern "C" fn start_rust(a0: usize, a1: usize, a2: usize) -> ! { @@ -459,29 +463,32 @@ pub struct TrapFrame { /// `scause`/`mcause` is read to determine the cause of the trap. XLEN-1 bit indicates /// if it's an interrupt or an exception. The result is examined and ExceptionHandler /// or one of the core interrupt handlers is called. +/// +/// # Safety +/// +/// This function must be called only from assembly `_start_trap` function. +/// Do **NOT** call this function directly. #[link_section = ".trap.rust"] #[export_name = "_start_trap_rust"] -pub extern "C" fn start_trap_rust(trap_frame: *const TrapFrame) { +pub unsafe extern "C" fn start_trap_rust(trap_frame: *const TrapFrame) { extern "C" { fn ExceptionHandler(trap_frame: &TrapFrame); fn DefaultHandler(); } - unsafe { - let cause = xcause::read(); - - if cause.is_exception() { - ExceptionHandler(&*trap_frame) - } else if cause.code() < __INTERRUPTS.len() { - let h = &__INTERRUPTS[cause.code()]; - if h.reserved == 0 { - DefaultHandler(); - } else { - (h.handler)(); - } - } else { + let cause = xcause::read(); + + if cause.is_exception() { + ExceptionHandler(&*trap_frame) + } else if cause.code() < __INTERRUPTS.len() { + let h = &__INTERRUPTS[cause.code()]; + if h.reserved == 0 { DefaultHandler(); + } else { + (h.handler)(); } + } else { + DefaultHandler(); } } From eef90a0f2552307f2c5e666508a4bd971dcb40a3 Mon Sep 17 00:00:00 2001 From: Gijs Burghoorn Date: Fri, 22 Sep 2023 19:34:44 +0200 Subject: [PATCH 210/234] Implement r0 crate in assembly This implements the `r0::init_data` and `r0::zero_bss` routines in assembly. There is a generic implementation for `riscv32` and `riscv64`, since `riscv64` deals with alignment problems. The routines are kept at their old calling site so that only one hardware thread calls them. Consequently they are also inlined into the `start_rust` function. [Issue #122] --- riscv-rt/Cargo.toml | 1 - riscv-rt/link.x | 2 +- riscv-rt/src/lib.rs | 62 ++++++++++++++++++++++++++++++++++----------- 3 files changed, 48 insertions(+), 17 deletions(-) diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index 719beb50..c65c24e5 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -15,7 +15,6 @@ s-mode = [] single-hart = [] [dependencies] -r0 = "1.0.0" riscv = "0.10" riscv-rt-macros = { path = "macros", version = "0.2.0" } diff --git a/riscv-rt/link.x b/riscv-rt/link.x index 57301e2c..deadea88 100644 --- a/riscv-rt/link.x +++ b/riscv-rt/link.x @@ -84,7 +84,7 @@ SECTIONS _edata = .; } > REGION_DATA AT > REGION_RODATA - .bss (NOLOAD) : + .bss (NOLOAD) : ALIGN(4) { _sbss = .; *(.sbss .sbss.* .bss .bss.*); diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index b96c4283..4eb2d609 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -366,6 +366,8 @@ #[cfg(riscv)] mod asm; +use core::sync::atomic::{compiler_fence, Ordering}; + #[cfg(feature = "s-mode")] use riscv::register::{scause as xcause, stvec as xtvec, stvec::TrapMode as xTrapMode}; @@ -378,19 +380,6 @@ pub use riscv_rt_macros::{entry, pre_init}; #[doc(hidden)] pub static __ONCE__: () = (); -extern "C" { - // Boundaries of the .bss section - static mut _ebss: u32; - static mut _sbss: u32; - - // Boundaries of the .data section - static mut _edata: u32; - static mut _sdata: u32; - - // Initial values of the .data section (stored in Flash) - static _sidata: u32; -} - /// Rust entry point (_start_rust) /// /// Zeros bss section, initializes data section and calls main. This function never returns. @@ -424,8 +413,51 @@ pub unsafe extern "C" fn start_rust(a0: usize, a1: usize, a2: usize) -> ! { if _mp_hook(hartid) { __pre_init(); - r0::zero_bss(&mut _sbss, &mut _ebss); - r0::init_data(&mut _sdata, &mut _edata, &_sidata); + // Initialize RAM (32-bit version) + // 1. Copy over .data from flash to RAM + // 2. Zero out .bss + core::arch::asm!( + " + // Copy over .data + la {start},_sdata + la {end},_edata + la {input},_sidata + + 1: + addi {a},{start},4 + bgeu {a},{end},1f + lw {b},0({input}) + sw {b},0({start}) + addi {start},{start},4 + addi {input},{input},4 + j 1b + + 1: + // Zero out .bss + la {start},_sbss + la {end},_ebss + + 2: + addi {a},{start},4 + bgeu {a},{end},2f + sw zero,0({start}) + addi {start},{start},4 + j 2b + + 2: + + li {start},0 + li {end},0 + li {input},0 + ", + start = out(reg) _, + end = out(reg) _, + input = out(reg) _, + a = out(reg) _, + b = out(reg) _, + ); + + compiler_fence(Ordering::SeqCst); } // TODO: Enable FPU when available From 1f29bd359522123c966949cd4fe8426ff87337ae Mon Sep 17 00:00:00 2001 From: Gijs Burghoorn Date: Thu, 28 Sep 2023 17:48:10 +0200 Subject: [PATCH 211/234] Impr: r0 loops to minimize instructions --- riscv-rt/src/lib.rs | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index 4eb2d609..e0534140 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -413,7 +413,7 @@ pub unsafe extern "C" fn start_rust(a0: usize, a1: usize, a2: usize) -> ! { if _mp_hook(hartid) { __pre_init(); - // Initialize RAM (32-bit version) + // Initialize RAM // 1. Copy over .data from flash to RAM // 2. Zero out .bss core::arch::asm!( @@ -423,29 +423,28 @@ pub unsafe extern "C" fn start_rust(a0: usize, a1: usize, a2: usize) -> ! { la {end},_edata la {input},_sidata + bgeu {start},{end},2f 1: - addi {a},{start},4 - bgeu {a},{end},1f - lw {b},0({input}) - sw {b},0({start}) - addi {start},{start},4 + lw {a},0({input}) addi {input},{input},4 - j 1b + sw {a},0({start}) + addi {start},{start},4 + bltu {start},{end},1b + + 2: + li {a},0 - 1: // Zero out .bss la {start},_sbss la {end},_ebss + bgeu {start},{end},3f 2: - addi {a},{start},4 - bgeu {a},{end},2f sw zero,0({start}) addi {start},{start},4 - j 2b - - 2: + bltu {start},{end},2b + 3: li {start},0 li {end},0 li {input},0 @@ -454,7 +453,6 @@ pub unsafe extern "C" fn start_rust(a0: usize, a1: usize, a2: usize) -> ! { end = out(reg) _, input = out(reg) _, a = out(reg) _, - b = out(reg) _, ); compiler_fence(Ordering::SeqCst); From 6c517f26618f9f003be5b30a85541c369db1c68d Mon Sep 17 00:00:00 2001 From: Gijs Burghoorn Date: Fri, 29 Sep 2023 13:48:45 +0200 Subject: [PATCH 212/234] Impr: add rv64 version of r0 assembly --- riscv-rt/link.x | 4 ++ riscv-rt/src/lib.rs | 96 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 100 insertions(+) diff --git a/riscv-rt/link.x b/riscv-rt/link.x index deadea88..ebb55c15 100644 --- a/riscv-rt/link.x +++ b/riscv-rt/link.x @@ -150,6 +150,10 @@ BUG(riscv-rt): .data is not 4-byte aligned"); ASSERT(_sidata % 4 == 0, " BUG(riscv-rt): the LMA of .data is not 4-byte aligned"); +/* Make sure that we can safely perform .data initialization on RV64 */ +ASSERT(_sidata % 8 == _sdata % 8, " +BUG(riscv-rt): .data is not similarly 8-byte aligned to the LMA of .data"); + ASSERT(_sbss % 4 == 0 && _ebss % 4 == 0, " BUG(riscv-rt): .bss is not 4-byte aligned"); diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index e0534140..325387b5 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -416,6 +416,8 @@ pub unsafe extern "C" fn start_rust(a0: usize, a1: usize, a2: usize) -> ! { // Initialize RAM // 1. Copy over .data from flash to RAM // 2. Zero out .bss + + #[cfg(target_arch = "riscv32")] core::arch::asm!( " // Copy over .data @@ -455,6 +457,100 @@ pub unsafe extern "C" fn start_rust(a0: usize, a1: usize, a2: usize) -> ! { a = out(reg) _, ); + #[cfg(target_arch = "riscv64")] + core::arch::asm!( + " + // Copy over .data + la {start},_sdata + la {end},_edata + la {input},_sidata + + bgeu {start},{end},3f + + // If _sdata and _sidata are not 8-byte aligned, we copy one word before the main loop. This way, in + // the main loop, we are sure `start` and `input` are 8-byte aligned. This is needed to safely + // perform load and store double instructions. + // + // NOTE: We assert in the `link.x` file that _sdata and _sidata are similarly 8-byte aligned. This is + // needed for the main loop here. + andi {b},{start},4 + beqz {b},0f + lw {a},0({input}) + addi {input},{input},4 + sw {a},0({start}) + addi {start},{start},4 + + 0: // .data Main Loop Initialization + // b = FLOOR_ALIGN(_edata, 4) + andi {b},{end},4 + sub {b},{end},{b} + + bgeu {start},{b},2f + 1: // .data Main Loop + ld {a},0({input}) + addi {input},{input},8 + sd {a},0({start}) + addi {start},{start},8 + bltu {start},{b},1b + + 2: // .data end align + // If _edata is not 8-byte aligned, we copy one word after the main loop. This way we are sure we + // copied all the data even if _edata is 4-byte aligned. + andi {b},{end},4 + beqz {b},3f + lw {a},0({input}) + addi {input},{input},4 + sw {a},0({start}) + addi {start},{start},4 + + 3: // .data zero registers + li {a},0 + li {input},0 + + 4: // zero out .bss start + la {start},_sbss + la {end},_ebss + + bgeu {start},{end},8f + + // If _sbss is not 8-byte aligned, we zero one word before the main loop. This way, in the main + // loop, we are sure `start` is 8-byte aligned. This is needed to safely perform store double + // instruction. + andi {b},{start},4 + beqz {b},5f + sw zero,0({start}) + addi {start},{start},4 + + 5: // .bss main loop initialization + // b = FLOOR_ALIGN(_ebss, 4) + andi {b},{end},4 + sub {b},{end},{b} + + bgeu {start},{b},7f + 6: // .bss main loop + sd zero,0({start}) + addi {start},{start},8 + bltu {start},{b},6b + + 7: // .bss end align + // If _ebss is not 8-byte aligned, we need to zero more one word after the main loop. + andi {b},{end},4 + beqz {b},8f + sw zero,0({start}) + + 8: // .bss zero registers + // Zero out used registers + li {b},0 + li {start},0 + li {end},0 + ", + start = out(reg) _, + end = out(reg) _, + input = out(reg) _, + a = out(reg) _, + b = out(reg) _, + ); + compiler_fence(Ordering::SeqCst); } From 01711b7b210c95ba3b097ec4136ac7c0b71b0a79 Mon Sep 17 00:00:00 2001 From: Gijs Burghoorn Date: Fri, 29 Sep 2023 14:06:21 +0200 Subject: [PATCH 213/234] Doc: Adjust CHANGELOG.md --- riscv-rt/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/riscv-rt/CHANGELOG.md b/riscv-rt/CHANGELOG.md index ed532c57..b49b13c7 100644 --- a/riscv-rt/CHANGELOG.md +++ b/riscv-rt/CHANGELOG.md @@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Use inline assembly instead of pre-compiled blobs - Removed bors in favor of GitHub Merge Queue - `start_trap_rust` is now marked as `unsafe` +- Implement `r0` as inline assembly ## [v0.11.0] - 2023-01-18 From 56125182b03f33cfbfee20c9a7c1bfa16178ed21 Mon Sep 17 00:00:00 2001 From: Gijs Burghoorn Date: Mon, 2 Oct 2023 15:40:12 +0200 Subject: [PATCH 214/234] Fix: Add separate linkerscripts for rv32 and rv64 --- riscv-rt/build.rs | 17 +-- riscv-rt/{link.x => link-rv32.x} | 4 - riscv-rt/link-rv64.x | 174 +++++++++++++++++++++++++++++++ riscv-rt/src/lib.rs | 70 ++----------- 4 files changed, 194 insertions(+), 71 deletions(-) rename riscv-rt/{link.x => link-rv32.x} (96%) create mode 100644 riscv-rt/link-rv64.x diff --git a/riscv-rt/build.rs b/riscv-rt/build.rs index 23177c28..c23da012 100644 --- a/riscv-rt/build.rs +++ b/riscv-rt/build.rs @@ -5,9 +5,17 @@ use std::env; use std::fs; use std::path::PathBuf; +fn add_linker_script(bytes: &[u8]) { + let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap()); + + // Put the linker script somewhere the linker can find it + fs::write(out_dir.join("link.x"), bytes).unwrap(); + println!("cargo:rustc-link-search={}", out_dir.display()); + println!("cargo:rerun-if-changed=link.x"); +} + fn main() { let target = env::var("TARGET").unwrap(); - let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap()); let _name = env::var("CARGO_PKG_NAME").unwrap(); // set configuration flags depending on the target @@ -17,9 +25,11 @@ fn main() { match target.bits { 32 => { println!("cargo:rustc-cfg=riscv32"); + add_linker_script(include_bytes!("link-rv32.x")); } 64 => { println!("cargo:rustc-cfg=riscv64"); + add_linker_script(include_bytes!("link-rv64.x")); } _ => panic!("Unsupported bit width"), } @@ -27,9 +37,4 @@ fn main() { println!("cargo:rustc-cfg=riscvm"); // we can expose extensions this way } } - - // Put the linker script somewhere the linker can find it - fs::write(out_dir.join("link.x"), include_bytes!("link.x")).unwrap(); - println!("cargo:rustc-link-search={}", out_dir.display()); - println!("cargo:rerun-if-changed=link.x"); } diff --git a/riscv-rt/link.x b/riscv-rt/link-rv32.x similarity index 96% rename from riscv-rt/link.x rename to riscv-rt/link-rv32.x index ebb55c15..deadea88 100644 --- a/riscv-rt/link.x +++ b/riscv-rt/link-rv32.x @@ -150,10 +150,6 @@ BUG(riscv-rt): .data is not 4-byte aligned"); ASSERT(_sidata % 4 == 0, " BUG(riscv-rt): the LMA of .data is not 4-byte aligned"); -/* Make sure that we can safely perform .data initialization on RV64 */ -ASSERT(_sidata % 8 == _sdata % 8, " -BUG(riscv-rt): .data is not similarly 8-byte aligned to the LMA of .data"); - ASSERT(_sbss % 4 == 0 && _ebss % 4 == 0, " BUG(riscv-rt): .bss is not 4-byte aligned"); diff --git a/riscv-rt/link-rv64.x b/riscv-rt/link-rv64.x new file mode 100644 index 00000000..8128eac7 --- /dev/null +++ b/riscv-rt/link-rv64.x @@ -0,0 +1,174 @@ +PROVIDE(_stext = ORIGIN(REGION_TEXT)); +PROVIDE(_stack_start = ORIGIN(REGION_STACK) + LENGTH(REGION_STACK)); +PROVIDE(_max_hart_id = 0); +PROVIDE(_hart_stack_size = 2K); +PROVIDE(_heap_size = 0); + +PROVIDE(UserSoft = DefaultHandler); +PROVIDE(SupervisorSoft = DefaultHandler); +PROVIDE(MachineSoft = DefaultHandler); +PROVIDE(UserTimer = DefaultHandler); +PROVIDE(SupervisorTimer = DefaultHandler); +PROVIDE(MachineTimer = DefaultHandler); +PROVIDE(UserExternal = DefaultHandler); +PROVIDE(SupervisorExternal = DefaultHandler); +PROVIDE(MachineExternal = DefaultHandler); + +PROVIDE(DefaultHandler = DefaultInterruptHandler); +PROVIDE(ExceptionHandler = DefaultExceptionHandler); + +/* # Pre-initialization function */ +/* If the user overrides this using the `#[pre_init]` attribute or by creating a `__pre_init` function, + then the function this points to will be called before the RAM is initialized. */ +PROVIDE(__pre_init = default_pre_init); + +/* A PAC/HAL defined routine that should initialize custom interrupt controller if needed. */ +PROVIDE(_setup_interrupts = default_setup_interrupts); + +/* # Multi-processing hook function + fn _mp_hook() -> bool; + + This function is called from all the harts and must return true only for one hart, + which will perform memory initialization. For other harts it must return false + and implement wake-up in platform-dependent way (e.g. after waiting for a user interrupt). +*/ +PROVIDE(_mp_hook = default_mp_hook); + +/* # Start trap function override + By default uses the riscv crates default trap handler + but by providing the `_start_trap` symbol external crates can override. +*/ +PROVIDE(_start_trap = default_start_trap); + +SECTIONS +{ + .text.dummy (NOLOAD) : + { + /* This section is intended to make _stext address work */ + . = ABSOLUTE(_stext); + } > REGION_TEXT + + .text _stext : + { + /* Put reset handler first in .text section so it ends up as the entry */ + /* point of the program. */ + KEEP(*(.init)); + KEEP(*(.init.rust)); + . = ALIGN(4); + *(.trap); + *(.trap.rust); + *(.text.abort); + *(.text .text.*); + } > REGION_TEXT + + .rodata : ALIGN(4) + { + *(.srodata .srodata.*); + *(.rodata .rodata.*); + + /* 4-byte align the end (VMA) of this section. + This is required by LLD to ensure the LMA of the following .data + section will have the correct alignment. */ + . = ALIGN(4); + } > REGION_RODATA + + .data : ALIGN(8) + { + _sidata = LOADADDR(.data); + _sdata = .; + /* Must be called __global_pointer$ for linker relaxations to work. */ + PROVIDE(__global_pointer$ = . + 0x800); + *(.sdata .sdata.* .sdata2 .sdata2.*); + *(.data .data.*); + . = ALIGN(8); + _edata = .; + } > REGION_DATA AT > REGION_RODATA + + .bss (NOLOAD) : ALIGN(8) + { + _sbss = .; + *(.sbss .sbss.* .bss .bss.*); + . = ALIGN(8); + _ebss = .; + } > REGION_BSS + + /* fictitious region that represents the memory available for the heap */ + .heap (NOLOAD) : + { + _sheap = .; + . += _heap_size; + . = ALIGN(4); + _eheap = .; + } > REGION_HEAP + + /* fictitious region that represents the memory available for the stack */ + .stack (NOLOAD) : + { + _estack = .; + . = ABSOLUTE(_stack_start); + _sstack = .; + } > REGION_STACK + + /* fake output .got section */ + /* Dynamic relocations are unsupported. This section is only used to detect + relocatable code in the input files and raise an error if relocatable code + is found */ + .got (INFO) : + { + KEEP(*(.got .got.*)); + } + + .eh_frame (INFO) : { KEEP(*(.eh_frame)) } + .eh_frame_hdr (INFO) : { *(.eh_frame_hdr) } +} + +/* Do not exceed this mark in the error messages above | */ +ASSERT(ORIGIN(REGION_TEXT) % 4 == 0, " +ERROR(riscv-rt): the start of the REGION_TEXT must be 4-byte aligned"); + +ASSERT(ORIGIN(REGION_RODATA) % 4 == 0, " +ERROR(riscv-rt): the start of the REGION_RODATA must be 4-byte aligned"); + +ASSERT(ORIGIN(REGION_DATA) % 8 == 0, " +ERROR(riscv-rt): the start of the REGION_DATA must be 8-byte aligned"); + +ASSERT(ORIGIN(REGION_HEAP) % 4 == 0, " +ERROR(riscv-rt): the start of the REGION_HEAP must be 4-byte aligned"); + +ASSERT(ORIGIN(REGION_TEXT) % 4 == 0, " +ERROR(riscv-rt): the start of the REGION_TEXT must be 4-byte aligned"); + +ASSERT(ORIGIN(REGION_STACK) % 4 == 0, " +ERROR(riscv-rt): the start of the REGION_STACK must be 4-byte aligned"); + +ASSERT(_stext % 4 == 0, " +ERROR(riscv-rt): `_stext` must be 4-byte aligned"); + +ASSERT(_sdata % 8 == 0 && _edata % 8 == 0, " +BUG(riscv-rt): .data is not 8-byte aligned"); + +ASSERT(_sidata % 8 == 0, " +BUG(riscv-rt): the LMA of .data is not 8-byte aligned"); + +ASSERT(_sbss % 8 == 0 && _ebss % 8 == 0, " +BUG(riscv-rt): .bss is not 8-byte aligned"); + +ASSERT(_sheap % 4 == 0, " +BUG(riscv-rt): start of .heap is not 4-byte aligned"); + +ASSERT(_stext + SIZEOF(.text) < ORIGIN(REGION_TEXT) + LENGTH(REGION_TEXT), " +ERROR(riscv-rt): The .text section must be placed inside the REGION_TEXT region. +Set _stext to an address smaller than 'ORIGIN(REGION_TEXT) + LENGTH(REGION_TEXT)'"); + +ASSERT(SIZEOF(.stack) > (_max_hart_id + 1) * _hart_stack_size, " +ERROR(riscv-rt): .stack section is too small for allocating stacks for all the harts. +Consider changing `_max_hart_id` or `_hart_stack_size`."); + +ASSERT(SIZEOF(.got) == 0, " +.got section detected in the input files. Dynamic relocations are not +supported. If you are linking to C code compiled using the `gcc` crate +then modify your build script to compile the C code _without_ the +-fPIC flag. See the documentation of the `gcc::Config.fpic` method for +details."); + +/* Do not exceed this mark in the error messages above | */ diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index 325387b5..3e86c490 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -435,6 +435,7 @@ pub unsafe extern "C" fn start_rust(a0: usize, a1: usize, a2: usize) -> ! { 2: li {a},0 + li {input},0 // Zero out .bss la {start},_sbss @@ -449,7 +450,6 @@ pub unsafe extern "C" fn start_rust(a0: usize, a1: usize, a2: usize) -> ! { 3: li {start},0 li {end},0 - li {input},0 ", start = out(reg) _, end = out(reg) _, @@ -465,82 +465,31 @@ pub unsafe extern "C" fn start_rust(a0: usize, a1: usize, a2: usize) -> ! { la {end},_edata la {input},_sidata - bgeu {start},{end},3f - - // If _sdata and _sidata are not 8-byte aligned, we copy one word before the main loop. This way, in - // the main loop, we are sure `start` and `input` are 8-byte aligned. This is needed to safely - // perform load and store double instructions. - // - // NOTE: We assert in the `link.x` file that _sdata and _sidata are similarly 8-byte aligned. This is - // needed for the main loop here. - andi {b},{start},4 - beqz {b},0f - lw {a},0({input}) - addi {input},{input},4 - sw {a},0({start}) - addi {start},{start},4 - - 0: // .data Main Loop Initialization - // b = FLOOR_ALIGN(_edata, 4) - andi {b},{end},4 - sub {b},{end},{b} - - bgeu {start},{b},2f + bgeu {start},{end},2f + 1: // .data Main Loop ld {a},0({input}) addi {input},{input},8 sd {a},0({start}) addi {start},{start},8 - bltu {start},{b},1b - - 2: // .data end align - // If _edata is not 8-byte aligned, we copy one word after the main loop. This way we are sure we - // copied all the data even if _edata is 4-byte aligned. - andi {b},{end},4 - beqz {b},3f - lw {a},0({input}) - addi {input},{input},4 - sw {a},0({start}) - addi {start},{start},4 + bltu {start},{end},1b - 3: // .data zero registers + 2: // .data zero registers li {a},0 li {input},0 - 4: // zero out .bss start la {start},_sbss la {end},_ebss - bgeu {start},{end},8f + bgeu {start},{end},4f - // If _sbss is not 8-byte aligned, we zero one word before the main loop. This way, in the main - // loop, we are sure `start` is 8-byte aligned. This is needed to safely perform store double - // instruction. - andi {b},{start},4 - beqz {b},5f - sw zero,0({start}) - addi {start},{start},4 - - 5: // .bss main loop initialization - // b = FLOOR_ALIGN(_ebss, 4) - andi {b},{end},4 - sub {b},{end},{b} - - bgeu {start},{b},7f - 6: // .bss main loop + 3: // .bss main loop sd zero,0({start}) addi {start},{start},8 - bltu {start},{b},6b - - 7: // .bss end align - // If _ebss is not 8-byte aligned, we need to zero more one word after the main loop. - andi {b},{end},4 - beqz {b},8f - sw zero,0({start}) + bltu {start},{end},3b - 8: // .bss zero registers + 4: // .bss zero registers // Zero out used registers - li {b},0 li {start},0 li {end},0 ", @@ -548,7 +497,6 @@ pub unsafe extern "C" fn start_rust(a0: usize, a1: usize, a2: usize) -> ! { end = out(reg) _, input = out(reg) _, a = out(reg) _, - b = out(reg) _, ); compiler_fence(Ordering::SeqCst); From 16d0a8190b380999a30dced97965bdd3eeaf306d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rom=C3=A1n=20C=C3=A1rdenas?= Date: Tue, 3 Oct 2023 11:05:32 +0200 Subject: [PATCH 215/234] Added GH Action to check CHANGELOG.md --- riscv-rt/.github/workflows/changelog.yaml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 riscv-rt/.github/workflows/changelog.yaml diff --git a/riscv-rt/.github/workflows/changelog.yaml b/riscv-rt/.github/workflows/changelog.yaml new file mode 100644 index 00000000..e10f66bc --- /dev/null +++ b/riscv-rt/.github/workflows/changelog.yaml @@ -0,0 +1,22 @@ +name: Check CHANGELOG.md + +on: + push: + branches: [ master, check-changelog ] + pull_request: + merge_group: + +jobs: + check_changelog: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Check for CHANGELOG.md + run: | + if ! git diff --name-only HEAD^ | grep -q "^CHANGELOG.md$"; then + echo "ERROR: CHANGELOG.md not modified in this pull request" + exit 1 + fi From b3d0c9c057c53cc51c886ac1af6991a4ab796212 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rom=C3=A1n=20C=C3=A1rdenas?= Date: Tue, 3 Oct 2023 11:08:59 +0200 Subject: [PATCH 216/234] ready for PR --- riscv-rt/.github/workflows/changelog.yaml | 4 ++-- riscv-rt/CHANGELOG.md | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/riscv-rt/.github/workflows/changelog.yaml b/riscv-rt/.github/workflows/changelog.yaml index e10f66bc..8f828a1c 100644 --- a/riscv-rt/.github/workflows/changelog.yaml +++ b/riscv-rt/.github/workflows/changelog.yaml @@ -2,9 +2,9 @@ name: Check CHANGELOG.md on: push: - branches: [ master, check-changelog ] + branches: [ master ] pull_request: - merge_group: + branches: [ master ] jobs: check_changelog: diff --git a/riscv-rt/CHANGELOG.md b/riscv-rt/CHANGELOG.md index b49b13c7..ed8eaeac 100644 --- a/riscv-rt/CHANGELOG.md +++ b/riscv-rt/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ### Added +- New GitHub worklow for checking modifications on CHANGELOG.md - New GitHub workflow for checking clippy lints in PRs ### Changed From 6b1a4d207460823d620ca31f58857b1d24d3b7cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rom=C3=A1n=20C=C3=A1rdenas?= Date: Tue, 3 Oct 2023 11:22:27 +0200 Subject: [PATCH 217/234] trying to fix it --- riscv-rt/.github/workflows/changelog.yaml | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/riscv-rt/.github/workflows/changelog.yaml b/riscv-rt/.github/workflows/changelog.yaml index 8f828a1c..b453b02e 100644 --- a/riscv-rt/.github/workflows/changelog.yaml +++ b/riscv-rt/.github/workflows/changelog.yaml @@ -1,22 +1,18 @@ name: Check CHANGELOG.md on: - push: - branches: [ master ] pull_request: - branches: [ master ] + types: [opened, synchronize, reopened, ready_for_review, labeled, unlabeled] jobs: check_changelog: runs-on: ubuntu-latest - steps: - name: Checkout code - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Check for CHANGELOG.md - run: | - if ! git diff --name-only HEAD^ | grep -q "^CHANGELOG.md$"; then - echo "ERROR: CHANGELOG.md not modified in this pull request" - exit 1 - fi + uses: dangoslen/changelog-enforcer@v3 + with: + missingUpdateErrorMessage: 'Please add a changelog entry in the CHANGELOG.md file.' + From 8c2058e11c04e8ca45f206610dfe306f0759534a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rom=C3=A1n=20C=C3=A1rdenas?= Date: Tue, 3 Oct 2023 11:48:56 +0200 Subject: [PATCH 218/234] add skip changelog label --- riscv-rt/.github/workflows/changelog.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/riscv-rt/.github/workflows/changelog.yaml b/riscv-rt/.github/workflows/changelog.yaml index b453b02e..52c7cff6 100644 --- a/riscv-rt/.github/workflows/changelog.yaml +++ b/riscv-rt/.github/workflows/changelog.yaml @@ -1,6 +1,7 @@ name: Check CHANGELOG.md on: + merge_group: pull_request: types: [opened, synchronize, reopened, ready_for_review, labeled, unlabeled] @@ -14,5 +15,6 @@ jobs: - name: Check for CHANGELOG.md uses: dangoslen/changelog-enforcer@v3 with: + skipLabels: 'skip changelog' missingUpdateErrorMessage: 'Please add a changelog entry in the CHANGELOG.md file.' From d9fb8e5f37926d13c062112885b11c79ba8394a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rom=C3=A1n=20C=C3=A1rdenas?= Date: Tue, 3 Oct 2023 12:30:57 +0200 Subject: [PATCH 219/234] Added workflow to check invalid labels --- riscv-rt/.github/workflows/changelog.yaml | 2 +- riscv-rt/.github/workflows/gh_labels.yaml | 19 +++++++++++++++++++ riscv-rt/CHANGELOG.md | 3 ++- 3 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 riscv-rt/.github/workflows/gh_labels.yaml diff --git a/riscv-rt/.github/workflows/changelog.yaml b/riscv-rt/.github/workflows/changelog.yaml index 52c7cff6..2ea7fb89 100644 --- a/riscv-rt/.github/workflows/changelog.yaml +++ b/riscv-rt/.github/workflows/changelog.yaml @@ -6,7 +6,7 @@ on: types: [opened, synchronize, reopened, ready_for_review, labeled, unlabeled] jobs: - check_changelog: + changelog-check: runs-on: ubuntu-latest steps: - name: Checkout code diff --git a/riscv-rt/.github/workflows/gh_labels.yaml b/riscv-rt/.github/workflows/gh_labels.yaml new file mode 100644 index 00000000..65574d8b --- /dev/null +++ b/riscv-rt/.github/workflows/gh_labels.yaml @@ -0,0 +1,19 @@ +name: Check Labels +on: + merge_group: + pull_request: + types: [opened, synchronize, reopened, ready_for_review, labeled, unlabeled] + +jobs: + label: + runs-on: ubuntu-latest + steps: + - id: labels-check + uses: mheap/github-action-required-labels@v5 + with: + mode: exactly + count: 0 + labels: "work in progress, do not merge" + add_comment: true + message: "This PR is being prevented from merging because it presents one of the blocking labels: {{ provided }}." + diff --git a/riscv-rt/CHANGELOG.md b/riscv-rt/CHANGELOG.md index ed8eaeac..1a681606 100644 --- a/riscv-rt/CHANGELOG.md +++ b/riscv-rt/CHANGELOG.md @@ -9,7 +9,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ### Added -- New GitHub worklow for checking modifications on CHANGELOG.md +- New GitHub workflow for checking invalid labels in PRs +- New GitHub workflow for checking modifications on CHANGELOG.md - New GitHub workflow for checking clippy lints in PRs ### Changed From 6d05bb6fbc90bf778357e93817391a1063293b48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rom=C3=A1n=20C=C3=A1rdenas?= Date: Tue, 3 Oct 2023 12:32:28 +0200 Subject: [PATCH 220/234] minor changes --- riscv-rt/.github/workflows/gh_labels.yaml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/riscv-rt/.github/workflows/gh_labels.yaml b/riscv-rt/.github/workflows/gh_labels.yaml index 65574d8b..0dbd81f2 100644 --- a/riscv-rt/.github/workflows/gh_labels.yaml +++ b/riscv-rt/.github/workflows/gh_labels.yaml @@ -5,11 +5,10 @@ on: types: [opened, synchronize, reopened, ready_for_review, labeled, unlabeled] jobs: - label: + label-check: runs-on: ubuntu-latest steps: - - id: labels-check - uses: mheap/github-action-required-labels@v5 + - uses: mheap/github-action-required-labels@v5 with: mode: exactly count: 0 From 26e2095f917ad95951a64fa4c76ebf62c306d1a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rom=C3=A1n=20C=C3=A1rdenas=20Rodr=C3=ADguez?= Date: Tue, 3 Oct 2023 12:45:24 +0200 Subject: [PATCH 221/234] Update and rename gh_labels.yaml to label.yaml --- riscv-rt/.github/workflows/{gh_labels.yaml => label.yaml} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename riscv-rt/.github/workflows/{gh_labels.yaml => label.yaml} (100%) diff --git a/riscv-rt/.github/workflows/gh_labels.yaml b/riscv-rt/.github/workflows/label.yaml similarity index 100% rename from riscv-rt/.github/workflows/gh_labels.yaml rename to riscv-rt/.github/workflows/label.yaml index 0dbd81f2..d97ca295 100644 --- a/riscv-rt/.github/workflows/gh_labels.yaml +++ b/riscv-rt/.github/workflows/label.yaml @@ -1,4 +1,5 @@ name: Check Labels + on: merge_group: pull_request: @@ -15,4 +16,3 @@ jobs: labels: "work in progress, do not merge" add_comment: true message: "This PR is being prevented from merging because it presents one of the blocking labels: {{ provided }}." - From 23387940ed8228bbca17d4ca4d690ac62e461924 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rom=C3=A1n=20C=C3=A1rdenas=20Rodr=C3=ADguez?= Date: Tue, 3 Oct 2023 15:47:04 +0200 Subject: [PATCH 222/234] Remove label-check from merge_group It seems that the action used to check forbidden labels only works for PRs. Removing it from merge_group. --- riscv-rt/.github/workflows/label.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/riscv-rt/.github/workflows/label.yaml b/riscv-rt/.github/workflows/label.yaml index d97ca295..2709fdd7 100644 --- a/riscv-rt/.github/workflows/label.yaml +++ b/riscv-rt/.github/workflows/label.yaml @@ -1,7 +1,6 @@ name: Check Labels on: - merge_group: pull_request: types: [opened, synchronize, reopened, ready_for_review, labeled, unlabeled] From b84edd6b73cb79e44e8fce59b1ca1b8cdfa53e3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rom=C3=A1n=20C=C3=A1rdenas?= Date: Wed, 8 Nov 2023 17:26:09 +0100 Subject: [PATCH 223/234] build.rs now adapts link.x for the target arch --- riscv-rt/CHANGELOG.md | 1 + riscv-rt/build.rs | 29 +++-- riscv-rt/link-rv64.x | 174 ---------------------------- riscv-rt/{link-rv32.x => link.x.in} | 48 ++++++-- 4 files changed, 56 insertions(+), 196 deletions(-) delete mode 100644 riscv-rt/link-rv64.x rename riscv-rt/{link-rv32.x => link.x.in} (72%) diff --git a/riscv-rt/CHANGELOG.md b/riscv-rt/CHANGELOG.md index 1a681606..8761c3cc 100644 --- a/riscv-rt/CHANGELOG.md +++ b/riscv-rt/CHANGELOG.md @@ -19,6 +19,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Removed bors in favor of GitHub Merge Queue - `start_trap_rust` is now marked as `unsafe` - Implement `r0` as inline assembly +- Use `${ARCH_WIDTH}` in `link.x.in` to adapt to different archs ## [v0.11.0] - 2023-01-18 diff --git a/riscv-rt/build.rs b/riscv-rt/build.rs index c23da012..e7c92126 100644 --- a/riscv-rt/build.rs +++ b/riscv-rt/build.rs @@ -1,17 +1,21 @@ // NOTE: Adapted from cortex-m/build.rs use riscv_target::Target; -use std::env; -use std::fs; -use std::path::PathBuf; +use std::{env, fs, io, path::PathBuf}; + +fn add_linker_script(arch_width: u32) -> io::Result<()> { + // Read the file to a string and replace all occurrences of ${ARCH_WIDTH} with the arch width + let mut content = fs::read_to_string("link.x.in")?; + content = content.replace("${ARCH_WIDTH}", &arch_width.to_string()); -fn add_linker_script(bytes: &[u8]) { let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap()); // Put the linker script somewhere the linker can find it - fs::write(out_dir.join("link.x"), bytes).unwrap(); + fs::write(out_dir.join("link.x"), content)?; println!("cargo:rustc-link-search={}", out_dir.display()); println!("cargo:rerun-if-changed=link.x"); + + Ok(()) } fn main() { @@ -22,19 +26,24 @@ fn main() { if target.starts_with("riscv") { println!("cargo:rustc-cfg=riscv"); let target = Target::from_target_str(&target); - match target.bits { + + // generate the linker script + let arch_width = match target.bits { 32 => { println!("cargo:rustc-cfg=riscv32"); - add_linker_script(include_bytes!("link-rv32.x")); + 4 } 64 => { println!("cargo:rustc-cfg=riscv64"); - add_linker_script(include_bytes!("link-rv64.x")); + 8 } _ => panic!("Unsupported bit width"), - } + }; + add_linker_script(arch_width).unwrap(); + + // expose the ISA extensions if target.has_extension('m') { - println!("cargo:rustc-cfg=riscvm"); // we can expose extensions this way + println!("cargo:rustc-cfg=riscvm"); } } } diff --git a/riscv-rt/link-rv64.x b/riscv-rt/link-rv64.x deleted file mode 100644 index 8128eac7..00000000 --- a/riscv-rt/link-rv64.x +++ /dev/null @@ -1,174 +0,0 @@ -PROVIDE(_stext = ORIGIN(REGION_TEXT)); -PROVIDE(_stack_start = ORIGIN(REGION_STACK) + LENGTH(REGION_STACK)); -PROVIDE(_max_hart_id = 0); -PROVIDE(_hart_stack_size = 2K); -PROVIDE(_heap_size = 0); - -PROVIDE(UserSoft = DefaultHandler); -PROVIDE(SupervisorSoft = DefaultHandler); -PROVIDE(MachineSoft = DefaultHandler); -PROVIDE(UserTimer = DefaultHandler); -PROVIDE(SupervisorTimer = DefaultHandler); -PROVIDE(MachineTimer = DefaultHandler); -PROVIDE(UserExternal = DefaultHandler); -PROVIDE(SupervisorExternal = DefaultHandler); -PROVIDE(MachineExternal = DefaultHandler); - -PROVIDE(DefaultHandler = DefaultInterruptHandler); -PROVIDE(ExceptionHandler = DefaultExceptionHandler); - -/* # Pre-initialization function */ -/* If the user overrides this using the `#[pre_init]` attribute or by creating a `__pre_init` function, - then the function this points to will be called before the RAM is initialized. */ -PROVIDE(__pre_init = default_pre_init); - -/* A PAC/HAL defined routine that should initialize custom interrupt controller if needed. */ -PROVIDE(_setup_interrupts = default_setup_interrupts); - -/* # Multi-processing hook function - fn _mp_hook() -> bool; - - This function is called from all the harts and must return true only for one hart, - which will perform memory initialization. For other harts it must return false - and implement wake-up in platform-dependent way (e.g. after waiting for a user interrupt). -*/ -PROVIDE(_mp_hook = default_mp_hook); - -/* # Start trap function override - By default uses the riscv crates default trap handler - but by providing the `_start_trap` symbol external crates can override. -*/ -PROVIDE(_start_trap = default_start_trap); - -SECTIONS -{ - .text.dummy (NOLOAD) : - { - /* This section is intended to make _stext address work */ - . = ABSOLUTE(_stext); - } > REGION_TEXT - - .text _stext : - { - /* Put reset handler first in .text section so it ends up as the entry */ - /* point of the program. */ - KEEP(*(.init)); - KEEP(*(.init.rust)); - . = ALIGN(4); - *(.trap); - *(.trap.rust); - *(.text.abort); - *(.text .text.*); - } > REGION_TEXT - - .rodata : ALIGN(4) - { - *(.srodata .srodata.*); - *(.rodata .rodata.*); - - /* 4-byte align the end (VMA) of this section. - This is required by LLD to ensure the LMA of the following .data - section will have the correct alignment. */ - . = ALIGN(4); - } > REGION_RODATA - - .data : ALIGN(8) - { - _sidata = LOADADDR(.data); - _sdata = .; - /* Must be called __global_pointer$ for linker relaxations to work. */ - PROVIDE(__global_pointer$ = . + 0x800); - *(.sdata .sdata.* .sdata2 .sdata2.*); - *(.data .data.*); - . = ALIGN(8); - _edata = .; - } > REGION_DATA AT > REGION_RODATA - - .bss (NOLOAD) : ALIGN(8) - { - _sbss = .; - *(.sbss .sbss.* .bss .bss.*); - . = ALIGN(8); - _ebss = .; - } > REGION_BSS - - /* fictitious region that represents the memory available for the heap */ - .heap (NOLOAD) : - { - _sheap = .; - . += _heap_size; - . = ALIGN(4); - _eheap = .; - } > REGION_HEAP - - /* fictitious region that represents the memory available for the stack */ - .stack (NOLOAD) : - { - _estack = .; - . = ABSOLUTE(_stack_start); - _sstack = .; - } > REGION_STACK - - /* fake output .got section */ - /* Dynamic relocations are unsupported. This section is only used to detect - relocatable code in the input files and raise an error if relocatable code - is found */ - .got (INFO) : - { - KEEP(*(.got .got.*)); - } - - .eh_frame (INFO) : { KEEP(*(.eh_frame)) } - .eh_frame_hdr (INFO) : { *(.eh_frame_hdr) } -} - -/* Do not exceed this mark in the error messages above | */ -ASSERT(ORIGIN(REGION_TEXT) % 4 == 0, " -ERROR(riscv-rt): the start of the REGION_TEXT must be 4-byte aligned"); - -ASSERT(ORIGIN(REGION_RODATA) % 4 == 0, " -ERROR(riscv-rt): the start of the REGION_RODATA must be 4-byte aligned"); - -ASSERT(ORIGIN(REGION_DATA) % 8 == 0, " -ERROR(riscv-rt): the start of the REGION_DATA must be 8-byte aligned"); - -ASSERT(ORIGIN(REGION_HEAP) % 4 == 0, " -ERROR(riscv-rt): the start of the REGION_HEAP must be 4-byte aligned"); - -ASSERT(ORIGIN(REGION_TEXT) % 4 == 0, " -ERROR(riscv-rt): the start of the REGION_TEXT must be 4-byte aligned"); - -ASSERT(ORIGIN(REGION_STACK) % 4 == 0, " -ERROR(riscv-rt): the start of the REGION_STACK must be 4-byte aligned"); - -ASSERT(_stext % 4 == 0, " -ERROR(riscv-rt): `_stext` must be 4-byte aligned"); - -ASSERT(_sdata % 8 == 0 && _edata % 8 == 0, " -BUG(riscv-rt): .data is not 8-byte aligned"); - -ASSERT(_sidata % 8 == 0, " -BUG(riscv-rt): the LMA of .data is not 8-byte aligned"); - -ASSERT(_sbss % 8 == 0 && _ebss % 8 == 0, " -BUG(riscv-rt): .bss is not 8-byte aligned"); - -ASSERT(_sheap % 4 == 0, " -BUG(riscv-rt): start of .heap is not 4-byte aligned"); - -ASSERT(_stext + SIZEOF(.text) < ORIGIN(REGION_TEXT) + LENGTH(REGION_TEXT), " -ERROR(riscv-rt): The .text section must be placed inside the REGION_TEXT region. -Set _stext to an address smaller than 'ORIGIN(REGION_TEXT) + LENGTH(REGION_TEXT)'"); - -ASSERT(SIZEOF(.stack) > (_max_hart_id + 1) * _hart_stack_size, " -ERROR(riscv-rt): .stack section is too small for allocating stacks for all the harts. -Consider changing `_max_hart_id` or `_hart_stack_size`."); - -ASSERT(SIZEOF(.got) == 0, " -.got section detected in the input files. Dynamic relocations are not -supported. If you are linking to C code compiled using the `gcc` crate -then modify your build script to compile the C code _without_ the --fPIC flag. See the documentation of the `gcc::Config.fpic` method for -details."); - -/* Do not exceed this mark in the error messages above | */ diff --git a/riscv-rt/link-rv32.x b/riscv-rt/link.x.in similarity index 72% rename from riscv-rt/link-rv32.x rename to riscv-rt/link.x.in index deadea88..0df3f2da 100644 --- a/riscv-rt/link-rv32.x +++ b/riscv-rt/link.x.in @@ -1,3 +1,27 @@ +/* # Developer notes + +- Symbols that start with a double underscore (__) are considered "private" + +- Symbols that start with a single underscore (_) are considered "semi-public"; they can be + overridden in a user linker script, but should not be referred from user code (e.g. `extern "C" { + static mut _heap_size }`). + +- `EXTERN` forces the linker to keep a symbol in the final binary. We use this to make sure a + symbol if not dropped if it appears in or near the front of the linker arguments and "it's not + needed" by any of the preceding objects (linker arguments) + +- `PROVIDE` is used to provide default values that can be overridden by a user linker script + +- In this linker script, you may find symbols that look like `${...}` (e.g., `${ARCH_WIDTH}`). + These are wildcards used by the `build.rs` script to adapt to different target particularities. + Check `build.rs` for more details about these symbols. + +- On alignment: it's important for correctness that the VMA boundaries of both .bss and .data *and* + the LMA of .data are all `${ARCH_WIDTH}`-byte aligned. These alignments are assumed by the RAM + initialization routine. There's also a second benefit: `${ARCH_WIDTH}`-byte aligned boundaries + means that you won't see "Address (..) is out of bounds" in the disassembly produced by `objdump`. +*/ + PROVIDE(_stext = ORIGIN(REGION_TEXT)); PROVIDE(_stack_start = ORIGIN(REGION_STACK) + LENGTH(REGION_STACK)); PROVIDE(_max_hart_id = 0); @@ -72,7 +96,7 @@ SECTIONS . = ALIGN(4); } > REGION_RODATA - .data : ALIGN(4) + .data : ALIGN(${ARCH_WIDTH}) { _sidata = LOADADDR(.data); _sdata = .; @@ -80,15 +104,15 @@ SECTIONS PROVIDE(__global_pointer$ = . + 0x800); *(.sdata .sdata.* .sdata2 .sdata2.*); *(.data .data.*); - . = ALIGN(4); + . = ALIGN(${ARCH_WIDTH}); _edata = .; } > REGION_DATA AT > REGION_RODATA - .bss (NOLOAD) : ALIGN(4) + .bss (NOLOAD) : ALIGN(${ARCH_WIDTH}) { _sbss = .; *(.sbss .sbss.* .bss .bss.*); - . = ALIGN(4); + . = ALIGN(${ARCH_WIDTH}); _ebss = .; } > REGION_BSS @@ -129,8 +153,8 @@ ERROR(riscv-rt): the start of the REGION_TEXT must be 4-byte aligned"); ASSERT(ORIGIN(REGION_RODATA) % 4 == 0, " ERROR(riscv-rt): the start of the REGION_RODATA must be 4-byte aligned"); -ASSERT(ORIGIN(REGION_DATA) % 4 == 0, " -ERROR(riscv-rt): the start of the REGION_DATA must be 4-byte aligned"); +ASSERT(ORIGIN(REGION_DATA) % ${ARCH_WIDTH} == 0, " +ERROR(riscv-rt): the start of the REGION_DATA must be ${ARCH_WIDTH}-byte aligned"); ASSERT(ORIGIN(REGION_HEAP) % 4 == 0, " ERROR(riscv-rt): the start of the REGION_HEAP must be 4-byte aligned"); @@ -144,14 +168,14 @@ ERROR(riscv-rt): the start of the REGION_STACK must be 4-byte aligned"); ASSERT(_stext % 4 == 0, " ERROR(riscv-rt): `_stext` must be 4-byte aligned"); -ASSERT(_sdata % 4 == 0 && _edata % 4 == 0, " -BUG(riscv-rt): .data is not 4-byte aligned"); +ASSERT(_sdata % ${ARCH_WIDTH} == 0 && _edata % ${ARCH_WIDTH} == 0, " +BUG(riscv-rt): .data is not ${ARCH_WIDTH}-byte aligned"); -ASSERT(_sidata % 4 == 0, " -BUG(riscv-rt): the LMA of .data is not 4-byte aligned"); +ASSERT(_sidata % ${ARCH_WIDTH} == 0, " +BUG(riscv-rt): the LMA of .data is not ${ARCH_WIDTH}-byte aligned"); -ASSERT(_sbss % 4 == 0 && _ebss % 4 == 0, " -BUG(riscv-rt): .bss is not 4-byte aligned"); +ASSERT(_sbss % ${ARCH_WIDTH} == 0 && _ebss % ${ARCH_WIDTH} == 0, " +BUG(riscv-rt): .bss is not ${ARCH_WIDTH}-byte aligned"); ASSERT(_sheap % 4 == 0, " BUG(riscv-rt): start of .heap is not 4-byte aligned"); From 0631b3a1668d88806ae12ebdf6c46c86a5eaf523 Mon Sep 17 00:00:00 2001 From: Kevin Vigor Date: Thu, 2 Nov 2023 10:24:56 -0600 Subject: [PATCH 224/234] Ignore hartid in single-hart mode. Don't bother checking hart ID on startup in single-hart mode. Allows use of cores with unusual mhartid values and saves a few instructions. --- riscv-rt/CHANGELOG.md | 1 + riscv-rt/src/lib.rs | 25 ++++++++++++++++++------- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/riscv-rt/CHANGELOG.md b/riscv-rt/CHANGELOG.md index 1a681606..c3557b38 100644 --- a/riscv-rt/CHANGELOG.md +++ b/riscv-rt/CHANGELOG.md @@ -19,6 +19,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Removed bors in favor of GitHub Merge Queue - `start_trap_rust` is now marked as `unsafe` - Implement `r0` as inline assembly +- mhartid CSR is no longer read in single-hart mode, assumed zero ## [v0.11.0] - 2023-01-18 diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index 3e86c490..422f3f2e 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -372,7 +372,10 @@ use core::sync::atomic::{compiler_fence, Ordering}; use riscv::register::{scause as xcause, stvec as xtvec, stvec::TrapMode as xTrapMode}; #[cfg(not(feature = "s-mode"))] -use riscv::register::{mcause as xcause, mhartid, mtvec as xtvec, mtvec::TrapMode as xTrapMode}; +use riscv::register::{mcause as xcause, mtvec as xtvec, mtvec::TrapMode as xTrapMode}; + +#[cfg(all(not(feature = "single-hart"), not(feature = "s-mode")))] +use riscv::register::mhartid; pub use riscv_rt_macros::{entry, pre_init}; @@ -404,13 +407,20 @@ pub unsafe extern "C" fn start_rust(a0: usize, a1: usize, a2: usize) -> ! { fn _mp_hook(hartid: usize) -> bool; } - // sbi passes hartid as first parameter (a0) - #[cfg(feature = "s-mode")] - let hartid = a0; - #[cfg(not(feature = "s-mode"))] - let hartid = mhartid::read(); + #[cfg(not(feature = "single-hart"))] + let run_init = { + // sbi passes hartid as first parameter (a0) + #[cfg(feature = "s-mode")] + let hartid = a0; + #[cfg(not(feature = "s-mode"))] + let hartid = mhartid::read(); + + _mp_hook(hartid) + }; + #[cfg(feature = "single-hart")] + let run_init = true; - if _mp_hook(hartid) { + if run_init { __pre_init(); // Initialize RAM @@ -661,6 +671,7 @@ pub unsafe extern "Rust" fn default_pre_init() {} #[doc(hidden)] #[no_mangle] #[rustfmt::skip] +#[cfg(not(feature = "single-hart"))] pub extern "Rust" fn default_mp_hook(hartid: usize) -> bool { match hartid { 0 => true, From 1a22ec557b89d7b629583d6d3a4e76924c11e203 Mon Sep 17 00:00:00 2001 From: Chien Wong Date: Fri, 10 Nov 2023 19:16:42 +0800 Subject: [PATCH 225/234] Fix setting incorrect sp if single-hart If single-hart is enabled, the sp is set to _stack_start - _hart_stack_size, rather than _stack_start. Fix this. Fixes: e540f1e410d5 ("Add feature single-hart") Signed-off-by: Chien Wong --- riscv-rt/src/asm.rs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/riscv-rt/src/asm.rs b/riscv-rt/src/asm.rs index c29d9183..a0af873f 100644 --- a/riscv-rt/src/asm.rs +++ b/riscv-rt/src/asm.rs @@ -85,7 +85,8 @@ _abs_start: .option push .option norelax la gp, __global_pointer$ - .option pop", + .option pop + // Allocate stacks", #[cfg(all(not(feature = "single-hart"), feature = "s-mode"))] "mv t2, a0 // the hartid is passed as parameter by SMODE", #[cfg(all(not(feature = "single-hart"), not(feature = "s-mode")))] @@ -93,9 +94,7 @@ _abs_start: #[cfg(not(feature = "single-hart"))] "lui t0, %hi(_max_hart_id) add t0, t0, %lo(_max_hart_id) - bgtu t2, t0, abort", - "// Allocate stacks - la sp, _stack_start + bgtu t2, t0, abort lui t0, %hi(_hart_stack_size) add t0, t0, %lo(_hart_stack_size)", #[cfg(all(not(feature = "single-hart"), riscvm))] @@ -109,9 +108,10 @@ _abs_start: addi t1, t1, -1 bnez t1, 1b 2: ", - "sub sp, sp, t0 - - // Set frame pointer + "la sp, _stack_start", + #[cfg(not(feature = "single-hart"))] + "sub sp, sp, t0", + "// Set frame pointer add s0, sp, zero jal zero, _start_rust From 17185e9627d6f2906e82b1db4b51f3c44c1194e1 Mon Sep 17 00:00:00 2001 From: Chien Wong Date: Fri, 10 Nov 2023 19:20:40 +0800 Subject: [PATCH 226/234] Add 'single-hart' changelog entry Signed-off-by: Chien Wong --- riscv-rt/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/riscv-rt/CHANGELOG.md b/riscv-rt/CHANGELOG.md index c3557b38..5e022be7 100644 --- a/riscv-rt/CHANGELOG.md +++ b/riscv-rt/CHANGELOG.md @@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - New GitHub workflow for checking invalid labels in PRs - New GitHub workflow for checking modifications on CHANGELOG.md - New GitHub workflow for checking clippy lints in PRs +- Optional cargo feature `single-hart` for single CPU targets ### Changed From 408acae8a79c28b12273f2fdcc9607ffec4216dd Mon Sep 17 00:00:00 2001 From: Chien Wong Date: Fri, 10 Nov 2023 19:23:53 +0800 Subject: [PATCH 227/234] Update doc on single-hart Signed-off-by: Chien Wong --- riscv-rt/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index 422f3f2e..54e5c01c 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -327,7 +327,7 @@ //! //! ## `single-hart` //! -//! This feature saves a little code size by removing unnecessary stack space calculation if there is only one hart on the target. +//! This feature saves a little code size if there is only one hart on the target. //! //! ## `s-mode` //! From b7372080456d7d0d0ee514529fc37794f7d0968a Mon Sep 17 00:00:00 2001 From: Chien Wong Date: Fri, 10 Nov 2023 20:44:57 +0800 Subject: [PATCH 228/234] Ensure sp is 16-byte aligned Signed-off-by: Chien Wong --- riscv-rt/CHANGELOG.md | 1 + riscv-rt/src/asm.rs | 9 ++++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/riscv-rt/CHANGELOG.md b/riscv-rt/CHANGELOG.md index 5e022be7..70178bc2 100644 --- a/riscv-rt/CHANGELOG.md +++ b/riscv-rt/CHANGELOG.md @@ -21,6 +21,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - `start_trap_rust` is now marked as `unsafe` - Implement `r0` as inline assembly - mhartid CSR is no longer read in single-hart mode, assumed zero +- Ensure stack pointer is 16-byte aligned before jumping to Rust entry point ## [v0.11.0] - 2023-01-18 diff --git a/riscv-rt/src/asm.rs b/riscv-rt/src/asm.rs index a0af873f..0eedebe6 100644 --- a/riscv-rt/src/asm.rs +++ b/riscv-rt/src/asm.rs @@ -108,10 +108,11 @@ _abs_start: addi t1, t1, -1 bnez t1, 1b 2: ", - "la sp, _stack_start", + "la t1, _stack_start", #[cfg(not(feature = "single-hart"))] - "sub sp, sp, t0", - "// Set frame pointer + "sub t1, t1, t0", + "andi sp, t1, -16 // Force 16-byte alignment + // Set frame pointer add s0, sp, zero jal zero, _start_rust @@ -135,6 +136,8 @@ _abs_start: #[rustfmt::skip] macro_rules! trap_handler { ($STORE:ident, $LOAD:ident, $BYTES:literal, $TRAP_SIZE:literal, [$(($REG:ident, $LOCATION:literal)),*]) => { + // ensure we do not break that sp is 16-byte aligned + const _: () = assert!(($TRAP_SIZE * $BYTES) % 16 == 0); global_asm!( " .section .trap, \"ax\" From cd474dda9cb4e493893c48e8c80f8a61d3319a7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rom=C3=A1n=20C=C3=A1rdenas?= Date: Fri, 17 Nov 2023 13:56:31 +0100 Subject: [PATCH 229/234] Setting CI (WIP) --- .github/workflows/build.yaml | 2 +- .github/workflows/changelog.yaml | 10 +++++ .github/workflows/clippy.yaml | 2 +- .../.github => .github}/workflows/label.yaml | 0 .github/workflows/rustfmt.yaml | 2 +- Cargo.toml | 1 + riscv-rt/.github/CODEOWNERS | 1 - riscv-rt/.github/workflows/changelog.yaml | 20 --------- riscv-rt/.github/workflows/clippy.yaml | 42 ------------------- riscv-rt/.github/workflows/rustfmt.yaml | 19 --------- riscv-rt/.gitignore | 7 ---- riscv-rt/CODE_OF_CONDUCT.md | 37 ---------------- riscv/README.md | 41 ++++++++++++++++++ 13 files changed, 55 insertions(+), 129 deletions(-) rename {riscv-rt/.github => .github}/workflows/label.yaml (100%) delete mode 100644 riscv-rt/.github/CODEOWNERS delete mode 100644 riscv-rt/.github/workflows/changelog.yaml delete mode 100644 riscv-rt/.github/workflows/clippy.yaml delete mode 100644 riscv-rt/.github/workflows/rustfmt.yaml delete mode 100644 riscv-rt/.gitignore delete mode 100644 riscv-rt/CODE_OF_CONDUCT.md create mode 100644 riscv/README.md diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 659723f3..40b05006 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -1,6 +1,6 @@ on: push: - branches: [ staging, trying, master ] + branches: [ master, add-riscv-rt ] pull_request: merge_group: diff --git a/.github/workflows/changelog.yaml b/.github/workflows/changelog.yaml index ad78b0a7..85ccda85 100644 --- a/.github/workflows/changelog.yaml +++ b/.github/workflows/changelog.yaml @@ -19,6 +19,8 @@ jobs: filters: | riscv: - 'riscv/**' + riscv-rt: + - 'riscv-rt/**' - name: Check for CHANGELOG.md (riscv) if: steps.changes.outputs.riscv == 'true' @@ -27,3 +29,11 @@ jobs: changeLogPath: ./riscv/CHANGELOG.md skipLabels: 'skip changelog' missingUpdateErrorMessage: 'Please add a changelog entry in the riscv/CHANGELOG.md file.' + + - name: Check for CHANGELOG.md (riscv-rt) + if: steps.changes.outputs.riscv-rt == 'true' + uses: dangoslen/changelog-enforcer@v3 + with: + changeLogPath: ./riscv-rt/CHANGELOG.md + skipLabels: 'skip changelog' + missingUpdateErrorMessage: 'Please add a changelog entry in the riscv-rt/CHANGELOG.md file.' diff --git a/.github/workflows/clippy.yaml b/.github/workflows/clippy.yaml index 351e1b45..73e1f49a 100644 --- a/.github/workflows/clippy.yaml +++ b/.github/workflows/clippy.yaml @@ -1,6 +1,6 @@ on: push: - branches: [ staging, trying, master ] + branches: [ master, add-riscv-rt ] pull_request: merge_group: diff --git a/riscv-rt/.github/workflows/label.yaml b/.github/workflows/label.yaml similarity index 100% rename from riscv-rt/.github/workflows/label.yaml rename to .github/workflows/label.yaml diff --git a/.github/workflows/rustfmt.yaml b/.github/workflows/rustfmt.yaml index 72957ecb..6ee6b39b 100644 --- a/.github/workflows/rustfmt.yaml +++ b/.github/workflows/rustfmt.yaml @@ -1,6 +1,6 @@ on: push: - branches: [ staging, trying, master ] + branches: [ master, add-riscv-rt ] pull_request: merge_group: diff --git a/Cargo.toml b/Cargo.toml index 0b7406f5..4533b2e7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,4 +2,5 @@ resolver = "2" members = [ "riscv", + "riscv-rt", ] diff --git a/riscv-rt/.github/CODEOWNERS b/riscv-rt/.github/CODEOWNERS deleted file mode 100644 index 87f6c03f..00000000 --- a/riscv-rt/.github/CODEOWNERS +++ /dev/null @@ -1 +0,0 @@ -* @rust-embedded/riscv \ No newline at end of file diff --git a/riscv-rt/.github/workflows/changelog.yaml b/riscv-rt/.github/workflows/changelog.yaml deleted file mode 100644 index 2ea7fb89..00000000 --- a/riscv-rt/.github/workflows/changelog.yaml +++ /dev/null @@ -1,20 +0,0 @@ -name: Check CHANGELOG.md - -on: - merge_group: - pull_request: - types: [opened, synchronize, reopened, ready_for_review, labeled, unlabeled] - -jobs: - changelog-check: - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Check for CHANGELOG.md - uses: dangoslen/changelog-enforcer@v3 - with: - skipLabels: 'skip changelog' - missingUpdateErrorMessage: 'Please add a changelog entry in the CHANGELOG.md file.' - diff --git a/riscv-rt/.github/workflows/clippy.yaml b/riscv-rt/.github/workflows/clippy.yaml deleted file mode 100644 index 7c0d5474..00000000 --- a/riscv-rt/.github/workflows/clippy.yaml +++ /dev/null @@ -1,42 +0,0 @@ -on: - push: - branches: [ master ] - pull_request: - merge_group: - -name: Lints compliance check - -env: - CLIPPY_PARAMS: -W clippy::all -W clippy::pedantic -W clippy::nursery -W clippy::cargo - -jobs: - clippy: - strategy: - matrix: - toolchain: [ stable, nightly ] - cargo_flags: - - "--no-default-features" - - "--all-features" - include: - # Nightly is only for reference and allowed to fail - - toolchain: nightly - experimental: true - runs-on: ubuntu-latest - continue-on-error: ${{ matrix.experimental || false }} - steps: - - uses: actions/checkout@v3 - - uses: dtolnay/rust-toolchain@master - with: - toolchain: ${{ matrix.toolchain }} - components: clippy - - name: Run clippy - run: cargo clippy --all ${{ matrix.cargo_flags }} -- -D warnings - - # Job to check that all the lint checks succeeded - clippy-check: - needs: - - clippy - runs-on: ubuntu-latest - if: always() - steps: - - run: jq --exit-status 'all(.result == "success")' <<< '${{ toJson(needs) }}' diff --git a/riscv-rt/.github/workflows/rustfmt.yaml b/riscv-rt/.github/workflows/rustfmt.yaml deleted file mode 100644 index 72993e73..00000000 --- a/riscv-rt/.github/workflows/rustfmt.yaml +++ /dev/null @@ -1,19 +0,0 @@ - -on: - push: - branches: [ master ] - pull_request: - merge_group: - -name: Code formatting check - -jobs: - rustfmt: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: dtolnay/rust-toolchain@stable - with: - components: rustfmt - - name: Run Rustfmt - run: cargo fmt --all -- --check --verbose diff --git a/riscv-rt/.gitignore b/riscv-rt/.gitignore deleted file mode 100644 index 7f8712d0..00000000 --- a/riscv-rt/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -Cargo.lock -target/ -bin/*.after -bin/*.before -bin/*.o - -.vscode/ \ No newline at end of file diff --git a/riscv-rt/CODE_OF_CONDUCT.md b/riscv-rt/CODE_OF_CONDUCT.md deleted file mode 100644 index fccadf9a..00000000 --- a/riscv-rt/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,37 +0,0 @@ -# The Rust Code of Conduct - -## Conduct - -**Contact**: [RISC-V team](https://github.com/rust-embedded/wg#the-riscv-team) - -* We are committed to providing a friendly, safe and welcoming environment for all, regardless of level of experience, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, religion, nationality, or other similar characteristic. -* On IRC, please avoid using overtly sexual nicknames or other nicknames that might detract from a friendly, safe and welcoming environment for all. -* Please be kind and courteous. There's no need to be mean or rude. -* Respect that people have differences of opinion and that every design or implementation choice carries a trade-off and numerous costs. There is seldom a right answer. -* Please keep unstructured critique to a minimum. If you have solid ideas you want to experiment with, make a fork and see how it works. -* We will exclude you from interaction if you insult, demean or harass anyone. That is not welcome behavior. We interpret the term "harassment" as including the definition in the [Citizen Code of Conduct](http://citizencodeofconduct.org/); if you have any lack of clarity about what might be included in that concept, please read their definition. In particular, we don't tolerate behavior that excludes people in socially marginalized groups. -* Private harassment is also unacceptable. No matter who you are, if you feel you have been or are being harassed or made uncomfortable by a community member, please contact one of the channel ops or any of the [RISC-V team][team] immediately. Whether you're a regular contributor or a newcomer, we care about making this community a safe place for you and we've got your back. -* Likewise any spamming, trolling, flaming, baiting or other attention-stealing behavior is not welcome. - -## Moderation - -These are the policies for upholding our community's standards of conduct. - -1. Remarks that violate the Rust standards of conduct, including hateful, hurtful, oppressive, or exclusionary remarks, are not allowed. (Cursing is allowed, but never targeting another user, and never in a hateful manner.) -2. Remarks that moderators find inappropriate, whether listed in the code of conduct or not, are also not allowed. -3. Moderators will first respond to such remarks with a warning. -4. If the warning is unheeded, the user will be "kicked," i.e., kicked out of the communication channel to cool off. -5. If the user comes back and continues to make trouble, they will be banned, i.e., indefinitely excluded. -6. Moderators may choose at their discretion to un-ban the user if it was a first offense and they offer the offended party a genuine apology. -7. If a moderator bans someone and you think it was unjustified, please take it up with that moderator, or with a different moderator, **in private**. Complaints about bans in-channel are not allowed. -8. Moderators are held to a higher standard than other community members. If a moderator creates an inappropriate situation, they should expect less leeway than others. - -In the Rust community we strive to go the extra step to look out for each other. Don't just aim to be technically unimpeachable, try to be your best self. In particular, avoid flirting with offensive or sensitive issues, particularly if they're off-topic; this all too often leads to unnecessary fights, hurt feelings, and damaged trust; worse, it can drive people away from the community entirely. - -And if someone takes issue with something you said or did, resist the urge to be defensive. Just stop doing what it was they complained about and apologize. Even if you feel you were misinterpreted or unfairly accused, chances are good there was something you could've communicated better — remember that it's your responsibility to make your fellow Rustaceans comfortable. Everyone wants to get along and we are all here first and foremost because we want to talk about cool technology. You will find that people will be eager to assume good intent and forgive as long as you earn their trust. - -The enforcement policies listed above apply to all official embedded WG venues; including official IRC channels (#rust-embedded); GitHub repositories under rust-embedded; and all forums under rust-embedded.org (forum.rust-embedded.org). - -*Adapted from the [Node.js Policy on Trolling](http://blog.izs.me/post/30036893703/policy-on-trolling) as well as the [Contributor Covenant v1.3.0](https://www.contributor-covenant.org/version/1/3/0/).* - -[team]: https://github.com/rust-embedded/wg#the-riscv-team diff --git a/riscv/README.md b/riscv/README.md new file mode 100644 index 00000000..490c8d54 --- /dev/null +++ b/riscv/README.md @@ -0,0 +1,41 @@ +[![crates.io](https://img.shields.io/crates/d/riscv.svg)](https://crates.io/crates/riscv) +[![crates.io](https://img.shields.io/crates/v/riscv.svg)](https://crates.io/crates/riscv) +[![Build Status](https://travis-ci.org/rust-embedded/riscv.svg?branch=master)](https://travis-ci.org/rust-embedded/riscv) + +# `riscv` + +> Low level access to RISC-V processors + +This project is developed and maintained by the [RISC-V team][team]. + +## [Documentation](https://docs.rs/crate/riscv) + +## Minimum Supported Rust Version (MSRV) + +This crate is guaranteed to compile on stable Rust 1.60 and up. It *might* +compile with older versions but that may change in any new patch release. + +## License + +Copyright 2019-2022 [RISC-V team][team] + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +## Code of Conduct + +Contribution to this crate is organized under the terms of the [Rust Code of +Conduct][CoC], the maintainer of this crate, the [RISC-V team][team], promises +to intervene to uphold that code of conduct. + +[CoC]: CODE_OF_CONDUCT.md +[team]: https://github.com/rust-embedded/wg#the-risc-v-team From 612d58d4bbe0bc97f96fe152cfeba747154832aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rom=C3=A1n=20C=C3=A1rdenas?= Date: Fri, 17 Nov 2023 14:52:40 +0100 Subject: [PATCH 230/234] fix build.yaml --- .github/workflows/build.yaml | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 40b05006..44d88d22 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -13,6 +13,9 @@ jobs: matrix: # All generated code should be running on stable now, MRSV is 1.59.0 toolchain: [ stable, nightly, 1.60.0 ] + package: + - riscv + - riscv-rt target: - riscv32i-unknown-none-elf - riscv32imc-unknown-none-elf @@ -24,6 +27,10 @@ jobs: # Nightly is only for reference and allowed to fail - toolchain: nightly experimental: true + - package: riscv-rt + cargo_flags: + - "--features=s-mode" + - "--features=single-hart" runs-on: ubuntu-latest continue-on-error: ${{ matrix.experimental || false }} steps: @@ -33,7 +40,7 @@ jobs: toolchain: ${{ matrix.toolchain }} targets: ${{ matrix.target }} - name: Build library - run: cargo build --target ${{ matrix.target }} ${{ matrix.cargo_flags }} + run: cargo build --package ${{ matrix.package }} --target ${{ matrix.target }} ${{ matrix.cargo_flags }} # On MacOS, Ubuntu, and Windows, we at least make sure that the crate builds and links. build-others: @@ -43,13 +50,15 @@ jobs: - macos-latest - ubuntu-latest - windows-latest + package: + - riscv cargo_flags: [ "--no-default-features", "--all-features" ] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v3 - uses: dtolnay/rust-toolchain@stable - name: Build crate for host OS - run: cargo build ${{ matrix.cargo_flags }} + run: cargo build --package ${{ matrix.package }} ${{ matrix.cargo_flags }} # Job to check that all the builds succeeded build-check: From edf4dace0db0d9b41f8e260971a5a9ca0ac83ff3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rom=C3=A1n=20C=C3=A1rdenas?= Date: Fri, 17 Nov 2023 15:07:36 +0100 Subject: [PATCH 231/234] separation of CI --- .github/workflows/clippy.yaml | 32 +++++++++++++---- .../workflows/riscv-rt.yaml | 21 +++++++----- .github/workflows/{build.yaml => riscv.yaml} | 34 +++++++------------ .github/workflows/rustfmt.yaml | 4 +-- 4 files changed, 51 insertions(+), 40 deletions(-) rename riscv-rt/.github/workflows/build.yaml => .github/workflows/riscv-rt.yaml (54%) rename .github/workflows/{build.yaml => riscv.yaml} (63%) diff --git a/.github/workflows/clippy.yaml b/.github/workflows/clippy.yaml index 73e1f49a..06afb85a 100644 --- a/.github/workflows/clippy.yaml +++ b/.github/workflows/clippy.yaml @@ -1,6 +1,6 @@ on: push: - branches: [ master, add-riscv-rt ] + branches: [ master ] pull_request: merge_group: @@ -14,9 +14,6 @@ jobs: strategy: matrix: toolchain: [ stable, nightly ] - cargo_flags: - - "--no-default-features" - - "--all-features" include: # Nightly is only for reference and allowed to fail - toolchain: nightly @@ -24,18 +21,39 @@ jobs: runs-on: ubuntu-latest continue-on-error: ${{ matrix.experimental || false }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@master with: toolchain: ${{ matrix.toolchain }} components: clippy - - name: Run clippy - run: cargo clippy --all ${{ matrix.cargo_flags }} -- -D warnings + - name: Run clippy (no features) + run: cargo clippy --all --no-default-features -- -D warnings + - name: Run clippy (all features) + run: cargo clippy --all --all-features -- -D warnings + + # Additonal clippy checks for riscv-rt + clippy-riscv-rt: + strategy: + matrix: + toolchain: [ stable, nightly ] + runs-on: ubuntu-latest + continue-on-error: ${{ matrix.experimental || false }} + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@master + with: + toolchain: ${{ matrix.toolchain }} + components: clippy + - name: Run clippy (s-mode) + run: cargo clippy --package riscv-rt --all --features=s-mode -- -D warnings + - name: Run clippy (single-hart) + run: cargo clippy --package riscv-rt --all --features=single-hart -- -D warnings # Job to check that all the lint checks succeeded clippy-check: needs: - clippy + - clippy-riscv-rt runs-on: ubuntu-latest if: always() steps: diff --git a/riscv-rt/.github/workflows/build.yaml b/.github/workflows/riscv-rt.yaml similarity index 54% rename from riscv-rt/.github/workflows/build.yaml rename to .github/workflows/riscv-rt.yaml index 4c95f06a..b1aeff5a 100644 --- a/riscv-rt/.github/workflows/build.yaml +++ b/.github/workflows/riscv-rt.yaml @@ -4,10 +4,10 @@ on: pull_request: merge_group: -name: Build check +name: Build check (riscv-rt) jobs: - build-riscv: + build: strategy: matrix: # All generated code should be running on stable now, MRSV is 1.59.0 @@ -21,7 +21,6 @@ jobs: example: - empty - multi_core - cargo_flags: [ "--no-default-features", "--all-features" ] include: # Nightly is only for reference and allowed to fail - toolchain: nightly @@ -29,20 +28,24 @@ jobs: runs-on: ubuntu-latest continue-on-error: ${{ matrix.experimental || false }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@master with: toolchain: ${{ matrix.toolchain }} targets: ${{ matrix.target }} - - name: Build library - run: cargo build --target ${{ matrix.target }} ${{ matrix.cargo_flags }} - - name: Build example - run: RUSTFLAGS="-C link-arg=-Texamples/device.x" cargo build --target ${{ matrix.target }} --example ${{ matrix.example }} ${{ matrix.cargo_flags }} + - name: Build (no features) + run: RUSTFLAGS="-C link-arg=-Triscv-rt/examples/device.x" cargo build --package riscv-rt --target ${{ matrix.target }} --example ${{ matrix.example }} + - name : Build example (s-mode) + run: RUSTFLAGS="-C link-arg=-Triscv-rt/examples/device.x" cargo build --package riscv-rt --target ${{ matrix.target }} --example ${{ matrix.example }} --features=s-mode + - name : Build example (single-hart) + run: RUSTFLAGS="-C link-arg=-Triscv-rt/examples/device.x" cargo build --package riscv-rt --target ${{ matrix.target }} --example ${{ matrix.example }} --features=single-hart + - name: Build example (all features) + run: RUSTFLAGS="-C link-arg=-Triscv-rt/examples/device.x" cargo build --package riscv-rt --target ${{ matrix.target }} --example ${{ matrix.example }} --all-features # Job to check that all the builds succeeded build-check: needs: - - build-riscv + - build runs-on: ubuntu-latest if: always() steps: diff --git a/.github/workflows/build.yaml b/.github/workflows/riscv.yaml similarity index 63% rename from .github/workflows/build.yaml rename to .github/workflows/riscv.yaml index 44d88d22..ec3984dc 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/riscv.yaml @@ -1,10 +1,10 @@ on: push: - branches: [ master, add-riscv-rt ] + branches: [ master ] pull_request: merge_group: -name: Build check +name: Build check (riscv) jobs: # We check that the crate builds and links for all the toolchains and targets. @@ -13,52 +13,42 @@ jobs: matrix: # All generated code should be running on stable now, MRSV is 1.59.0 toolchain: [ stable, nightly, 1.60.0 ] - package: - - riscv - - riscv-rt target: - riscv32i-unknown-none-elf - riscv32imc-unknown-none-elf - riscv32imac-unknown-none-elf - riscv64imac-unknown-none-elf - riscv64gc-unknown-none-elf - cargo_flags: [ "--no-default-features", "--all-features" ] include: # Nightly is only for reference and allowed to fail - toolchain: nightly experimental: true - - package: riscv-rt - cargo_flags: - - "--features=s-mode" - - "--features=single-hart" runs-on: ubuntu-latest continue-on-error: ${{ matrix.experimental || false }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@master with: toolchain: ${{ matrix.toolchain }} targets: ${{ matrix.target }} - - name: Build library - run: cargo build --package ${{ matrix.package }} --target ${{ matrix.target }} ${{ matrix.cargo_flags }} + - name: Build (no features) + run: cargo build --package riscv --target ${{ matrix.target }} + - name: Build (all features) + run: cargo build --package riscv --target ${{ matrix.target }} --all-features # On MacOS, Ubuntu, and Windows, we at least make sure that the crate builds and links. build-others: strategy: matrix: - os: - - macos-latest - - ubuntu-latest - - windows-latest - package: - - riscv - cargo_flags: [ "--no-default-features", "--all-features" ] + os: [ macos-latest, ubuntu-latest, windows-latest ] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v3 - uses: dtolnay/rust-toolchain@stable - - name: Build crate for host OS - run: cargo build --package ${{ matrix.package }} ${{ matrix.cargo_flags }} + - name: Build (no features) + run: cargo build --package riscv + - name: Build (all features) + run: cargo build --package riscv --all-features # Job to check that all the builds succeeded build-check: diff --git a/.github/workflows/rustfmt.yaml b/.github/workflows/rustfmt.yaml index 6ee6b39b..8b68d6e7 100644 --- a/.github/workflows/rustfmt.yaml +++ b/.github/workflows/rustfmt.yaml @@ -1,6 +1,6 @@ on: push: - branches: [ master, add-riscv-rt ] + branches: [ master ] pull_request: merge_group: @@ -10,7 +10,7 @@ jobs: rustfmt: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable with: components: rustfmt From 3d39bbfaadc4e00885a2f3671422057ace61ddaf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rom=C3=A1n=20C=C3=A1rdenas?= Date: Sat, 18 Nov 2023 20:26:13 +0100 Subject: [PATCH 232/234] changelog --- riscv-rt/CHANGELOG.md | 1 + riscv/CHANGELOG.md | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/riscv-rt/CHANGELOG.md b/riscv-rt/CHANGELOG.md index 051566f5..bcd96239 100644 --- a/riscv-rt/CHANGELOG.md +++ b/riscv-rt/CHANGELOG.md @@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ### Changed +- Cargo workspace for riscv and riscv-rt - Use inline assembly instead of pre-compiled blobs - Removed bors in favor of GitHub Merge Queue - `start_trap_rust` is now marked as `unsafe` diff --git a/riscv/CHANGELOG.md b/riscv/CHANGELOG.md index e1881c1f..e9ae972d 100644 --- a/riscv/CHANGELOG.md +++ b/riscv/CHANGELOG.md @@ -20,7 +20,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ### Changed -- Transitioning to cargo workspace +- Cargo workspace for riscv and riscv-rt - Update `embedded-hal` dependency to v1.0 (bumps MSRV to 1.60) - `misa::MXL` renamed to `misa::XLEN` - Removed `bit_field` dependency From d7b4ae981dd3c2e04fa4d6aeb04bf1bc257b0ea3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rom=C3=A1n=20C=C3=A1rdenas?= Date: Mon, 20 Nov 2023 14:14:19 +0100 Subject: [PATCH 233/234] update Cargo.toml --- riscv-rt/Cargo.toml | 7 ++++--- riscv/Cargo.toml | 1 + 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index c65c24e5..a368c68f 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -2,20 +2,21 @@ name = "riscv-rt" version = "0.11.0" rust-version = "1.59" -repository = "https://github.com/rust-embedded/riscv-rt" +repository = "https://github.com/rust-embedded/riscv" authors = ["The RISC-V Team "] categories = ["embedded", "no-std"] description = "Minimal runtime / startup for RISC-V CPU's" +documentation = "https://docs.rs/riscv-rt" keywords = ["riscv", "runtime", "startup"] license = "ISC" -edition = "2018" +edition = "2021" [features] s-mode = [] single-hart = [] [dependencies] -riscv = "0.10" +riscv = {path = "../riscv", version = "0.10"} riscv-rt-macros = { path = "macros", version = "0.2.0" } [dev-dependencies] diff --git a/riscv/Cargo.toml b/riscv/Cargo.toml index 9606eac5..821ba0e5 100644 --- a/riscv/Cargo.toml +++ b/riscv/Cargo.toml @@ -7,6 +7,7 @@ repository = "https://github.com/rust-embedded/riscv" authors = ["The RISC-V Team "] categories = ["embedded", "hardware-support", "no-std"] description = "Low level access to RISC-V processors" +documentation = "https://docs.rs/riscv" keywords = ["riscv", "register", "peripheral"] license = "ISC" From 5407f3826e34ffbdb55e59d231fa22637daaff38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rom=C3=A1n=20C=C3=A1rdenas?= Date: Mon, 27 Nov 2023 16:20:38 +0100 Subject: [PATCH 234/234] Addressing review --- README.md | 39 ++++++++++++-------------------------- riscv-rt/README.md | 1 - riscv-rt/macros/Cargo.toml | 2 +- riscv/README.md | 1 - 4 files changed, 13 insertions(+), 30 deletions(-) diff --git a/README.md b/README.md index 490c8d54..8d8459dd 100644 --- a/README.md +++ b/README.md @@ -1,35 +1,18 @@ -[![crates.io](https://img.shields.io/crates/d/riscv.svg)](https://crates.io/crates/riscv) -[![crates.io](https://img.shields.io/crates/v/riscv.svg)](https://crates.io/crates/riscv) -[![Build Status](https://travis-ci.org/rust-embedded/riscv.svg?branch=master)](https://travis-ci.org/rust-embedded/riscv) +# RISC-V crates -# `riscv` +This repository contains various crates useful for writing Rust programs on RISC-V microcontrollers: -> Low level access to RISC-V processors +* [`riscv`]: CPU peripheral access and intrinsics +* [`riscv-rt`]: Startup code and interrupt handling -This project is developed and maintained by the [RISC-V team][team]. - -## [Documentation](https://docs.rs/crate/riscv) - -## Minimum Supported Rust Version (MSRV) - -This crate is guaranteed to compile on stable Rust 1.60 and up. It *might* -compile with older versions but that may change in any new patch release. -## License - -Copyright 2019-2022 [RISC-V team][team] +This project is developed and maintained by the [RISC-V team][team]. -Permission to use, copy, modify, and/or distribute this software for any purpose -with or without fee is hereby granted, provided that the above copyright notice -and this permission notice appear in all copies. +### Contribution -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. +Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the +work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any +additional terms or conditions. ## Code of Conduct @@ -37,5 +20,7 @@ Contribution to this crate is organized under the terms of the [Rust Code of Conduct][CoC], the maintainer of this crate, the [RISC-V team][team], promises to intervene to uphold that code of conduct. -[CoC]: CODE_OF_CONDUCT.md +[`riscv`]: https://crates.io/crates/riscv +[`riscv-rt`]: https://crates.io/crates/riscv-rt [team]: https://github.com/rust-embedded/wg#the-risc-v-team +[CoC]: CODE_OF_CONDUCT.md diff --git a/riscv-rt/README.md b/riscv-rt/README.md index 6db52456..0f7ed012 100644 --- a/riscv-rt/README.md +++ b/riscv-rt/README.md @@ -1,6 +1,5 @@ [![crates.io](https://img.shields.io/crates/d/riscv-rt.svg)](https://crates.io/crates/riscv-rt) [![crates.io](https://img.shields.io/crates/v/riscv-rt.svg)](https://crates.io/crates/riscv-rt) -[![Build Status](https://travis-ci.org/rust-embedded/riscv-rt.svg?branch=master)](https://travis-ci.org/rust-embedded/riscv-rt) # `riscv-rt` diff --git a/riscv-rt/macros/Cargo.toml b/riscv-rt/macros/Cargo.toml index 8c2d9c13..8ae2e353 100644 --- a/riscv-rt/macros/Cargo.toml +++ b/riscv-rt/macros/Cargo.toml @@ -9,7 +9,7 @@ documentation = "https://docs.rs/riscv-rt" keywords = ["riscv", "runtime", "startup"] license = "MIT OR Apache-2.0" name = "riscv-rt-macros" -repository = "https://github.com/rust-embedded/riscv-rt" +repository = "https://github.com/rust-embedded/riscv" version = "0.2.0" [lib] diff --git a/riscv/README.md b/riscv/README.md index 490c8d54..f67ac78c 100644 --- a/riscv/README.md +++ b/riscv/README.md @@ -1,6 +1,5 @@ [![crates.io](https://img.shields.io/crates/d/riscv.svg)](https://crates.io/crates/riscv) [![crates.io](https://img.shields.io/crates/v/riscv.svg)](https://crates.io/crates/riscv) -[![Build Status](https://travis-ci.org/rust-embedded/riscv.svg?branch=master)](https://travis-ci.org/rust-embedded/riscv) # `riscv`

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 GzJCJq?-o=5 diff --git a/riscv-rt/bin/riscv64i-unknown-none-elf.a b/riscv-rt/bin/riscv64i-unknown-none-elf.a index 37636b4654071f15d2edad5493092459e9af65b0..e6cee106cb761b6b392b7fea4c7344d8abd6a0fe 100644 GIT binary patch delta 2616 zcmZ{m|4UtE9LJyI{o=jm@P75EvphN1z3Rn#?&k6eMwb|Av`Uyi2+ekNu8bVYx+7bb zlDZ^DT>A(G2^$ski~Zz+F$N79L#Q8CMEJwn{0G7!g8kI`e4g_@dAzL$?(_Pb&zJY} zoaf8YyQj8_<>q|;aIbx&*RpI&nzy&C?!0z#SFBM=`S@3Ie=Eb*%Et-IEzj9D*Y@U* za5CFZc6T!m9kN$$*=D+(i_i+11=XY)>7cQ0{6#+*n}I3zzOwOI)o@kS*9KJwp4xaZ z@T@_txdfGiUG!dc(C1f*rmB-nztHg0zG{=78sObSj-Js`3(+<(4Q4<05-A6Nj7 zf&<_&a1a~eMTHrNg3 z!9K769t8)$W8fe-1P+5Iz#=#fPJol(G*|*>z*%q}Tm+ZFi(nb+6~cPC^s8-TtZIgw z)9yL_Zd_I5InR>s>_qLq_r;0qD*u0_+^;C=qADmO7*YBomZbBsCZmRxlly%thO4{_ zuHojV-=cCO-SNs&-{@ECyNTL*RQG;*Atu?IGGCuh)rmS?izaA0;OFNAMys!=R%(bn z5gzT=Sieu!EfpW(bF&n0r@Qer&!40d&hdi6OGVRhnaJ0+cH7PYjSjpCIiRr069ZE1Rmqc$F838vi;Gf#8v=4c)s(eOsyx0b5Y$Pu_R z5&x?mzXe zD-emg2i2{7oK9v;qre+)(npzyk)lg`o^!hL?~G++s3l{zhvH7Gi)JimF6-nMvqod$-SAPAjhUspGB3_j9c~lX3*T zGnMaZ<>FkUleQU-1e|P}9`FWzqZLAF$2Z_WzpLEPN`;$rj};0~Xp%RjF)J3KZ~$ma7ixx%zk`LXGdS32^A9g_)5Ce^jGt2kRKndGTwR9<&Sda4@u#Clw3aJM5afMR!R)v~gd@*@!Ua3htXX)-`{Rb`UHJw`-tLU#V zu4wJj)k+m>H@E5g%BS5{{>q<~&uV(f6Q_*Fquq4QW7@ULttx5B6Xf1CkIB6T>6Kv< z{9&*KjDhW766^%iU^kcn_kg|NK5##H0PF`3fkWUZcpMxDb6^3S1?Rwd@HDspo&guZ z^WZXg5&Rsy41NW!f>*(B!5_di@CLXJ-U4rfKZAED#ivqbos?C(s_c_uZnAQ!lo#}a z2G{^Lfnl%(jDhW766^%iU^kcn_kg|NK5##H0PF`3fkWUZcpMxDb6^3S1?Rwd@HDsp zo>yTFYL!GLmchKch)k6BK&X6pgYj>R)ax1_6es9#K)he#ieo{Am zT4y%8)vb*zyRqHQRckU2)z&p=Kjx|jgOmu!o8J@Y;ho~02@LWx-wm{emU*mS=@Lby zPLZx(Y5ni--NOO0(sMjd{c}$~bXqO>go-tAIcc@*s^~AxFYZAdr!9!$R?&XF%t%q3 zqhIP1v}|~(!SMRtaAYmheZ!<)qlMaoUYa#p^gDFHNa#1|CfD!M-&WlbOy~s~44R=+ zj7d7XoNk{%sM}E;S`6F~8VuoIIM7?OsO_-&d z5!3gYBWlp&QIj@By}lWTw~4-sm~<)P)i3i|n0kT+IqNEC$@z%IxJ=Ml_Ws6R>4~*) znWAsl+Z6NCLd>i4^n26{@z3anrO}cxc~SQr+lcXvqN$ik=UH>i;f>K}>}5UQ35PdL zFYrvOvC+zWc6^u`TRUi=^%{lUl{!qJc(XQWSG>8ek%!2|%s7ThbFJQX%)-BgDVwwj z{o$`DIvIa#Zx08`3Gat+zq~AL z(&axV{}LW#pCzm_biX~?(a-&IdY7UcU|Y0d>20R#?QQx9O?5=wbL_Wu=IP6h=z!er zayn_bQf&8ZSUR=bE`4Bm@8wC8$SY!A{Zhz!%&rr??8mUXF{&zRDdfRa|ACOQ{^=5zEn3Vs~)S{)4FIeRfd3 gv~Sb(L|e5V7yfJc^`hG3wrYj{s6Ses_v1DH03{EwBLDyZ diff --git a/riscv-rt/bin/riscv64ic-unknown-none-elf.a b/riscv-rt/bin/riscv64ic-unknown-none-elf.a index e2256f6f4878530113cc90c5d82e0113d179b2b5..375ecb0e3c71df739e8dd9da96029d5e69b3c029 100644 GIT binary patch delta 2614 zcmZveT})g>6vt6lrGCUJ25CfF zVk1^( zX72oVZuoKR*OA5MN@d@Ezt_*@_>Wt-&*ge5*2&%RYNb?^pQ+$k8p z_gC)b$!z!b^f0^qzV4;($_*dnIg6X-r(X>2n^dEs7Cot3X-UsS^~#g0wUMDn`E{@NObUf3wjXqHW-Aa1WRVJHQgy3Ho3+ z*aP;074RPL0C*qR4;};`03QSg!H2;^;9>A6_$YV`d>kACkAvgjGvFz33Ooy*1Lweb z@B(-dd>dQ@FN5!Z%is##UsYEXRR$_;Fk)vIr&`n~gK-?J25Z0_U=mD&8L%F7dK=Xw zV{NS7MztX7bT`WBZj{s8D5tYgCCqa=8|8F1%IR!W58_T|qnyr0Ih~DiIveG5Hp=O2 zl+)QLr?XK`XQQ0XMme30I)w9z^m^~b36N@oI^CKYNa}Lq%w50D#qgsR;v%ETKgFHNnY)d^Z@T#(UtTttN(YpK!@v= z3*qS=52iy7-kWU=+`mHaWy)Q%@CcrOEzwtD3&vqLG3O|nE$cbj$Nd|0g8MT>+`ma* z+y1X?dGtKy3+7-anP*`O7GaBj2DV@sww&lZY{4Gb;=dp#R<)O{^E6vOphs7Ks2@n^ zvDLcVy3r>n+J0x_aKt6FF@pVzXP741y+*#9w#k?HG;Bc)jpV(DWKYs0`m(iLmw_$* z$&g>pOPcs!vX<+bshr=u)^njK-|m9f73A*b$n&9S;Lo$~RLGyB1+FPxX_7TzE!XAg zOOE>R$Pv64idJYn?~PXAks9G>@Ya%bGL#kUMEp;M{5ja-e>&vP(`$vzdw4b!tUGH?dPYiTnfA6!D3lJ7nEO!ZiL60lm#Y^-Sg~C(x20pDmqzlZhNj0#gH!p^ zbYXCGyp%5%rwgSiA&R3@!>=WarPhg*5hm0Aczb!ZOgfEAJ(+Do3+nA{sATqIDoZy~ z(atz7f+DeXl7f9u1jI)*LcsYNF|~L!eSS`^F0B{k-!Lp^Wnt|%*~Wc4>o$?7HeLHem&~-H)SZ>^hDDG^&D)%!e488Cw{`j8VooV}h}j zG0nK2v5m2vG0XTAV+Z5YjGc_nGCs%nJYx^z3yi&tFESoxJj!^C@nyz-#vJ1a8{1Wl zHKA&(2~}fFs2XcR)mRg%#+pzy)`Y6DCRB|zp=zuNRbx%`QhX_CuPjoi-H<} zZ?T9vLYQ&;$P3rHEgA#jDGmSO*j7=cQ@`7?u=&uzj?wF3$EZ?m+{y<81x*x<5`RS_xrZ(O__cGN37ny z$F@mBqbHLjfbC5~Q(c*_^lxCFB;q_pY@*n2F-uUMNfBpYz?*_bp97Y?4(F`NYXl~J zI^6TNz-MUP^tQ+g(Bwr{_9aQgM&`zC9cbvNQ= zIPUM3xwTLH-F0$g?f2b(*kvAmcy#ZfL42x7nz0QTn(E3tMah}?yvhHhnFn`RKYrR| z9X46ZJVi6lnlSmFGWnNz@*jq#upWHfWOcAkKRaikFRVM?Fj;-@X;_E(u){fRVjJNg zveB?Zp21q^avbjCxFh0lQhi9G*v7#b(P0c(8j-YMn}h?%u0$MA8+FJcoQdc`{Mp=+ zENe8UNYS0IY}xQc!3NF_V9Zey8-+)rI>mFIHnCaw9<$0uN36yC*brQcCgJDk9mrX& zG6WyT_CQb41@~gEBfD@C9k5Q*WKy$UMVw`RCn9ZAEsx6|OB+kPg?RxRas5g>;7%Yx z&XtB>JCZcRj?FBGVKN>$kwL0jKDRiZO`3{A`Pi^k=5r9aYSGs*uSi!1TB}9B?neVk z`Ku_phOIJsFLIJDX?-W>QL2HzV!OM#(NHb$T@Kt&mj{Ic<6o421s*`o2rR#X$wVaC zkK=0b0ueNzly5A>+W}pPeey@xNJOCEv*PQD3CeZIBqN9Dv{#FBo#U)iFcgYIFHz+O z(>p+4nucGKI^0f%Y}be}R>;9dGIHWW99LUmIf@1pbEdQjl`Gstj#l6cjGB^LFxeXE zxq*Xf(W5ct)x+MDKb?@u=(mx>6Ig&yDgc|US-){;keqX3heD6-d(f5IS2yP|2=O)j TbizWaxvs#Ad}}Zb@%n!ND^qQd diff --git a/riscv-rt/bin/riscv64if-unknown-none-elf.a b/riscv-rt/bin/riscv64if-unknown-none-elf.a index b72035b7e8d1fbc43aff68d28dc261e0592ce249..216a89d3fac5a709b18d11af05a94ef5fa86a636 100644 GIT binary patch delta 2616 zcmZ{m-)kII6vyXge`GhNWPfIoG@3C@-Q8r#&bG1HLc}1&M64QU9s)KtNw*p?C82IH z)@XuB>LNupo`8aZ78QJnPpME!!Gfg(^r4DK9%`F^K%$7yC+j(PzGEkAy=3m^+;i^v z-aGflZ0?-g8mqJx3I`9{hiuE@KQ7+dvU&>I$<#ZFBD7 z!js&Y?L$31%mWAPm7BJi&TtZ!8h-l4;JU?Vru}MN{Y5{i&A>GKUfKApW~8R(Yeltz zr#4;;JgcZZpP)*xo8GGp`uv7L)3r&aU#R@Fr`F_F6TG{~(bGC=A=&|^!7ONlJzxRs z1N*@v;2?Mu90G^I5%4%T1{T3da0;9OOW-Ux2QGk1U>UpsR=`ieHSiMnCAbb=2CsnE z!0X@*a1;CiyaoOYZh^PKZTc|~5BQ8AcIg5Ax<}9mf%RYnOn^;771a9{G%R>Kz%-Zz zZLkL{fPG*;cmx~-kAg$sFgOAp2gkr7I0;UHGhhjv1?Rv8a0x7f7r+YED}?oO={L5~ zV^uTcoOaLYcjHD?Kc_AIot>!v_r5rh2g?7SDfcUiyr>bB5mc1^h$ZPoHfZ3q0^PGGdg zs%*m;W>17i`!zP;lXXkQNBP_=$1`*%zJ^bYlVmbxJ^4I0U7EOln+_&(`9*jHtFR?{ z4z^$ob_;WfD4A1B^c~md=})fTp?!@x^#L8z^Q=(*I-AObFc-sV2l4<*n-=z zWkt)d1%t4~|Dmi{K&)kon*(Zm<7IOotR^M=q_pK%C z6#59YkKckV{?|PIG&OYYp2O>&Xn~&YH0gY2k#;(>b){3YrS9>G=`$rtblp^Y z>26mWZ3QAx_n^9&kJE{)srq^2P5LMsQ7O8(tDV=Ge`hU~rM9e@3B{evd$K27 zNE%$+m+Ip@Gi;&PD$QrxRIgSrlDm6~f*hM_g#oQ_847-_@QhYydWeE#S1XLrcteuE zR#%`gQ9}#a$J8+qN!k$E#P-NE>gfCKu5b(1s9g_P)I;9e&tWbV2l};H`9DLRl_4K7 zj6P_@v_@IH{6EeR_2yD)Q7e|8aHM|sC^kGq@e{h3GsBml*UEZk81G|z1>Ngf_j9c~ zn{oubGnMaZ_2OKm6Sf(S1f1SB-RBMZMk|EUj&IO`epk7n)e1N0E-Umyp-tYDCT#tc iO^(4E+T)1Gv3Q@J&v%6<@sVGn`FwA92xI*s+5Z6V!g{Cx delta 2894 zcmaKu?`xY?6vyvvnzY@Lk)}`fG^}%RD@mHQOQK!Ppt1-X?Qlw!4q8}kyEfa(>XxRd z)>&PV2~}5@dPE0yIKdYa#z3mj7n3PED6&CcOxO#R{Q*k1H!@JcbDrm$?pcf;xc77J zIp>~xpZnu^o;yRojue|ZQ|+ma_Eb2W42wAHaQLaTW#npTgHo!R%LmS~&>Mb!G<$S- zYP>KwnJrA^2FFeovibZ}t}v-oer$5&m9~6g*Qtb+Ce^XKqcmD7ndG7Nq}$oUdPh4e zsV8=KEL=_|R^vPdOBI)lC|rkBqxzT)^j4LcEWVgLHmlSr%cmCBuIN8#QLpIS(pXhr zm2p*Tm#$N)RJ&QH@2j77Tk%VORzIuhB~P3(9*=g@d5>w=F1M9@u8s!E3 zpaC|5O<)*o24i3=m;~FwG}sAdzbOd1_*bXi8F z&X8_cYWeT?-NOzt)AKw|!*fqQG+LUxLPZ+6oVGN(D%s29OKVWiVRMpktK@#YLQly! zL%%d6XwmReqv7?v;fPwK`-Vx~Ml-bry)v!m)k!{J$`OCm5nr-P{0Lo)n4wo4UN3Yx3Da~d zV)|Zlcnx|yYEo^~>zi^|o9MfUNtYvD{W9-`sZY`XM_uD6*&mS@my|iO{u<~uB8?8I_5t?X=x@XvK=b5E1+oJt) zx+~>L%aLNaXT!>~iS_aamU}NxnnYX)tCZRmb$=pWSq^_74H9nTa_{{BV#xFMPyy&jFx9yW}8c?9ODtm(L`czuxS4vs#%}y ilsE0$bR)5|&W{8CwS2v3Q*wKq!awSdmgW8UhJOG$X|N># diff --git a/riscv-rt/bin/riscv64ifc-unknown-none-elf.a b/riscv-rt/bin/riscv64ifc-unknown-none-elf.a index 03855db5a063485e39b9818327fc617104434dce..352517453fc6ee3f8297f7e73682f76881a2b1dd 100644 GIT binary patch delta 2855 zcma);T}&KR6vyxEE;q0)vb*dDyO4HTkzrwB2SnV~YM~lwOw~qf14gtEs!eU(irCbY zDk^PAZJNbHqEV6(Uwkl4O^A*0$wZ?*nwSvdi#74VHyVBM(R1ehr%cu*@r1d*JLl`p zoOACE8`HO5tag;k_w8|qUEAhAmf&dHLuF6N!?CDRD$LiMe=U#O%O9k6`QZbu%dvaP z_p>w4hlhrkgKpVf{-MJaM1`&uIDQZY{Rx{-JC8Zw#AH!81w{&@)4y*RF@ z=XWPw{7olf=mbvE|B95elt5g<^vX)mJIOTtmB?FBIicaOO41VvIg|0NNYUYj2;ZmVzCElmHE~KEVNF~`=-K30Sn78z zIY}GwIK^7?bhLG~5DbuKIu}rIH9TqK@lE%Ghy){;xrG(`F%?kg!(+)^57NuY?bb5(cd<{l?ZZ{3Y{if!H#&6tV-s2Ra_G z`Y$Xiz7){gR4Ht&DAp4Jt4r4k*=B!5v7V&A3l(~~rx=|(er~RRYPvEzM^}2j&$Y8r zs^eG6&oaWz&eEmccy1RwU0Wdlpqz^kjA%i2eJLmr9Sf0HWxj3&ee3o%-Im{07VqB{ RiVf^;`UNX)c%NbJ{J#uqVdnq< delta 2639 zcmai$U1(fI6vxkG@7q?YO-J1&F+>pO-r;<#6(H7mMD2>$fj*dYf}?8 z+b>LQQc{g=s)QVF(nJ+T? zm__Ch<}v0lv&`*;_nGs|1za>k!cy9))@4DRnzOWqG}R5 z*BV=(HMT%&Y=PF;0T2#2Lz~d`TJ(5S$*Pkw#ug}r>*qZ_>a5ve-Ua|KD8?>`}OW@T2(6BfOAI3 z z4rHnQgW5N+DVPZp;bY)7lIRqWFLaFyMSgLIBvF>mB-l~taCEK=QbcrxZRRKHDO%u~!K z6mwd6>Bh}{8FNypla6~Eq!O|;QXRqj6nBuUQE8$gH#>@%xPvofO(+|HRFX8ROm~S+9BF;G36we z__9{EAv0K1Ycq7?N+w*-%g|3zdWYy#32t(NKKWKtkqPJ@!MX(fxYF!+K9_$tsL+R< zw$LXtgrae6o7GSmHeye@*>jt{>1Twz$7KewihD9~aYk>RBP$Ok*Ou44cJo(oG2@61 z{E{L+kXh=A2JX$o#JjlI98M(GuP+~_Hp_J!Y;inGhW5_kB<<;%+D9&_ZCx7b38XT$ v8NR@k7DwE{KU?;N>ZMLpCK@#5C+rgTWSc$Her>sdliA&#vz+@Ic?N$0m-v$F diff --git a/riscv-rt/bin/riscv64ifd-unknown-none-elf.a b/riscv-rt/bin/riscv64ifd-unknown-none-elf.a index 9bfdab632f1daabdcf74cb3d4c3464e8ac587058..9bda8c4131f5e8fc6c8f5c0694acfa592129b1b1 100644 GIT binary patch delta 2846 zcmai$PiP!f9LHz&&t$V~%x-pPC%egE)U~@wHrYvyb&H8frH~v-2{ea|G?KJw2sN6t zt`ael(54WihfRM)rCl(H*h@X7N|Ay^N(m}hwTOp`IcU#bL=hzZely=`hV51#JMZ(} z@9(_dyf?G=k8e*_+Ka`f_gnic)8rpFZ*Q7?MO(<-WLQxYKVN0{S}&RF7ZRrH-fLOx zyTAAh8}oQyUmtVtUTgifMbBHI<^cN*@g;p)Nzqg4RrL@0Ufl}Lv+SkK%f6D&_lZgk z!GX=g!NaQRqwj(`UDEROSc68%e3T*$AvHk%XhvH=3E81`JIx*jlvdi&bpOL_huj1+ zU=GZK7T5mPI;5G0%cmuo%-U7G4Z@@d?UGOLH9=Od{(b6_5{z&@}D_Jc#zt$i^K|m~V|aQoMYFTV zC>Gc0OiNk~%jxv{l@|IrX2b(ZboVIQBZFdjT}~`#s@T2(8fcM|d$-2&Nu1m*xl@kV zERpHUSc0~L0iGvh-sV@5HGYaR#*!$n@VAy>ztpV|pP-pol&bMG-H%s0ybcCW7Ci!a z9Z75D>rHx2FEpLC=T3K#zD*cSRY=mzRl2Mf)K&UgFVIOnLRvDTzC~Th0$t+SOfo}X zG2cyQ2F`in+`w3>v*eNA@yOry$nVh(=N*BBtFOExRSC-I9JLw4>eS|OW4Mw2&PFyr zGk?{nGZ&$cv#q`fA8nY))P&FR-NTr2hIX&fFF7N{o4{@=_itbd zq(st0{+c~^J{$*Flbhn7y;+#j0_-Q4>!dD(vC^=g0G-BfRsz;ln z!44ypgGA`nS~SnvBD50u6vl!geb8a_dT;22N9!(FGR}D9Chd4KigwncwW!c(G`Sf? zdy>v}&eNZr`EdEfV!3DP*!<}-wRhc4wXssF=2ps$GQdeN_`6wN2?e+FEL123>yy)G?Jn=O^HrLbv_-}vDjn2 z3k?Y=arco&L@pxo7B-PAAWT2>bg5}t?#UjQeuSU0hZWo^4(zhZv8=tL*X54*x$^g` zC#$YuHcEqq?6|zC>aDhd*uQ&XH`j^%9?N8*7VKPX&=-ZQdIh;|+POYtWxZT0viG=o z*U`fB+I4)+GRY<9!Q1$iV`axbWl_E8(VSyD0vD;Syq;>K-(ndTX#r*rFho1npgtRP k1feE}vSrWEk>0Mx1-VsjRrxYewfBj}5;FeiNb=!-0bc*Hng9R* delta 2653 zcmai$Uu;uV9LLXDd%IOy)3vwUHq7h}X8)~QJ2S>eW*iA-GeHI2LmwbpVMCDNny$kU zhYW*?g0b^Q1mjG6zyy;)G}8nV5=iu6F_7#*6CNNLFTNRgF#d@?_&eu*%dSP^N$&6S zyT9}Meb2e)^xWRn(VzBJTl%|ux_f)NZ98wP=C-!IrB4Uhj6NcS@bdM6`pP0Y5D1W5|xhzXd z2OA0v=4B~8(l12K8tl`z-X{&6zx1c~MM?X88Or;7(xBr$%ds9qcMy1@`lj`9QR z)1Dz>s-N@f*@CzYwu31!3+BNdun+792f*#%5V!-}2@Zn=a5p##j)4cj39tlKz!`8B zoC8mSr@%8{6+90vfS-aFz(w#Y@CtYpybgW`E`v9~74Qe}7I+(6r8ZwwHtN08*3;QNi0!=UmwtzO+4yM2?mz!F#i zXTVu-4m=5-0?&X|MHp?jSb=QY+jE=^PK z$GU%1`j~=0d8KRw;CR&YnDQgC#mv)&Jt#mfg#b}6Hj3z2I zd*y3%Gh)eEdNyg%Uy)e+tu-le7JiI*j5bsyVE8XE7NFs+~}+ov%qc z#(Q>~qqYihQLQ0Y0|b#E7=(@wRf25 zm58HPTbA{Fs~)ZPS6F+n1Qj!u9OfUeMb%7*><%wo$e3#p*~{vdEYKgBB&|Yy$aK_y zSCZV6y81h=SKp>;{e8&d*9_0IpV~UC^nfbiR-1>qZRD$7VFwknmj4D6Ds&>-DhIVf z0SX26tLCO|`ODxTg*{qfKz)61+oWjQhuye?rW6~wMstil)J}Q4^yvlneKL3{sHHE zN90L%w93!5!gVMNx#poZzFy%96?2v>(b3#f(eu!m3pz#W1@qw+ diff --git a/riscv-rt/bin/riscv64ifdc-unknown-none-elf.a b/riscv-rt/bin/riscv64ifdc-unknown-none-elf.a index 3aaae7a6b13fc2c92003917de3141912b59785b9..f7a2c96968674193184bb62ca225c9322f784547 100644 GIT binary patch delta 2613 zcmZveT})g>6vt=wW3r0~yRgdzim;`%?6NC+L8RNJQLIK#8`EfGc#u+%`Vrfpl*VdX zYb;gLRD~WAF(Co#L!W#i8sm#T7&S3|BqqL?*y@un1|Az9#B*l;w_K13cYbHinR90D z{C95neeAE1*_KM>-hFY4Iq*$z8k_+y zgIB=!z*%q}TmTorWqL4PACD>nl{Of$GmKL$YLvk^0ak(4U=5f8>%a`y06M*mYL>A! zR&S$P5p}v7<#ad7>1~wL*{BlcIh~DiIveG5HmVnKr?XK`XQQ0XMme30aylF3bT-QA zY?Ra4D5tYgPG_T>&PE-=c_naO0b^%W3Zn6Wj4j^$09uY zF3kSH&b}h&5RIx@sZRUT89E$~@i>Fk8p5g8KEi#9R~xPy;9V=aUN_9@$LkApw0^M= zp6>DBOvu4|v#pW)*JveE?!E|*;2GEweI2%79CkBvn(DJI(*A%Zb$(pd1>+_j_Z28G-%^r~K zq>nWsv|en}2WhF?nBS&=ByTM+M1Ry|`9sx%5@V68rB?kEEtMKGDDfS1kv&w=<6Xt% zy!->gt=+CSZg)I$xAV<9*!ShS|6B01EO>`fpP@#btuZ5BKAxYWv{r1OAG=ceqAlBq zYqu6ETf0r!52&r|C3AAZ+*-J(m&7Zn>nPqIyIuU6EuQFb)5Cif*|r|i7j%P*&!V_b z7fNmVQ(IvH6$V`)`_^)7TPu7`BfgjX3Ka_S&h%&5erU66@FwnbMMU$r=zG7Iyyd>? QYLV9cy~&$c>sQJC53d}i2LJ#7 delta 2896 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 delta 2533 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 diff --git a/riscv-rt/bin/riscv64imf-unknown-none-elf.a b/riscv-rt/bin/riscv64imf-unknown-none-elf.a index c8a6c4505d6be4f552c5002be18ec9527847ffae..a5f60d0c43acaca0df7b2f305f19915d960c1d4d 100644 GIT binary patch delta 2670 zcmai$UuYb45XX0K@0Lr3=o z0;WwMMS}L>;uP#dz$!(HL=a+2se%ec^H5O~q=KjqqM$mcy|5~50)?YK){OP@g z0?$3*+{MAH_xJTNd;1+{{qwwOXL%M&h_4}0cx+M{sa@Sv|D>5 zrSHP`ZnZ`pRMil@8A;MpdX9e3bxL){>3cn@hUp94Yz`|?H`U&tyJ}czpfB~Lb}L(8 zx4<-LgE_DO_JIyK01kn};3#+q90L!76W|m$4bFhG;2gLB7Qsbu30whBfotGtumqk3 zH^6h?d2kc_0K5!-1bzZu1-HR#d{^otn!@MpT0m8o`=aSe6xJFr4jNzs*aBK$8nnS2 zSOEJ#2OI#0z+rF{JOqw`hrtPO3Y-RKz*%q(TmXyUBDe&ufTzGU@HAM$d2zprg;HH^ zA9IIZL&O=O8kO_&yFB1^XYskZQM15Te;de`LY6&@vKr@n zvAPjWPUlG7!`wv|>pG~mzSQo=nXEkT|6qopH!zFzkdcoq1-xhIM!gx^fTf9ff<83z z>IwSY$kQuE4P}yP^+mcrnWroK>*Zvceq&xrreh}qdA4c4Va8;IBC_*U*LB^H@KkbfY;x!R6G{2TeK6X zDBi~c-U8)qGv-$m?{QkS=jksyS6w{5SnN6W==^g00H(v(Z^yC7-ZpC6C(cX3)E=$sGHoIfwWPij5~}TT-(~Lra|G6Y)1Wz`BI^ zcTIdE+!I~dqj$4bDf`WOH)uDDWS0!(*+>mG*)D}`--^T$glDe9{$#sSP&}b!>IXJ_HN^AQ2 z4hdJ3k_UI9JXqyxdO_C2|Gw1HPA;pi;g>~&-Py@ij<1w^E$t<}8OSZ`E6@Ep+hnT+ z#Q9jDkGr$#JE&EXT1VevXQf(;c-IB@Aw5%G>k8YXmUMJbehSk{PiFEW+bX4xX1w50 z%#rhzBQH;Xm2G@V3kcgqoOXH!lTO4lOv?$gNF%&NaX$pKk-xoa3>CkX JPlMe1e*y1lmwf;L delta 2856 zcmaKuUrgIo6vyxFKmM#;`sY`FZ2(uX&~DJtYF9fYu}ikV63Ad-3K_nHC>|m+*P+lWY30Ofq*e%F!*a`9R{BEc#>Ov?&P*1E z3**I^-0;LyaXg=&$rTGi7~cD6^FrXC|3xW;-*(Jk9K6b}@UHeawF5AajH{#>_G&nK@>WImeu5E-)9F zOU#?hW#%e#jd_Q8m$||Gk-5d(X6`V5W_}&$1F1EnDfj9<|1>6 zd6T(Jl#YKYM4(I^YY`r54r?ZRz*XiUBIy{UJz3-zWr z+YM5JDR)4+Sshb-#Qtpe{vn1+dJRVsu%OmFF98>cQA`QfwgYYm~}n^d!Yu_{-Y{+de0xeNNY$ zk%C+UkETP`7ltm)39G)ayaD%pZSq}sg7t^cpi$k8^>uh((}RnqzMb5rIeY}WT8F&2 z>GHo>Er&P98=gAk2wVuic=i|(=`F?FTpzPIEsj?i=XNQ+cma;xJ@Ov}3fAdfblzG-E4C zo&E=ut9PMK(&t#a&GUG}0`EniKhuGMO2VBioaGOigzSvxc-7w{&-6K6L78s4`G7f*@ zv0caKN}4;Y*@9!OTYH4aIet!h|VN#+NwM|Jk zBG_~*70iR!O;4pynoxy4*{Z=8L8u_=n}Q&Pf_?DCC({St>p3&$x;HUH?)ja2X3m+p z^Pk!Lee%JvR$sk7wzo1~ab5hw=C`g}tLq?|nWzxL!l&UqE7R`E)#QMeUaeFxcW-?+ z4n}{xRzp^I*J~?3mAmhZU=}tiFi8&DUeO~UEf-`ztjI-6u1&5#64)0Ad?D9g46aJ} zx|9T01>v7i9&RaR1%-fBl|lxIG6-jsgZ7in7W?~noXZ?!?qrTIv&=lR$Sg4{%w5bH zbDUXc?qlv}KF*wE9$+419%3G59$_A3KE-^7`5f~F=1a_J<_vR=d7Akav%$Q;yu^H; zxy<~K*S`D6@n47}I7Zm`P?AQ7Y0BtMzi!=%_@R z-;JJ17(JCRIx1oGQ=-V@jDAWO{gg2JDPixT?9x?$>ZzyQZI+)iS@DchLR^?Xn3e+B0yO}4C3>O_KcZ;E5l9?-W=T| z+H>p^I-oh?Jn8K^^)C2&lk8Lcj4w{#PmSVdwP#EpJUy~`uGf6MHayHYRWElZ_MGFcdSEaS}9IYKr3z1~+-)(np!cq^g! ztS|1ePw`W}cotSOo7do-2O3m|UosAKW#^!oEk+x!zSAhpo|<21z~|W?2i04!}mvk&`I41L=Y-Gf>X^->Z7`M|oEk;dai+-J!FA?Pt;f8y)5#K4E&n=6%S1 z%yZ;jc$hPF_vq~9&dsAJn~urW>?z8QWONC8u$8F`ayxk0bi4PDFT zpBDcL6Wi4K7B)tm$T^Y=TLrG<`{g%gSGmGr)1_BK7jf%qet`LsBiG=A(nRW4t}{cM cfsK@Z7w(k`kqV!Y7R1VXB7br1-)TSo1}_XUANl?6^s!|sHLP<5=wzk8fu~CW2u<5 zidYRs(=47wAJk|cd>}Cmgc|#%4?ds|rjJduNqsQ!MTJD)GqM=1ze)&Ls1h@k-rT~x{A6ikTK)|qa#r@PeJ>AJg>Fje zl3pR~-i_lmQ~OxLckVQ-xIHd6DhzwV4r+8S-H`Q|*bn}@N56XZk1!jVQD&T(WTu%d z%md6E^HFAjS!9-&hncO+Cz)-`rm@Crwdg*U8w5mqMP!=@2LPxdOR*E)NV+jc0mfY3vO|p*Qu&2h1!*^ zx7?l=PCtjPVO3@Kj#KgfakRdu-&!BsQgj)ZAFC{DU`h+ST*6C)uZ<8rg_U(Bqv5G` z!!g5joI(5DE5qjAj5IhpNPO5O!qz9i*>&QLfhv3b9k@4p;6^G4mKdGv$Pp<hP8MGHsfEyyr#(rtR@=p_!w|MVZcg4gImc^YA&D@=U8|jk~XB8@9js6 z!)C&iJ@^Wm5J_TuQiDP=v}KV+)F+R(k_ni^SyJC%^>scOq>dko9qR2A>;0K?_JBXx z06l)pkPat9%4#o!B=AeVL!uitQ>M4XiB5t)-5@()HEE{qu)-J@oD}d!dWXV*rErb@ z0bpySMaVu<2$y2YW}gsJ*bM{eX737n2Q2T)q#*CWk>&)RPRhN`ksC@tP$Zq{?c4h{ ztTvliqHi$r15&AK)1a$4F5iQEx;9BKG&W~`I;GoHZo*WH>8;RzCTuxa!Y5d^*3p?z zwoV0W9YGv#SGWzEEvEbmyqTxM8?1BJr-DqxD=?60_O4TMY|F5eIq0ph_P4YL{{S3$ BrIr8y diff --git a/riscv-rt/bin/riscv64imfd-unknown-none-elf.a b/riscv-rt/bin/riscv64imfd-unknown-none-elf.a index 22449707a5e071a09b4d9a4a1495bc9085fb8fe0..47ba78e5f40a1641998a9a37f544aa9b40a8d7d7 100644 GIT binary patch delta 2426 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 Am;e9( diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index f1c564a2..e6870810 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -330,13 +330,8 @@ #![no_std] #![deny(missing_docs)] -extern crate r0; -extern crate riscv; -extern crate riscv_rt_macros as macros; - -pub use macros::{entry, pre_init}; - use riscv::register::mcause; +pub use riscv_rt_macros::{entry, pre_init}; #[export_name = "error: riscv-rt appears more than once in the dependency graph"] #[doc(hidden)] @@ -549,3 +544,15 @@ pub extern "Rust" fn default_mp_hook() -> bool { }, } } + +/// Default implementation of `_setup_interrupts` that sets `mtvec` to a trap handler address. +#[doc(hidden)] +#[no_mangle] +#[rustfmt::skip] +pub unsafe extern "Rust" fn default_setup_interrupts() { + use riscv::register::mtvec::{self, TrapMode}; + extern "C" { + fn _start_trap(); + } + mtvec::write(_start_trap as usize, TrapMode::Direct); +} From dd232177887f1dc38587a83e1d6cb86a280cfa4e Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Mon, 11 Jul 2022 11:19:29 +0300 Subject: [PATCH 180/234] Simplify build.rs example --- riscv-rt/src/lib.rs | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index e6870810..5a51b0c6 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -81,23 +81,17 @@ //! //! ``` ignore,no_run //! use std::env; -//! use std::fs::File; -//! use std::io::Write; -//! use std::path::Path; +//! use std::fs; +//! use std::path::PathBuf; //! -//! /// Put the linker script somewhere the linker can find it. //! fn main() { -//! let out_dir = env::var("OUT_DIR").expect("No out dir"); -//! let dest_path = Path::new(&out_dir); -//! let mut f = File::create(&dest_path.join("memory.x")) -//! .expect("Could not create file"); -//! -//! f.write_all(include_bytes!("memory.x")) -//! .expect("Could not write file"); -//! -//! println!("cargo:rustc-link-search={}", dest_path.display()); +//! let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap()); //! +//! // Put the linker script somewhere the linker can find it. +//! fs::write(out_dir.join("memory.x"), include_bytes!("memory.x")).unwrap(); +//! println!("cargo:rustc-link-search={}", out_dir.display()); //! println!("cargo:rerun-if-changed=memory.x"); +//! //! println!("cargo:rerun-if-changed=build.rs"); //! } //! ``` From b89b4e4920e47815c9b641850e8953c123f8b371 Mon Sep 17 00:00:00 2001 From: Jan Niehusmann Date: Thu, 8 Sep 2022 10:34:04 +0000 Subject: [PATCH 181/234] Remove superfluous parentheses from link.x Fixes #102 --- riscv-rt/link.x | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/riscv-rt/link.x b/riscv-rt/link.x index e3b5ff4b..1f52024c 100644 --- a/riscv-rt/link.x +++ b/riscv-rt/link.x @@ -55,8 +55,8 @@ SECTIONS KEEP(*(.init)); KEEP(*(.init.rust)); . = ALIGN(4); - (*(.trap)); - (*(.trap.rust)); + *(.trap); + *(.trap.rust); *(.text .text.*); } > REGION_TEXT From c5f355dcd0c437a1eca448a093e9477a75b04170 Mon Sep 17 00:00:00 2001 From: Jan Niehusmann Date: Thu, 8 Sep 2022 17:11:07 +0000 Subject: [PATCH 182/234] Add CHANGELOG entry --- riscv-rt/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/riscv-rt/CHANGELOG.md b/riscv-rt/CHANGELOG.md index 3378cf72..b2337141 100644 --- a/riscv-rt/CHANGELOG.md +++ b/riscv-rt/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] +### Changed + +- Remove superfluous parentheses from link.x, which caused linker errors with nightly. + ## [v0.9.0] - 2022-07-01 ### Added From 061c0aace3e7216730780ce1dcb6c9385aa56860 Mon Sep 17 00:00:00 2001 From: Pablo Graubner <2234137+pgraubner@users.noreply.github.com> Date: Thu, 15 Sep 2022 15:55:10 +0200 Subject: [PATCH 183/234] SBI: introducing sbi compatibility --- riscv-rt/Cargo.toml | 3 ++ riscv-rt/asm.S | 17 +++++- riscv-rt/assemble.sh | 8 +++ riscv-rt/build.rs | 8 ++- riscv-rt/examples/multi_core.rs | 6 +-- riscv-rt/src/lib.rs | 93 +++++++++++++++++++++++++++------ 6 files changed, 112 insertions(+), 23 deletions(-) diff --git a/riscv-rt/Cargo.toml b/riscv-rt/Cargo.toml index 8fd31470..aa1ecb95 100644 --- a/riscv-rt/Cargo.toml +++ b/riscv-rt/Cargo.toml @@ -10,6 +10,9 @@ keywords = ["riscv", "runtime", "startup"] license = "ISC" edition = "2018" +[features] +sbi = [] + [dependencies] r0 = "1.0.0" riscv = "0.8" diff --git a/riscv-rt/asm.S b/riscv-rt/asm.S index 956b459d..4a4eecbb 100644 --- a/riscv-rt/asm.S +++ b/riscv-rt/asm.S @@ -46,8 +46,14 @@ _abs_start: .cfi_startproc .cfi_undefined ra + #ifdef SBI + csrw sie, 0 // interrupt disable + csrw sip, 0 // no pending interrupts + #else csrw mie, 0 csrw mip, 0 + #endif + li x1, 0 li x2, 0 @@ -84,8 +90,13 @@ _abs_start: la gp, __global_pointer$ .option pop - // Check hart id + #ifdef SBI + // there is no equivalent of mhartid in supervisor mode. + // instead, the hartid is passed as paramter by SBI + mv t2, a0 + #else csrr t2, mhartid + #endif lui t0, %hi(_max_hart_id) add t0, t0, %lo(_max_hart_id) bgtu t2, t0, abort @@ -165,7 +176,11 @@ default_start_trap: LOAD a7, 15*REGBYTES(sp) addi sp, sp, 16*REGBYTES + #ifdef SBI + sret + #else mret + #endif /* Make sure there is an abort when linking */ .section .text.abort diff --git a/riscv-rt/assemble.sh b/riscv-rt/assemble.sh index b8d85d67..de38c244 100755 --- a/riscv-rt/assemble.sh +++ b/riscv-rt/assemble.sh @@ -31,6 +31,14 @@ do riscv64-unknown-elf-gcc -ggdb3 -fdebug-prefix-map=$(pwd)=/riscv-rt -c -mabi=lp64${abi} -march=rv64${ext} asm.S -o bin/$crate.o riscv64-unknown-elf-ar crs bin/riscv64${ext}-unknown-none-elf.a bin/$crate.o + + #sbi + riscv64-unknown-elf-gcc -DSBI -ggdb3 -fdebug-prefix-map=$(pwd)=/riscv-rt -c -mabi=ilp32${abi} -march=rv32${ext} asm.S -o bin/$crate.o + riscv64-unknown-elf-ar crs bin/riscv32${ext}-unknown-none-elf-sbi.a bin/$crate.o + + riscv64-unknown-elf-gcc -DSBI -ggdb3 -fdebug-prefix-map=$(pwd)=/riscv-rt -c -mabi=lp64${abi} -march=rv64${ext} asm.S -o bin/$crate.o + riscv64-unknown-elf-ar crs bin/riscv64${ext}-unknown-none-elf-sbi.a bin/$crate.o + done rm bin/$crate.o diff --git a/riscv-rt/build.rs b/riscv-rt/build.rs index 2c307900..9eea713c 100644 --- a/riscv-rt/build.rs +++ b/riscv-rt/build.rs @@ -14,7 +14,13 @@ fn main() { if target.starts_with("riscv") { let mut target = Target::from_target_str(&target); target.retain_extensions("imfdc"); - let archive = format!("bin/{}.a", target.to_string()); + let archive:String; + if cfg!(feature = "sbi") { + println!("======== compiling riscv-rt for sbi"); + archive = format!("bin/{}-sbi.a", target.to_string()); + } else { + archive = format!("bin/{}.a", target.to_string()); + } fs::copy(&archive, out_dir.join(format!("lib{}.a", name))).unwrap(); println!("cargo:rerun-if-changed={}", archive); diff --git a/riscv-rt/examples/multi_core.rs b/riscv-rt/examples/multi_core.rs index efff6b04..1df8425e 100644 --- a/riscv-rt/examples/multi_core.rs +++ b/riscv-rt/examples/multi_core.rs @@ -11,7 +11,7 @@ use riscv_rt::entry; #[export_name = "_mp_hook"] #[rustfmt::skip] -pub extern "Rust" fn user_mp_hook() -> bool { +pub extern "Rust" fn user_mp_hook(hartid: usize) -> bool { let hartid = mhartid::read(); if hartid == 0 { true @@ -42,9 +42,7 @@ pub extern "Rust" fn user_mp_hook() -> bool { } #[entry] -fn main() -> ! { - let hartid = mhartid::read(); - +fn main(hartid: usize) -> ! { if hartid == 0 { // Waking hart 1... let addr = 0x02000004; diff --git a/riscv-rt/src/lib.rs b/riscv-rt/src/lib.rs index 5a51b0c6..39769edf 100644 --- a/riscv-rt/src/lib.rs +++ b/riscv-rt/src/lib.rs @@ -21,6 +21,8 @@ //! filename can be use instead of `memory.x`. //! //! - A `_sheap` symbol at whose address you can locate a heap. +//! +//! - Support for a runtime in supervisor mode, bootstrapped via [Supervisor Binary Interface (SBI)](https://github.com/riscv-non-isa/riscv-sbi-doc) //! //! ``` text //! $ cargo new --bin app && cd $_ @@ -230,12 +232,13 @@ //! This function is called from all the harts and must return true only for one hart, //! which will perform memory initialization. For other harts it must return false //! and implement wake-up in platform-dependent way (e.g. after waiting for a user interrupt). +//! The parameter `hartid` specifies the hartid of the caller. //! //! This function can be redefined in the following way: //! //! ``` no_run //! #[export_name = "_mp_hook"] -//! pub extern "Rust" fn mp_hook() -> bool { +//! pub extern "Rust" fn mp_hook(hartid: usize) -> bool { //! // ... //! } //! ``` @@ -245,7 +248,7 @@ //! ### `ExceptionHandler` //! //! This function is called when exception is occured. The exception reason can be decoded from the -//! `mcause` register. +//! `mcause`/`scause` register. //! //! This function can be redefined in the following way: //! @@ -300,7 +303,7 @@ //! ### `DefaultHandler` //! //! This function is called when interrupt without defined interrupt handler is occured. -//! The interrupt reason can be decoded from the `mcause` register. +//! The interrupt reason can be decoded from the `mcause`/`scause` register. //! //! This function can be redefined in the following way: //! @@ -319,12 +322,44 @@ //! ``` //! //! Default implementation of this function stucks in a busy-loop. +//! +//! # Features +//! +//! ## `sbi` +//! +//! The SBI runtime feature (`sbi`) can be activated via [Cargo features](https://doc.rust-lang.org/cargo/reference/features.html). +//! +//! For example: +//! ``` text +//! [dependencies] +//! riscv-rt = {features=["sbi"]} +//! ``` +//! Using the SBI requires riscv-rt to be run in supervisor mode instead of machine code. +//! Internally, riscv-rt uses different versions of precompiled static libraries +//! for (i) machine mode and (ii) sbi. If the `sbi` feature was activated, +//! the build script selects the sbi library. While most registers/instructions have variants for +//! both `mcause` and `scause`, the `mhartid` hardware thread register is not available in supervisor +//! mode. Instead, the hartid is passed as parameter by the calling SBI. +//! +//! QEMU supports [OpenSBI](https://github.com/riscv-software-src/opensbi) as default firmware. +//! ``` text +//! APP_BINARY=$(find target -name app) +//! sudo qemu-system-riscv64 -m 2G -nographic -machine virt -kernel $APP_BINARY +//! ``` +//! It requires the memory layout to be non-overlapping, like +//! ``` text +//! MEMORY +//! { +//! RAM : ORIGIN = 0x80200000, LENGTH = 0x8000000 +//! FLASH : ORIGIN = 0x20000000, LENGTH = 16M +//! } +//! ``` // NOTE: Adapted from cortex-m/src/lib.rs #![no_std] #![deny(missing_docs)] -use riscv::register::mcause; +use riscv::register::{scause,mcause,mhartid}; pub use riscv_rt_macros::{entry, pre_init}; #[export_name = "error: riscv-rt appears more than once in the dependency graph"] @@ -361,10 +396,18 @@ pub unsafe extern "C" fn start_rust(a0: usize, a1: usize, a2: usize) -> ! { fn _setup_interrupts(); - fn _mp_hook() -> bool; + fn _mp_hook(hartid: usize) -> bool; + } + + // sbi passes hartid as first parameter (a0) + let hartid : usize; + if cfg!(feature = "sbi") { + hartid = a0; + } else { + hartid = mhartid::read(); } - if _mp_hook() { + if _mp_hook(hartid) { __pre_init(); r0::zero_bss(&mut _sbss, &mut _ebss); @@ -403,7 +446,7 @@ pub struct TrapFrame { /// Trap entry point rust (_start_trap_rust) /// -/// `mcause` is read to determine the cause of the trap. XLEN-1 bit indicates +/// `scause`/`mcause` is read to determine the cause of the trap. XLEN-1 bit indicates /// if it's an interrupt or an exception. The result is examined and ExceptionHandler /// or one of the core interrupt handlers is called. #[link_section = ".trap.rust"] @@ -415,11 +458,22 @@ pub extern "C" fn start_trap_rust(trap_frame: *const TrapFrame) { } unsafe { - let cause = mcause::read(); - if cause.is_exception() { + let code : usize; + let is_exception: bool; + + if cfg!(feature = "sbi") { + let cause = scause::read(); + is_exception = cause.is_exception(); + code = cause.code(); + } else { + let cause = mcause::read(); + is_exception = cause.is_exception(); + code = cause.code(); + } + + if is_exception { ExceptionHandler(&*trap_frame) } else { - let code = cause.code(); if code < __INTERRUPTS.len() { let h = &__INTERRUPTS[code]; if h.reserved == 0 { @@ -430,7 +484,7 @@ pub extern "C" fn start_trap_rust(trap_frame: *const TrapFrame) { } else { DefaultHandler(); } - } + } } } @@ -529,9 +583,8 @@ pub unsafe extern "Rust" fn default_pre_init() {} #[doc(hidden)] #[no_mangle] #[rustfmt::skip] -pub extern "Rust" fn default_mp_hook() -> bool { - use riscv::register::mhartid; - match mhartid::read() { +pub extern "Rust" fn default_mp_hook(hartid: usize) -> bool { + match hartid { 0 => true, _ => loop { unsafe { riscv::asm::wfi() } @@ -539,14 +592,20 @@ pub extern "Rust" fn default_mp_hook() -> bool { } } -/// Default implementation of `_setup_interrupts` that sets `mtvec` to a trap handler address. +/// Default implementation of `_setup_interrupts` that sets `mtvec`/`stvec` to a trap handler address. #[doc(hidden)] #[no_mangle] #[rustfmt::skip] pub unsafe extern "Rust" fn default_setup_interrupts() { - use riscv::register::mtvec::{self, TrapMode}; extern "C" { fn _start_trap(); } - mtvec::write(_start_trap as usize, TrapMode::Direct); + + if cfg!(feature = "sbi") { + use riscv::register::stvec::{self, TrapMode}; + stvec::write(_start_trap as usize, TrapMode::Direct); + } else { + use riscv::register::mtvec::{self, TrapMode}; + mtvec::write(_start_trap as usize, TrapMode::Direct); + } } From 7d5d5873bfe94e72ebaadfc86e7cbbaf9bd652ae Mon Sep 17 00:00:00 2001 From: Pablo Graubner <2234137+pgraubner@users.noreply.github.com> Date: Thu, 15 Sep 2022 15:56:07 +0200 Subject: [PATCH 184/234] SBI: upload static libs --- riscv-rt/bin/riscv32i-unknown-none-elf-sbi.a | Bin 0 -> 7732 bytes riscv-rt/bin/riscv32i-unknown-none-elf.a | Bin 7712 -> 7732 bytes riscv-rt/bin/riscv32ic-unknown-none-elf-sbi.a | Bin 0 -> 7600 bytes riscv-rt/bin/riscv32ic-unknown-none-elf.a | Bin 7588 -> 7608 bytes riscv-rt/bin/riscv32if-unknown-none-elf-sbi.a | Bin 0 -> 7736 bytes riscv-rt/bin/riscv32if-unknown-none-elf.a | Bin 7716 -> 7736 bytes .../bin/riscv32ifc-unknown-none-elf-sbi.a | Bin 0 -> 7604 bytes riscv-rt/bin/riscv32ifc-unknown-none-elf.a | Bin 7592 -> 7612 bytes .../bin/riscv32ifd-unknown-none-elf-sbi.a | Bin 0 -> 7740 bytes riscv-rt/bin/riscv32ifd-unknown-none-elf.a | Bin 7720 -> 7740 bytes .../bin/riscv32ifdc-unknown-none-elf-sbi.a | Bin 0 -> 7612 bytes riscv-rt/bin/riscv32ifdc-unknown-none-elf.a | Bin 7600 -> 7620 bytes riscv-rt/bin/riscv32im-unknown-none-elf-sbi.a | Bin 0 -> 7420 bytes riscv-rt/bin/riscv32im-unknown-none-elf.a | Bin 7400 -> 7420 bytes .../bin/riscv32imc-unknown-none-elf-sbi.a | Bin 0 -> 7296 bytes riscv-rt/bin/riscv32imc-unknown-none-elf.a | Bin 7276 -> 7296 bytes .../bin/riscv32imf-unknown-none-elf-sbi.a | Bin 0 -> 7424 bytes riscv-rt/bin/riscv32imf-unknown-none-elf.a | Bin 7404 -> 7424 bytes .../bin/riscv32imfc-unknown-none-elf-sbi.a | Bin 0 -> 7304 bytes riscv-rt/bin/riscv32imfc-unknown-none-elf.a | Bin 7284 -> 7304 bytes .../bin/riscv32imfd-unknown-none-elf-sbi.a | Bin 0 -> 7432 bytes riscv-rt/bin/riscv32imfd-unknown-none-elf.a | Bin 7412 -> 7432 bytes .../bin/riscv32imfdc-unknown-none-elf-sbi.a | Bin 0 -> 7308 bytes riscv-rt/bin/riscv32imfdc-unknown-none-elf.a | Bin 7288 -> 7308 bytes riscv-rt/bin/riscv64i-unknown-none-elf-sbi.a | Bin 0 -> 12400 bytes riscv-rt/bin/riscv64i-unknown-none-elf.a | Bin 12376 -> 12400 bytes riscv-rt/bin/riscv64ic-unknown-none-elf-sbi.a | Bin 0 -> 12280 bytes riscv-rt/bin/riscv64ic-unknown-none-elf.a | Bin 12248 -> 12280 bytes riscv-rt/bin/riscv64if-unknown-none-elf-sbi.a | Bin 0 -> 12408 bytes riscv-rt/bin/riscv64if-unknown-none-elf.a | Bin 12376 -> 12408 bytes .../bin/riscv64ifc-unknown-none-elf-sbi.a | Bin 0 -> 12280 bytes riscv-rt/bin/riscv64ifc-unknown-none-elf.a | Bin 12256 -> 12280 bytes .../bin/riscv64ifd-unknown-none-elf-sbi.a | Bin 0 -> 12408 bytes riscv-rt/bin/riscv64ifd-unknown-none-elf.a | Bin 12384 -> 12408 bytes .../bin/riscv64ifdc-unknown-none-elf-sbi.a | Bin 0 -> 12288 bytes riscv-rt/bin/riscv64ifdc-unknown-none-elf.a | Bin 12264 -> 12288 bytes riscv-rt/bin/riscv64im-unknown-none-elf-sbi.a | Bin 0 -> 11888 bytes riscv-rt/bin/riscv64im-unknown-none-elf.a | Bin 11856 -> 11888 bytes .../bin/riscv64imc-unknown-none-elf-sbi.a | Bin 0 -> 11776 bytes riscv-rt/bin/riscv64imc-unknown-none-elf.a | Bin 11752 -> 11776 bytes .../bin/riscv64imf-unknown-none-elf-sbi.a | Bin 0 -> 11888 bytes riscv-rt/bin/riscv64imf-unknown-none-elf.a | Bin 11864 -> 11888 bytes .../bin/riscv64imfc-unknown-none-elf-sbi.a | Bin 0 -> 11784 bytes riscv-rt/bin/riscv64imfc-unknown-none-elf.a | Bin 11760 -> 11784 bytes .../bin/riscv64imfd-unknown-none-elf-sbi.a | Bin 0 -> 11896 bytes riscv-rt/bin/riscv64imfd-unknown-none-elf.a | Bin 11872 -> 11896 bytes .../bin/riscv64imfdc-unknown-none-elf-sbi.a | Bin 0 -> 11792 bytes riscv-rt/bin/riscv64imfdc-unknown-none-elf.a | Bin 11760 -> 11792 bytes 48 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 riscv-rt/bin/riscv32i-unknown-none-elf-sbi.a create mode 100644 riscv-rt/bin/riscv32ic-unknown-none-elf-sbi.a create mode 100644 riscv-rt/bin/riscv32if-unknown-none-elf-sbi.a create mode 100644 riscv-rt/bin/riscv32ifc-unknown-none-elf-sbi.a create mode 100644 riscv-rt/bin/riscv32ifd-unknown-none-elf-sbi.a create mode 100644 riscv-rt/bin/riscv32ifdc-unknown-none-elf-sbi.a create mode 100644 riscv-rt/bin/riscv32im-unknown-none-elf-sbi.a create mode 100644 riscv-rt/bin/riscv32imc-unknown-none-elf-sbi.a create mode 100644 riscv-rt/bin/riscv32imf-unknown-none-elf-sbi.a create mode 100644 riscv-rt/bin/riscv32imfc-unknown-none-elf-sbi.a create mode 100644 riscv-rt/bin/riscv32imfd-unknown-none-elf-sbi.a create mode 100644 riscv-rt/bin/riscv32imfdc-unknown-none-elf-sbi.a create mode 100644 riscv-rt/bin/riscv64i-unknown-none-elf-sbi.a create mode 100644 riscv-rt/bin/riscv64ic-unknown-none-elf-sbi.a create mode 100644 riscv-rt/bin/riscv64if-unknown-none-elf-sbi.a create mode 100644 riscv-rt/bin/riscv64ifc-unknown-none-elf-sbi.a create mode 100644 riscv-rt/bin/riscv64ifd-unknown-none-elf-sbi.a create mode 100644 riscv-rt/bin/riscv64ifdc-unknown-none-elf-sbi.a create mode 100644 riscv-rt/bin/riscv64im-unknown-none-elf-sbi.a create mode 100644 riscv-rt/bin/riscv64imc-unknown-none-elf-sbi.a create mode 100644 riscv-rt/bin/riscv64imf-unknown-none-elf-sbi.a create mode 100644 riscv-rt/bin/riscv64imfc-unknown-none-elf-sbi.a create mode 100644 riscv-rt/bin/riscv64imfd-unknown-none-elf-sbi.a create mode 100644 riscv-rt/bin/riscv64imfdc-unknown-none-elf-sbi.a diff --git a/riscv-rt/bin/riscv32i-unknown-none-elf-sbi.a b/riscv-rt/bin/riscv32i-unknown-none-elf-sbi.a new file mode 100644 index 0000000000000000000000000000000000000000..69a8508ae12111165199dc877622e89cc38d5579 GIT binary patch literal 7732 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 Lx8oVvxZJ-0;ZYE@ literal 0 HcmV?d00001 diff --git a/riscv-rt/bin/riscv32i-unknown-none-elf.a b/riscv-rt/bin/riscv32i-unknown-none-elf.a index 8894afe85e9b8e719cf590cbffc3d1d16192c62c..4b012b6763b0c06d7261ec3bbe949218daa0189f 100644 GIT binary patch delta 733 zcmYk4&ubG=5Xax_+l{MDv$htpn`XnN8wf$Mn_Uw@`UeO?iiaYC;K8bmKWa>4>d9(< zq2eKR6g>2xCp~!4co6Z>e?Y{G&||@q2mc1=z1h+(%=>=ccjnD|1N(O7%gmr)HKRN0--6;vevgk_Kl`5j-Go3e4bj=q(E#EVwN_bJhBFJ0>k zI6-K2`$^o6JCU&A*a+^KrQt^_&cOKa=SUe|jxG{i9qohnM0FHmox)w#C|-~hR`Fjh z@2#>kAW0a-HfeqxOU^WGV9UvS8=UxXsOAmv*cv`^LT{6^=auu6S*>Gh!*9+dd*uOJ zSrX_oA6GojJfXPD>?&SjE-LOZXB6LN)@Sc9tFz(V1FojN?z71LifRFzAK)D68C7|>f(`^OZt73vAf)03pe zp9c@A&w~dA4+XslwyQS}^&b$t2))@qKoCzo)xMe8kb#-^+3(w#-T5;8e!6F6Dw9)D zHKMpL_pLs}N=JdNADMze58 zJIokx4ZrgdoZ&O@A20A>>TIK@=_WN90Mk=c8UKW@wP!qJ3|&0}z^nRbu|$nlbLB>x zfl1U`?I>)9%K`3cC*sd~n2!G)Dae*MLJrOf$c?4AYs|ytHI+S~Qe0JjNyU0JaHPn3 zRP7`e?&ojGBabmO&yI^@Xl&5zcR!NtBp2@IZ^-#BzB2vNQzDH^H1p3T<&y8lKg?^H z&V3bSslWr}oN!zDnD9O2qHs&u5nfSF3*T0jd+#WVz5c?$!;I4Cp)-!G$8u-v10}D5;qxj9u8NW5g*64r4Cpx&} U+WM@)SWot|$8-7%YWxyU2d3?9wg3PC diff --git a/riscv-rt/bin/riscv32ic-unknown-none-elf-sbi.a b/riscv-rt/bin/riscv32ic-unknown-none-elf-sbi.a new file mode 100644 index 0000000000000000000000000000000000000000..31587d81c01ad5d2d6cb05a4f23ef99a9c96759a GIT binary patch literal 7600 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 delta 663 zcmYk1O-~bH5XYbCZkrlQ3j}RTcX4qERgt)T0~!v-GlwQdA{S!}<)w(c6s(#^`T_(F z#?Xvc4JIa>JdjO@S3iO2(VGVjdprivt?Jy!U6TuQx|?u_VO{(Y5|F3 suyDbefnz+iN^pT-kHIY*x80tysZ@g|;pTOGW~bmB-`Q!1;8#2TA9IdmrT_o{ diff --git a/riscv-rt/bin/riscv32if-unknown-none-elf-sbi.a b/riscv-rt/bin/riscv32if-unknown-none-elf-sbi.a new file mode 100644 index 0000000000000000000000000000000000000000..4b67f91c63f9120ebcabe3e905cee0ccfa346971 GIT binary patch literal 7736 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 MJa++w-o8cdU#J!mhX4Qo literal 0 HcmV?d00001 diff --git a/riscv-rt/bin/riscv32if-unknown-none-elf.a b/riscv-rt/bin/riscv32if-unknown-none-elf.a index 7afee313b635a790ae88838fb0341f2579a26504..c8aa87196db0d625cca6fbca4238eff38df8e74c 100644 GIT binary patch delta 750 zcmYk&&ubGw6bJBm`y*X#(-aPpic<{}<4e7$peD?d^%i~S?CA&!r0ZT;}vwx2z0z^mWo9xG#e{3 zEdg1g*=$8&BU}z{&e0$&IN6WC4Y%{r3=?pw^S!?SXe1YjGszZQekAu5Vu$YRx}tbS zQ+})Gh$-4M+i@=4&0mp6cCeT_UwO=}`^T#9$#$GecUQe6XSQ)G<>z*ZbX}r5^F&b% zneEQk)HQ2!jiUjYpv6v0&$5T5n{4?5V1?~Sud)-;^K7;D9$T*U7kVzox!Pxu^G&&t zzr+vH<+$LHVVUz1P5%9!%W-bWo?D!&1I)42N8Dzs1KeS&7dP1I0Cz=aDEAXIYY_kD z>smU67wtMY_}rd?Gx&?fRXpdc!vVf^#^5v_Iago;U3Ur|;DS2_KEBBh;RiRJ{9_2w brtgujc!=Lz+uTS}qU!(LwE3C}KjhPY*fnlm delta 678 zcmYk1%S#(k6vpq#ok>zOnIbYz+yW&mF$b#RsjDM+T!~Shs5)3uu?%^znk=U}o7n=px#9#4Lx=GoAlw7OrP^#I) zjFEzEEE@gk9STnW>p53FJNQQSY~hLFq<5)jTuNe}Sk=Uq|HYV$HrB{$mjdg=4;9ym z)fVuYxJz-3*iyVo99H~_I5;~`tj;4K>JFq7TJxD-e=lnfzWU&dNQz zEkCMyD&z+XOcMu}m>~`pm?aK=JVzWXP-VWG{tBU+7>3MJ=uaG2 diff --git a/riscv-rt/bin/riscv32ifc-unknown-none-elf-sbi.a b/riscv-rt/bin/riscv32ifc-unknown-none-elf-sbi.a new file mode 100644 index 0000000000000000000000000000000000000000..7abb52f4f2dd2d74ddc6bdf2d36697e8d8c00285 GIT binary patch literal 7604 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 delta 722 zcmYMv&ubGw6bJBmo!vCj#5K{9AG-^q8we!_x6Kb*=|K;IA~bji{sG1|)oQiX_L#O> z1@VyZJcxKy>_HE8FCG-?pWvn7QBV2@2qK8SnYT*@X5MGNZ)bMrP)jSd@}{T{V(qUCeg9Z<54SvZJELYxj-{NZXFQ< zq=lbl0Xwn-|L~lgq|N~<%XX+K0E9h8RmgYv%z7kegh1b}1K<_Ak_o7>w!D6ALqG|) z?E-$cyy$~HlZyUK5W#ZZ2@0ZGK{rZ7#6HHXrV>%>|Z4R4aXjvENxtxeFk$C!66RI$NvK& CzG%1r diff --git a/riscv-rt/bin/riscv32ifdc-unknown-none-elf-sbi.a b/riscv-rt/bin/riscv32ifdc-unknown-none-elf-sbi.a new file mode 100644 index 0000000000000000000000000000000000000000..39cc21f0560a199f16e07f26eeb2da1a5a5fb0f0 GIT binary patch literal 7612 zcmcIpYiwLc6`t#LoYYNRI|)u|x9;Y~J$aC9{7Bp+4T-&ZCyt#5d9=`OcKt{;b!>ON zHfab=)`1X35LIcV0)L2*015hsNGKKJr4pf1A*dpV5L8IO5BdkF(n>%nl=IzlX6Jew zL`20%Gxz(x^UayL*Z17JyI!;*Tj)E!v3gZV1(HdcG8xZ=Ang!DzC=^u1FsBX4bbcL7J{@vh4H#e``(Uw`@bl~2w4LsQ~k?ZLjz z_R4_0XaBnH>8c;rztV7{>BogvCtf@K(`SFS{Pon$wqJDITK}t!zfQlg?YHeS0`r%* ze(=x9&MWC~^R>1<#COQSN4}_@8FoP3HgPsf<>v ziblb4XJXoZrhBIES!T%?ML7#!Lwmh01wmr^r1-KQ9LMv=@dwX5J%i+r#;GUz-2i4j z^Cljnd&TfAdxsXB3+ha5)xoMnO=Hc&HS-{&@c)^ugQN{Q3^O>ia%8s}8Z#HMSxqaxz13!98qG(pI4Mq#48E#EfUk{QI% zkD-qTGb^aRH$L$WI5Fj^gZh&zX03_nk!Ts>mC=k@WvSB4E@J@Um1Rx1@AtXOA%2{< zG~shC)%^B)+4btZI6pqM$@~UOb-uf%634wFO?c8$_2W8AlX$bG8Yho0_4sm+<4-6} z@}(@*d@UYt^SHbhAj