WIP: Fix TLS issues on riscv64

This commit is contained in:
2026-03-28 01:58:09 +02:00
parent 69cc9a2eaa
commit 236820fad4
4 changed files with 17 additions and 6 deletions
Generated
+1
View File
@@ -1280,6 +1280,7 @@ dependencies = [
[[package]]
name = "libm"
version = "0.2.8"
source = "git+https://git.alnyan.me/yggdrasil/libm.git#78b62c33fc6a56b6c063c19bbffc5224616b7028"
dependencies = [
"rustc-std-workspace-core",
]
+1 -1
View File
@@ -10,7 +10,7 @@ yggdrasil-abi = { path = "../abi", features = ["alloc"] }
core = { version = "1.0.0", optional = true, package = "rustc-std-workspace-core" }
alloc = { version = "1.0.0", optional = true, package = "rustc-std-workspace-alloc" }
libm = { path = "/home/alnyan/build/sandbox/yggdrasil-packages/libm", optional = true }
libm = { git = "https://git.alnyan.me/yggdrasil/libm.git", optional = true }
abi-lib = { path = "../abi-lib" }
abi-serde = { path = "../abi-serde" }
+13 -3
View File
@@ -29,13 +29,23 @@ fn build_libm() {
let mut build = cc::Build::new();
let rust_target = env::var("TARGET").unwrap();
let cc_target = rust_target.replace("-lp64", "");
let cc_target = match rust_target.as_ref() {
"x86_64-unknown-none" | "x86_64-unknown-yggdrasil" => "x86_64-unknown-none",
"aarch64-unknown-none" | "aarch64-unknown-yggdrasil" => "aarch64-unknown-none",
"riscv64-unknown-yggdrasil" | "riscv64-unknown-none" => "riscv64-unknown-none",
_ => todo!("{rust_target:?}"),
};
build
.compiler("clang")
.flag("-ffreestanding")
.flag("-nostdlib")
.target(&cc_target);
.flag("-nostdlib");
if cc_target == "riscv64-unknown-none" {
build.flag("--target=riscv64-unknown-none");
} else {
build.target(cc_target);
}
add_file(&mut build, "libm/e_fmodf.c");
add_file(&mut build, "libm/e_hypotf.c");
+2 -2
View File
@@ -336,7 +336,7 @@ pub fn get_dtv() -> &'static mut Dtv {
unsafe extern "C" fn __tls_get_addr(index: *mut usize) -> *mut c_void {
unsafe {
let module_id = index.read();
let offset = index.add(1).read();
get_dtv().get(module_id).add(offset)
let offset = index.add(1).read() as isize;
get_dtv().get(module_id).offset(offset)
}
}