Skip to content

Commit

Permalink
linux_testing: enable Rust by default for aarch64-linux
Browse files Browse the repository at this point in the history
The first assumption[1] we had was that the `aarch64-unknown-none`
target was missing from rustc and that this was the cause for the
regression.

However, it turns out that the relevant code from `rustc` wasn't used
anyways because the Makefile does `--sysroot /dev/null`[2] which prevents
rustc from using its own libcore. So luckily we don't have to patch the
Rust bootstrap to get aarch64-linux back working[3].

In fact, the Rust part seems broken for both 6.10 and 6.11[4], but I
decided to not bother since none of those are longterm versions.

So what's left here?

* Enabling Rust for aarch64-linux because it clearly works[5].

* Turning off NFS_LOCALIO for aarch6y4-linux because breaks the build
  like this:

      /nix/store/f3k0rdhcd2cx57phx755c2xixgifw5m5-binutils-2.42/bin/ld: Unexpected GOT/PLT entries detected!
      /nix/store/f3k0rdhcd2cx57phx755c2xixgifw5m5-binutils-2.42/bin/ld: Unexpected run-time procedure linkages detected!
      /nix/store/f3k0rdhcd2cx57phx755c2xixgifw5m5-binutils-2.42/bin/ld: fs/nfs/localio.o: in function `nfs_local_iocb_alloc':
      /build/source/build/../fs/nfs/localio.c:290:(.text+0x324): undefined reference to `nfs_to'
      [...]

[1] NixOS#315121 (comment)
[2] https://lore.kernel.org/all/20231031201752.1189213-1-mmaurer@google.com/
[3] Of course I only realized this _after_ I spent some time hacking a rustc
    patch together 🙃
[4] This broke with

        error[E0463]: can't find crate for `core`
          |
          = note: the `aarch64-unknown-none` target may not be installed
          = help: consider downloading the target with `rustup target add aarch64-unknown-none`
          = help: consider building the standard library from source with `cargo build -Zbuild-std`

[5] While the build is fine, the VM tests are still panicking, but
    that's also the case for `kernel-generic` because of a 9p
    regression:

        switch_root: can't execute '/nix/store/zv87gw0yxfsslq0mcc35a99k54da9a4z-nixos-system-machine-test/init': Exec format error
        [    1.734997] Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000100
        [    1.736002] CPU: 0 UID: 0 PID: 1 Comm: switch_root Not tainted 6.12.0-rc1 #1-NixOS
        [...]

    Reported as https://lore.kernel.org/all/D4LHHUNLG79Y.12PI0X6BEHRHW@mbosch.me/T/#u
  • Loading branch information
Ma27 committed Oct 2, 2024
1 parent 5c19646 commit fec2614
Showing 1 changed file with 6 additions and 5 deletions.
11 changes: 6 additions & 5 deletions pkgs/os-specific/linux/kernel/common-config.nix
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,8 @@ let
kernelSupportsRust = lib.versionAtLeast version "6.7";

# Currently only enabling Rust by default on kernel 6.12+,
# which actually has features that use Rust that we want,
# and only on x86_64, because of a nixpkgs rustc issue:
# https://github.com/NixOS/nixpkgs/pull/315121#issuecomment-2135805876
defaultRust = lib.versionAtLeast version "6.12" && stdenv.hostPlatform.isx86_64;
# which actually has features that use Rust that we want.
defaultRust = lib.versionAtLeast version "6.12" && (stdenv.hostPlatform.isx86_64 || stdenv.hostPlatform.isAarch64);
withRust = (forceRust || defaultRust) && kernelSupportsRust;

options = {
Expand Down Expand Up @@ -641,7 +639,10 @@ let
NFS_V4_1 = yes; # NFSv4.1 client support
NFS_V4_2 = yes;
NFS_V4_SECURITY_LABEL = yes;
NFS_LOCALIO = whenAtLeast "6.12" yes;

# Fails with
# `fs/nfs/localio.o: relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol `nfs_to' which may bind externally can not be used when making a shared object; recompile with -fPIC`
NFS_LOCALIO = lib.mkIf (!stdenv.hostPlatform.isAarch64) (whenAtLeast "6.12" yes);

CIFS_XATTR = yes;
CIFS_POSIX = option yes;
Expand Down

0 comments on commit fec2614

Please sign in to comment.