1
0
mirror of https://github.com/rcore-os/rCore.git synced 2024-11-24 17:06:18 +04:00

Implement sys_reboot with isa-debug-exit and add test script using expect

This commit is contained in:
Jiajie Chen 2019-03-11 16:09:15 +08:00
parent 9269a9856d
commit 8dc7c7bd3c
6 changed files with 35 additions and 3 deletions

View File

@ -148,7 +148,7 @@ impl ThreadPool {
match (&proc.status, &status) {
(Status::Ready, Status::Ready) => return,
(Status::Ready, _) => panic!("can not remove a process from ready queue"),
(Status::Exited(_), _) => panic!("can not set status for a exited process"),
(Status::Exited(_), _) => panic!("can not set status for a exited thread"),
(Status::Sleeping, Status::Exited(_)) => self.timer.lock().stop(Event::Wakeup(tid)),
(Status::Running(_), Status::Ready) => {} // process will be added to scheduler in stop()
(_, Status::Ready) => self.scheduler.push(tid),

View File

@ -1,6 +1,7 @@
use super::*;
use core::mem::size_of;
use core::sync::atomic::{AtomicI32, Ordering};
use crate::arch::cpu;
pub fn sys_arch_prctl(code: i32, addr: usize, tf: &mut TrapFrame) -> SysResult {
const ARCH_SET_FS: i32 = 0x1002;
@ -111,6 +112,18 @@ pub fn sys_futex(uaddr: usize, op: u32, val: i32, timeout: *const TimeSpec) -> S
}
}
const LINUX_REBOOT_CMD_HALT: u32 = 0xcdef0123;
pub fn sys_reboot(magic: u32, magic2: u32, cmd: u32, arg: *const u8) -> SysResult {
// we will skip verifying magic
if cmd == LINUX_REBOOT_CMD_HALT {
unsafe {
cpu::exit_in_qemu(1);
}
}
Ok(0)
}
#[repr(C)]
#[derive(Debug, Default)]
pub struct SysInfo {

View File

@ -105,7 +105,7 @@ pub fn syscall(id: usize, args: [usize; 6], tf: &mut TrapFrame) -> isize {
158 => sys_arch_prctl(args[0] as i32, args[1], tf),
// 160 => sys_setrlimit(),
// 162 => sys_sync(),
// 169 => sys_reboot(),
169 => sys_reboot(args[0] as u32, args[1] as u32, args[2] as u32, args[3] as *const u8),
186 => sys_gettid(),
201 => sys_time(args[0] as *mut u64),
202 => sys_futex(args[0], args[1] as u32, args[2] as i32, args[3] as *const TimeSpec),
@ -181,6 +181,10 @@ pub fn syscall(id: usize, args: [usize; 6], tf: &mut TrapFrame) -> isize {
warn!("sys_sigaltstack is unimplemented");
Ok(0)
}
162 => {
warn!("sys_sync is unimplemented");
Ok(0)
}
213 => {
warn!("sys_epoll_create is unimplemented");
Err(SysError::ENOSYS)

13
tests/fork.exp Normal file
View File

@ -0,0 +1,13 @@
set timeout -1
cd ../kernel
spawn make run arch=x86_64
sleep 2
expect ">>"
sleep 2
send "biscuit/fork\n"
sleep 2
expect "hello from 100"
expect "parent done!"
sleep 2
send "busybox halt -f\n"
expect ">>"

2
tests/test.sh Executable file
View File

@ -0,0 +1,2 @@
#!/bin/bash
expect *.exp

2
user

@ -1 +1 @@
Subproject commit 93bac1ce10eae9aa541b64e955316b325f8dc9cb
Subproject commit 9ba5207eecc6f3685dd976d1a5aa6f23b5066f0b