如何使用 tpidr1 作为线程本地寄存器编译 rust

Vin*_*dra 2 llvm bare-metal rust arm64

在裸机 AArch64 中,rusttpidr0作为thread_local计算的默认寄存器生成。对于像内核这样的场景,tpidr1应该使用而不是tpidr0. 如何让 Rust 编译器生成要使用的代码tpidr1而不是默认值?

Vin*_*dra 5

LLVM 支持自定义属性 -mattr=tipdr-el[1|2|3]来覆盖线程本地寄存器。

默认情况下,tipdr0用于此目的。这可以通过执行以下操作在 rust 中覆盖

rustc -C target-feature=tpidr-el1 --target=aarch64-unknown-none
Run Code Online (Sandbox Code Playgroud)