Hack to allow rustc to wait on non-child process.

Add sys:syscall for seeing active system calls
This commit is contained in:
Jeremy Soller
2017-10-22 21:13:29 -06:00
parent ef70cd257c
commit 8ec5d4726b
8 changed files with 138 additions and 70 deletions
-1
View File
@@ -15,7 +15,6 @@ pub fn resource() -> Result<Vec<u8>> {
let contexts = context::contexts();
for (id, context_lock) in contexts.iter() {
let context = context_lock.read();
rows.push((*id, context.name.lock().clone(), context.files.lock().clone()));
}
}
+2 -6
View File
@@ -15,10 +15,8 @@ mod exe;
mod iostat;
mod scheme;
mod scheme_num;
mod syscall;
mod uname;
//mod interrupt;
//mod log;
//mod test;
struct Handle {
path: &'static [u8],
@@ -46,10 +44,8 @@ impl SysScheme {
files.insert(b"iostat", Box::new(move || iostat::resource()));
files.insert(b"scheme", Box::new(move || scheme::resource()));
files.insert(b"scheme_num", Box::new(move || scheme_num::resource()));
files.insert(b"syscall", Box::new(move || syscall::resource()));
files.insert(b"uname", Box::new(move || uname::resource()));
//files.insert(b"interrupt", Box::new(move || interrupt::resource()));
//files.insert(b"log", Box::new(move || log::resource()));
//files.insert(b"test", Box::new(move || test::resource()));
SysScheme {
next_id: AtomicUsize::new(0),
+42
View File
@@ -0,0 +1,42 @@
use collections::{String, Vec};
use core::fmt::Write;
use core::str;
use context;
use syscall;
use syscall::error::Result;
pub fn resource() -> Result<Vec<u8>> {
let mut string = String::new();
{
let mut rows = Vec::new();
{
let contexts = context::contexts();
for (id, context_lock) in contexts.iter() {
let context = context_lock.read();
rows.push((*id, context.name.lock().clone(), context.syscall.clone()));
}
}
for row in rows.iter() {
let id: usize = row.0.into();
let name = str::from_utf8(&row.1).unwrap_or(".");
let _ = writeln!(string, "{}: {}", id, name);
if let Some((a, b, c, d, e, f)) = row.2 {
match syscall::debug::format_call(a, b, c, d, e, f) {
Ok(data) => {
let _ = writeln!(string, " {}", data);
},
Err(err) => {
let _ = writeln!(string, " error: {}", err);
}
};
}
}
}
Ok(string.into_bytes())
}