Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Doesn't build in release mode or under opt-level 1,2, or 3 on aarch64-unknown-linux-gnu (Error: unaligned opcodes detected in executable segment) #29

Closed
lilith opened this issue Aug 20, 2024 · 1 comment

Comments

@lilith
Copy link
Contributor

lilith commented Aug 20, 2024

To reproduce, add to Cargo.toml

[profile.test]
opt-level = 3

Then run cross test --target aarch64-unknown-linux-gnu -v

To get cross running quickly on CI, you could use these commands. Github arm-linux runners won't be free for a while, but cross is fast

To install binstall
curl -L --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/cargo-bins/cargo-binstall/main/install-from-binstall-release.sh | bash
or
Set-ExecutionPolicy Unrestricted -Scope Process; iex (iwr "https://raw.githubusercontent.com/cargo-bins/cargo-binstall/main/install-from-binstall-release.ps1").Content
To install cross
cargo binstall cross

This also affects

cross test --target aarch64-unknown-linux-gnu -v
+ cargo metadata --format-version 1 --filter-platform aarch64-unknown-linux-gnu
+ rustc --print sysroot
+ rustup toolchain list
+ rustup target list --toolchain stable-x86_64-unknown-linux-gnu
+ rustup component list --toolchain stable-x86_64-unknown-linux-gnu
+ "C:\Program Files\Docker\Docker\resources\bin\docker.EXE"
+ "C:\Program Files\Docker\Docker\resources\bin\docker.EXE" run --userns host -e 'PKG_CONFIG_ALLOW_CROSS=1' -e 'XARGO_HOME=/xargo' -e 'CARGO_HOME=/cargo' -e 'CARGO_TARGET_DIR=/target' -e 'CROSS_RUNNER=' -e 'USER=lilith' --rm --user 1000:1000 -v 'C:\Users\lilith\.xargo:/xargo:z' -v 'C:\Users\lilith\.cargo:/cargo:z' -v /cargo/bin -v 'C:\Users\lilith\Documents\GitHub\libwebp-sys:/project:z' -v 'C:\Users\lilith\.rustup\toolchains\stable-x86_64-unknown-linux-gnu:/rust:z,ro' -v 'C:\Users\lilith\Documents\GitHub\libwebp-sys\target:/target:z' -w /project -i -t ghcr.io/cross-rs/aarch64-unknown-linux-gnu:0.2.5 sh -c 'PATH=$PATH:/rust/bin cargo test --target aarch64-unknown-linux-gnu -v'
       Fresh shlex v1.3.0
       Fresh glob v0.3.1
       Fresh libc v0.2.158
       Fresh jobserver v0.1.32
       Fresh cc v1.1.13
   Compiling libwebp-sys v0.9.5 (/project)
     Running `/target/debug/build/libwebp-sys-3d77577e83ed02a9/build-script-build`
The following warnings were emitted during compilation:

warning: [email protected]: /tmp/cc4nVy2X.s: Assembler messages:
warning: [email protected]: /tmp/cc4nVy2X.s: Error: unaligned opcodes detected in executable segment
warning: [email protected]: ToolExecError: Command "aarch64-linux-gnu-gcc" "-O3" "-ffunction-sections" "-fdata-sections" "-fPIC" "-gdwarf-4" "-fno-omit-frame-pointer" "-I" "/project/vendor" "-Wall" "-Wextra" "-fvisibility=hidden" "-Wall" "-DNDEBUG=1" "-D_THREAD_SAFE=1" "-DWEBP_HAVE_NEON=1" "-o" "/target/aarch64-unknown-linux-gnu/debug/build/libwebp-sys-45399092962d16c8/out/4f39fca00dbd5c57-quant_enc.o" "-c" "/project/vendor/src/enc/quant_enc.c" with args aarch64-linux-gnu-gcc did not execute successfully (status code exit status: 1).

error: failed to run custom build command for `libwebp-sys v0.9.5 (/project)`

Caused by:
  process didn't exit successfully: `/target/debug/build/libwebp-sys-3d77577e83ed02a9/build-script-build` (exit status: 1)
  --- stdout
  OPT_LEVEL = Some(3)
  TARGET = Some(aarch64-unknown-linux-gnu)
  OUT_DIR = Some(/target/aarch64-unknown-linux-gnu/debug/build/libwebp-sys-45399092962d16c8/out)
  HOST = Some(x86_64-unknown-linux-gnu)
  cargo:rerun-if-env-changed=CC_aarch64-unknown-linux-gnu
  CC_aarch64-unknown-linux-gnu = None
  cargo:rerun-if-env-changed=CC_aarch64_unknown_linux_gnu
  CC_aarch64_unknown_linux_gnu = Some(aarch64-linux-gnu-gcc)
  cargo:rerun-if-env-changed=CC_KNOWN_WRAPPER_CUSTOM
  CC_KNOWN_WRAPPER_CUSTOM = None
  RUSTC_WRAPPER = None
  cargo:rerun-if-env-changed=CC_ENABLE_DEBUG_OUTPUT
  cargo:rerun-if-env-changed=CRATE_CC_NO_DEFAULTS
  CRATE_CC_NO_DEFAULTS = None
  DEBUG = Some(true)
  CARGO_CFG_TARGET_FEATURE = Some(neon)
  cargo:rerun-if-env-changed=CFLAGS_aarch64-unknown-linux-gnu
  CFLAGS_aarch64-unknown-linux-gnu = None
  cargo:rerun-if-env-changed=CFLAGS_aarch64_unknown_linux_gnu
  CFLAGS_aarch64_unknown_linux_gnu = None
  cargo:rerun-if-env-changed=TARGET_CFLAGS
  TARGET_CFLAGS = None
  cargo:rerun-if-env-changed=CFLAGS
  CFLAGS = None
  OPT_LEVEL = Some(3)
  TARGET = Some(aarch64-unknown-linux-gnu)
  OUT_DIR = Some(/target/aarch64-unknown-linux-gnu/debug/build/libwebp-sys-45399092962d16c8/out)
  HOST = Some(x86_64-unknown-linux-gnu)
  cargo:rerun-if-env-changed=CC_aarch64-unknown-linux-gnu
  CC_aarch64-unknown-linux-gnu = None
  cargo:rerun-if-env-changed=CC_aarch64_unknown_linux_gnu
  CC_aarch64_unknown_linux_gnu = Some(aarch64-linux-gnu-gcc)
  cargo:rerun-if-env-changed=CC_KNOWN_WRAPPER_CUSTOM
  CC_KNOWN_WRAPPER_CUSTOM = None
  RUSTC_WRAPPER = None
  cargo:rerun-if-env-changed=CC_ENABLE_DEBUG_OUTPUT
  cargo:rerun-if-env-changed=CRATE_CC_NO_DEFAULTS
  CRATE_CC_NO_DEFAULTS = None
  DEBUG = Some(true)
  CARGO_CFG_TARGET_FEATURE = Some(neon)
  cargo:rerun-if-env-changed=CFLAGS_aarch64-unknown-linux-gnu
  CFLAGS_aarch64-unknown-linux-gnu = None
  cargo:rerun-if-env-changed=CFLAGS_aarch64_unknown_linux_gnu
  CFLAGS_aarch64_unknown_linux_gnu = None
  cargo:rerun-if-env-changed=TARGET_CFLAGS
  TARGET_CFLAGS = None
  cargo:rerun-if-env-changed=CFLAGS
  CFLAGS = None
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  cargo:rerun-if-env-changed=AR_aarch64-unknown-linux-gnu
  AR_aarch64-unknown-linux-gnu = None
  cargo:rerun-if-env-changed=AR_aarch64_unknown_linux_gnu
  AR_aarch64_unknown_linux_gnu = None
  cargo:rerun-if-env-changed=TARGET_AR
  TARGET_AR = None
  cargo:rerun-if-env-changed=AR
  AR = None
  cargo:rerun-if-env-changed=CROSS_COMPILE
  CROSS_COMPILE = None
  RUSTC_LINKER = Some(aarch64-linux-gnu-gcc)
  cargo:rerun-if-env-changed=ARFLAGS_aarch64-unknown-linux-gnu
  ARFLAGS_aarch64-unknown-linux-gnu = None
  cargo:rerun-if-env-changed=ARFLAGS_aarch64_unknown_linux_gnu
  ARFLAGS_aarch64_unknown_linux_gnu = None
  cargo:rerun-if-env-changed=TARGET_ARFLAGS
  TARGET_ARFLAGS = None
  cargo:rerun-if-env-changed=ARFLAGS
  ARFLAGS = None
  cargo:rustc-link-lib=static=sharpyuv
  cargo:rustc-link-search=native=/target/aarch64-unknown-linux-gnu/debug/build/libwebp-sys-45399092962d16c8/out
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 0
  cargo:warning=/tmp/cc4nVy2X.s: Assembler messages:
  cargo:warning=/tmp/cc4nVy2X.s: Error: unaligned opcodes detected in executable segment
  exit status: 0
  exit status: 0
  exit status: 0
  exit status: 1
  cargo:warning=ToolExecError: Command "aarch64-linux-gnu-gcc" "-O3" "-ffunction-sections" "-fdata-sections" "-fPIC" "-gdwarf-4" "-fno-omit-frame-pointer" "-I" "/project/vendor" "-Wall" "-Wextra" "-fvisibility=hidden" "-Wall" "-DNDEBUG=1" "-D_THREAD_SAFE=1" "-DWEBP_HAVE_NEON=1" "-o" "/target/aarch64-unknown-linux-gnu/debug/build/libwebp-sys-45399092962d16c8/out/4f39fca00dbd5c57-quant_enc.o" "-c" "/project/vendor/src/enc/quant_enc.c" with args aarch64-linux-gnu-gcc did not execute successfully (status code exit status: 1).

  --- stderr


  error occurred: Command "aarch64-linux-gnu-gcc" "-O3" "-ffunction-sections" "-fdata-sections" "-fPIC" "-gdwarf-4" "-fno-omit-frame-pointer" "-I" "/project/vendor" "-Wall" "-Wextra" "-fvisibility=hidden" "-Wall" "-DNDEBUG=1" "-D_THREAD_SAFE=1" "-DWEBP_HAVE_NEON=1" "-o" "/target/aarch64-unknown-linux-gnu/debug/build/libwebp-sys-45399092962d16c8/out/4f39fca00dbd5c57-quant_enc.o" "-c" "/project/vendor/src/enc/quant_enc.c" with args aarch64-linux-gnu-gcc did not execute successfully (status code exit status: 1).


+ rustup component list --toolchain stable-x86_64-unknown-linux-gnu
@lilith lilith changed the title Tests fail to build under opt-level 1,2, or 3 on aarch64-unknown-linux-gnu (Error: unaligned opcodes detected in executable segment) Doesn't build in release mode or under opt-level 1,2, or 3 on aarch64-unknown-linux-gnu (Error: unaligned opcodes detected in executable segment) Aug 20, 2024
@lilith
Copy link
Contributor Author

lilith commented Aug 20, 2024

So, it appears that libwebp can't compile successfully with ANY optimizations enabled if debugging info is also enabled - but only on ARM. So turning optimizations on for testing fails, as does having debugging symbols on for a release build. "-gdwarf-4" and "-O2" cannot co-exist on ARM for this lib.

The patch for build.rs:

"aarch64" => {
            if cfg!(feature = "neon") {
                build.define("WEBP_HAVE_NEON", Some("1"));
            }

            // If any optimizations are ennabled, we must remove -gdwarf flags
            // Which we can only do by stopping debug mode entirely since we can't
            // fix env flags.
            let gccflags = build.get_compiler().cflags_env().to_string_lossy().to_string();

            if gccflags.contains("-O0") || gccflags.contains("-O1") 
            || gccflags.contains("-O2") || gccflags.contains("-O3") 
            || gccflags.contains("-Ofast") || gccflags.contains("-Os")
            || gccflags.contains("--opt-level=0") || gccflags.contains("--opt-level=1")
            || gccflags.contains("--opt-level=2") || gccflags.contains("--opt-level=3")
            || gccflags.contains("--opt-level=s") || gccflags.contains("--opt-level=z") {
                build.debug(false);
            }
            
        }

@NoXF NoXF closed this as completed in 735b22b Sep 2, 2024
NoXF added a commit that referenced this issue Sep 2, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant