diff --git a/.github/workflows/clippy.yml b/.github/workflows/clippy.yml index e7c663a8e..fb4091cbf 100644 --- a/.github/workflows/clippy.yml +++ b/.github/workflows/clippy.yml @@ -16,8 +16,6 @@ jobs: name: Clippy runs-on: ubuntu-latest steps: - - name: Install cargo-binutils - run: cargo install cargo-binutils - uses: actions/checkout@v3 with: submodules: true diff --git a/.github/workflows/kvm_test.yml b/.github/workflows/kvm_test.yml index 7cbf45281..468f81402 100644 --- a/.github/workflows/kvm_test.yml +++ b/.github/workflows/kvm_test.yml @@ -17,8 +17,6 @@ jobs: runs-on: [self-hosted] steps: - - name: Install cargo-binutils - run: cargo install cargo-binutils - uses: actions/checkout@v3 with: submodules: true diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index fac7e586c..dd4793f00 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -18,8 +18,6 @@ jobs: run: | sudo apt-get update sudo apt-get install nasm - - name: Install cargo-binutils - run: cargo install cargo-binutils - uses: actions/checkout@v3 with: submodules: true diff --git a/.github/workflows/publish_docs.yml b/.github/workflows/publish_docs.yml index 16e6b70c9..8ae15c390 100644 --- a/.github/workflows/publish_docs.yml +++ b/.github/workflows/publish_docs.yml @@ -12,8 +12,6 @@ jobs: publish_docs: runs-on: ubuntu-latest steps: - - name: Install cargo-binutils - run: cargo install cargo-binutils - name: Checkout code uses: actions/checkout@v3 with: diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 124cf8888..88617c4a6 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -39,8 +39,6 @@ jobs: choco install qemu nasm make echo "C:\Program Files\qemu" >> $GITHUB_PATH echo "C:\Program Files\NASM" >> $GITHUB_PATH - - name: Install cargo-binutils - run: cargo install cargo-binutils - uses: actions/checkout@v3 with: submodules: true diff --git a/Dockerfile b/Dockerfile index 6c9c51144..9b9fc9b8f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,7 +9,6 @@ RUN apt-get update && \ # Install Rust toolchain RUN curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain nightly --profile minimal RUN /root/.cargo/bin/rustup component add llvm-tools-preview -RUN /root/.cargo/bin/cargo install cargo-binutils ENV PATH="/root/.cargo/bin:/root/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/bin/:${PATH}" ENV EDITOR=vim diff --git a/README.md b/README.md index 9dac44872..3d4203f03 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,6 @@ rustup default nightly Further requirements are the source code of the Rust runtime and llvm-tools: ```sh -cargo install cargo-binutils rustup component add rust-src rustup component add llvm-tools-preview ``` diff --git a/hermit-sys/aarch64-duplicate-symbols b/hermit-sys/aarch64-duplicate-symbols deleted file mode 100644 index 6092337c4..000000000 --- a/hermit-sys/aarch64-duplicate-symbols +++ /dev/null @@ -1,108 +0,0 @@ -__adddf3 -__addsf3 -__ashldi3 -__ashlsi3 -__ashlti3 -__ashrdi3 -__ashrsi3 -__ashrti3 -__clzsi2 -__divdf3 -__divdi3 -__divmoddi4 -__divmodsi4 -__divmodti4 -__divsf3 -__divsi3 -__divti3 -__eqdf2 -__eqsf2 -__extendsfdf2 -__fixdfdi -__fixdfsi -__fixdfti -__fixsfdi -__fixsfsi -__fixsfti -__fixunsdfdi -__fixunsdfsi -__fixunsdfti -__fixunssfdi -__fixunssfsi -__fixunssfti -__floatdidf -__floatdisf -__floatsidf -__floatsisf -__floattidf -__floattisf -__floatundidf -__floatundisf -__floatunsidf -__floatunsisf -__floatuntidf -__floatuntisf -__gedf2 -__gesf2 -__gtdf2 -__gtsf2 -__ledf2 -__lesf2 -__llvm_memcpy_element_unordered_atomic_1 -__llvm_memcpy_element_unordered_atomic_16 -__llvm_memcpy_element_unordered_atomic_2 -__llvm_memcpy_element_unordered_atomic_4 -__llvm_memcpy_element_unordered_atomic_8 -__llvm_memmove_element_unordered_atomic_1 -__llvm_memmove_element_unordered_atomic_16 -__llvm_memmove_element_unordered_atomic_2 -__llvm_memmove_element_unordered_atomic_4 -__llvm_memmove_element_unordered_atomic_8 -__llvm_memset_element_unordered_atomic_1 -__llvm_memset_element_unordered_atomic_16 -__llvm_memset_element_unordered_atomic_2 -__llvm_memset_element_unordered_atomic_4 -__llvm_memset_element_unordered_atomic_8 -__lshrdi3 -__lshrsi3 -__lshrti3 -__ltdf2 -__ltsf2 -__moddi3 -__modsi3 -__modti3 -__muldf3 -__muldi3 -__mulodi4 -__mulosi4 -__muloti4 -__mulsf3 -__multi3 -__nedf2 -__nesf2 -__powidf2 -__powisf2 -__rust_i128_add -__rust_i128_addo -__rust_i128_mulo -__rust_i128_sub -__rust_i128_subo -__rust_u128_add -__rust_u128_addo -__rust_u128_mulo -__rust_u128_sub -__rust_u128_subo -__subdf3 -__subsf3 -__truncdfsf2 -__udivdi3 -__udivmoddi4 -__udivmodsi4 -__udivmodti4 -__udivsi3 -__udivti3 -__umoddi3 -__umodsi3 -__umodti3 -__unorddf2 -__unordsf2 \ No newline at end of file diff --git a/hermit-sys/build.rs b/hermit-sys/build.rs index e105c73ee..e8dfcdd10 100644 --- a/hermit-sys/build.rs +++ b/hermit-sys/build.rs @@ -1,7 +1,6 @@ -use std::borrow::Cow; use std::env; -use std::ffi::{OsStr, OsString}; -use std::path::{Path, PathBuf}; +use std::ffi::OsStr; +use std::path::PathBuf; use std::process::Command; use flate2::read::GzDecoder; @@ -64,32 +63,36 @@ impl KernelSrc { "kernel manifest path `{}` does not exist", manifest_path.display() ); - let user_target = env::var("TARGET").unwrap(); + let arch = env::var_os("CARGO_CFG_TARGET_ARCH").unwrap(); let profile = env::var("PROFILE").expect("PROFILE was not set"); - let kernel_target = match user_target.as_str() { - "x86_64-unknown-hermit" => "x86_64-unknown-none-hermitkernel", - "aarch64-unknown-hermit" => "aarch64-unknown-none-hermitkernel", - _ => panic!("Unsupported target: {}", user_target), - }; - let mut cmd = Command::new("cargo"); + + // Remove rust-toolchain-specific environment variables from kernel cargo + cmd.env_remove("LD_LIBRARY_PATH"); + env::vars() + .filter(|(key, _value)| key.starts_with("CARGO") || key.starts_with("RUST")) + .for_each(|(key, _value)| { + cmd.env_remove(&key); + }); + cmd.current_dir(&self.src_dir) + .arg("xtask") .arg("build") - .arg("-Z") - .arg("build-std=core,alloc") - .args(&["--target", kernel_target]) - .arg("--manifest-path") - .arg("Cargo.toml") + .arg("--arch") + .arg(&arch) + .args(&[ + "--profile", + match profile.as_str() { + "debug" => "dev", + profile => profile, + }, + ]) .arg("--target-dir") .arg(&target_dir); - cmd.env_remove("RUSTUP_TOOLCHAIN"); - - cmd.env("CARGO_TERM_COLOR", "always"); - - if profile == "release" { - cmd.arg("--release"); + if has_feature("instrument") { + cmd.arg("--instrument-mcount"); } // Control enabled features via this crate's features @@ -99,55 +102,10 @@ impl KernelSrc { ["acpi", "fsgsbase", "pci", "smp", "vga"].into_iter(), ); - let mut rustflags = vec!["-Zmutable-noalias=no".to_string()]; - let outer_rustflags = env::var("CARGO_ENCODED_RUSTFLAGS").unwrap(); - - if has_feature("instrument") { - rustflags.push("-Zinstrument-mcount".to_string()); - // Add outer rustflags to command - rustflags.push(outer_rustflags); - } else { - // If the `instrument` feature feature is not enabled, - // filter it from outer rustflags before adding them to the command. - if !outer_rustflags.is_empty() { - let flags = outer_rustflags - .split('\x1f') - .filter(|&flag| !flag.contains("instrument-mcount")) - .map(String::from); - rustflags.extend(flags); - } - } - - cmd.env("CARGO_ENCODED_RUSTFLAGS", rustflags.join("\x1f")); - let status = cmd.status().expect("failed to start kernel build"); assert!(status.success()); - let lib_location = target_dir - .join(kernel_target) - .join(&profile) - .canonicalize() - .unwrap(); - - println!("Lib location: {}", lib_location.display()); - - let lib = lib_location.join("libhermit.a"); - - let mut symbols = vec!["rust_begin_unwind", "rust_oom"]; - - match kernel_target { - "x86_64-unknown-none-hermitkernel" => { - symbols.extend(include_str!("x86_64-duplicate-symbols").lines()) - } - "aarch64-unknown-none-hermitkernel" => { - symbols.extend(include_str!("aarch64-duplicate-symbols").lines()) - } - _ => (), - } - - // Kernel and user space has its own versions of panic handler, oom handler, memcpy, memset, etc, - // Consequently, we rename the functions in the libos to avoid collisions. - rename_symbols(symbols.iter(), &lib); + let lib_location = target_dir.join(arch).join(&profile).canonicalize().unwrap(); println!("cargo:rustc-link-search=native={}", lib_location.display()); println!("cargo:rustc-link-lib=static=hermit"); @@ -185,20 +143,3 @@ fn forward_features<'a>(cmd: &mut Command, features: impl Iterator>, lib: &Path) { - let args = symbols.into_iter().flat_map(|symbol| { - let option = OsStr::new("--redefine-sym"); - let arg = [symbol.as_ref(), "=kernel-".as_ref(), symbol.as_ref()] - .into_iter() - .collect::(); - [Cow::Borrowed(option), Cow::Owned(arg)] - }); - - let status = Command::new("rust-objcopy") - .args(args) - .arg(lib) - .status() - .expect("Failed to execute rust-objcopy. Is cargo-binutils installed?"); - assert!(status.success(), "rust-objcopy was not successful"); -} diff --git a/hermit-sys/x86_64-duplicate-symbols b/hermit-sys/x86_64-duplicate-symbols deleted file mode 100644 index 562aa28c3..000000000 --- a/hermit-sys/x86_64-duplicate-symbols +++ /dev/null @@ -1,106 +0,0 @@ -__addsf3 -__adddf3 -__ashlsi3 -__ashrsi3 -__ashldi3 -__ashrdi3 -__ashlti3 -__ashrti3 -__clzsi2 -__divmoddi4 -__divmodsi4 -__divmodti4 -__divti3 -__divsf3 -__divdf3 -__divdi3 -__divsi3 -__eqsf2 -__eqdf2 -__extendsfdf2 -__gedf2 -__gtsf2 -__gtdf2 -__gesf2 -__fixdfti -__fixdfdi -__fixsfsi -__fixsfti -__fixunsdfdi -__fixunssfsi -__fixunssfdi -__fixunsdfsi -__fixunssfti -__fixunsdfti -__fixsfdi -__fixdfsi -__floatuntidf -__floatunsisf -__floatundisf -__floatuntisf -__floatundidf -__floatunsidf -__floattisf -__floattidf -__floatdidf -__floatdisf -__floatsisf -__floatsidf -__ledf2 -__lesf2 -__llvm_memcpy_element_unordered_atomic_1 -__llvm_memcpy_element_unordered_atomic_2 -__llvm_memcpy_element_unordered_atomic_4 -__llvm_memcpy_element_unordered_atomic_8 -__llvm_memset_element_unordered_atomic_1 -__llvm_memset_element_unordered_atomic_2 -__llvm_memset_element_unordered_atomic_4 -__llvm_memset_element_unordered_atomic_8 -__llvm_memmove_element_unordered_atomic_1 -__llvm_memmove_element_unordered_atomic_2 -__llvm_memmove_element_unordered_atomic_4 -__llvm_memmove_element_unordered_atomic_8 -__lshrti3 -__lshrdi3 -__lshrsi3 -__ltdf2 -__ltsf2 -__modti3 -__modsi3 -__multi3 -__muldi3 -__muloti4 -__mulodi4 -__muldf3 -__mulsf3 -__mulosi4 -__moddi3 -__nedf2 -__nesf2 -__powisf2 -__powidf2 -__rust_i128_add -__rust_i128_addo -__rust_i128_sub -__rust_i128_subo -__rust_i128_mulo -__rust_u128_add -__rust_u128_addo -__rust_u128_sub -__rust_u128_subo -__rust_u128_mulo -__rust_probestack -__subsf3 -__subdf3 -__truncdfsf2 -__umoddi3 -__umodti3 -__umodsi3 -__unordsf2 -__unorddf2 -__udivmodti4 -__udivmoddi4 -__udivmodsi4 -__udivsi3 -__udivdi3 -__udivti3 diff --git a/libhermit-rs b/libhermit-rs index 6d42af297..185570051 160000 --- a/libhermit-rs +++ b/libhermit-rs @@ -1 +1 @@ -Subproject commit 6d42af297de6ad7a1cfba7ab804782166d931d37 +Subproject commit 18557005162b4a8ac5bfabd1a6c12e3fbb02f75d