Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
"rust-analyzer.cargo.target": "riscv64gc-unknown-none-elf",
"rust-analyzer.cargo.target": "x86_64-unknown-none",
}
2 changes: 1 addition & 1 deletion arceos/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,7 @@ pflash_img:
$(call mk_pflash,$(PFLASH_IMG))

payload:
@make -C ./payload
@make -C ./payload ARCH=$(ARCH)

clean: clean_c
rm -rf $(APP)/*.bin $(APP)/*.elf
Expand Down
4 changes: 2 additions & 2 deletions arceos/api/arceos_posix_api/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,10 @@ axnet = { workspace = true, optional = true }
# Other crates
axio = "0.1"
axerrno = "0.1"
flatten_objects = "0.1"
flatten_objects = "0.2"
static_assertions = "1.1.0"
spin = { version = "0.9" }
lazy_static = { version = "1.5", features = ["spin_no_std"] }

[build-dependencies]
bindgen ={ version = "0.69" }
bindgen ={ version = "0.71" }
12 changes: 6 additions & 6 deletions arceos/api/arceos_posix_api/src/imp/fd_ops.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use alloc::sync::Arc;
use core::ffi::c_int;
use core::{ffi::c_int, fmt::Debug};

use axerrno::{LinuxError, LinuxResult};
use axio::PollState;
Expand All @@ -24,9 +24,9 @@ pub trait FileLike: Send + Sync {
lazy_static::lazy_static! {
static ref FD_TABLE: RwLock<FlattenObjects<Arc<dyn FileLike>, AX_FILE_LIMIT>> = {
let mut fd_table = FlattenObjects::new();
fd_table.add_at(0, Arc::new(stdin()) as _).unwrap(); // stdin
fd_table.add_at(1, Arc::new(stdout()) as _).unwrap(); // stdout
fd_table.add_at(2, Arc::new(stdout()) as _).unwrap(); // stderr
fd_table.add_at(0, Arc::new(stdin()) as _).unwrap_or_else(|_| panic!()); // stdin
fd_table.add_at(1, Arc::new(stdout()) as _).unwrap_or_else(|_| panic!()); // stdout
fd_table.add_at(2, Arc::new(stdout()) as _).unwrap_or_else(|_| panic!()); // stderr
RwLock::new(fd_table)
};
}
Expand All @@ -40,7 +40,7 @@ pub fn get_file_like(fd: c_int) -> LinuxResult<Arc<dyn FileLike>> {
}

pub fn add_file_like(f: Arc<dyn FileLike>) -> LinuxResult<c_int> {
Ok(FD_TABLE.write().add(f).ok_or(LinuxError::EMFILE)? as c_int)
Ok(FD_TABLE.write().add(f).map_err(|_| LinuxError::EMFILE)? as c_int)
}

pub fn close_file_like(fd: c_int) -> LinuxResult {
Expand Down Expand Up @@ -95,7 +95,7 @@ pub fn sys_dup2(old_fd: c_int, new_fd: c_int) -> c_int {
FD_TABLE
.write()
.add_at(new_fd as usize, f)
.ok_or(LinuxError::EMFILE)?;
.map_err(|_| LinuxError::EMFILE)?;

Ok(new_fd)
})
Expand Down
2 changes: 2 additions & 0 deletions arceos/api/arceos_posix_api/src/imp/stdio.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@ fn console_write_bytes(buf: &[u8]) -> AxResult<usize> {
Ok(buf.len())
}

#[derive(Debug)]
struct StdinRaw;
#[derive(Debug)]
struct StdoutRaw;

impl Read for StdinRaw {
Expand Down
66 changes: 32 additions & 34 deletions arceos/modules/axhal/src/arch/riscv/context.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use core::arch::asm;
use memory_addr::VirtAddr;
use core::arch::{asm, naked_asm};
#[cfg(feature = "uspace")]
use memory_addr::PhysAddr;
use memory_addr::VirtAddr;

include_asm_marcos!();

Expand Down Expand Up @@ -281,43 +281,41 @@ impl UspaceContext {
}
}

#[naked]
#[unsafe(naked)]
unsafe extern "C" fn context_switch(_current_task: &mut TaskContext, _next_task: &TaskContext) {
asm!(
naked_asm!(
"
// save old context (callee-saved registers)
STR ra, a0, 0
STR sp, a0, 1
STR s0, a0, 2
STR s1, a0, 3
STR s2, a0, 4
STR s3, a0, 5
STR s4, a0, 6
STR s5, a0, 7
STR s6, a0, 8
STR s7, a0, 9
STR s8, a0, 10
STR s9, a0, 11
STR s10, a0, 12
STR s11, a0, 13
sd ra, 0*8(a0)
sd sp, 1*8(a0)
sd s0, 2*8(a0)
sd s1, 3*8(a0)
sd s2, 4*8(a0)
sd s3, 5*8(a0)
sd s4, 6*8(a0)
sd s5, 7*8(a0)
sd s6, 8*8(a0)
sd s7, 9*8(a0)
sd s8, 10*8(a0)
sd s9, 11*8(a0)
sd s10, 12*8(a0)
sd s11, 13*8(a0)

// restore new context
LDR s11, a1, 13
LDR s10, a1, 12
LDR s9, a1, 11
LDR s8, a1, 10
LDR s7, a1, 9
LDR s6, a1, 8
LDR s5, a1, 7
LDR s4, a1, 6
LDR s3, a1, 5
LDR s2, a1, 4
LDR s1, a1, 3
LDR s0, a1, 2
LDR sp, a1, 1
LDR ra, a1, 0

ld s11,13*8(a1)
ld s10,12*8(a1)
ld s9, 11*8(a1)
ld s8, 10*8(a1)
ld s7, 9*8(a1)
ld s6, 8*8(a1)
ld s5, 7*8(a1)
ld s4, 6*8(a1)
ld s3, 5*8(a1)
ld s2, 4*8(a1)
ld s1, 3*8(a1)
ld s0, 2*8(a1)
ld sp, 1*8(a1)
ld ra, 0*8(a1)
ret",
options(noreturn),
)
}
Loading