diff --git a/src/bin/ch7b_pipe_large_test.rs b/src/bin/ch7b_pipe_large_test.rs index 430e459..c7b05e2 100644 --- a/src/bin/ch7b_pipe_large_test.rs +++ b/src/bin/ch7b_pipe_large_test.rs @@ -7,7 +7,7 @@ extern crate user_lib; extern crate alloc; use alloc::format; -use user_lib::{close, fork, get_time, pipe, read, wait, write,getpid}; +use user_lib::{close, fork, pipe, read, wait, write,getpid}; const LENGTH: usize = 3000; #[no_mangle] diff --git a/src/bin/ch8b_race_adder.rs b/src/bin/ch8b_race_adder.rs index 139e137..538e5a3 100644 --- a/src/bin/ch8b_race_adder.rs +++ b/src/bin/ch8b_race_adder.rs @@ -6,6 +6,7 @@ extern crate user_lib; extern crate alloc; use alloc::vec::Vec; +use core::ptr::addr_of_mut; use user_lib::{exit, get_time, thread_create, waittid}; static mut A: usize = 0; @@ -15,7 +16,7 @@ const THREAD_COUNT: usize = 16; unsafe fn f() -> ! { let mut t = 2usize; for _ in 0..PER_THREAD { - let a = &mut A as *mut usize; + let a = addr_of_mut!(A) as *mut usize; let cur = a.read_volatile(); for _ in 0..500 { t = t * t % 10007; diff --git a/src/bin/ch8b_race_adder_atomic.rs b/src/bin/ch8b_race_adder_atomic.rs index c00fe6a..d18fe63 100644 --- a/src/bin/ch8b_race_adder_atomic.rs +++ b/src/bin/ch8b_race_adder_atomic.rs @@ -6,6 +6,7 @@ extern crate user_lib; extern crate alloc; use alloc::vec::Vec; +use core::ptr::addr_of_mut; use core::sync::atomic::{AtomicBool, Ordering}; use user_lib::{exit, get_time, thread_create, waittid, yield_}; @@ -23,7 +24,7 @@ unsafe fn f() -> ! { { yield_(); } - let a = &mut A as *mut usize; + let a = addr_of_mut!(A) as *mut usize; let cur = a.read_volatile(); for _ in 0..500 { t = t * t % 10007; diff --git a/src/bin/ch8b_race_adder_loop.rs b/src/bin/ch8b_race_adder_loop.rs index 11a0324..27415c0 100644 --- a/src/bin/ch8b_race_adder_loop.rs +++ b/src/bin/ch8b_race_adder_loop.rs @@ -1,11 +1,12 @@ #![no_std] #![no_main] +extern crate alloc; #[macro_use] extern crate user_lib; -extern crate alloc; use alloc::vec::Vec; +use core::ptr::addr_of_mut; use user_lib::{exit, get_time, thread_create, waittid, yield_}; static mut A: usize = 0; @@ -21,7 +22,7 @@ unsafe fn f() -> ! { } OCCUPIED = true; // enter critical section - let a = &mut A as *mut usize; + let a = addr_of_mut!(A) as *mut usize; let cur = a.read_volatile(); for _ in 0..500 { t = t * t % 10007; diff --git a/src/bin/ch8b_race_adder_mutex_spin.rs b/src/bin/ch8b_race_adder_mutex_spin.rs index d2df338..223d8f1 100644 --- a/src/bin/ch8b_race_adder_mutex_spin.rs +++ b/src/bin/ch8b_race_adder_mutex_spin.rs @@ -6,6 +6,7 @@ extern crate user_lib; extern crate alloc; use alloc::vec::Vec; +use core::ptr::addr_of_mut; use user_lib::{exit, get_time, thread_create, waittid}; use user_lib::{mutex_create, mutex_lock, mutex_unlock}; @@ -17,7 +18,7 @@ unsafe fn f() -> ! { let mut t = 2usize; for _ in 0..PER_THREAD { mutex_lock(0); - let a = &mut A as *mut usize; + let a = addr_of_mut!(A) as *mut usize; let cur = a.read_volatile(); for _ in 0..500 { t = t * t % 10007; diff --git a/src/bin/ch8b_stackful_coroutine.rs b/src/bin/ch8b_stackful_coroutine.rs index 2341547..c5847d2 100644 --- a/src/bin/ch8b_stackful_coroutine.rs +++ b/src/bin/ch8b_stackful_coroutine.rs @@ -33,6 +33,7 @@ enum State { } struct Task { + #[allow(dead_code)] id: usize, stack: Vec, ctx: TaskContext, @@ -256,7 +257,7 @@ pub fn yield_task() { /// see: https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html #[naked] #[no_mangle] -unsafe fn switch(old: *mut TaskContext, new: *const TaskContext) { +unsafe extern "C" fn switch(old: *mut TaskContext, new: *const TaskContext) { // a0: _old, a1: _new asm!( "