arch: fix i686/aarch64 build
This commit is contained in:
parent
3c87b7187e
commit
0742edc516
@ -172,16 +172,13 @@ pub macro split_spinlock(
|
|||||||
use core::marker::PhantomData;
|
use core::marker::PhantomData;
|
||||||
use core::sync::atomic::{AtomicBool, Ordering};
|
use core::sync::atomic::{AtomicBool, Ordering};
|
||||||
|
|
||||||
$(#[$meta])*
|
|
||||||
pub static $name: __Wrapper = __Wrapper {
|
|
||||||
inner: UnsafeCell::new($init)
|
|
||||||
};
|
|
||||||
static __LOCK: AtomicBool = AtomicBool::new(false);
|
|
||||||
|
|
||||||
#[repr(transparent)]
|
#[repr(transparent)]
|
||||||
pub struct __Wrapper {
|
pub struct __Wrapper(UnsafeCell<$ty>);
|
||||||
inner: UnsafeCell<$ty>
|
|
||||||
}
|
$(#[$meta])*
|
||||||
|
pub static $name: __Wrapper = __Wrapper(UnsafeCell::new($init));
|
||||||
|
|
||||||
|
static __LOCK: AtomicBool = AtomicBool::new(false);
|
||||||
pub struct __Guard($crate::guard::IrqGuard<$arch>);
|
pub struct __Guard($crate::guard::IrqGuard<$arch>);
|
||||||
|
|
||||||
impl __Wrapper {
|
impl __Wrapper {
|
||||||
@ -200,13 +197,13 @@ pub macro split_spinlock(
|
|||||||
type Target = $ty;
|
type Target = $ty;
|
||||||
|
|
||||||
fn deref(&self) -> &Self::Target {
|
fn deref(&self) -> &Self::Target {
|
||||||
unsafe { &*$name.inner.get() }
|
unsafe { &*$name.0.get() }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl core::ops::DerefMut for __Guard {
|
impl core::ops::DerefMut for __Guard {
|
||||||
fn deref_mut(&mut self) -> &mut Self::Target {
|
fn deref_mut(&mut self) -> &mut Self::Target {
|
||||||
unsafe { &mut *$name.inner.get() }
|
unsafe { &mut *$name.0.get() }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -204,7 +204,11 @@ fn el0_sync_inner(frame: &mut ExceptionFrame) {
|
|||||||
// BRK in AArch64
|
// BRK in AArch64
|
||||||
0b111100 => {
|
0b111100 => {
|
||||||
let thread = Thread::current();
|
let thread = Thread::current();
|
||||||
warnln!("Thread {} {:?} hit a breakpoint", thread.id, thread.name);
|
warnln!(
|
||||||
|
"Thread {} {:?} hit a breakpoint",
|
||||||
|
thread.id,
|
||||||
|
*thread.name.read()
|
||||||
|
);
|
||||||
thread.raise_signal(Signal::Aborted);
|
thread.raise_signal(Signal::Aborted);
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
@ -216,7 +220,7 @@ fn el0_sync_inner(frame: &mut ExceptionFrame) {
|
|||||||
warnln!(
|
warnln!(
|
||||||
"Data abort in {} {:?} at {:#x} with address {:#x}",
|
"Data abort in {} {:?} at {:#x} with address {:#x}",
|
||||||
thread.id,
|
thread.id,
|
||||||
thread.name,
|
*thread.name.read(),
|
||||||
ELR_EL1.get(),
|
ELR_EL1.get(),
|
||||||
FAR_EL1.get()
|
FAR_EL1.get()
|
||||||
);
|
);
|
||||||
|
@ -152,7 +152,7 @@ static IDT: IrqSafeRwLock<[Entry; SIZE]> = IrqSafeRwLock::new([Entry::NULL; SIZE
|
|||||||
|
|
||||||
fn dump_user_exception(kind: ExceptionKind, frame: &ExceptionFrame) {
|
fn dump_user_exception(kind: ExceptionKind, frame: &ExceptionFrame) {
|
||||||
let thread = Thread::current();
|
let thread = Thread::current();
|
||||||
warnln!("{:?} in {} ({:?})", kind, thread.id, thread.name);
|
warnln!("{:?} in {} ({:?})", kind, thread.id, *thread.name.read());
|
||||||
warnln!("ip = {:02x}:{:08x}", frame.cs, frame.eip);
|
warnln!("ip = {:02x}:{:08x}", frame.cs, frame.eip);
|
||||||
warnln!("sp = {:02x}:{:08x}", frame.ss, frame.esp);
|
warnln!("sp = {:02x}:{:08x}", frame.ss, frame.esp);
|
||||||
warnln!("cr3 = {:#010x}", CR3.get());
|
warnln!("cr3 = {:#010x}", CR3.get());
|
||||||
|
@ -75,7 +75,7 @@ impl From<FileAttr> for stat {
|
|||||||
let st_gid = u32::from(value.gid).try_into().unwrap();
|
let st_gid = u32::from(value.gid).try_into().unwrap();
|
||||||
// TODO
|
// TODO
|
||||||
let st_blksize = 512;
|
let st_blksize = 512;
|
||||||
let st_blocks = st_size.div_ceil(st_blksize as _);
|
let st_blocks = st_size.div_ceil(st_blksize as _).try_into().unwrap();
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
st_mode,
|
st_mode,
|
||||||
@ -86,18 +86,6 @@ impl From<FileAttr> for stat {
|
|||||||
st_blocks,
|
st_blocks,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}
|
}
|
||||||
// let mut st = Self::default();
|
|
||||||
// st.st_size = value.size.try_into().unwrap();
|
|
||||||
// // TODO
|
|
||||||
// st.st_uid = u32::from(value.uid).try_into().unwrap();
|
|
||||||
// st.st_gid = u32::from(value.gid).try_into().unwrap();
|
|
||||||
// // TODO
|
|
||||||
// st.st_blksize = 512;
|
|
||||||
// st.st_blocks = ((st.st_size + 511) / 512).try_into().unwrap();
|
|
||||||
// // TODO
|
|
||||||
// st.st_nlink = 1;
|
|
||||||
|
|
||||||
// st
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user