remove legacy 'is32' code

master
WangRunji 6 years ago
parent e12074c936
commit fe0045c0c9

@ -5,4 +5,3 @@ pub const KERNEL_HEAP_SIZE: usize = 8 * 1024 * 1024;
pub const MEMORY_OFFSET: usize = 0; pub const MEMORY_OFFSET: usize = 0;
pub const USER_STACK_OFFSET: usize = 0x0000_8000_0000_0000 - USER_STACK_SIZE; pub const USER_STACK_OFFSET: usize = 0x0000_8000_0000_0000 - USER_STACK_SIZE;
pub const USER_STACK_SIZE: usize = 1 * 1024 * 1024; pub const USER_STACK_SIZE: usize = 1 * 1024 * 1024;
pub const USER32_STACK_OFFSET: usize = USER_STACK_OFFSET;

@ -163,7 +163,6 @@ impl Context {
entry_addr: usize, entry_addr: usize,
ustack_top: usize, ustack_top: usize,
kstack_top: usize, kstack_top: usize,
_is32: bool,
ttbr: usize, ttbr: usize,
) -> Self { ) -> Self {
InitStack { InitStack {

@ -8,6 +8,5 @@ pub const MEMORY_OFFSET: usize = 0x8000_0000;
pub const USER_STACK_OFFSET: usize = 0x80000000 - USER_STACK_SIZE; pub const USER_STACK_OFFSET: usize = 0x80000000 - USER_STACK_SIZE;
pub const USER_STACK_SIZE: usize = 0x10000; pub const USER_STACK_SIZE: usize = 0x10000;
pub const USER32_STACK_OFFSET: usize = 0x80000000 - USER_STACK_SIZE;
pub const MAX_DTB_SIZE: usize = 0x2000; pub const MAX_DTB_SIZE: usize = 0x2000;

@ -206,7 +206,6 @@ impl Context {
entry_addr: usize, entry_addr: usize,
ustack_top: usize, ustack_top: usize,
kstack_top: usize, kstack_top: usize,
_is32: bool,
satp: usize, satp: usize,
) -> Self { ) -> Self {
info!( info!(

@ -37,6 +37,5 @@ pub const MEMORY_END: usize = 0x8100_0000;
// FIXME: rv64 `sh` and `ls` will crash if stack top > 0x80000000 ??? // FIXME: rv64 `sh` and `ls` will crash if stack top > 0x80000000 ???
pub const USER_STACK_OFFSET: usize = 0x80000000 - USER_STACK_SIZE; pub const USER_STACK_OFFSET: usize = 0x80000000 - USER_STACK_SIZE;
pub const USER_STACK_SIZE: usize = 0x10000; pub const USER_STACK_SIZE: usize = 0x10000;
pub const USER32_STACK_OFFSET: usize = 0xC0000000 - USER_STACK_SIZE;
pub const MAX_DTB_SIZE: usize = 0x2000; pub const MAX_DTB_SIZE: usize = 0x2000;

@ -236,7 +236,6 @@ impl Context {
entry_addr: usize, entry_addr: usize,
ustack_top: usize, ustack_top: usize,
kstack_top: usize, kstack_top: usize,
_is32: bool,
satp: usize, satp: usize,
) -> Self { ) -> Self {
InitStack { InitStack {

@ -53,7 +53,6 @@ pub const USER_GRANT_PML4: usize = (USER_GRANT_OFFSET & PML4_MASK) / PML4_SIZE;
/// Offset to user stack /// Offset to user stack
pub const USER_STACK_OFFSET: usize = USER_GRANT_OFFSET + PML4_SIZE; pub const USER_STACK_OFFSET: usize = USER_GRANT_OFFSET + PML4_SIZE;
pub const USER32_STACK_OFFSET: usize = 0xB000_0000;
pub const USER_STACK_PML4: usize = (USER_STACK_OFFSET & PML4_MASK) / PML4_SIZE; pub const USER_STACK_PML4: usize = (USER_STACK_OFFSET & PML4_MASK) / PML4_SIZE;
/// Size of user stack /// Size of user stack
pub const USER_STACK_SIZE: usize = 1024 * 1024; // 1 MB pub const USER_STACK_SIZE: usize = 1024 * 1024; // 1 MB

@ -73,14 +73,10 @@ impl TrapFrame {
tf.fpstate_offset = 16; // skip restoring for first time tf.fpstate_offset = 16; // skip restoring for first time
tf tf
} }
fn new_user_thread(entry_addr: usize, rsp: usize, is32: bool) -> Self { fn new_user_thread(entry_addr: usize, rsp: usize) -> Self {
use crate::arch::gdt; use crate::arch::gdt;
let mut tf = TrapFrame::default(); let mut tf = TrapFrame::default();
tf.cs = if is32 { tf.cs = gdt::UCODE_SELECTOR.0 as usize;
gdt::UCODE32_SELECTOR.0
} else {
gdt::UCODE_SELECTOR.0
} as usize;
tf.rip = entry_addr; tf.rip = entry_addr;
tf.ss = gdt::UDATA32_SELECTOR.0 as usize; tf.ss = gdt::UDATA32_SELECTOR.0 as usize;
tf.rsp = rsp; tf.rsp = rsp;
@ -88,9 +84,6 @@ impl TrapFrame {
tf.fpstate_offset = 16; // skip restoring for first time tf.fpstate_offset = 16; // skip restoring for first time
tf tf
} }
pub fn is_user(&self) -> bool {
self.cs & 0x3 == 0x3
}
} }
#[derive(Debug, Default)] #[derive(Debug, Default)]
@ -203,12 +196,11 @@ impl Context {
entry_addr: usize, entry_addr: usize,
ustack_top: usize, ustack_top: usize,
kstack_top: usize, kstack_top: usize,
is32: bool,
cr3: usize, cr3: usize,
) -> Self { ) -> Self {
InitStack { InitStack {
context: ContextData::new(cr3), context: ContextData::new(cr3),
tf: TrapFrame::new_user_thread(entry_addr, ustack_top, is32), tf: TrapFrame::new_user_thread(entry_addr, ustack_top),
} }
.push_at(kstack_top) .push_at(kstack_top)
} }

@ -175,10 +175,6 @@ impl Thread {
{ {
// Parse ELF // Parse ELF
let elf = ElfFile::new(data).expect("failed to read elf"); let elf = ElfFile::new(data).expect("failed to read elf");
let is32 = match elf.header.pt2 {
header::HeaderPt2::Header32(_) => true,
header::HeaderPt2::Header64(_) => false,
};
// Check ELF type // Check ELF type
match elf.header.pt2.type_().as_type() { match elf.header.pt2.type_().as_type() {
@ -210,12 +206,10 @@ impl Thread {
let mut vm = elf.make_memory_set(); let mut vm = elf.make_memory_set();
// User stack // User stack
use crate::consts::{USER32_STACK_OFFSET, USER_STACK_OFFSET, USER_STACK_SIZE}; use crate::consts::{USER_STACK_OFFSET, USER_STACK_SIZE};
let mut ustack_top = { let mut ustack_top = {
let (ustack_buttom, ustack_top) = match is32 { let ustack_buttom = USER_STACK_OFFSET;
true => (USER32_STACK_OFFSET, USER32_STACK_OFFSET + USER_STACK_SIZE), let ustack_top = USER_STACK_OFFSET + USER_STACK_SIZE;
false => (USER_STACK_OFFSET, USER_STACK_OFFSET + USER_STACK_SIZE),
};
vm.push( vm.push(
ustack_buttom, ustack_buttom,
ustack_top, ustack_top,
@ -288,7 +282,7 @@ impl Thread {
Box::new(Thread { Box::new(Thread {
context: unsafe { context: unsafe {
Context::new_user_thread(entry_addr, ustack_top, kstack.top(), is32, vm.token()) Context::new_user_thread(entry_addr, ustack_top, kstack.top(), vm.token())
}, },
kstack, kstack,
clear_child_tid: 0, clear_child_tid: 0,

Loading…
Cancel
Save