0

鉴于此.cargo/config

[build]
target = "riscv32i-unknown-none-elf"

这个main.rs:

#![no_std]
#![no_main]
use core::arch::global_asm;

global_asm!(".globl _start

.section \".text\"

_start:
    call      rust_main
");

#[panic_handler]
fn panic(_info: &core::panic::PanicInfo) -> ! {
    loop {

    }
}

#[no_mangle]
pub extern "C" fn rust_main() -> ! {
    loop {
        test();
    }
}

fn test() {
    unsafe {
        (0 as *mut u32).write(42);
    }
}

cargo build --release生成一个缺少所有 rust 函数的二进制文件:

$ riscv64-unknown-elf-objdump -d ./target/riscv32i-unknown-none-elf/release/BINARY_NAME

./target/riscv32i-unknown-none-elf/release/BINARY_NAME:     file format elf32-littleriscv


Disassembly of section .text:

000110b4 <_start>:
   110b4:       00000097                auipc   ra,0x0
   110b8:       008080e7                jalr    8(ra) # 110bc <rust_main>

000110bc <rust_main>:
   110bc:       c0001073                unimp

然而,链接器似乎是 "finding" rust_main,因为如果我只更改函数名,链接将失败,因为当时未定义的符号。

我是否遗漏了什么,或者这是 rust buildchain 中的错误?Rust 与 rustup, cargo version 一起安装cargo 1.60.0-nightly (25fcb135d 2022-02-01)

4

0 回答 0