Remove debugging messages, launch elf on APs

This commit is contained in:
Jeremy Soller 2016-09-10 19:03:31 -06:00
parent 0faa82609d
commit bd7bca30fa
7 changed files with 22 additions and 30 deletions

View file

@ -62,9 +62,6 @@ pub unsafe fn init(kernel_start: usize, kernel_end: usize) {
// Copy memory map from bootloader location // Copy memory map from bootloader location
for (i, mut entry) in MEMORY_MAP.iter_mut().enumerate() { for (i, mut entry) in MEMORY_MAP.iter_mut().enumerate() {
*entry = *(0x500 as *const MemoryArea).offset(i as isize); *entry = *(0x500 as *const MemoryArea).offset(i as isize);
if entry.length > 0 {
println!("{:?}", entry);
}
} }
*ALLOCATOR.lock() = Some(AreaFrameAllocator::new(kernel_start, kernel_end, MemoryAreaIter::new(MEMORY_AREA_FREE))); *ALLOCATOR.lock() = Some(AreaFrameAllocator::new(kernel_start, kernel_end, MemoryAreaIter::new(MEMORY_AREA_FREE)));

View file

@ -212,7 +212,6 @@ pub unsafe fn usermode(ip: usize, sp: usize) -> ! {
mov rax, 0x23 mov rax, 0x23
push rax # Push code segment push rax # Push code segment
push rcx # Push rip push rcx # Push rip
xchg bx, bx
iretq" iretq"
: :
: "{rbx}"(sp), "{rcx}"(ip) : "{rbx}"(sp), "{rcx}"(ip)

View file

@ -80,7 +80,6 @@ impl ContextList {
} }
context.arch.set_stack(stack.as_ptr() as usize + offset); context.arch.set_stack(stack.as_ptr() as usize + offset);
context.kstack = Some(stack); context.kstack = Some(stack);
println!("{}: {:X}", context.id, func as usize);
} }
Ok(context_lock) Ok(context_lock)
} }

View file

@ -56,11 +56,6 @@ impl<'a> Elf<'a> {
let mut active_table = unsafe { ActivePageTable::new() }; let mut active_table = unsafe { ActivePageTable::new() };
for segment in self.segments() { for segment in self.segments() {
println!("Segment {:X} flags {:X} off {:X} virt {:X} phys {:X} file {} mem {} align {}",
segment.p_type, segment.p_flags, segment.p_offset,
segment.p_vaddr, segment.p_paddr, segment.p_filesz,
segment.p_memsz, segment.p_align);
if segment.p_type == program_header::PT_LOAD { if segment.p_type == program_header::PT_LOAD {
let start_page = Page::containing_address(VirtualAddress::new(segment.p_vaddr as usize)); let start_page = Page::containing_address(VirtualAddress::new(segment.p_vaddr as usize));
let end_page = Page::containing_address(VirtualAddress::new((segment.p_vaddr + segment.p_memsz) as usize)); let end_page = Page::containing_address(VirtualAddress::new((segment.p_vaddr + segment.p_memsz) as usize));

View file

@ -133,14 +133,9 @@ pub extern fn kmain() {
let pid = syscall::getpid(); let pid = syscall::getpid();
println!("BSP: {:?}", pid); println!("BSP: {:?}", pid);
let stdin = syscall::open("debug:".as_bytes(), 0); assert_eq!(syscall::open("debug:".as_bytes(), 0), Ok(0));
println!("STDIN: {:?}", stdin); assert_eq!(syscall::open("debug:".as_bytes(), 0), Ok(1));
assert_eq!(syscall::open("debug:".as_bytes(), 0), Ok(2));
let stdout = syscall::open("debug:".as_bytes(), 0);
println!("STDOUT: {:?}", stdout);
let stderr = syscall::open("debug:".as_bytes(), 0);
println!("STDERR: {:?}", stderr);
let elf = elf::Elf::from(include_bytes!("../build/userspace/init")).expect("could not load elf"); let elf = elf::Elf::from(include_bytes!("../build/userspace/init")).expect("could not load elf");
elf.run(); elf.run();
@ -168,6 +163,13 @@ pub extern fn kmain_ap(id: usize) {
let pid = syscall::getpid(); let pid = syscall::getpid();
println!("AP {}: {:?}", id, pid); println!("AP {}: {:?}", id, pid);
assert_eq!(syscall::open("debug:".as_bytes(), 0), Ok(0));
assert_eq!(syscall::open("debug:".as_bytes(), 0), Ok(1));
assert_eq!(syscall::open("debug:".as_bytes(), 0), Ok(2));
let elf = elf::Elf::from(include_bytes!("../build/userspace/init")).expect("could not load elf");
elf.run();
loop { loop {
unsafe { interrupt::enable_and_halt() } unsafe { interrupt::enable_and_halt() }
} }

View file

@ -7,7 +7,6 @@ pub struct DebugScheme;
impl Scheme for DebugScheme { impl Scheme for DebugScheme {
fn open(&mut self, path: &[u8], _flags: usize) -> Result<usize> { fn open(&mut self, path: &[u8], _flags: usize) -> Result<usize> {
println!("DebugScheme::open: {}", unsafe { str::from_utf8_unchecked(path) });
Ok(0) Ok(0)
} }

View file

@ -7,8 +7,6 @@ use super::{Error, Result};
/// Read syscall /// Read syscall
pub fn read(fd: usize, buf: &mut [u8]) -> Result<usize> { pub fn read(fd: usize, buf: &mut [u8]) -> Result<usize> {
println!("Read {}: {:X} {}", fd, buf.as_ptr() as usize, buf.len());
let file = { let file = {
let contexts = context::contexts(); let contexts = context::contexts();
let context_lock = contexts.current().ok_or(Error::NoProcess)?; let context_lock = contexts.current().ok_or(Error::NoProcess)?;
@ -17,8 +15,6 @@ pub fn read(fd: usize, buf: &mut [u8]) -> Result<usize> {
file file
}; };
println!("{:?}", file);
let schemes = scheme::schemes(); let schemes = scheme::schemes();
let scheme_mutex = schemes.get(file.scheme).ok_or(Error::BadFile)?; let scheme_mutex = schemes.get(file.scheme).ok_or(Error::BadFile)?;
let result = scheme_mutex.lock().read(file.number, buf); let result = scheme_mutex.lock().read(file.number, buf);
@ -27,8 +23,6 @@ pub fn read(fd: usize, buf: &mut [u8]) -> Result<usize> {
/// Write syscall /// Write syscall
pub fn write(fd: usize, buf: &[u8]) -> Result<usize> { pub fn write(fd: usize, buf: &[u8]) -> Result<usize> {
println!("Write {}: {:X} {}", fd, buf.as_ptr() as usize, buf.len());
let file = { let file = {
let contexts = context::contexts(); let contexts = context::contexts();
let context_lock = contexts.current().ok_or(Error::NoProcess)?; let context_lock = contexts.current().ok_or(Error::NoProcess)?;
@ -37,8 +31,6 @@ pub fn write(fd: usize, buf: &[u8]) -> Result<usize> {
file file
}; };
println!("{:?}: {:?}", file, ::core::str::from_utf8(buf));
let schemes = scheme::schemes(); let schemes = scheme::schemes();
let scheme_mutex = schemes.get(file.scheme).ok_or(Error::BadFile)?; let scheme_mutex = schemes.get(file.scheme).ok_or(Error::BadFile)?;
let result = scheme_mutex.lock().write(file.number, buf); let result = scheme_mutex.lock().write(file.number, buf);
@ -50,7 +42,6 @@ pub fn open(path: &[u8], flags: usize) -> Result<usize> {
let mut parts = path.splitn(2, |&b| b == b':'); let mut parts = path.splitn(2, |&b| b == b':');
let namespace_opt = parts.next(); let namespace_opt = parts.next();
let reference_opt = parts.next(); let reference_opt = parts.next();
println!("Open namespace {:?} reference {:?}: {:X}", namespace_opt.map(::core::str::from_utf8), reference_opt.map(::core::str::from_utf8), flags);
let (scheme_id, file_id) = { let (scheme_id, file_id) = {
let namespace = namespace_opt.ok_or(Error::NoEntry)?; let namespace = namespace_opt.ok_or(Error::NoEntry)?;
@ -71,6 +62,16 @@ pub fn open(path: &[u8], flags: usize) -> Result<usize> {
/// Close syscall /// Close syscall
pub fn close(fd: usize) -> Result<usize> { pub fn close(fd: usize) -> Result<usize> {
println!("Close {}", fd); let file = {
Ok(0) let contexts = context::contexts();
let context_lock = contexts.current().ok_or(Error::NoProcess)?;
let context = context_lock.read();
let file = context.files.get(fd).ok_or(Error::BadFile)?.ok_or(Error::BadFile)?;
file
};
let schemes = scheme::schemes();
let scheme_mutex = schemes.get(file.scheme).ok_or(Error::BadFile)?;
let result = scheme_mutex.lock().close(file.number).and(Ok(0));
result
} }