diff options
| author | Gustav Sörnäs <gustav@sornas.net> | 2020-11-24 01:33:01 +0100 |
|---|---|---|
| committer | Gustav Sörnäs <gustav@sornas.net> | 2020-11-24 01:33:01 +0100 |
| commit | 431c40e275a5055d9f144de03dbc8cfc90ed3f6e (patch) | |
| tree | b311bcda0d5d6b445a123f4be7a2d4f2d756addb | |
| parent | 0f45ab11bd271535f178b58aab1ae9c36474d995 (diff) | |
| download | pintos-rs-431c40e275a5055d9f144de03dbc8cfc90ed3f6e.tar.gz | |
add kernel-rs
| -rw-r--r-- | kernel/Cargo.toml | 22 | ||||
| -rw-r--r-- | kernel/Makefile | 12 | ||||
| -rw-r--r-- | kernel/rust-toolchain | 1 | ||||
| -rw-r--r-- | kernel/src/lib.rs | 17 | ||||
| -rw-r--r-- | src/Makefile.build | 13 | ||||
| -rw-r--r-- | src/userprog/syscall.c | 36 |
6 files changed, 81 insertions, 20 deletions
diff --git a/kernel/Cargo.toml b/kernel/Cargo.toml new file mode 100644 index 0000000..738559f --- /dev/null +++ b/kernel/Cargo.toml @@ -0,0 +1,22 @@ +[package] +name = "kernel" +version = "0.1.0" +authors = ["Gustav Sörnäs <gustav@sornas.net>"] +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[lib] +name = "kernel" +crate-type = ["staticlib"] + +[profile.dev] +panic = "abort" + +[profile.release] +panic = "abort" + +[dependencies.libc] +version = "0.2" +default-features = false +features = ["extra_traits"] diff --git a/kernel/Makefile b/kernel/Makefile new file mode 100644 index 0000000..49a4d42 --- /dev/null +++ b/kernel/Makefile @@ -0,0 +1,12 @@ +all: debug + +debug: + cargo build + +release: + cargo build --release + +clean: + cargo clean + +.PHONY: all clean debug release diff --git a/kernel/rust-toolchain b/kernel/rust-toolchain new file mode 100644 index 0000000..adfa491 --- /dev/null +++ b/kernel/rust-toolchain @@ -0,0 +1 @@ +nightly-i686-unknown-linux-gnu diff --git a/kernel/src/lib.rs b/kernel/src/lib.rs new file mode 100644 index 0000000..d7dafa1 --- /dev/null +++ b/kernel/src/lib.rs @@ -0,0 +1,17 @@ +#![no_std] + +#[panic_handler] +fn panic(_info: &core::panic::PanicInfo) -> ! { + loop {} +} + +#[no_mangle] +pub unsafe extern "C" fn syscall_handler() { + printf("c suger lmao xd\n".as_ptr()); + thread_exit(); +} + +extern { + fn thread_exit(); + fn printf(format: *const u8, ...); +} diff --git a/src/Makefile.build b/src/Makefile.build index b5474f5..96757cb 100644 --- a/src/Makefile.build +++ b/src/Makefile.build @@ -78,8 +78,16 @@ DEPENDS = $(patsubst %.o,%.d,$(OBJECTS)) threads/kernel.lds.s: CPPFLAGS += -P threads/kernel.lds.s: threads/kernel.lds.S threads/loader.h -kernel.o: threads/kernel.lds.s $(OBJECTS) - $(LD) -T $< -o $@ $(OBJECTS) +LIBDIR_RUST = $(SRCDIR)/../kernel + +LIB_RUST = libkernel-rs.a + +$(LIB_RUST): + make -C $(LIBDIR_RUST) debug + cp $(LIBDIR_RUST)/target/debug/libkernel.a $@ + +kernel.o: threads/kernel.lds.s $(OBJECTS) $(LIB_RUST) + $(LD) -T $< -o $@ $(OBJECTS) $(LIB_RUST) kernel.bin: kernel.o $(OBJCOPY) -O binary -R .note -R .comment -S $< $@.tmp @@ -96,6 +104,7 @@ os.dsk: loader.bin kernel.bin cat $^ > $@ clean:: + make -C $(LIBDIR_RUST) clean rm -f $(OBJECTS) $(DEPENDS) rm -f threads/loader.o threads/kernel.lds.s threads/loader.d rm -f kernel.o kernel.lds.s diff --git a/src/userprog/syscall.c b/src/userprog/syscall.c index 4d46978..ced27aa 100644 --- a/src/userprog/syscall.c +++ b/src/userprog/syscall.c @@ -41,21 +41,21 @@ const int argc[] = { 0 }; -static void -syscall_handler (struct intr_frame *f) -{ - int32_t* esp = (int32_t*)f->esp; - - switch ( 0 /* retrive syscall number */ ) - { - default: - { - printf ("Executed an unknown system call!\n"); - - printf ("Stack top + 0: %d\n", esp[0]); - printf ("Stack top + 1: %d\n", esp[1]); - - thread_exit (); - } - } -} +//static void +//syscall_handler (struct intr_frame *f) +//{ +// int32_t* esp = (int32_t*)f->esp; +// +// switch ( 0 /* retrive syscall number */ ) +// { +// default: +// { +// printf ("Executed an unknown system call!\n"); +// +// printf ("Stack top + 0: %d\n", esp[0]); +// printf ("Stack top + 1: %d\n", esp[1]); +// +// thread_exit (); +// } +// } +//} |
