commit c40788ab652e5648301786507982a694873230ff from: Murilo Ijanc date: Mon Jan 19 01:05:51 2026 UTC add bare-metal x86_64 kernel with limine boot protocol commit - 90b4b8d036e3b3717609c3b4654d56c475d05bda commit + c40788ab652e5648301786507982a694873230ff blob - 856b9c1018b991003a26beb8e1ea058bfd8c2288 blob + 4824e4083af8142b290a4dead4a079c0d60d0198 --- Cargo.lock +++ Cargo.lock @@ -3,5 +3,14 @@ version = 4 [[package]] +name = "limine" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90b240f611eba0b43bf3e97478d87f12322c6c0f540bdad885c3e8c4a0d57333" + +[[package]] name = "omk" version = "0.1.0" +dependencies = [ + "limine", +] blob - 6d66e15b41380d748984bd1dbf817ec21392faa7 blob + 5de04df54721bbc7878b3c4d6a2aef9c405e99eb --- Cargo.toml +++ Cargo.toml @@ -4,4 +4,9 @@ version = "0.1.0" edition = "2024" authors = ["Murilo Ijanc' "] +[profile.dev] +panic = "abort" +lto = false + [dependencies] +limine = "0.6.3" blob - /dev/null blob + 1de38b2ec75bb3384096a12bc235782494d890f0 (mode 644) --- /dev/null +++ build.rs @@ -0,0 +1,22 @@ +// vim: set tw=79 cc=80 ts=4 sw=4 sts=4 et : +// +// Copyright (c) 2025-2026 Murilo Ijanc' +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// + +fn main() { + let arch = std::env::var("CARGO_CFG_TARGET_ARCH").unwrap(); + println!("cargo:rustc-link-arg=-Tlinker-{arch}.ld"); + println!("cargo:rerun-if-changed=linker-{arch}.ld"); +} blob - f1fac6b26e69c562490f924ae921d90a60b15d8c blob + 79fda87a4d008e173cc879d522d7a9ce45cda1a1 --- src/main.rs +++ src/main.rs @@ -18,7 +18,26 @@ #![no_std] #![no_main] +use limine::{BaseRevision, RequestsStartMarker, RequestsEndMarker}; + +#[used] +#[unsafe(link_section = ".requests_start")] +pub static REQUEST_START: RequestsStartMarker = RequestsStartMarker::new(); + +#[used] +#[unsafe(link_section = ".requests")] +pub static BASE_REVISION: BaseRevision = BaseRevision::new(); + +#[unsafe(no_mangle)] +pub unsafe extern "C" fn kmain() -> ! { + loop {} +} + #[panic_handler] fn panic(_info: &core::panic::PanicInfo) -> ! { loop {} } + +#[used] +#[unsafe(link_section = ".requests_end")] +pub static REQUEST_END: RequestsEndMarker = RequestsEndMarker::new(); blob - /dev/null blob + d972c8dbab331b3269e487da85e1236584c1ceae (mode 644) --- /dev/null +++ linker-x86_64.ld @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2025-2026 Murilo Ijanc' + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +OUTPUT_FORMAT(elf64-x86-64) + +ENTRY(kmain) + +PHDRS +{ + text PT_LOAD; + rodata PT_LOAD; + data PT_LOAD; +} + +SECTIONS +{ + . = 0xFFFFFFFF80000000; /* Limine topmost 2GB of address space */ + + .text : { + *(.text .text.*) + } :text + + . = ALIGN(CONSTANT(MAXPAGESIZE)); + + .rodata : { + *(.rodata .rodata.*) + } :rodata + + . = ALIGN(CONSTANT(MAXPAGESIZE)); + + .data : { + *(.data .data.*) + + KEEP(*(.requests_start)) + KEEP(*(.requests)) + KEEP(*(.requests_end)) + } :data + + .bss : { + *(.bss .bss.*) + *(COMMON) + } :data + + /DISCARD/ : { + *(.eh_frame*) + *(.note .note.*) + } +}