mirror of
https://github.com/rcore-os/rCore.git
synced 2024-11-21 23:56:18 +04:00
Use gcc to pre-process mipsel assembly
Signed-off-by: Harry Chen <i@harrychen.xyz>
This commit is contained in:
parent
8ed6822636
commit
65d6fb5b1e
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,7 +1,7 @@
|
||||
build
|
||||
target
|
||||
/kernel/src/arch/x86_64/interrupt/vector.asm
|
||||
/kernel/src/arch/*/boot/dtb.S
|
||||
*.gen.s
|
||||
*.dtb
|
||||
|
||||
Cargo.lock
|
||||
|
@ -317,6 +317,9 @@ else ifeq ($(arch), riscv64)
|
||||
else ifeq ($(arch), aarch64)
|
||||
@cargo xbuild $(build_args)
|
||||
else ifeq ($(arch), mipsel)
|
||||
@for file in context entry trap ; do \
|
||||
$(cc) -E src/arch/$(arch)/boot/$${file}.S -o src/arch/$(arch)/boot/$${file}.gen.s ; \
|
||||
done
|
||||
@cargo xbuild $(build_args)
|
||||
endif
|
||||
|
||||
|
@ -60,13 +60,12 @@ fn gen_dtb_asm(arch: &String, _board: &String) -> Result<()> {
|
||||
panic!("DTB `{}` not found", dtb)
|
||||
}
|
||||
|
||||
let mut f = File::create(format!("src/arch/{}/boot/dtb.S", arch)).unwrap();
|
||||
let mut f = File::create(format!("src/arch/{}/boot/dtb.gen.s", arch)).unwrap();
|
||||
|
||||
println!("cargo:rerun-if-changed={}", dtb);
|
||||
println!("cargo:rerun-if-env-changed=DTB");
|
||||
|
||||
writeln!(f, "# generated by build.rs - do not edit")?;
|
||||
writeln!(f, ".intel_syntax noprefix")?;
|
||||
write!(f, r#"
|
||||
.section .dtb,"a"
|
||||
.align 12
|
||||
|
@ -11,14 +11,15 @@ _start:
|
||||
|
||||
# set ebase
|
||||
la t0, trap_entry
|
||||
mfc0 t1, 15 # C0_EBASE
|
||||
mfc0 t1, $15 # C0_EBASE
|
||||
or t1, t1, t0
|
||||
mtc0 t1, 15
|
||||
mtc0 t1, $15
|
||||
|
||||
# exit bootstrap mode
|
||||
mfc0 t0, 12 # C0_STATUS
|
||||
andi t0, t0, 0xFFBFFFFF # set BEV (bit 22) to 0
|
||||
mtc0 t0, 12
|
||||
mfc0 t0, $12 # C0_STATUS
|
||||
li t1, 0xFFBFFFFF # set BEV (bit 22) to 0
|
||||
and t0, t0, t1
|
||||
mtc0 t0, $12
|
||||
|
||||
# directly jump to main function
|
||||
b rust_main
|
||||
|
@ -159,7 +159,7 @@ impl Context {
|
||||
#[naked]
|
||||
#[inline(never)]
|
||||
pub unsafe extern fn switch(&mut self, _target: &mut Self) {
|
||||
asm!(include_str!("boot/context.S"));
|
||||
asm!(include_str!("boot/context.gen.s"));
|
||||
}
|
||||
|
||||
/// Constructs a null Context for the current running thread.
|
||||
|
@ -74,6 +74,6 @@ fn others_main() -> ! {
|
||||
|
||||
const BOOT_CPU_ID: u32 = 0;
|
||||
|
||||
global_asm!(include_str!("boot/entry.S"));
|
||||
global_asm!(include_str!("boot/trap.S"));
|
||||
global_asm!(include_str!("boot/dtb.S"));
|
||||
global_asm!(include_str!("boot/entry.gen.s"));
|
||||
global_asm!(include_str!("boot/trap.gen.s"));
|
||||
global_asm!(include_str!("boot/dtb.gen.s"));
|
||||
|
Loading…
Reference in New Issue
Block a user