Fix stack alignment problem for MIPS N32 ABI, and fix alignment problem in CharAttribute

Signed-off-by: Harry Chen <i@harrychen.xyz>
toolchain_update
Harry Chen 6 years ago
parent 378daa6c9b
commit c59cbe0dbc

@ -11,7 +11,7 @@
switch_context: switch_context:
// save from's registers // save from's registers
addi sp, sp, (-4*14) addi sp, sp, (-4*16)
sw sp, 0(a0) sw sp, 0(a0)
sw ra, 0(sp) sw ra, 0(sp)
sw s0, 4*4(sp) sw s0, 4*4(sp)
@ -60,7 +60,7 @@ switch_context:
lw s7, 11*4(sp) lw s7, 11*4(sp)
lw s8, 12*4(sp) lw s8, 12*4(sp)
lw gp, 13*4(sp) lw gp, 13*4(sp)
addi sp, sp, (4*14) addi sp, sp, (4*16)
sw zero, 0(a1) sw zero, 0(a1)
jr ra jr ra

@ -32,8 +32,8 @@ trap_from_kernel:
* k1 = old stack pointer * k1 = old stack pointer
* sp = kernel stack */ * sp = kernel stack */
# allocate 38 words for trapframe + 4 extra words # allocate 38 words for trapframe + 6 extra words
addiu sp, sp, -168 addiu sp, sp, -176
# save general registers # save general registers
sw ra, 160(sp) sw ra, 160(sp)
@ -149,7 +149,7 @@ trap_return:
// save kernel stack // save kernel stack
la k0, _cur_kstack_ptr la k0, _cur_kstack_ptr
addiu k1, sp, 168 addiu k1, sp, 176
sw k1, 0(k0) sw k1, 0(k0)
nop nop

@ -52,6 +52,7 @@ pub struct TrapFrame {
pub ra: usize, pub ra: usize,
/// Reserved /// Reserved
pub reserved: usize, pub reserved: usize,
pub __padding: [usize; 2],
} }
impl TrapFrame { impl TrapFrame {
@ -135,6 +136,7 @@ struct ContextData {
/// s[1] = reserved /// s[1] = reserved
/// s[2..11] = Callee-saved registers /// s[2..11] = Callee-saved registers
s: [usize; 12], s: [usize; 12],
__padding: [usize; 2],
} }
impl ContextData { impl ContextData {

@ -19,6 +19,7 @@ mod color;
mod fonts; mod fonts;
#[derive(Debug, Clone, Copy, PartialEq)] #[derive(Debug, Clone, Copy, PartialEq)]
#[repr(align(4))]
pub struct ConsoleChar { pub struct ConsoleChar {
ascii_char: u8, ascii_char: u8,
attr: CharacterAttribute, attr: CharacterAttribute,

@ -9,6 +9,7 @@ use heapless::Vec;
#[derive(Debug, Clone, Copy, PartialEq)] #[derive(Debug, Clone, Copy, PartialEq)]
#[repr(align(4))]
pub struct CharacterAttribute { pub struct CharacterAttribute {
/// foreground color /// foreground color
pub foreground: ConsoleColor, pub foreground: ConsoleColor,

Loading…
Cancel
Save