transfer to local git!

This commit is contained in:
2025-12-30 18:49:57 +00:00
commit 2305de8699
302 changed files with 3100 additions and 0 deletions

86
Cargo.lock generated Normal file
View File

@@ -0,0 +1,86 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "bit_field"
version = "0.10.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e4b40c7323adcfc0a41c4b88143ed58346ff65a288fc144329c5c45e05d70c6"
[[package]]
name = "bitflags"
version = "2.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3"
[[package]]
name = "lazy_static"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
dependencies = [
"spin 0.9.8",
]
[[package]]
name = "pic8259"
version = "0.10.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cb844b5b01db1e0b17938685738f113bfc903846f18932b378bc0eabfa40e194"
dependencies = [
"x86_64",
]
[[package]]
name = "rustversion"
version = "1.0.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
[[package]]
name = "scarab"
version = "0.1.0"
dependencies = [
"lazy_static",
"pic8259",
"spin 0.5.2",
"volatile 0.2.7",
"x86_64",
]
[[package]]
name = "spin"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
[[package]]
name = "spin"
version = "0.9.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
[[package]]
name = "volatile"
version = "0.2.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f6b06ad3ed06fef1713569d547cdbdb439eafed76341820fb0e0344f29a41945"
[[package]]
name = "volatile"
version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "442887c63f2c839b346c192d047a7c87e73d0689c9157b00b53dcc27dd5ea793"
[[package]]
name = "x86_64"
version = "0.14.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3b835097a84e4457323331ec5d6eb23d096066cbfb215d54096dcb4b2e85f500"
dependencies = [
"bit_field",
"bitflags",
"rustversion",
"volatile 0.4.6",
]

20
Cargo.toml Normal file
View File

@@ -0,0 +1,20 @@
[package]
name = "scarab"
version = "0.1.0"
authors = ["Alexander Michael Feetham <123alexfeetham@gmail.com>"]
edition = "2021"
# Building a static library
[lib]
crate-type = ["staticlib"]
# a basic libc implementation
[dependencies]
volatile = "0.2.6"
spin = "0.5.2"
x86_64 = "=0.14.11"
pic8259 = "0.10"
[dependencies.lazy_static]
version = "1.0"
features = ["spin_no_std"]

36
Makefile Normal file
View File

@@ -0,0 +1,36 @@
./out/scarab.img: ./out/isodir/boot/kernel.bin
cp ./boot/grub.cfg ./out/isodir/boot/grub/grub.cfg
grub-mkrescue -o ./out/scarab.img ./out/isodir
./out/isodir/boot/grub/grub.cfg: ./boot/grub.cfg
cp ./boot/grub.cfg ./out/isodir/boot/grub/grub.cfg
./out/isodir/boot/kernel.bin: ./out/boot.o ./out/rust_handshake.o ./out/multiboot_header.o ./out/libscarab.a ./boot/linker.ld
ld -n --gc-sections -o ./out/isodir/boot/kernel.bin -T ./boot/linker.ld ./out/multiboot_header.o ./out/boot.o ./out/rust_handshake.o ./target/x86_64-scarab_os/release/libscarab.a
# Rust code
./out/libscarab.a: ./src/lib.rs
@RUST_TARGET_PATH=$(shell pwd) cargo build --release
# Assembly booter
./out/multiboot_header.o: ./boot/multiboot_header.asm
nasm -felf64 ./boot/multiboot_header.asm -o ./out/multiboot_header.o
./out/rust_handshake.o: ./boot/rust_handshake.asm
nasm -felf64 ./boot/rust_handshake.asm -o ./out/rust_handshake.o
./out/boot.o: ./boot/boot.asm
nasm -felf64 ./boot/boot.asm -o ./out/boot.o
./out:
mkdir out
run:
qemu-system-x86_64 -display curses -drive format=raw,file=out/scarab.img -drive file=disk.img,format=raw,media=disk
clean:
rm -rf ./out/*
mkdir -p ./out/isodir/boot/grub
rm -rf target
cargo clean

99
README.md Normal file
View File

@@ -0,0 +1,99 @@
# 🪲 ScarabOS
A minimal hobby operating system written in Rust for x86_64-EFI architecture.
ScarabOS is a learning project focused on systems programming concepts. Purely a project for understanding how operating systems work from the ground up.
## 🚀 Quick Start
### Prerequisites
Ensure you have the following installed:
| Tool | Purpose |
|------|---------|
| `rustup` | Rust toolchain manager ([install here](https://rustup.rs/)) |
| `grub` | Bootloader |
| `nasm` | x86 assembler |
| `qemu-full` | Virtualization (recommended for testing) |
| `xorriso` | ISO image creation |
| `mtools` | FAT filesystem utilities |
**On Arch Linux:**
```bash
sudo pacman -S grub nasm qemu-full xorriso mtools
```
**On Ubuntu/Debian:**
```bash
sudo apt install grub-pc-bin nasm qemu-system-x86 xorriso mtools
```
---
## 🔧 Building from Source
### 1. Set up Rust
Install the nightly toolchain (pinned to January 2024 for stability):
```bash
rustup install nightly
rustup component add rust-src
```
### 2. Create virtual disk
Generate a raw disk image for the filesystem:
```bash
qemu-img create -f raw disk.img 10M
```
> **Note:** Adjust size as needed (e.g. `50M` for 50 megabytes)
### 3. Compile
**First time setup:**
```bash
make clean
```
> ⚠️ Run `make clean` once before your first build
**Build the OS:**
```bash
make
```
This creates `scarab.img`, your bootable OS image!
---
## 🎮 Running ScarabOS
Launch in QEMU with:
```bash
make run
```
You'll boot into a minimal terminal where you can explore the basic command system.
> Use alt + 2 to open up the Qemu terminal and then type q or quit to exit the VM
---
## 📚 Learning Resources
This project was heavily inspired by:
- [Writing an OS in Rust](https://os.phil-opp.com/) by Philipp Oppermann
- My Operating Systems professor in university
- The Pintos educational OS
---
## 🤝 Contributing
This is a personal learning project, but feel free to:
- **Fork** and experiment
- **Open issues** for interesting ideas
- **Share** your own OS development journey!

96
boot/boot.asm Normal file
View File

@@ -0,0 +1,96 @@
global start
extern rust_handshake
section .text
bits 32
start:
; Grab stack pointer from GRUB
mov esp, stack_top
; Setup paging for long mode
call set_up_page_tables
call enable_paging
; load the 64-bit GDT
lgdt [gdt64.pointer]
jmp gdt64.code:rust_handshake
; move 'ok' characters to VGA buffer
mov dword [0xb8000], 0x2f4b2f4f
hlt
set_up_page_tables:
; map first page-map table to page pointer table
mov eax, page_pointer_table
or eax, 0b11
mov [page_map_table], eax
; map first page pointer table entry to page table table
mov eax, page_table
or eax, 0b11
mov [page_pointer_table], eax
; map each page table entry to a 2M page
mov ecx, 0
.map_page_table:
; map ecx-th page_table entry to a page that starts at address 2MiB*ecx
mov eax, 0x200000 ; 2MiB
mul ecx ; start address of ecx-th page
or eax, 0b10000011 ; present + writable + huge
mov [page_table + ecx * 8], eax ; map entry
; This is a for loop to map all 512 entries
; inside the page table
inc ecx ; i++
cmp ecx, 512 ; i != 512
jne .map_page_table ; loop!
ret
enable_paging:
; load page map table to cr3 reg
mov eax, page_map_table
mov cr3, eax
; enable physical address extension flag to cr4 reg
mov eax, cr4
or eax, 1 << 5
mov cr4, eax
; set the long mode bit in the MSR
mov ecx, 0xC0000080
rdmsr
or eax, 1 << 8
wrmsr
; enable paging in the cr0 reg
mov eax, cr0
or eax, 1 << 31
mov cr0, eax
ret
; Align each table
section .bss
align 4096
page_map_table:
resb 4096
page_pointer_table:
resb 4096
page_table:
resb 4096
stack_bottom:
resb 64
stack_top:
; Global Descriptor Table Setup
section .rodata
gdt64:
dq 0
.code: equ $ - gdt64
dq (1<<43) | (1<<44) | (1<<47) | (1<<53) ; code segment
.pointer:
dw $ - gdt64 - 1
dq gdt64

7
boot/grub.cfg Normal file
View File

@@ -0,0 +1,7 @@
set timeout=5
set default=0
menuentry "Scarab" {
multiboot2 /boot/kernel.bin
boot
}

16
boot/linker.ld Normal file
View File

@@ -0,0 +1,16 @@
ENTRY(start)
SECTIONS {
. = 1M;
.boot :
{
/* ensure that the multiboot header is at the beginning */
KEEP(*(.multiboot_header))
}
.text :
{
*(.text)
}
}

15
boot/multiboot_header.asm Normal file
View File

@@ -0,0 +1,15 @@
section .multiboot_header
header_start:
dd 0xe85250d6 ; magic number (multiboot 2)
dd 0 ; architecture 0 (protected mode i386)
dd header_end - header_start ; header length
; checksum
dd 0x100000000 - (0xe85250d6 + 0 + (header_end - header_start))
; insert optional multiboot tags here
; required end tag
dw 0 ; type
dw 0 ; flags
dd 8 ; size
header_end:

20
boot/rust_handshake.asm Normal file
View File

@@ -0,0 +1,20 @@
global rust_handshake
extern rust_main
section .text
bits 64
rust_handshake:
; load 0 into all data segment registers
mov ax, 0
mov ss, ax
mov ds, ax
mov es, ax
mov fs, ax
mov gs, ax
; Offload to rust
extern rust_main
call rust_main
hlt

BIN
disk.img Normal file

Binary file not shown.

BIN
out/boot.o Normal file

Binary file not shown.

View File

@@ -0,0 +1,7 @@
set timeout=5
set default=0
menuentry "Scarab" {
multiboot2 /boot/kernel.bin
boot
}

BIN
out/isodir/boot/kernel.bin Executable file

Binary file not shown.

BIN
out/multiboot_header.o Normal file

Binary file not shown.

BIN
out/rust_handshake.o Normal file

Binary file not shown.

BIN
out/scarab.img Normal file

Binary file not shown.

1
rust-toolchain Normal file
View File

@@ -0,0 +1 @@
nightly-2024-03-01

29
src/boot.rs Normal file
View File

@@ -0,0 +1,29 @@
use crate::interrupts;
use crate::keyboard;
use crate::vga_buffer;
use crate::{print, println};
pub extern "C" fn init() {
// Draw text in brown
vga_buffer::TERMINAL
.lock()
.set_color(vga_buffer::Color::Brown, vga_buffer::Color::Black);
println!(" _____ _ _____ _____");
println!("/ ___| | | | _ / ___|");
println!("\\ `--. ___ __ _ _ __ __ _| |__ | | | \\ `--.");
println!(" `--. \\/ __/ _` | '__/ _` | '_ \\| | | |`--. \\");
println!("/\\__/ / (_| (_| | | | (_| | |_) \\ \\_/ /\\__/ /");
println!("\\____/ \\___\\__,_|_| \\__,_|_.__/ \\___/\\____/");
// Reset Color
vga_buffer::TERMINAL
.lock()
.set_color(vga_buffer::Color::White, vga_buffer::Color::Black);
print!("try 'help'\n\n> ");
interrupts::init();
keyboard::keyboard_loop();
}

130
src/cli.rs Normal file
View File

@@ -0,0 +1,130 @@
use crate::vga_buffer::{Color, TERMINAL};
use crate::{print, println, vec};
use alloc::vec::Vec;
fn find_seperator(cmd: &vec::Vec<char>) -> usize {
// Finds first space in cmd
for i in 0..cmd.len() {
if cmd[i] == ' ' {
return i;
}
}
// if unable to find space
return 0;
}
fn vec_char_starts_with(vec: &vec::Vec<char>, s: &str, n: usize) -> bool {
if vec.len() < n {
return false;
}
for i in 0..n {
if vec[i] != s.as_bytes()[i] as char {
return false;
}
}
true
}
fn vec_char_range_match(vec: &vec::Vec<char>, s: &str, a: usize, b: usize) -> bool {
if vec.len() < a || vec.len() < b {
return false;
}
for i in a..b {
if vec[i] != s.as_bytes()[i - a] as char {
return false;
}
}
true
}
pub fn process_cmd(cmd: vec::Vec<char>) {
if cmd.len() == 0 {
print!("\n> ");
return;
}
print!("\n");
// Location of space in commands with arguments
let seperator = find_seperator(&cmd);
if seperator == 0 {
check_single_commands(&cmd);
} else {
check_arg_commands(&cmd, seperator);
}
print!("\n> ");
}
fn check_single_commands(cmd: &vec::Vec<char>) {
if vec_char_starts_with(cmd, "clear", cmd.len()) {
TERMINAL.lock().clear();
} else if vec_char_starts_with(cmd, "error", cmd.len()) {
// This will fail, it is just here
// To produce a panic for debugging
let mut fail = vec![1];
fail[2] = 2;
} else if vec_char_starts_with(cmd, "color-test", cmd.len()) {
TERMINAL.lock().color_test();
} else if vec_char_starts_with(cmd, "help", cmd.len()) {
println!("======== Help: COMMANDS ========");
println!("Single commands:");
println!(" = help - shows this message");
println!(" = clear - clears the terminal");
println!(" = color-test - displays the possible colors");
println!(" = error - causes a kernel panic (via accessing a vector out of bounds)");
println!("Argument commands:");
println!(" = echo <text> - repeats entered text back");
println!(" = color <color> - changes the current terminal foreground color");
println!(" OPTIONS:");
println!(" - red");
println!(" - cyan");
println!(" - magenta");
println!(" - green");
println!(" - brown");
println!(" - light magenta");
println!(" - white");
} else {
println!("Command not found!");
}
}
fn check_arg_commands(cmd: &vec::Vec<char>, seperator: usize) {
if vec_char_starts_with(cmd, "echo ", seperator) {
print!("Scarab: ");
for letter in seperator + 1..cmd.len() {
print!("{}", cmd[letter]);
}
} else if vec_char_starts_with(cmd, "color ", seperator) {
let mut color: Color = Color::White;
if vec_char_range_match(cmd, "red", seperator + 1, cmd.len()) {
color = Color::Red;
} else if vec_char_range_match(cmd, "cyan", seperator + 1, cmd.len()) {
color = Color::Cyan;
} else if vec_char_range_match(cmd, "magenta", seperator + 1, cmd.len()) {
color = Color::Magenta;
} else if vec_char_range_match(cmd, "green", seperator + 1, cmd.len()) {
color = Color::Green;
} else if vec_char_range_match(cmd, "brown", seperator + 1, cmd.len()) {
color = Color::Brown;
} else if vec_char_range_match(cmd, "light magenta", seperator + 1, cmd.len()) {
color = Color::LightMagenta;
} else if vec_char_range_match(cmd, "white", seperator + 1, cmd.len()) {
color = Color::White;
} else {
println!("Unable to set color");
}
TERMINAL.lock().set_color(color, Color::Black);
} else {
println!("Command not found!");
}
}

16
src/interrupts.rs Normal file
View File

@@ -0,0 +1,16 @@
use lazy_static::lazy_static;
use x86_64::structures::idt::{InterruptDescriptorTable, InterruptStackFrame};
lazy_static! {
static ref IDT: InterruptDescriptorTable = {
let mut idt = InterruptDescriptorTable::new();
// TODO Register handlers here
idt
};
}
pub fn init() {
IDT.load();
}

220
src/keyboard.rs Normal file
View File

@@ -0,0 +1,220 @@
use crate::cli;
use crate::print;
use crate::vec::Vec;
use crate::vga_buffer;
use core::arch::asm;
// Reading ports using asm
#[inline(always)]
unsafe fn inb(port: u16) -> u8 {
let result: u8;
asm!("in al, dx", out("al") result, in("dx") port, options(nomem, nostack));
result
}
fn get_key() -> u8 {
unsafe {
loop {
// Poll the keyboard controller
let status: u8 = inb(0x64);
if status & 0x01 == 0 {
continue;
}
// Read the input
return inb(0x60);
}
}
}
pub fn keyboard_loop() {
/*
No need to initialize the keyboard controller
as we did this in boot.asm
*/
// Track keyboard inputs
let mut cmd = Vec::<char>::new();
//tracks if shift is held
let mut shift: bool = false;
// Wait for input
loop {
let scancode = get_key();
// check if shift is being held
match scancode {
0x2A | 0x36 => {
shift = true;
}
0xAA | 0xB6 => {
shift = false;
}
_ => {}
}
// Handle the input
let key = if shift {
translate_upper_alphanum(scancode)
} else {
translate_alphanum(scancode)
};
if key != '\0' {
// print char
print!("{}", key);
cmd.push(key);
} else {
// Other key press functions
match scancode {
0x4B => { // Left arrow
//TODO
}
0x4D => { // Right arrow
//TODO
}
0x0E => {
// Backspace
if cmd.len() > 0 {
vga_buffer::TERMINAL.lock().back(1);
cmd.pop();
}
}
0x1C => {
// Enter
// Process command
cli::process_cmd(cmd);
cmd = Vec::<char>::new(); // Pops all elements and frees memory
}
_ => { // Ignore other keys
//print!("scancode: {}", scancode);
}
};
}
}
}
fn translate_alphanum(code: u8) -> char {
return match code {
0x02 => '1',
0x03 => '2',
0x04 => '3',
0x05 => '4',
0x06 => '5',
0x07 => '6',
0x08 => '7',
0x09 => '8',
0x0A => '9',
0x0B => '0',
0x0C => '-',
0x0D => '=',
0x10 => 'q',
0x11 => 'w',
0x12 => 'e',
0x13 => 'r',
0x14 => 't',
0x15 => 'y',
0x16 => 'u',
0x17 => 'i',
0x18 => 'o',
0x19 => 'p',
0x1A => '[',
0x1B => ']',
0x1E => 'a',
0x1F => 's',
0x20 => 'd',
0x21 => 'f',
0x22 => 'g',
0x23 => 'h',
0x24 => 'j',
0x25 => 'k',
0x26 => 'l',
0x27 => ';',
0x28 => '\'', // Single quote
0x29 => '`', // Grave accent
0x2B => '\\',
0x2C => 'z',
0x2D => 'x',
0x2E => 'c',
0x2F => 'v',
0x30 => 'b',
0x31 => 'n',
0x32 => 'm',
0x33 => ',',
0x34 => '.',
0x35 => '/', // Forward slash
0x37 => '*', // Numeric keypad multiplication symbol
0x39 => ' ', // Space bar
0x4A => '-', // Numeric keypad subtraction symbol
0x4E => '+', // Numeric keypad addition symbol
0x53 => '.', // Numeric keypad decimal point symbol
_ => '\0', // unregistered
};
}
fn translate_upper_alphanum(code: u8) -> char {
return match code {
0x02 => '!',
0x03 => '@',
0x04 => '#',
0x05 => '$',
0x06 => '%',
0x07 => '^',
0x08 => '&',
0x09 => '*',
0x0A => '(',
0x0B => ')',
0x0C => '_',
0x0D => '+',
0x10 => 'Q',
0x11 => 'W',
0x12 => 'E',
0x13 => 'R',
0x14 => 'T',
0x15 => 'Y',
0x16 => 'U',
0x17 => 'I',
0x18 => 'O',
0x19 => 'P',
0x1A => '{',
0x1B => '}',
0x1E => 'A',
0x1F => 'S',
0x20 => 'D',
0x21 => 'F',
0x22 => 'G',
0x23 => 'H',
0x24 => 'J',
0x25 => 'K',
0x26 => 'L',
0x27 => ':',
0x28 => '"',
0x29 => '~', // Tilde
0x2B => '|',
0x2C => 'Z',
0x2D => 'X',
0x2E => 'C',
0x2F => 'V',
0x30 => 'B',
0x31 => 'N',
0x32 => 'M',
0x33 => '<',
0x34 => '>',
0x35 => '?', // Forward slash
0x37 => '*', // Numeric keypad multiplication symbol
0x39 => ' ', // Space bar
0x4A => '-', // Numeric keypad subtraction symbol
0x4E => '+', // Numeric keypad addition symbol
0x53 => '.', // Numeric keypad decimal point symbol
_ => '\0', // unregistered
};
}

38
src/lib.rs Normal file
View File

@@ -0,0 +1,38 @@
#![no_std] // don't link the Rust standard library
#![no_main]
pub mod boot;
pub mod cli;
pub mod keyboard;
pub mod scalloc;
pub mod vec;
pub mod vga_buffer;
extern crate alloc;
pub mod interrupts;
#[no_mangle] // don't mangle the name of this function
pub extern "C" fn rust_main() -> ! {
boot::init();
loop {}
}
use core::panic::PanicInfo;
#[panic_handler]
fn panic(info: &PanicInfo) -> ! {
vga_buffer::TERMINAL.lock().panic();
print!(
"
_ __ _ ______ _ __
| | / / | | | ___ \\ (_) _ / /
| |/ / ___ _ __ _ __ ___| | | |_/ /_ _ _ __ _ ___ (_) |
| \\ / _ \\ '__| '_ \\ / _ \\ | | __/ _` | '_ \\| |/ __| | |
| |\\ \\ __/ | | | | | __/ | | | | (_| | | | | | (__ _| |
\\_| \\_/\\___|_| |_| |_|\\___|_| \\_| \\__,_|_| |_|_|\\___| (_) |
\\_\\
"
);
println!("{}", info);
loop {}
}

105
src/scalloc.rs Normal file
View File

@@ -0,0 +1,105 @@
use core::alloc::{GlobalAlloc, Layout};
pub struct ScarabAllocator;
#[global_allocator]
static ALLOCATOR: ScarabAllocator = ScarabAllocator;
unsafe impl GlobalAlloc for ScarabAllocator {
unsafe fn alloc(&self, layout: Layout) -> *mut u8 {
alloc(layout.size())
}
unsafe fn dealloc(&self, ptr: *mut u8, _layout: Layout) {
free(ptr)
}
}
const BLOCK_SIZE: usize = 4096; // 4KB blocks
const HEAP_SIZE: usize = 1024 * 1024; // 1MB heap
const HEADER_LEN: usize = 8;
static mut HEAP: [u8; HEAP_SIZE] = [0; HEAP_SIZE];
static mut BITMAP: [u8; HEAP_SIZE / BLOCK_SIZE / 8] = [0; HEAP_SIZE / BLOCK_SIZE / 8];
pub fn alloc(size: usize) -> *mut u8 {
// Round up size to nearest block size
let num_blocks = (size + HEADER_LEN + BLOCK_SIZE - 1) / BLOCK_SIZE;
unsafe {
// Find first free set of blocks in bitmap
let mut byte_idx = 0;
let mut bit_idx = 0;
let mut free_counter = 0;
let mut found = false;
for (i, byte) in BITMAP.iter().enumerate() {
if *byte != 0xff {
// Check if byte is full
for j in 0..8 {
/* Loop through bits to find free
// Increment timer until all blocks accounted for
// Reset upon taken space
*/
if (*byte & (1 << j)) == 0 {
free_counter += 1;
if free_counter == num_blocks {
// Storing the last available block
found = true;
break;
}
} else {
free_counter = 0;
bit_idx = j + 1;
}
}
} else {
free_counter = 0;
byte_idx = i + 1;
bit_idx = 0;
}
if found {
break;
}
}
if !found {
return core::ptr::null_mut(); // Out of memory
}
// Mark blocks as allocated in bitmap
for i in 0..num_blocks {
let byte = &mut BITMAP[byte_idx + (bit_idx + i) / 8];
*byte |= 1 << ((bit_idx + i) % 8);
}
// Return pointer to allocated memory
let header = byte_idx * 8 * BLOCK_SIZE + bit_idx * BLOCK_SIZE;
// Track size of alloc
let header_ptr = HEAP.as_mut_ptr().add(header) as *mut usize;
header_ptr.write(num_blocks);
&mut HEAP[header + HEADER_LEN] as *mut u8
}
}
pub fn free(ptr: *mut u8) {
if ptr.is_null() {
return;
}
unsafe {
// Read from the header
let header = ptr.sub(HEADER_LEN) as *mut usize;
let num_blocks = header.read();
// Find starting block in heap
let start_block = ((header as usize) - (HEAP.as_ptr() as usize)) / BLOCK_SIZE;
// Mark blocks as free in bitmap
for i in 0..num_blocks {
let block_number = start_block + i;
let byte_idx = block_number / 8;
let bit_idx = block_number % 8;
let byte = &mut BITMAP[byte_idx];
*byte &= !(1 << (bit_idx));
}
}
}

202
src/vec.rs Normal file
View File

@@ -0,0 +1,202 @@
use crate::scalloc::alloc;
use crate::scalloc::free;
use core::fmt;
use core::ops::{Index, IndexMut};
#[derive(Debug)]
pub struct Vec<T> {
ptr: *mut T,
len: usize,
cap: usize,
}
impl<T> Vec<T> {
pub fn new() -> Self {
Vec {
ptr: core::ptr::null_mut(),
len: 0,
cap: 0,
}
}
pub fn push(&mut self, val: T) {
if self.len == self.cap {
let new_cap = if self.cap == 0 { 1 } else { self.cap * 2 };
let new_ptr = alloc(new_cap * core::mem::size_of::<T>()) as *mut T;
unsafe {
// Copy old elements to new memory
core::ptr::copy_nonoverlapping(self.ptr, new_ptr, self.len);
// Free old memory
free(self.ptr as *mut u8);
// Update fields
self.ptr = new_ptr;
self.cap = new_cap;
}
}
unsafe {
// Write new element to end of vector
core::ptr::write(self.ptr.offset(self.len as isize), val);
}
self.len += 1;
}
pub fn pop(&mut self) -> Option<T> {
if self.len == 0 {
return None;
}
self.len -= 1;
unsafe {
// Read and return last element of vector
Some(core::ptr::read(self.ptr.offset(self.len as isize)))
}
}
pub fn get(&self, idx: usize) -> Option<&T> {
if idx < self.len {
unsafe { Some(&*self.ptr.offset(idx as isize)) }
} else {
None
}
}
pub fn get_mut(&mut self, idx: usize) -> Option<&mut T> {
if idx < self.len {
unsafe { Some(&mut *self.ptr.offset(idx as isize)) }
} else {
None
}
}
pub fn set(&mut self, idx: usize, val: T) -> Option<T> {
if idx < self.len {
unsafe {
let old_val = core::ptr::replace(self.ptr.offset(idx as isize), val);
Some(old_val)
}
} else {
None
}
}
pub fn len(&self) -> usize {
self.len
}
pub fn is_empty(&self) -> bool {
self.len == 0
}
}
// Dropping a vector in memory (I hope this frees memory)
impl<T> Drop for Vec<T> {
fn drop(&mut self) {
// Drop all elements of vector
while let Some(_) = self.pop() {}
// Free memory
if !self.ptr.is_null() {
free(self.ptr as *mut u8);
}
}
}
// Code for compareing vectors against eachother
impl<T: PartialEq> PartialEq for Vec<T> {
fn eq(&self, other: &Self) -> bool {
if self.len() != other.len() {
return false;
}
for i in 0..self.len() {
if self.get(i) != other.get(i) {
return false;
}
}
true
}
}
// Being able to print Vec<char>
impl fmt::Display for Vec<char> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
for i in 0..self.len() {
write!(f, "{}", self.get(i).unwrap())?;
}
Ok(())
}
}
// Code needed for interations
pub struct Iter<'a, T> {
ptr: *const T,
len: usize,
idx: usize,
_marker: core::marker::PhantomData<&'a T>,
}
impl<'a, T> Iter<'a, T> {
fn new(ptr: *const T, len: usize) -> Self {
Self {
ptr,
len,
idx: 0,
_marker: core::marker::PhantomData,
}
}
}
impl<'a, T> Iterator for Iter<'a, T> {
type Item = &'a T;
fn next(&mut self) -> Option<Self::Item> {
if self.idx < self.len {
let item_ptr = unsafe { self.ptr.offset(self.idx as isize) };
self.idx += 1;
Some(unsafe { &*item_ptr })
} else {
None
}
}
}
impl<T> Vec<T> {
pub fn iter(&self) -> Iter<T> {
Iter::new(self.ptr, self.len)
}
}
// Indexing implementation
impl<T> Index<usize> for Vec<T> {
type Output = T;
fn index(&self, index: usize) -> &T {
self.get(index).expect("index out of bounds")
}
}
impl<T> IndexMut<usize> for Vec<T> {
fn index_mut(&mut self, index: usize) -> &mut T {
self.get_mut(index).expect("index out of bounds")
}
}
// Macro for easily creating vectors
#[macro_export]
macro_rules! vec {
( $( $x:expr ),* ) => {{
let mut v = Vec::new();
$(
v.push($x);
)*
v
}};
}

307
src/vga_buffer.rs Normal file
View File

@@ -0,0 +1,307 @@
extern crate volatile;
extern crate lazy_static;
extern crate spin;
use self::volatile::Volatile;
use self::lazy_static::lazy_static;
use self::spin::Mutex;
use core::fmt;
#[allow(dead_code)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(u8)]
pub enum Color {
Black = 0,
Blue = 1,
Green = 2,
Cyan = 3,
Red = 4,
Magenta = 5,
Brown = 6,
LightGrey = 7,
DarkGrey = 8,
LightBlue = 9,
LightGreen = 10,
LightCyan = 11,
LightRed = 12,
LightMagenta = 13,
LightBrown = 14,
White = 15,
}
lazy_static! {
pub static ref TERMINAL: Mutex<Terminal> = Mutex::new(Terminal {
row: 0,
column: 0,
color: make_color(Color::White, Color::Black),
buffer: unsafe {&mut *(0xb8000 as *mut [Volatile<u16>; VGA_WIDTH * VGA_HEIGHT ])},
});
}
// Dimensions for the screen
pub const VGA_WIDTH: usize = 80;
pub const VGA_HEIGHT: usize = 25;
// converting enum to u8
pub fn make_color(fg: Color, bg: Color) -> u8 {
return (fg as u8) | (bg as u8) << 4; // big brain
}
// just makes converting easier
fn make_vga_entry(c: char, color: u8) -> u16 {
let c16 = c as u16;
let color16 = color as u16;
return c16 | color16 << 8;
}
pub struct Terminal {
row: usize,
column: usize,
color: u8,
buffer: &'static mut [Volatile<u16>; (VGA_WIDTH) * (VGA_HEIGHT)],
}
impl Terminal {
fn put_entry_at(&mut self, c: char, color: u8, x: usize, y: usize) {
let index = y * VGA_WIDTH + x;
self.buffer[index].write(make_vga_entry(c, color));
}
pub fn set_color(&mut self, fg: Color, bg: Color) {
self.color = make_color(fg, bg);
}
//For removing characters, aka backspace functionality
pub fn back(&mut self, len: usize) {
// remove current cursor
self.update_cursor(false);
for _ in 0..len {
// if go back
if self.column <= 0 && self.row > 0 {
// Undo a new line
self.column = 0;
self.row -= 1;
} else {
self.column -= 1;
}
// Clear space and draw cursor
self.put_entry_at(' ', self.color, self.column, self.row);
self.update_cursor(true);
}
}
// To empty all contents of vga buffer
pub fn clear(&mut self) {
self.row = 0;
self.column = 0;
for y in 0..VGA_HEIGHT {
for x in 0..VGA_WIDTH {
// Always sets bg black, could be later issue
self.put_entry_at(' ', make_color(Color::White, Color::Black), x, y);
}
}
}
fn scroll(&mut self) {
for y in 0..VGA_HEIGHT-1 {
for x in 0..VGA_WIDTH {
let prev = (y * VGA_WIDTH) + x;
let next = ((y + 1) * VGA_WIDTH) + x;
// Transfer all contents up one row
self.buffer[prev].write(self.buffer[next].read());
}
}
self.row -= 1;
self.column = 0;
// Create empty last line
for x in 0..VGA_WIDTH {
self.put_entry_at(' ', make_color(Color::LightGrey, Color::Black), x, self.row);
}
}
fn put_char(&mut self, c: char) {
if c == '\n' {
self.row += 1;
if self.row >= VGA_HEIGHT {
self.scroll();
}
self.column = 0;
} else {
self.put_entry_at(c, self.color, self.column, self.row);
self.column += 1;
if self.column == VGA_WIDTH {
self.column = 0;
self.row += 1;
if self.row >= VGA_HEIGHT {
self.scroll();
}
}
}
}
pub fn print(&mut self, data: &str) {
self.update_cursor(false);
for c in data.chars() {
self.put_char(c);
}
self.update_cursor(true);
}
pub fn update_cursor(&mut self, visable: bool) {
// Can change these depends how I feel
let color = if visable { make_color(Color::Black, Color::White) } else { self.color };
let c_char = ' ';
self.put_entry_at(c_char, color, self.column, self.row);
}
// Empties contents and replaces with red screen (scary!)
pub fn panic(&mut self) {
self.row = 0;
self.column = 0;
self.set_color(Color::White, Color::Red);
for y in 0..VGA_HEIGHT {
for x in 0..VGA_WIDTH {
self.put_entry_at(' ', make_color(Color::White, Color::Red), x, y);
}
}
}
pub fn color_test(&mut self) {
let backup_color = self.color;
self.color = make_color(
Color::White, Color::Black
);
self.print(" White + Black ");
self.color = make_color(
Color::White, Color::Blue
);
self.print(" White + Blue ");
self.color = make_color(
Color::White, Color::Green
);
self.print(" White + Green ");
self.color = make_color(
Color::Black, Color::Cyan
);
self.print(" Black + Cyan ");
self.color = make_color(
Color::White, Color::Red
);
self.print(" White + Red ");
self.color = make_color(
Color::White, Color::Magenta
);
self.print(" White + Magenta ");
self.color = make_color(
Color::White, Color::Brown
);
self.print(" White + Brown ");
self.color = make_color(
Color::Black, Color::LightGrey
);
self.print(" Black + LightGrey ");
self.color = make_color(
Color::White, Color::DarkGrey
);
self.print(" White + DarkGrey ");
self.color = make_color(
Color::Black, Color::LightBlue
);
self.print(" Black + LightBlue ");
self.color = make_color(
Color::Black, Color::LightGreen
);
self.print(" Black + LightGreen ");
self.color = make_color(
Color::Black, Color::LightCyan
);
self.print(" Black + LightCyan ");
self.color = make_color(
Color::Black, Color::LightRed
);
self.print(" Black + LightRed ");
self.color = make_color(
Color::Black, Color::LightMagenta
);
self.print(" Black + LightMagenta ");
self.color = make_color(
Color::Black, Color::LightBrown
);
self.print(" Black + LightBrown ");
self.color = make_color(
Color::Black, Color::White
);
self.print(" Black + White ");
self.color = backup_color;
}
}
impl fmt::Write for Terminal {
fn write_str(&mut self, s: &str) -> fmt::Result {
self.print(s);
Ok(())
}
}
// Macros
#[macro_export]
macro_rules! print {
($($arg:tt)*) => ($crate::vga_buffer::_print(format_args!($($arg)*)));
}
#[macro_export]
macro_rules! println {
() => (print!("\n"));
($($arg:tt)*) => (print!("{}\n", format_args!($($arg)*)));
}
#[doc(hidden)]
pub fn _print(args: fmt::Arguments) {
use core::fmt::Write;
TERMINAL.lock().write_fmt(args).unwrap();
}

1
target/.rustc_info.json Normal file
View File

@@ -0,0 +1 @@
{"rustc_fingerprint":10546204349593706313,"outputs":{"4614504638168534921":{"success":true,"status":"","code":0,"stdout":"rustc 1.78.0-nightly (878c8a2a6 2024-02-29)\nbinary: rustc\ncommit-hash: 878c8a2a62d49ca5c454547ad67290a1df746cb5\ncommit-date: 2024-02-29\nhost: x86_64-unknown-linux-gnu\nrelease: 1.78.0-nightly\nLLVM version: 18.1.0\n","stderr":""},"9030312521483228047":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.a\n/home/grimm/.rustup/toolchains/nightly-2024-03-01-x86_64-unknown-linux-gnu\noff\n___\ndebug_assertions\noverflow_checks\npanic=\"abort\"\nproc_macro\nrelocation_model=\"pic\"\ntarget_abi=\"\"\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"\"\ntarget_has_atomic\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_has_atomic_equal_alignment=\"16\"\ntarget_has_atomic_equal_alignment=\"32\"\ntarget_has_atomic_equal_alignment=\"64\"\ntarget_has_atomic_equal_alignment=\"8\"\ntarget_has_atomic_equal_alignment=\"ptr\"\ntarget_has_atomic_load_store\ntarget_has_atomic_load_store=\"16\"\ntarget_has_atomic_load_store=\"32\"\ntarget_has_atomic_load_store=\"64\"\ntarget_has_atomic_load_store=\"8\"\ntarget_has_atomic_load_store=\"ptr\"\ntarget_os=\"none\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"unknown\"\n","stderr":"warning: dropping unsupported crate type `dylib` for target `x86_64-scarab_os-7181296097111577465`\n\nwarning: dropping unsupported crate type `cdylib` for target `x86_64-scarab_os-7181296097111577465`\n\nwarning: dropping unsupported crate type `proc-macro` for target `x86_64-scarab_os-7181296097111577465`\n\nwarning: 3 warnings emitted\n\n"},"15729799797837862367":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.so\nlib___.so\nlib___.a\nlib___.so\n/home/grimm/.rustup/toolchains/nightly-2024-03-01-x86_64-unknown-linux-gnu\noff\npacked\nunpacked\n___\ndebug_assertions\noverflow_checks\npanic=\"unwind\"\nproc_macro\nrelocation_model=\"pic\"\ntarget_abi=\"\"\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"gnu\"\ntarget_family=\"unix\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_has_atomic\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_has_atomic_equal_alignment=\"16\"\ntarget_has_atomic_equal_alignment=\"32\"\ntarget_has_atomic_equal_alignment=\"64\"\ntarget_has_atomic_equal_alignment=\"8\"\ntarget_has_atomic_equal_alignment=\"ptr\"\ntarget_has_atomic_load_store\ntarget_has_atomic_load_store=\"16\"\ntarget_has_atomic_load_store=\"32\"\ntarget_has_atomic_load_store=\"64\"\ntarget_has_atomic_load_store=\"8\"\ntarget_has_atomic_load_store=\"ptr\"\ntarget_os=\"linux\"\ntarget_pointer_width=\"64\"\ntarget_thread_local\ntarget_vendor=\"unknown\"\nunix\n","stderr":""}},"successes":{}}

3
target/CACHEDIR.TAG Normal file
View File

@@ -0,0 +1,3 @@
Signature: 8a477f597d28d172789f06886806bc55
# This file is a cache directory tag created by cargo.
# For information about cache directory tags see https://bford.info/cachedir/

0
target/debug/.cargo-lock Normal file
View File

View File

@@ -0,0 +1 @@
{"rustc":8908927309315482140,"features":"[\"compiler-builtins\", \"core\", \"default\", \"mem\", \"rustc-dep-of-std\"]","declared_features":"","target":2297296889237502566,"profile":12206360443249279867,"path":10267838516325275768,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/compiler_builtins-fc32ac8f2fe27923/dep-build-script-build-script-build"}}],"rustflags":[],"metadata":14701936454766889299,"config":2202906307356721367,"compile_kind":0}

View File

@@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@@ -0,0 +1 @@
282aa96b42effac5

View File

@@ -0,0 +1 @@
{"rustc":8908927309315482140,"features":"[]","declared_features":"","target":2297296889237502566,"profile":12206360443249279867,"path":3079374256050985207,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/rustversion-18d14d0cad5f4b63/dep-build-script-build-script-build"}}],"rustflags":[],"metadata":11946384680894284015,"config":2202906307356721367,"compile_kind":0}

View File

@@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@@ -0,0 +1 @@
07d79350e6fe6c8d

View File

@@ -0,0 +1 @@
{"rustc":8908927309315482140,"features":"[]","declared_features":"","target":8237524127607741655,"profile":12206360443249279867,"path":4277567828688431170,"deps":[[12213898014817073798,"build_script_build",false,13587651077309795580]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/rustversion-4fb0f24087d3908d/dep-lib-rustversion"}}],"rustflags":[],"metadata":11946384680894284015,"config":2202906307356721367,"compile_kind":0}

View File

@@ -0,0 +1 @@
{"rustc":8908927309315482140,"features":"","declared_features":"","target":0,"profile":0,"path":0,"deps":[[12213898014817073798,"build_script_build",false,14265977838202595880]],"local":[{"RerunIfChanged":{"output":"debug/build/rustversion-b7cbf248789263fa/output","paths":["build/build.rs"]}}],"rustflags":[],"metadata":0,"config":0,"compile_kind":0}

View File

@@ -0,0 +1,5 @@
/home/grimm/coding/ScarabOS/target/debug/build/compiler_builtins-fc32ac8f2fe27923/build_script_build-fc32ac8f2fe27923: /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/compiler_builtins-0.1.108/build.rs
/home/grimm/coding/ScarabOS/target/debug/build/compiler_builtins-fc32ac8f2fe27923/build_script_build-fc32ac8f2fe27923.d: /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/compiler_builtins-0.1.108/build.rs
/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/compiler_builtins-0.1.108/build.rs:

View File

@@ -0,0 +1,6 @@
/home/grimm/coding/ScarabOS/target/debug/build/rustversion-18d14d0cad5f4b63/build_script_build-18d14d0cad5f4b63: /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/build/build.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/build/rustc.rs
/home/grimm/coding/ScarabOS/target/debug/build/rustversion-18d14d0cad5f4b63/build_script_build-18d14d0cad5f4b63.d: /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/build/build.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/build/rustc.rs
/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/build/build.rs:
/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/build/rustc.rs:

View File

@@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@@ -0,0 +1,11 @@
crate::version::Version {
minor: 78,
patch: 0,
channel: crate::version::Channel::Nightly(
crate::date::Date {
year: 2024,
month: 2,
day: 29,
},
),
}

View File

@@ -0,0 +1 @@
cargo:rerun-if-changed=build/build.rs

View File

@@ -0,0 +1 @@
/home/grimm/coding/ScarabOS/target/debug/build/rustversion-b7cbf248789263fa/out

Binary file not shown.

View File

@@ -0,0 +1,20 @@
/home/grimm/coding/ScarabOS/target/debug/deps/librustversion-4fb0f24087d3908d.so: /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/lib.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/attr.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/bound.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/constfn.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/date.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/error.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/expand.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/expr.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/iter.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/release.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/time.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/token.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/version.rs /home/grimm/coding/ScarabOS/target/debug/build/rustversion-b7cbf248789263fa/out/version.expr
/home/grimm/coding/ScarabOS/target/debug/deps/rustversion-4fb0f24087d3908d.d: /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/lib.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/attr.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/bound.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/constfn.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/date.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/error.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/expand.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/expr.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/iter.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/release.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/time.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/token.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/version.rs /home/grimm/coding/ScarabOS/target/debug/build/rustversion-b7cbf248789263fa/out/version.expr
/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/lib.rs:
/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/attr.rs:
/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/bound.rs:
/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/constfn.rs:
/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/date.rs:
/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/error.rs:
/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/expand.rs:
/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/expr.rs:
/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/iter.rs:
/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/release.rs:
/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/time.rs:
/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/token.rs:
/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/version.rs:
/home/grimm/coding/ScarabOS/target/debug/build/rustversion-b7cbf248789263fa/out/version.expr:
# env-dep:OUT_DIR=/home/grimm/coding/ScarabOS/target/debug/build/rustversion-b7cbf248789263fa/out

View File

View File

@@ -0,0 +1 @@
{"rustc":8908927309315482140,"features":"[\"compiler-builtins\", \"core\", \"default\", \"mem\", \"rustc-dep-of-std\"]","declared_features":"","target":2297296889237502566,"profile":1680656715729475402,"path":10267838516325275768,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/compiler_builtins-1c776185c174c1da/dep-build-script-build-script-build"}}],"rustflags":[],"metadata":14701936454766889299,"config":2202906307356721367,"compile_kind":0}

View File

@@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@@ -0,0 +1 @@
df6683b3cde33f47

View File

@@ -0,0 +1 @@
{"rustc":8908927309315482140,"features":"[]","declared_features":"","target":8237524127607741655,"profile":1680656715729475402,"path":4277567828688431170,"deps":[[12213898014817073798,"build_script_build",false,6820143794375409276]],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/rustversion-48c66c2b709cad2b/dep-lib-rustversion"}}],"rustflags":[],"metadata":11946384680894284015,"config":2202906307356721367,"compile_kind":0}

View File

@@ -0,0 +1 @@
{"rustc":8908927309315482140,"features":"[]","declared_features":"","target":2297296889237502566,"profile":1680656715729475402,"path":3079374256050985207,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"release/.fingerprint/rustversion-e1bd09c9636cfedc/dep-build-script-build-script-build"}}],"rustflags":[],"metadata":11946384680894284015,"config":2202906307356721367,"compile_kind":0}

View File

@@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@@ -0,0 +1 @@
{"rustc":8908927309315482140,"features":"","declared_features":"","target":0,"profile":0,"path":0,"deps":[[12213898014817073798,"build_script_build",false,1181450465517726296]],"local":[{"RerunIfChanged":{"output":"release/build/rustversion-fa31af35e4407b4b/output","paths":["build/build.rs"]}}],"rustflags":[],"metadata":0,"config":0,"compile_kind":0}

View File

@@ -0,0 +1,5 @@
/home/grimm/coding/ScarabOS/target/release/build/compiler_builtins-1c776185c174c1da/build_script_build-1c776185c174c1da: /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/compiler_builtins-0.1.108/build.rs
/home/grimm/coding/ScarabOS/target/release/build/compiler_builtins-1c776185c174c1da/build_script_build-1c776185c174c1da.d: /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/compiler_builtins-0.1.108/build.rs
/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/compiler_builtins-0.1.108/build.rs:

View File

@@ -0,0 +1,6 @@
/home/grimm/coding/ScarabOS/target/release/build/rustversion-e1bd09c9636cfedc/build_script_build-e1bd09c9636cfedc: /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/build/build.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/build/rustc.rs
/home/grimm/coding/ScarabOS/target/release/build/rustversion-e1bd09c9636cfedc/build_script_build-e1bd09c9636cfedc.d: /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/build/build.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/build/rustc.rs
/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/build/build.rs:
/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/build/rustc.rs:

View File

@@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@@ -0,0 +1,11 @@
crate::version::Version {
minor: 78,
patch: 0,
channel: crate::version::Channel::Nightly(
crate::date::Date {
year: 2024,
month: 2,
day: 29,
},
),
}

View File

@@ -0,0 +1 @@
cargo:rerun-if-changed=build/build.rs

View File

@@ -0,0 +1 @@
/home/grimm/coding/ScarabOS/target/release/build/rustversion-fa31af35e4407b4b/out

Binary file not shown.

View File

@@ -0,0 +1,20 @@
/home/grimm/coding/ScarabOS/target/release/deps/librustversion-48c66c2b709cad2b.so: /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/lib.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/attr.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/bound.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/constfn.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/date.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/error.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/expand.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/expr.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/iter.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/release.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/time.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/token.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/version.rs /home/grimm/coding/ScarabOS/target/release/build/rustversion-fa31af35e4407b4b/out/version.expr
/home/grimm/coding/ScarabOS/target/release/deps/rustversion-48c66c2b709cad2b.d: /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/lib.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/attr.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/bound.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/constfn.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/date.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/error.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/expand.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/expr.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/iter.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/release.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/time.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/token.rs /home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/version.rs /home/grimm/coding/ScarabOS/target/release/build/rustversion-fa31af35e4407b4b/out/version.expr
/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/lib.rs:
/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/attr.rs:
/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/bound.rs:
/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/constfn.rs:
/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/date.rs:
/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/error.rs:
/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/expand.rs:
/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/expr.rs:
/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/iter.rs:
/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/release.rs:
/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/time.rs:
/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/token.rs:
/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/version.rs:
/home/grimm/coding/ScarabOS/target/release/build/rustversion-fa31af35e4407b4b/out/version.expr:
# env-dep:OUT_DIR=/home/grimm/coding/ScarabOS/target/release/build/rustversion-fa31af35e4407b4b/out

View File

@@ -0,0 +1,8 @@
0.023374227s INFO cargo::core::compiler::fingerprint: stale: changed "/home/grimm/coding/ScarabOS/src/interrupts.rs"
0.023382933s INFO cargo::core::compiler::fingerprint: (vs) "/home/grimm/coding/ScarabOS/target/x86_64-scarab_os/debug/.fingerprint/scarab-aeb53d9b0747168f/dep-lib-scarab"
0.023385999s INFO cargo::core::compiler::fingerprint: FileTime { seconds: 1762532377, nanos: 501074777 } < FileTime { seconds: 1762870759, nanos: 894106082 }
0.023519780s INFO cargo::core::compiler::fingerprint: fingerprint dirty for scarab v0.1.0 (/home/grimm/coding/ScarabOS)/Check { test: false }/TargetInner { ..: lib_target("scarab", ["staticlib"], "/home/grimm/coding/ScarabOS/src/lib.rs", Edition2021) }
0.023527945s INFO cargo::core::compiler::fingerprint: dirty: FsStatusOutdated(StaleItem(ChangedFile { reference: "/home/grimm/coding/ScarabOS/target/x86_64-scarab_os/debug/.fingerprint/scarab-aeb53d9b0747168f/dep-lib-scarab", reference_mtime: FileTime { seconds: 1762532377, nanos: 501074777 }, stale: "/home/grimm/coding/ScarabOS/src/interrupts.rs", stale_mtime: FileTime { seconds: 1762870759, nanos: 894106082 } }))
0.024005521s INFO cargo::core::compiler::fingerprint: fingerprint dirty for scarab v0.1.0 (/home/grimm/coding/ScarabOS)/Check { test: true }/TargetInner { ..: lib_target("scarab", ["staticlib"], "/home/grimm/coding/ScarabOS/src/lib.rs", Edition2021) }
0.024011903s INFO cargo::core::compiler::fingerprint: dirty: FsStatusOutdated(Stale)
Checking scarab v0.1.0 (/home/grimm/coding/ScarabOS)

View File

@@ -0,0 +1,24 @@
{"reason":"compiler-artifact","package_id":"registry+https://github.com/rust-lang/crates.io-index#compiler_builtins@0.1.108","manifest_path":"/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/compiler_builtins-0.1.108/Cargo.toml","target":{"kind":["custom-build"],"crate_types":["bin"],"name":"build-script-build","src_path":"/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/compiler_builtins-0.1.108/build.rs","edition":"2018","doc":false,"doctest":false,"test":false},"profile":{"opt_level":"0","debuginfo":2,"debug_assertions":true,"overflow_checks":true,"test":false},"features":["compiler-builtins","core","default","mem","rustc-dep-of-std"],"filenames":["/home/grimm/coding/ScarabOS/target/debug/build/compiler_builtins-fc32ac8f2fe27923/build-script-build"],"executable":null,"fresh":true}
{"reason":"compiler-artifact","package_id":"path+file:///home/grimm/.rustup/toolchains/nightly-2024-03-01-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core#0.0.0","manifest_path":"/home/grimm/.rustup/toolchains/nightly-2024-03-01-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/Cargo.toml","target":{"kind":["lib"],"crate_types":["lib"],"name":"core","src_path":"/home/grimm/.rustup/toolchains/nightly-2024-03-01-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/lib.rs","edition":"2021","doc":true,"doctest":true,"test":false},"profile":{"opt_level":"0","debuginfo":2,"debug_assertions":true,"overflow_checks":true,"test":false},"features":[],"filenames":["/home/grimm/coding/ScarabOS/target/x86_64-scarab_os/debug/deps/libcore-5f3616797832647b.rlib","/home/grimm/coding/ScarabOS/target/x86_64-scarab_os/debug/deps/libcore-5f3616797832647b.rmeta"],"executable":null,"fresh":true}
{"reason":"build-script-executed","package_id":"registry+https://github.com/rust-lang/crates.io-index#compiler_builtins@0.1.108","linked_libs":[],"linked_paths":[],"cfgs":["feature=\"unstable\"","feature=\"mem-unaligned\""],"env":[],"out_dir":"/home/grimm/coding/ScarabOS/target/x86_64-scarab_os/debug/build/compiler_builtins-be236747bda2f785/out"}
{"reason":"compiler-artifact","package_id":"path+file:///home/grimm/.rustup/toolchains/nightly-2024-03-01-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/rustc-std-workspace-core#1.99.0","manifest_path":"/home/grimm/.rustup/toolchains/nightly-2024-03-01-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/rustc-std-workspace-core/Cargo.toml","target":{"kind":["lib"],"crate_types":["lib"],"name":"rustc-std-workspace-core","src_path":"/home/grimm/.rustup/toolchains/nightly-2024-03-01-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/rustc-std-workspace-core/lib.rs","edition":"2021","doc":true,"doctest":true,"test":true},"profile":{"opt_level":"0","debuginfo":2,"debug_assertions":true,"overflow_checks":true,"test":false},"features":[],"filenames":["/home/grimm/coding/ScarabOS/target/x86_64-scarab_os/debug/deps/librustc_std_workspace_core-e7a1c4b9e5854414.rlib","/home/grimm/coding/ScarabOS/target/x86_64-scarab_os/debug/deps/librustc_std_workspace_core-e7a1c4b9e5854414.rmeta"],"executable":null,"fresh":true}
{"reason":"compiler-artifact","package_id":"registry+https://github.com/rust-lang/crates.io-index#rustversion@1.0.22","manifest_path":"/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/Cargo.toml","target":{"kind":["custom-build"],"crate_types":["bin"],"name":"build-script-build","src_path":"/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/build/build.rs","edition":"2018","doc":false,"doctest":false,"test":false},"profile":{"opt_level":"0","debuginfo":2,"debug_assertions":true,"overflow_checks":true,"test":false},"features":[],"filenames":["/home/grimm/coding/ScarabOS/target/debug/build/rustversion-18d14d0cad5f4b63/build-script-build"],"executable":null,"fresh":true}
{"reason":"compiler-artifact","package_id":"registry+https://github.com/rust-lang/crates.io-index#compiler_builtins@0.1.108","manifest_path":"/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/compiler_builtins-0.1.108/Cargo.toml","target":{"kind":["lib"],"crate_types":["lib"],"name":"compiler_builtins","src_path":"/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/compiler_builtins-0.1.108/src/lib.rs","edition":"2018","doc":true,"doctest":true,"test":false},"profile":{"opt_level":"0","debuginfo":2,"debug_assertions":true,"overflow_checks":true,"test":false},"features":["compiler-builtins","core","default","mem","rustc-dep-of-std"],"filenames":["/home/grimm/coding/ScarabOS/target/x86_64-scarab_os/debug/deps/libcompiler_builtins-3ebbf73f0e78443c.rlib","/home/grimm/coding/ScarabOS/target/x86_64-scarab_os/debug/deps/libcompiler_builtins-3ebbf73f0e78443c.rmeta"],"executable":null,"fresh":true}
{"reason":"build-script-executed","package_id":"registry+https://github.com/rust-lang/crates.io-index#rustversion@1.0.22","linked_libs":[],"linked_paths":[],"cfgs":[],"env":[],"out_dir":"/home/grimm/coding/ScarabOS/target/debug/build/rustversion-b7cbf248789263fa/out"}
{"reason":"compiler-artifact","package_id":"path+file:///home/grimm/.rustup/toolchains/nightly-2024-03-01-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/alloc#0.0.0","manifest_path":"/home/grimm/.rustup/toolchains/nightly-2024-03-01-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/alloc/Cargo.toml","target":{"kind":["lib"],"crate_types":["lib"],"name":"alloc","src_path":"/home/grimm/.rustup/toolchains/nightly-2024-03-01-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/alloc/src/lib.rs","edition":"2021","doc":true,"doctest":true,"test":true},"profile":{"opt_level":"0","debuginfo":2,"debug_assertions":true,"overflow_checks":true,"test":false},"features":["compiler-builtins-mem"],"filenames":["/home/grimm/coding/ScarabOS/target/x86_64-scarab_os/debug/deps/liballoc-628cc052b207c544.rlib","/home/grimm/coding/ScarabOS/target/x86_64-scarab_os/debug/deps/liballoc-628cc052b207c544.rmeta"],"executable":null,"fresh":true}
{"reason":"compiler-artifact","package_id":"registry+https://github.com/rust-lang/crates.io-index#rustversion@1.0.22","manifest_path":"/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/Cargo.toml","target":{"kind":["proc-macro"],"crate_types":["proc-macro"],"name":"rustversion","src_path":"/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustversion-1.0.22/src/lib.rs","edition":"2018","doc":true,"doctest":true,"test":true},"profile":{"opt_level":"0","debuginfo":2,"debug_assertions":true,"overflow_checks":true,"test":false},"features":[],"filenames":["/home/grimm/coding/ScarabOS/target/debug/deps/librustversion-4fb0f24087d3908d.so"],"executable":null,"fresh":true}
{"reason":"compiler-artifact","package_id":"registry+https://github.com/rust-lang/crates.io-index#volatile@0.4.6","manifest_path":"/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/volatile-0.4.6/Cargo.toml","target":{"kind":["lib"],"crate_types":["lib"],"name":"volatile","src_path":"/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/volatile-0.4.6/src/lib.rs","edition":"2015","doc":true,"doctest":true,"test":true},"profile":{"opt_level":"0","debuginfo":2,"debug_assertions":true,"overflow_checks":true,"test":false},"features":[],"filenames":["/home/grimm/coding/ScarabOS/target/x86_64-scarab_os/debug/deps/libvolatile-8b10296e299a0cc0.rmeta"],"executable":null,"fresh":true}
{"reason":"compiler-artifact","package_id":"registry+https://github.com/rust-lang/crates.io-index#bitflags@2.10.0","manifest_path":"/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bitflags-2.10.0/Cargo.toml","target":{"kind":["lib"],"crate_types":["lib"],"name":"bitflags","src_path":"/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bitflags-2.10.0/src/lib.rs","edition":"2021","doc":true,"doctest":true,"test":true},"profile":{"opt_level":"0","debuginfo":2,"debug_assertions":true,"overflow_checks":true,"test":false},"features":[],"filenames":["/home/grimm/coding/ScarabOS/target/x86_64-scarab_os/debug/deps/libbitflags-58ce0cdb92e58d08.rmeta"],"executable":null,"fresh":true}
{"reason":"compiler-artifact","package_id":"registry+https://github.com/rust-lang/crates.io-index#bit_field@0.10.3","manifest_path":"/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bit_field-0.10.3/Cargo.toml","target":{"kind":["lib"],"crate_types":["lib"],"name":"bit_field","src_path":"/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bit_field-0.10.3/src/lib.rs","edition":"2015","doc":true,"doctest":true,"test":true},"profile":{"opt_level":"0","debuginfo":2,"debug_assertions":true,"overflow_checks":true,"test":false},"features":[],"filenames":["/home/grimm/coding/ScarabOS/target/x86_64-scarab_os/debug/deps/libbit_field-4eb2560dc7888740.rmeta"],"executable":null,"fresh":true}
{"reason":"compiler-artifact","package_id":"registry+https://github.com/rust-lang/crates.io-index#spin@0.9.8","manifest_path":"/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/spin-0.9.8/Cargo.toml","target":{"kind":["lib"],"crate_types":["lib"],"name":"spin","src_path":"/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/spin-0.9.8/src/lib.rs","edition":"2015","doc":true,"doctest":true,"test":true},"profile":{"opt_level":"0","debuginfo":2,"debug_assertions":true,"overflow_checks":true,"test":false},"features":["once"],"filenames":["/home/grimm/coding/ScarabOS/target/x86_64-scarab_os/debug/deps/libspin-c991e2e5c69c359a.rmeta"],"executable":null,"fresh":true}
{"reason":"compiler-artifact","package_id":"registry+https://github.com/rust-lang/crates.io-index#spin@0.5.2","manifest_path":"/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/spin-0.5.2/Cargo.toml","target":{"kind":["lib"],"crate_types":["lib"],"name":"spin","src_path":"/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/spin-0.5.2/src/lib.rs","edition":"2015","doc":true,"doctest":true,"test":true},"profile":{"opt_level":"0","debuginfo":2,"debug_assertions":true,"overflow_checks":true,"test":false},"features":[],"filenames":["/home/grimm/coding/ScarabOS/target/x86_64-scarab_os/debug/deps/libspin-580aeecb01db0a52.rmeta"],"executable":null,"fresh":true}
{"reason":"compiler-artifact","package_id":"registry+https://github.com/rust-lang/crates.io-index#volatile@0.2.7","manifest_path":"/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/volatile-0.2.7/Cargo.toml","target":{"kind":["lib"],"crate_types":["lib"],"name":"volatile","src_path":"/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/volatile-0.2.7/src/lib.rs","edition":"2015","doc":true,"doctest":true,"test":true},"profile":{"opt_level":"0","debuginfo":2,"debug_assertions":true,"overflow_checks":true,"test":false},"features":[],"filenames":["/home/grimm/coding/ScarabOS/target/x86_64-scarab_os/debug/deps/libvolatile-9b5392082f680a57.rmeta"],"executable":null,"fresh":true}
{"reason":"compiler-artifact","package_id":"registry+https://github.com/rust-lang/crates.io-index#x86_64@0.14.11","manifest_path":"/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/x86_64-0.14.11/Cargo.toml","target":{"kind":["lib"],"crate_types":["lib"],"name":"x86_64","src_path":"/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/x86_64-0.14.11/src/lib.rs","edition":"2018","doc":true,"doctest":true,"test":true},"profile":{"opt_level":"0","debuginfo":2,"debug_assertions":true,"overflow_checks":true,"test":false},"features":["abi_x86_interrupt","const_fn","default","inline_asm","instructions","nightly","step_trait"],"filenames":["/home/grimm/coding/ScarabOS/target/x86_64-scarab_os/debug/deps/libx86_64-5a56b0a0acfa19b8.rmeta"],"executable":null,"fresh":true}
{"reason":"compiler-artifact","package_id":"registry+https://github.com/rust-lang/crates.io-index#lazy_static@1.5.0","manifest_path":"/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/lazy_static-1.5.0/Cargo.toml","target":{"kind":["lib"],"crate_types":["lib"],"name":"lazy_static","src_path":"/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/lazy_static-1.5.0/src/lib.rs","edition":"2015","doc":true,"doctest":true,"test":true},"profile":{"opt_level":"0","debuginfo":2,"debug_assertions":true,"overflow_checks":true,"test":false},"features":["spin","spin_no_std"],"filenames":["/home/grimm/coding/ScarabOS/target/x86_64-scarab_os/debug/deps/liblazy_static-322f0590db73abdc.rmeta"],"executable":null,"fresh":true}
{"reason":"compiler-artifact","package_id":"registry+https://github.com/rust-lang/crates.io-index#pic8259@0.10.4","manifest_path":"/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/pic8259-0.10.4/Cargo.toml","target":{"kind":["lib"],"crate_types":["lib"],"name":"pic8259","src_path":"/home/grimm/.cargo/registry/src/index.crates.io-6f17d22bba15001f/pic8259-0.10.4/src/lib.rs","edition":"2018","doc":true,"doctest":true,"test":true},"profile":{"opt_level":"0","debuginfo":2,"debug_assertions":true,"overflow_checks":true,"test":false},"features":["default","nightly"],"filenames":["/home/grimm/coding/ScarabOS/target/x86_64-scarab_os/debug/deps/libpic8259-cd7cc39d257f94a9.rmeta"],"executable":null,"fresh":true}
{"reason":"compiler-message","package_id":"path+file:///home/grimm/coding/ScarabOS#scarab@0.1.0","manifest_path":"/home/grimm/coding/ScarabOS/Cargo.toml","target":{"kind":["staticlib"],"crate_types":["staticlib"],"name":"scarab","src_path":"/home/grimm/coding/ScarabOS/src/lib.rs","edition":"2021","doc":true,"doctest":false,"test":true},"message":{"rendered":"error[E0463]: can't find crate for `test`\n\n","$message_type":"diagnostic","children":[],"code":{"code":"E0463","explanation":"A crate was declared but cannot be found.\n\nErroneous code example:\n\n```compile_fail,E0463\nextern crate foo; // error: can't find crate\n```\n\nYou need to link your code to the relevant crate in order to be able to use it\n(through Cargo or the `-L` option of rustc, for example).\n\n## Common causes\n\n- The crate is not present at all. If using Cargo, add it to `[dependencies]`\n in Cargo.toml.\n- The crate is present, but under a different name. If using Cargo, look for\n `package = ` under `[dependencies]` in Cargo.toml.\n\n## Common causes for missing `std` or `core`\n\n- You are cross-compiling for a target which doesn't have `std` prepackaged.\n Consider one of the following:\n + Adding a pre-compiled version of std with `rustup target add`\n + Building std from source with `cargo build -Z build-std`\n + Using `#![no_std]` at the crate root, so you won't need `std` in the first\n place.\n- You are developing the compiler itself and haven't built libstd from source.\n You can usually build it with `x.py build library/std`. More information\n about x.py is available in the [rustc-dev-guide].\n\n[rustc-dev-guide]: https://rustc-dev-guide.rust-lang.org/building/how-to-build-and-run.html#building-the-compiler\n"},"level":"error","message":"can't find crate for `test`","spans":[{"byte_end":0,"byte_start":0,"column_end":1,"column_start":1,"expansion":null,"file_name":"src/lib.rs","is_primary":true,"label":"can't find crate","line_end":1,"line_start":1,"suggested_replacement":null,"suggestion_applicability":null,"text":[]}]}}
{"reason":"compiler-message","package_id":"path+file:///home/grimm/coding/ScarabOS#scarab@0.1.0","manifest_path":"/home/grimm/coding/ScarabOS/Cargo.toml","target":{"kind":["staticlib"],"crate_types":["staticlib"],"name":"scarab","src_path":"/home/grimm/coding/ScarabOS/src/lib.rs","edition":"2021","doc":true,"doctest":false,"test":true},"message":{"rendered":"warning: unused import: `InterruptStackFrame`\n --> src/interrupts.rs:2:57\n |\n2 | use x86_64::structures::idt::{InterruptDescriptorTable, InterruptStackFrame};\n | ^^^^^^^^^^^^^^^^^^^\n |\n = note: `#[warn(unused_imports)]` on by default\n\n","$message_type":"diagnostic","children":[{"children":[],"code":null,"level":"note","message":"`#[warn(unused_imports)]` on by default","rendered":null,"spans":[]},{"children":[],"code":null,"level":"help","message":"remove the unused import","rendered":null,"spans":[{"byte_end":105,"byte_start":84,"column_end":76,"column_start":55,"expansion":null,"file_name":"src/interrupts.rs","is_primary":true,"label":null,"line_end":2,"line_start":2,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","text":[{"highlight_end":76,"highlight_start":55,"text":"use x86_64::structures::idt::{InterruptDescriptorTable, InterruptStackFrame};"}]}]}],"code":{"code":"unused_imports","explanation":null},"level":"warning","message":"unused import: `InterruptStackFrame`","spans":[{"byte_end":105,"byte_start":86,"column_end":76,"column_start":57,"expansion":null,"file_name":"src/interrupts.rs","is_primary":true,"label":null,"line_end":2,"line_start":2,"suggested_replacement":null,"suggestion_applicability":null,"text":[{"highlight_end":76,"highlight_start":57,"text":"use x86_64::structures::idt::{InterruptDescriptorTable, InterruptStackFrame};"}]}]}}
{"reason":"compiler-message","package_id":"path+file:///home/grimm/coding/ScarabOS#scarab@0.1.0","manifest_path":"/home/grimm/coding/ScarabOS/Cargo.toml","target":{"kind":["staticlib"],"crate_types":["staticlib"],"name":"scarab","src_path":"/home/grimm/coding/ScarabOS/src/lib.rs","edition":"2021","doc":true,"doctest":false,"test":true},"message":{"rendered":"warning: unused import: `InterruptStackFrame`\n --> src/interrupts.rs:2:57\n |\n2 | use x86_64::structures::idt::{InterruptDescriptorTable, InterruptStackFrame};\n | ^^^^^^^^^^^^^^^^^^^\n |\n = note: `#[warn(unused_imports)]` on by default\n\n","$message_type":"diagnostic","children":[{"children":[],"code":null,"level":"note","message":"`#[warn(unused_imports)]` on by default","rendered":null,"spans":[]},{"children":[],"code":null,"level":"help","message":"remove the unused import","rendered":null,"spans":[{"byte_end":105,"byte_start":84,"column_end":76,"column_start":55,"expansion":null,"file_name":"src/interrupts.rs","is_primary":true,"label":null,"line_end":2,"line_start":2,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","text":[{"highlight_end":76,"highlight_start":55,"text":"use x86_64::structures::idt::{InterruptDescriptorTable, InterruptStackFrame};"}]}]}],"code":{"code":"unused_imports","explanation":null},"level":"warning","message":"unused import: `InterruptStackFrame`","spans":[{"byte_end":105,"byte_start":86,"column_end":76,"column_start":57,"expansion":null,"file_name":"src/interrupts.rs","is_primary":true,"label":null,"line_end":2,"line_start":2,"suggested_replacement":null,"suggestion_applicability":null,"text":[{"highlight_end":76,"highlight_start":57,"text":"use x86_64::structures::idt::{InterruptDescriptorTable, InterruptStackFrame};"}]}]}}
{"reason":"compiler-message","package_id":"path+file:///home/grimm/coding/ScarabOS#scarab@0.1.0","manifest_path":"/home/grimm/coding/ScarabOS/Cargo.toml","target":{"kind":["staticlib"],"crate_types":["staticlib"],"name":"scarab","src_path":"/home/grimm/coding/ScarabOS/src/lib.rs","edition":"2021","doc":true,"doctest":false,"test":true},"message":{"rendered":"warning: variable does not need to be mutable\n --> src/interrupts.rs:6:13\n |\n6 | let mut idt = InterruptDescriptorTable::new();\n | ----^^^\n | |\n | help: remove this `mut`\n |\n = note: `#[warn(unused_mut)]` on by default\n\n","$message_type":"diagnostic","children":[{"children":[],"code":null,"level":"note","message":"`#[warn(unused_mut)]` on by default","rendered":null,"spans":[]},{"children":[],"code":null,"level":"help","message":"remove this `mut`","rendered":null,"spans":[{"byte_end":189,"byte_start":185,"column_end":17,"column_start":13,"expansion":null,"file_name":"src/interrupts.rs","is_primary":true,"label":null,"line_end":6,"line_start":6,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","text":[{"highlight_end":17,"highlight_start":13,"text":" let mut idt = InterruptDescriptorTable::new();"}]}]}],"code":{"code":"unused_mut","explanation":null},"level":"warning","message":"variable does not need to be mutable","spans":[{"byte_end":192,"byte_start":185,"column_end":20,"column_start":13,"expansion":null,"file_name":"src/interrupts.rs","is_primary":true,"label":null,"line_end":6,"line_start":6,"suggested_replacement":null,"suggestion_applicability":null,"text":[{"highlight_end":20,"highlight_start":13,"text":" let mut idt = InterruptDescriptorTable::new();"}]}]}}
{"reason":"compiler-message","package_id":"path+file:///home/grimm/coding/ScarabOS#scarab@0.1.0","manifest_path":"/home/grimm/coding/ScarabOS/Cargo.toml","target":{"kind":["staticlib"],"crate_types":["staticlib"],"name":"scarab","src_path":"/home/grimm/coding/ScarabOS/src/lib.rs","edition":"2021","doc":true,"doctest":false,"test":true},"message":{"rendered":"warning: 2 warnings emitted\n\n","$message_type":"diagnostic","children":[],"code":null,"level":"warning","message":"2 warnings emitted","spans":[]}}
{"reason":"compiler-artifact","package_id":"path+file:///home/grimm/coding/ScarabOS#scarab@0.1.0","manifest_path":"/home/grimm/coding/ScarabOS/Cargo.toml","target":{"kind":["staticlib"],"crate_types":["staticlib"],"name":"scarab","src_path":"/home/grimm/coding/ScarabOS/src/lib.rs","edition":"2021","doc":true,"doctest":false,"test":true},"profile":{"opt_level":"0","debuginfo":2,"debug_assertions":true,"overflow_checks":true,"test":false},"features":[],"filenames":["/home/grimm/coding/ScarabOS/target/x86_64-scarab_os/debug/deps/libscarab-aeb53d9b0747168f.rmeta"],"executable":null,"fresh":false}

View File

@@ -0,0 +1,3 @@
Signature: 8a477f597d28d172789f06886806bc55
# This file is a cache directory tag created by cargo.
# For information about cache directory tags see https://bford.info/cachedir/

View File

@@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@@ -0,0 +1 @@
24f14b6b281e0396

View File

@@ -0,0 +1 @@
{"rustc":8908927309315482140,"features":"[\"compiler-builtins-mem\"]","declared_features":"","target":7747317146343669809,"profile":12206360443249279867,"path":13511094938272109025,"deps":[[3873069036846618750,"compiler_builtins",false,6706847359268318591],[15769198103576810567,"core",false,14177146887236239996]],"local":[{"CheckDepInfo":{"dep_info":"x86_64-scarab_os/debug/.fingerprint/alloc-628cc052b207c544/dep-lib-alloc"}}],"rustflags":[],"metadata":8311380272888801894,"config":2202906307356721367,"compile_kind":561777056300942331}

View File

@@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@@ -0,0 +1 @@
3c8247a553b82e10

View File

@@ -0,0 +1 @@
{"rustc":8908927309315482140,"features":"[]","declared_features":"","target":6313009939182101684,"profile":10243973527296709326,"path":17476463656692350267,"deps":[[2874578906321136246,"alloc",true,10809516689566986532],[3873069036846618750,"compiler_builtins",true,6706847359268318591],[15769198103576810567,"core",true,14177146887236239996]],"local":[{"CheckDepInfo":{"dep_info":"x86_64-scarab_os/debug/.fingerprint/bit_field-4eb2560dc7888740/dep-lib-bit_field"}}],"rustflags":[],"metadata":17425952649129549558,"config":2202906307356721367,"compile_kind":561777056300942331}

View File

@@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@@ -0,0 +1 @@
7acbd65b7ecb03c1

View File

@@ -0,0 +1 @@
{"rustc":8908927309315482140,"features":"[]","declared_features":"","target":17263469766201294439,"profile":10243973527296709326,"path":17380761964386775035,"deps":[[2874578906321136246,"alloc",true,10809516689566986532],[3873069036846618750,"compiler_builtins",true,6706847359268318591],[15769198103576810567,"core",true,14177146887236239996]],"local":[{"CheckDepInfo":{"dep_info":"x86_64-scarab_os/debug/.fingerprint/bitflags-58ce0cdb92e58d08/dep-lib-bitflags"}}],"rustflags":[],"metadata":14564035643000669268,"config":2202906307356721367,"compile_kind":561777056300942331}

Some files were not shown because too many files have changed in this diff Show More