Skip to content
Snippets Groups Projects
Verified Commit 83f89912 authored by Jeremy Soller's avatar Jeremy Soller
Browse files

Do not copy kernel-allocated TLS

parent b9e03cba
No related branches found
No related tags found
No related merge requests found
......@@ -55,6 +55,7 @@ impl Tcb {
let (tls, tcb_page) = Self::os_new(size)?;
let tcb_ptr = tcb_page.as_mut_ptr() as *mut Self;
// println!("New TCB: {:p}", tcb_ptr);
ptr::write(tcb_ptr, Self {
tls_end: tls.as_mut_ptr().add(tls.len()),
tls_len: tls.len(),
......@@ -111,12 +112,12 @@ impl Tcb {
let range = master.range();
let data = master.data();
if let Some(tls_data) = tls.get_mut(range) {
println!(
"tls master {}: {:p}, {:#x}: {:p}, {:#x}",
i,
data.as_ptr(), data.len(),
tls_data.as_mut_ptr(), tls_data.len()
);
// println!(
// "tls master {}: {:p}, {:#x}: {:p}, {:#x}",
// i,
// data.as_ptr(), data.len(),
// tls_data.as_mut_ptr(), tls_data.len()
// );
tls_data.copy_from_slice(data);
} else {
......
......@@ -68,11 +68,15 @@ unsafe extern "C" fn pte_osThreadShim(
tls_masters_ptr: *mut Master,
tls_masters_len: usize
) {
let mut tcb = Tcb::new(tls_size).unwrap();
tcb.masters_ptr = tls_masters_ptr;
tcb.masters_len = tls_masters_len;
tcb.copy_masters().unwrap();
tcb.activate();
// The kernel allocated TLS does not have masters set, so do not attempt to copy it.
// It will be copied by the kernel.
if ! tls_masters_ptr.is_null() {
let mut tcb = Tcb::new(tls_size).unwrap();
tcb.masters_ptr = tls_masters_ptr;
tcb.masters_len = tls_masters_len;
tcb.copy_masters().unwrap();
tcb.activate();
}
// Wait until pte_osThreadStart
pte_osMutexLock(mutex);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment