diff --git a/Cargo.lock b/Cargo.lock index 23c1fee11c..fde8798a56 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10,9 +10,9 @@ checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "bitflags" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" [[package]] name = "bootstrap" @@ -20,12 +20,17 @@ version = "0.0.0" dependencies = [ "hashbrown", "linked_list_allocator", - "redox-exec", "redox-initfs", + "redox-rt", "redox-scheme", "redox_syscall", ] +[[package]] +name = "generic-rt" +version = "0.1.0" +source = "git+https://gitlab.redox-os.org/redox-os/relibc.git?rev=e97f26c7#e97f26c7632b1033ca062199db5633f3236821ed" + [[package]] name = "goblin" version = "0.7.1" @@ -81,9 +86,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.21" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "plain" @@ -93,9 +98,9 @@ checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" [[package]] name = "proc-macro2" -version = "1.0.85" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22244ce15aa966053a896d1accb3a6e68469b97c7f33f284b99f0d576879fc23" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" dependencies = [ "unicode-ident", ] @@ -109,16 +114,6 @@ dependencies = [ "proc-macro2", ] -[[package]] -name = "redox-exec" -version = "0.1.0" -source = "git+https://gitlab.redox-os.org/redox-os/relibc.git#ac08f016cd3b37fae8434f2da6168542d3171ec6" -dependencies = [ - "goblin", - "plain", - "redox_syscall", -] - [[package]] name = "redox-initfs" version = "0.1.0" @@ -127,10 +122,22 @@ dependencies = [ "plain", ] +[[package]] +name = "redox-rt" +version = "0.1.0" +source = "git+https://gitlab.redox-os.org/redox-os/relibc.git?rev=e97f26c7#e97f26c7632b1033ca062199db5633f3236821ed" +dependencies = [ + "bitflags", + "generic-rt", + "goblin", + "plain", + "redox_syscall", +] + [[package]] name = "redox-scheme" -version = "0.2.0" -source = "git+https://gitlab.redox-os.org/redox-os/redox-scheme.git#62aed6c712cca31bb18078adacd27b400f5ccf93" +version = "0.2.1" +source = "git+https://gitlab.redox-os.org/redox-os/redox-scheme.git#79d9d54f572f53386981fb9b6ef054fd9e45110c" dependencies = [ "libredox", "redox_syscall", @@ -138,9 +145,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c82cf8cff14456045f55ec4241383baeff27af886adb72ffb2162f99911de0fd" +checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" dependencies = [ "bitflags", ] @@ -182,9 +189,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.66" +version = "2.0.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5" +checksum = "b146dcf730474b4bcd16c311627b31ede9ab149045db4d6088b3becaea046462" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index df541b7a2c..87c558457e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,9 +13,9 @@ crate-type = ["staticlib"] hashbrown = { version = "0.14", default-features = false, features = ["inline-more"] } linked_list_allocator = "0.10" redox-initfs = { git = "https://gitlab.redox-os.org/redox-os/redox-initfs.git", default-features = false } -redox-exec = { git = "https://gitlab.redox-os.org/redox-os/relibc.git" } -redox_syscall = "0.5.2" +redox_syscall = "0.5.3" redox-scheme = { git = "https://gitlab.redox-os.org/redox-os/redox-scheme.git" } +redox-rt = { git = "https://gitlab.redox-os.org/redox-os/relibc.git", rev = "e97f26c7" } [profile.release] panic = "abort" diff --git a/src/exec.rs b/src/exec.rs index ff942f46d8..52f69c333a 100644 --- a/src/exec.rs +++ b/src/exec.rs @@ -4,7 +4,7 @@ use alloc::vec::Vec; use syscall::{Error, EINTR}; use syscall::flag::{O_CLOEXEC, O_RDONLY}; -use redox_exec::*; +use redox_rt::proc::*; pub fn main() -> ! { let envs = { @@ -41,7 +41,7 @@ pub fn main() -> ! { spawn_initfs(core::ptr::addr_of!(__initfs_header), initfs_length.get() as usize); } const CWD: &[u8] = b"/scheme/initfs"; - let extrainfo = redox_exec::ExtraInfo { + let extrainfo = ExtraInfo { cwd: Some(CWD), sigprocmask: 0, sigignmask: 0, @@ -68,7 +68,7 @@ unsafe fn spawn_initfs(initfs_start: *const u8, initfs_length: usize) { // The write pipe will not inherit O_CLOEXEC, but is closed by the daemon later. let write = syscall::dup(read, b"write").expect("failed to open sync write pipe"); - match redox_exec::fork_impl() { + match fork_impl() { Err(err) => { panic!("Failed to fork in order to start initfs daemon: {}", err); } diff --git a/src/start.rs b/src/start.rs index 67589a179c..f8b2ec4c87 100644 --- a/src/start.rs +++ b/src/start.rs @@ -42,6 +42,8 @@ pub unsafe extern "C" fn start() -> ! { let _ = syscall::mprotect(data_start, data_end - data_start, MapFlags::PROT_READ | MapFlags::PROT_WRITE | MapFlags::MAP_PRIVATE).expect("mprotect failed for .data/.bss"); let _ = syscall::mprotect(data_end, crate::arch::STACK_START - data_end, MapFlags::PROT_READ | MapFlags::MAP_PRIVATE).expect("mprotect failed for rest of memory"); + redox_rt::initialize_freestanding(); + // FIXME make the initfs read-only crate::exec::main();