From 2db2d10cce5819444b433d27a760d8c35e6a30da Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Thu, 10 Nov 2016 20:02:51 -0700 Subject: [PATCH 1/6] Switch to real standard, fix daemonization on real standard --- Makefile | 14 +++++++------- drivers/ahcid/src/main.rs | 7 ++++--- drivers/e1000d/src/main.rs | 7 ++++--- drivers/ps2d/src/main.rs | 7 ++++--- drivers/rtl8168d/src/main.rs | 7 ++++--- drivers/vesad/src/main.rs | 7 ++++--- schemes/ethernetd/src/main.rs | 6 +++--- schemes/example/src/main.rs | 6 +++--- schemes/ipd/src/main.rs | 7 ++++--- schemes/ptyd/src/main.rs | 7 ++++--- schemes/randd/src/main.rs | 6 +++--- schemes/redoxfs | 2 +- schemes/tcpd/src/main.rs | 7 ++++--- schemes/udpd/src/main.rs | 7 ++++--- x86_64-unknown-redox.json | 3 ++- 15 files changed, 55 insertions(+), 45 deletions(-) diff --git a/Makefile b/Makefile index 3263c47..c073cc9 100644 --- a/Makefile +++ b/Makefile @@ -182,7 +182,7 @@ else %.list: % objdump -C -M intel -D $< > $@ -$(KBUILD)/harddrive.bin: $(KBUILD)/kernel $(BUILD)/filesystem.bin bootloader/$(ARCH)/** +$(KBUILD)/harddrive.bin: $(KBUILD)/kernel bootloader/$(ARCH)/** $(BUILD)/filesystem.bin nasm -f bin -o $@ -D ARCH_$(ARCH) -ibootloader/$(ARCH)/ bootloader/$(ARCH)/harddrive.asm qemu: $(KBUILD)/harddrive.bin @@ -280,13 +280,13 @@ $(BUILD)/libopenlibm.a: libstd/openlibm/libopenlibm.a mkdir -p $(BUILD) cp $< $@ -$(BUILD)/libstd.rlib: libstd/Cargo.toml libstd/src/** $(BUILD)/libcore.rlib $(BUILD)/liballoc.rlib $(BUILD)/librustc_unicode.rlib $(BUILD)/libcollections.rlib $(BUILD)/librand.rlib $(BUILD)/libopenlibm.a - $(CARGO) rustc --verbose --manifest-path $< $(CARGOFLAGS) -o $@ - cp libstd/target/$(TARGET)/release/deps/*.rlib $(BUILD) - -#$(BUILD)/libstd.rlib: libstd_real/Cargo.toml rust/src/libstd/** $(BUILD)/libcore.rlib $(BUILD)/liballoc.rlib $(BUILD)/librustc_unicode.rlib $(BUILD)/libcollections.rlib $(BUILD)/librand.rlib $(BUILD)/libopenlibm.a +#$(BUILD)/libstd.rlib: libstd/Cargo.toml libstd/src/** $(BUILD)/libcore.rlib $(BUILD)/liballoc.rlib $(BUILD)/librustc_unicode.rlib $(BUILD)/libcollections.rlib $(BUILD)/librand.rlib $(BUILD)/libopenlibm.a # $(CARGO) rustc --verbose --manifest-path $< $(CARGOFLAGS) -o $@ -# cp libstd_real/target/$(TARGET)/release/deps/*.rlib $(BUILD) +# cp libstd/target/$(TARGET)/release/deps/*.rlib $(BUILD) + +$(BUILD)/libstd.rlib: libstd_real/Cargo.toml rust/src/libstd/** $(BUILD)/libcore.rlib $(BUILD)/liballoc.rlib $(BUILD)/librustc_unicode.rlib $(BUILD)/libcollections.rlib $(BUILD)/librand.rlib $(BUILD)/libopenlibm.a + $(CARGO) rustc --verbose --manifest-path $< $(CARGOFLAGS) -o $@ + cp libstd_real/target/$(TARGET)/release/deps/*.rlib $(BUILD) initfs/bin/%: drivers/%/Cargo.toml drivers/%/src/** $(BUILD)/libstd.rlib mkdir -p initfs/bin diff --git a/drivers/ahcid/src/main.rs b/drivers/ahcid/src/main.rs index 0bad322..bd8f699 100644 --- a/drivers/ahcid/src/main.rs +++ b/drivers/ahcid/src/main.rs @@ -7,7 +7,7 @@ extern crate io; extern crate spin; extern crate syscall; -use std::{env, thread, usize}; +use std::{env, usize}; use std::fs::File; use std::io::{Read, Write}; use std::os::unix::io::{AsRawFd, FromRawFd}; @@ -29,7 +29,8 @@ fn main() { print!("{}", format!(" + AHCI on: {:X} IRQ: {}\n", bar, irq)); - thread::spawn(move || { + // Daemonize + if unsafe { syscall::clone(0).unwrap() } == 0 { let address = unsafe { syscall::physmap(bar, 4096, MAP_WRITE).expect("ahcid: failed to map address") }; { let socket_fd = syscall::open(":disk", syscall::O_RDWR | syscall::O_CREAT | syscall::O_NONBLOCK).expect("ahcid: failed to create disk scheme"); @@ -69,5 +70,5 @@ fn main() { } } unsafe { let _ = syscall::physunmap(address); } - }); + } } diff --git a/drivers/e1000d/src/main.rs b/drivers/e1000d/src/main.rs index f3baf1b..d199ff9 100644 --- a/drivers/e1000d/src/main.rs +++ b/drivers/e1000d/src/main.rs @@ -6,7 +6,7 @@ extern crate netutils; extern crate syscall; use std::cell::RefCell; -use std::{env, thread}; +use std::env; use std::fs::File; use std::io::{Read, Write, Result}; use std::os::unix::io::{AsRawFd, FromRawFd}; @@ -29,7 +29,8 @@ fn main() { print!("{}", format!(" + E1000 on: {:X}, IRQ: {}\n", bar, irq)); - thread::spawn(move || { + // Daemonize + if unsafe { syscall::clone(0).unwrap() } == 0 { let socket_fd = syscall::open(":network", syscall::O_RDWR | syscall::O_CREAT | syscall::O_NONBLOCK).expect("e1000d: failed to create network scheme"); let socket = Arc::new(RefCell::new(unsafe { File::from_raw_fd(socket_fd) })); @@ -128,5 +129,5 @@ fn main() { } } unsafe { let _ = syscall::physunmap(address); } - }); + } } diff --git a/drivers/ps2d/src/main.rs b/drivers/ps2d/src/main.rs index 8ff0733..7c67bd3 100644 --- a/drivers/ps2d/src/main.rs +++ b/drivers/ps2d/src/main.rs @@ -11,7 +11,7 @@ use std::env; use std::fs::File; use std::io::{Read, Write, Result}; use std::os::unix::io::AsRawFd; -use std::{mem, thread}; +use std::mem; use event::EventQueue; use orbclient::{KeyEvent, MouseEvent}; @@ -123,7 +123,8 @@ impl<'a> Ps2d<'a> { } fn main() { - thread::spawn(|| { + // Daemonize + if unsafe { syscall::clone(0).unwrap() } == 0 { unsafe { iopl(3).expect("ps2d: failed to get I/O permission"); asm!("cli" : : : : "intel", "volatile"); @@ -188,5 +189,5 @@ fn main() { let (keyboard, data) = event_queue.run().expect("ps2d: failed to handle events"); ps2d.handle(keyboard, data); } - }); + } } diff --git a/drivers/rtl8168d/src/main.rs b/drivers/rtl8168d/src/main.rs index 00d6f33..1198286 100644 --- a/drivers/rtl8168d/src/main.rs +++ b/drivers/rtl8168d/src/main.rs @@ -7,7 +7,7 @@ extern crate netutils; extern crate syscall; use std::cell::RefCell; -use std::{env, thread}; +use std::env; use std::fs::File; use std::io::{Read, Write, Result}; use std::os::unix::io::{AsRawFd, FromRawFd}; @@ -30,7 +30,8 @@ fn main() { print!("{}", format!(" + RTL8168 on: {:X}, IRQ: {}\n", bar, irq)); - thread::spawn(move || { + // Daemonize + if unsafe { syscall::clone(0).unwrap() } == 0 { let socket_fd = syscall::open(":network", syscall::O_RDWR | syscall::O_CREAT | syscall::O_NONBLOCK).expect("rtl8168d: failed to create network scheme"); let socket = Arc::new(RefCell::new(unsafe { File::from_raw_fd(socket_fd) })); @@ -133,5 +134,5 @@ fn main() { } } unsafe { let _ = syscall::physunmap(address); } - }); + } } diff --git a/drivers/vesad/src/main.rs b/drivers/vesad/src/main.rs index b9defbf..7f4347a 100644 --- a/drivers/vesad/src/main.rs +++ b/drivers/vesad/src/main.rs @@ -6,7 +6,7 @@ extern crate alloc; extern crate orbclient; extern crate syscall; -use std::{env, mem, thread}; +use std::{env, mem}; use std::fs::File; use std::io::{Read, Write}; use syscall::{physmap, physunmap, Packet, SchemeMut, EVENT_READ, MAP_WRITE, MAP_WRITE_COMBINE}; @@ -49,7 +49,8 @@ fn main() { } if physbaseptr > 0 { - thread::spawn(move || { + // Daemonize + if unsafe { syscall::clone(0).unwrap() } == 0 { let mut socket = File::create(":display").expect("vesad: failed to create display scheme"); let size = width * height; @@ -103,6 +104,6 @@ fn main() { } } } - }); + } } } diff --git a/schemes/ethernetd/src/main.rs b/schemes/ethernetd/src/main.rs index a238aee..66357b6 100644 --- a/schemes/ethernetd/src/main.rs +++ b/schemes/ethernetd/src/main.rs @@ -8,7 +8,6 @@ use std::fs::File; use std::io::{Result, Read, Write}; use std::os::unix::io::FromRawFd; use std::rc::Rc; -use std::thread; use syscall::{Packet, SchemeMut, EWOULDBLOCK}; @@ -17,7 +16,8 @@ use scheme::EthernetScheme; mod scheme; fn main() { - thread::spawn(move || { + // Daemonize + if unsafe { syscall::clone(0).unwrap() } == 0 { let network_fd = syscall::open("network:", syscall::O_RDWR | syscall::O_NONBLOCK).expect("ethernetd: failed to open network"); let network = unsafe { File::from_raw_fd(network_fd) }; @@ -90,5 +90,5 @@ fn main() { event_queue.trigger_all(0).expect("ethernetd: failed to trigger events"); event_queue.run().expect("ethernetd: failed to run event loop"); - }); + } } diff --git a/schemes/example/src/main.rs b/schemes/example/src/main.rs index 94db5d1..1ba8d59 100644 --- a/schemes/example/src/main.rs +++ b/schemes/example/src/main.rs @@ -3,7 +3,6 @@ extern crate syscall; use std::fs::File; use std::io::{Read, Write}; use std::str; -use std::thread; use syscall::{Packet, Result, Scheme}; @@ -25,7 +24,8 @@ impl Scheme for ExampleScheme { } fn main(){ - thread::spawn(move || { + // Daemonize + if unsafe { syscall::clone(0).unwrap() } == 0 { let mut socket = File::create(":example").expect("example: failed to create example scheme"); let scheme = ExampleScheme; loop { @@ -35,5 +35,5 @@ fn main(){ scheme.handle(&mut packet); socket.write(&packet).expect("example: failed to write responses to example scheme"); } - }); + } } diff --git a/schemes/ipd/src/main.rs b/schemes/ipd/src/main.rs index 96b6d62..093dce5 100644 --- a/schemes/ipd/src/main.rs +++ b/schemes/ipd/src/main.rs @@ -10,7 +10,7 @@ use std::fs::File; use std::io::{self, Read, Write}; use std::os::unix::io::FromRawFd; use std::rc::Rc; -use std::{slice, str, thread}; +use std::{slice, str}; use syscall::data::Packet; use syscall::error::{Error, Result, EACCES, EADDRNOTAVAIL, EBADF, EIO, EINVAL, ENOENT, EWOULDBLOCK}; use syscall::flag::{EVENT_READ, O_NONBLOCK}; @@ -326,7 +326,8 @@ impl SchemeMut for Ipd { } fn main() { - thread::spawn(move || { + // Daemonize + if unsafe { syscall::clone(0).unwrap() } == 0 { let scheme_fd = syscall::open(":ip", syscall::O_RDWR | syscall::O_CREAT | syscall::O_NONBLOCK).expect("ipd: failed to create :ip"); let scheme_file = unsafe { File::from_raw_fd(scheme_fd) }; @@ -367,5 +368,5 @@ fn main() { event_queue.trigger_all(0).expect("ipd: failed to trigger event queue"); event_queue.run().expect("ipd: failed to run event queue"); - }); + } } diff --git a/schemes/ptyd/src/main.rs b/schemes/ptyd/src/main.rs index 4d4c649..28f058d 100644 --- a/schemes/ptyd/src/main.rs +++ b/schemes/ptyd/src/main.rs @@ -7,7 +7,7 @@ use std::collections::{BTreeMap, VecDeque}; use std::fs::File; use std::io::{Read, Write}; use std::rc::{Rc, Weak}; -use std::{str, thread}; +use std::str; use syscall::data::Packet; use syscall::error::{Error, Result, EBADF, EINVAL, ENOENT, EPIPE, EWOULDBLOCK}; @@ -289,7 +289,8 @@ impl PtySlave { } fn main(){ - thread::spawn(move || { + // Daemonize + if unsafe { syscall::clone(0).unwrap() } == 0 { let mut socket = File::create(":pty").expect("pty: failed to create pty scheme"); let mut scheme = PtyScheme::new(); let mut todo = Vec::new(); @@ -375,5 +376,5 @@ fn main(){ } } } - }); + } } diff --git a/schemes/randd/src/main.rs b/schemes/randd/src/main.rs index b390414..116c664 100644 --- a/schemes/randd/src/main.rs +++ b/schemes/randd/src/main.rs @@ -7,7 +7,6 @@ extern crate rand; use std::fs::File; use std::io::{Read, Write}; -use std::thread; use rand::chacha::ChaChaRng; use rand::Rng; @@ -51,7 +50,8 @@ impl SchemeMut for RandScheme { fn main(){ let has_rdrand = CpuId::new().get_feature_info().unwrap().has_rdrand(); - thread::spawn(move || { + // Daemonize + if unsafe { syscall::clone(0).unwrap() } == 0 { let mut socket = File::create(":rand").expect("rand: failed to create rand scheme"); let mut rng = ChaChaRng::new_unseeded(); @@ -78,5 +78,5 @@ fn main(){ scheme.handle(&mut packet); socket.write(&packet).expect("rand: failed to write responses to rand scheme"); } - }); + } } diff --git a/schemes/redoxfs b/schemes/redoxfs index d058e56..8449c5b 160000 --- a/schemes/redoxfs +++ b/schemes/redoxfs @@ -1 +1 @@ -Subproject commit d058e56d6e9dbc2fb95bcdc335bf2da04c3d56eb +Subproject commit 8449c5b6ad87ced01bcb82627cb85a8981337210 diff --git a/schemes/tcpd/src/main.rs b/schemes/tcpd/src/main.rs index 847acb1..8c7e16e 100644 --- a/schemes/tcpd/src/main.rs +++ b/schemes/tcpd/src/main.rs @@ -8,7 +8,7 @@ use std::collections::{BTreeMap, VecDeque}; use std::cell::RefCell; use std::fs::File; use std::io::{self, Read, Write}; -use std::{mem, slice, str, thread}; +use std::{mem, slice, str}; use std::os::unix::io::FromRawFd; use std::rc::Rc; @@ -652,7 +652,8 @@ impl SchemeMut for Tcpd { } fn main() { - thread::spawn(move || { + // Daemonize + if unsafe { syscall::clone(0).unwrap() } == 0 { let scheme_fd = syscall::open(":tcp", O_RDWR | O_CREAT | O_NONBLOCK).expect("tcpd: failed to create :tcp"); let scheme_file = unsafe { File::from_raw_fd(scheme_fd) }; @@ -677,5 +678,5 @@ fn main() { event_queue.trigger_all(0).expect("tcpd: failed to trigger event queue"); event_queue.run().expect("tcpd: failed to run event queue"); - }); + } } diff --git a/schemes/udpd/src/main.rs b/schemes/udpd/src/main.rs index ba43abf..7b39eec 100644 --- a/schemes/udpd/src/main.rs +++ b/schemes/udpd/src/main.rs @@ -8,7 +8,7 @@ use std::collections::{BTreeMap, VecDeque}; use std::cell::RefCell; use std::fs::File; use std::io::{self, Read, Write}; -use std::{mem, slice, str, thread}; +use std::{mem, slice, str}; use std::os::unix::io::FromRawFd; use std::rc::Rc; @@ -319,7 +319,8 @@ impl SchemeMut for Udpd { } fn main() { - thread::spawn(move || { + // Daemonize + if unsafe { syscall::clone(0).unwrap() } == 0 { let scheme_fd = syscall::open(":udp", O_RDWR | O_CREAT | O_NONBLOCK).expect("udpd: failed to create :udp"); let scheme_file = unsafe { File::from_raw_fd(scheme_fd) }; @@ -344,5 +345,5 @@ fn main() { event_queue.trigger_all(0).expect("udpd: failed to trigger event queue"); event_queue.run().expect("udpd: failed to run event queue"); - }); + } } diff --git a/x86_64-unknown-redox.json b/x86_64-unknown-redox.json index 8878e06..49d7037 100644 --- a/x86_64-unknown-redox.json +++ b/x86_64-unknown-redox.json @@ -22,5 +22,6 @@ "no-compiler-rt": true, "no-default-libraries": true, "position-independent-executables": false, - "has-elf-tls": true + "has-elf-tls": true, + "panic-strategy": "abort" } From 7bbd3bd1bc762382207ffcd9ceecaff64b879d3c Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Thu, 10 Nov 2016 20:09:45 -0700 Subject: [PATCH 2/6] Update submodules --- programs/netutils | 2 +- programs/orbutils | 2 +- programs/userutils | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/programs/netutils b/programs/netutils index f6aea44..9284d79 160000 --- a/programs/netutils +++ b/programs/netutils @@ -1 +1 @@ -Subproject commit f6aea44415a2efed9d6a95c09d824748b6a279b1 +Subproject commit 9284d796fcc8db4bc16cb4d283750453bba202b5 diff --git a/programs/orbutils b/programs/orbutils index 53c93e1..5b9af03 160000 --- a/programs/orbutils +++ b/programs/orbutils @@ -1 +1 @@ -Subproject commit 53c93e176ba2e1fb9c0766fd982af7e11a72715c +Subproject commit 5b9af032b6bb34429fc0a7e54b332fcd12c1c87c diff --git a/programs/userutils b/programs/userutils index 61203b6..48938fa 160000 --- a/programs/userutils +++ b/programs/userutils @@ -1 +1 @@ -Subproject commit 61203b6a72dae7e27c173e95521a8ab46f2d76d2 +Subproject commit 48938fa3fd32e0822df94b1fd19277c3c7bf47b2 From 2d853ed622ffbff6c8c1c689d5bd498e2e0c386b Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Thu, 10 Nov 2016 20:22:43 -0700 Subject: [PATCH 3/6] Remove --cfg redox --- Makefile | 4 ++-- libstd | 2 +- rust | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index c073cc9..ddf5911 100644 --- a/Makefile +++ b/Makefile @@ -13,10 +13,10 @@ KCARGOFLAGS=--target $(KTARGET).json --release -- -C soft-float TARGET=$(ARCH)-unknown-redox BUILD=build/userspace RUSTC=./rustc.sh -RUSTCFLAGS=--target $(TARGET).json -C opt-level=2 -C debuginfo=0 --cfg redox +RUSTCFLAGS=--target $(TARGET).json -C opt-level=2 -C debuginfo=0 RUSTDOC=./rustdoc.sh CARGO=RUSTC="$(RUSTC)" RUSTDOC="$(RUSTDOC)" cargo -CARGOFLAGS=--target $(TARGET).json --release -- --cfg redox +CARGOFLAGS=--target $(TARGET).json --release -- # Default targets .PHONY: all clean doc ref update qemu bochs drivers schemes coreutils extrautils netutils userutils wireshark FORCE diff --git a/libstd b/libstd index c98bf6a..166a1f0 160000 --- a/libstd +++ b/libstd @@ -1 +1 @@ -Subproject commit c98bf6a5038229eb7eda07068f6d5d6c0b061253 +Subproject commit 166a1f0a468205c7166791563d00e663559a8e93 diff --git a/rust b/rust index 79a8c27..25e1a4a 160000 --- a/rust +++ b/rust @@ -1 +1 @@ -Subproject commit 79a8c272fb8ad09600ef58ff223c73eb44343040 +Subproject commit 25e1a4a0084a56807d7a1e4ca676e078c085b3aa From 97f333506c3def9d3c0eaae8bcfa6587f12c8b98 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Thu, 10 Nov 2016 21:08:11 -0700 Subject: [PATCH 4/6] Update rust, syscall --- rust | 2 +- syscall | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/rust b/rust index 25e1a4a..0bb9a95 160000 --- a/rust +++ b/rust @@ -1 +1 @@ -Subproject commit 25e1a4a0084a56807d7a1e4ca676e078c085b3aa +Subproject commit 0bb9a959074bb7f027cf05a240a0044116fa0ab0 diff --git a/syscall b/syscall index 2d238fa..07b50b1 160000 --- a/syscall +++ b/syscall @@ -1 +1 @@ -Subproject commit 2d238fada7e11972693f9e767dfda571e7afe66d +Subproject commit 07b50b1a81caf2ce0eae0029dd4385820a5a200e From 3ff26c938f065bf0894700aaf8355c075155ccf5 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Thu, 10 Nov 2016 21:10:43 -0700 Subject: [PATCH 5/6] Update submodules --- programs/orbutils | 2 +- programs/userutils | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/programs/orbutils b/programs/orbutils index 5b9af03..cf0eaa0 160000 --- a/programs/orbutils +++ b/programs/orbutils @@ -1 +1 @@ -Subproject commit 5b9af032b6bb34429fc0a7e54b332fcd12c1c87c +Subproject commit cf0eaa0408e0857ac88a786c4be0ecc057258ed3 diff --git a/programs/userutils b/programs/userutils index 48938fa..b59deda 160000 --- a/programs/userutils +++ b/programs/userutils @@ -1 +1 @@ -Subproject commit 48938fa3fd32e0822df94b1fd19277c3c7bf47b2 +Subproject commit b59deda452107efba3bca63c7310b018506d53ff From 4933a69f54d7830054a8756480a2aa17ff339a70 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Fri, 11 Nov 2016 21:21:07 -0700 Subject: [PATCH 6/6] Update orbutils --- programs/orbutils | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/programs/orbutils b/programs/orbutils index cf0eaa0..a2d1b4d 160000 --- a/programs/orbutils +++ b/programs/orbutils @@ -1 +1 @@ -Subproject commit cf0eaa0408e0857ac88a786c4be0ecc057258ed3 +Subproject commit a2d1b4d4eab6c1057afbbf793807b25aed820748