From d04d8f629ccd1d80b1dae4f3588b397dcebd1bd4 Mon Sep 17 00:00:00 2001 From: Brian Cully Date: Wed, 3 Aug 2022 19:05:54 -0400 Subject: =?UTF-8?q?Get=20rid=20of=20nightly=20features=20by=20using=20?= =?UTF-8?q?=E2=80=98global=5Fasm=E2=80=99.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Now compiles and runs on stable. --- src/boot.S | 11 +++++++++++ src/main.rs | 28 +++------------------------- 2 files changed, 14 insertions(+), 25 deletions(-) create mode 100644 src/boot.S (limited to 'src') diff --git a/src/boot.S b/src/boot.S new file mode 100644 index 0000000..d31e5fe --- /dev/null +++ b/src/boot.S @@ -0,0 +1,11 @@ + .global _start + .section .text.init +_start: + .option push + .option norelax + la gp, __global_pointer$ + .option pop + la sp, _stack_top + + csrr a0, mhartid + tail main diff --git a/src/main.rs b/src/main.rs index c0d41d3..8d95d00 100755 --- a/src/main.rs +++ b/src/main.rs @@ -1,11 +1,11 @@ -#![feature(naked_functions)] - #![no_std] #![no_main] -use core::arch::asm; +use core::arch::global_asm; use gd32vf103_pac::Peripherals; +global_asm!(include_str!("boot.S")); + #[no_mangle] fn main(_hartid: usize) -> ! { // let peripherals = Peripherals::take().unwrap(); @@ -49,28 +49,6 @@ fn main(_hartid: usize) -> ! { } } -#[naked] -#[link_section = ".text.init"] -#[export_name = "_start"] -unsafe extern "C" fn _start() -> ! { - // At boot, the hart is in privilege mode M, mstatus fields MIE - // and MPRV are 0, the pc is set to a reset vector, the mcause - // register specifies why the reset occurred. - // c.f.: [^super::rism2] ยง 3.4 (Reset) - asm!( - ".option push", - ".option norelax", - "la gp, __global_pointer$", - ".option pop", - - "csrr a0, mhartid", - "la sp, _stack_top", - - "tail main", - options(noreturn) - ) -} - #[panic_handler] fn panic(info: &core::panic::PanicInfo) -> ! { if let Some(loc) = info.location() { -- cgit v1.2.3