aboutsummaryrefslogtreecommitdiffstats
path: root/README
diff options
context:
space:
mode:
Diffstat (limited to 'README')
-rw-r--r--README48
1 files changed, 48 insertions, 0 deletions
diff --git a/README b/README
index e69de29..f8cc032 100644
--- a/README
+++ b/README
@@ -0,0 +1,48 @@
+This repo contains a modified version [0] of Pintos [1] in which you can write
+user programs, standard library, syscalls and kernel code in Rust and C at the
+same time.
+
+This README focuses on the Rust parts. [0] and [1] contain information about
+Pintos in general.
+
+[0]: https://www.ida.liu.se/~TDIU16/2020/info/courseinfo.sv.shtml
+[1]: https://web.stanford.edu/class/cs140/projects/pintos/pintos.html
+
+Kernel
+------
+
+The Rust kernel code is located in kernel-rs/. This is compiled and linked with
+the normal kernel before being packaged into `os.dsk`.
+
+Standard library
+----------------
+
+The Rust standard library is located in libpintos-rs/. This crate isn't compiled
+to a static library. Instead, user programs depend on this crate and let Cargo
+link them together. This means that the standard library doesn't need to `extern
+"C"` its functions.
+
+User programs
+-------------
+
+User programs can be located anywhere you want. halt-rs/ is included as an
+example. The only requirement is that they are compiled as static libraries with
+no_std and a `pub extern "C" entry()` that acts as the entry point.
+
+In order for the Pintos Makefile to build your program you need to add the
+binary's name to PROGS_RS and its crate path to $(BINARY)_SRC in
+`src/examples/Makefile`. haltrs is included as an example.
+
+The binaries are rather large, even with LTO enabled. halt-rs compiles to 4.3M
+in debug and 1.6M with --release and LTO. This isn't an issue (at least not yet)
+as the final binary when linked by the Pintos Makefile is 48k, compared with the
+mostly equivalent halt.c that compiles to 42k.
+
+TODO
+----
+
+* Merge the C and Rust kernel like we already do with the standard library.
+* Automatically copy libc.a when building libpintos-rs (via build.rs?).
+* println!-macro with formatting in libpintos-rs (and kernel?).
+* Implement an allocator that calls malloc in libpintos-rs.
+* Some sort of Cargo template for setting up new user programs.