From c8a4c572f9677bf718698957206809afeb7e1878 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kr=C3=B6ning?= Date: Sat, 4 Dec 2021 00:12:49 +0100 Subject: [PATCH] Demo: Add overaligned thread-local storage --- examples/demo/src/main.rs | 6 ++++++ examples/demo/src/matrix_multiplication.rs | 1 + examples/demo/src/pi_sequential.rs | 1 + examples/demo/src/tests/mod.rs | 2 ++ examples/demo/src/tests/thread_local.rs | 14 ++++++++++++++ 5 files changed, 24 insertions(+) create mode 100644 examples/demo/src/tests/thread_local.rs diff --git a/examples/demo/src/main.rs b/examples/demo/src/main.rs index 411bf946a..107d5586a 100644 --- a/examples/demo/src/main.rs +++ b/examples/demo/src/main.rs @@ -1,6 +1,7 @@ #![allow(dead_code)] #![allow(unused_imports)] #![feature(thread_id_value)] +#![feature(thread_local_const_init)] #[cfg(target_os = "hermit")] extern crate hermit_sys; @@ -23,6 +24,11 @@ fn test_result(result: Result<(), T>) -> &'static str { fn main() { println!("Test {} ... {}", stringify!(hello), test_result(hello())); + println!( + "Test {} ... {}", + stringify!(test_thread_local), + test_result(test_thread_local()) + ); println!( "Test {} ... {}", stringify!(arithmetic), diff --git a/examples/demo/src/matrix_multiplication.rs b/examples/demo/src/matrix_multiplication.rs index 3659b6eb2..16d28d780 100644 --- a/examples/demo/src/matrix_multiplication.rs +++ b/examples/demo/src/matrix_multiplication.rs @@ -1,6 +1,7 @@ #![allow(dead_code)] #![allow(unused_imports)] #![feature(thread_id_value)] +#![feature(thread_local_const_init)] #[cfg(target_os = "hermit")] extern crate hermit_sys; diff --git a/examples/demo/src/pi_sequential.rs b/examples/demo/src/pi_sequential.rs index 624dec5e4..2216456d5 100644 --- a/examples/demo/src/pi_sequential.rs +++ b/examples/demo/src/pi_sequential.rs @@ -1,6 +1,7 @@ #![allow(dead_code)] #![allow(unused_imports)] #![feature(thread_id_value)] +#![feature(thread_local_const_init)] #[cfg(target_os = "hermit")] extern crate hermit_sys; diff --git a/examples/demo/src/tests/mod.rs b/examples/demo/src/tests/mod.rs index e7b6da732..eb95295e5 100644 --- a/examples/demo/src/tests/mod.rs +++ b/examples/demo/src/tests/mod.rs @@ -16,8 +16,10 @@ use syscalls::SYS_getpid; mod laplace; mod matmul; +mod thread_local; pub use matmul::test_matmul_strassen; +pub use thread_local::test_thread_local; pub fn thread_creation() -> Result<(), ()> { const N: usize = 10; diff --git a/examples/demo/src/tests/thread_local.rs b/examples/demo/src/tests/thread_local.rs new file mode 100644 index 000000000..3b286323f --- /dev/null +++ b/examples/demo/src/tests/thread_local.rs @@ -0,0 +1,14 @@ +pub fn test_thread_local() -> Result<(), ()> { + #[repr(align(0x1000))] + struct OverAligned(u8); + + thread_local! { + static THREAD_LOCAL: OverAligned = const { OverAligned(0x42) }; + } + + THREAD_LOCAL.with(|thread_local| { + assert_eq!(0x42, thread_local.0); + }); + + Ok(()) +}