From f2efd968e014666fa2ec5a7ca70b016b26573e64 Mon Sep 17 00:00:00 2001 From: Jonathon Penix Date: Wed, 24 Jun 2026 17:05:34 -0700 Subject: [PATCH 1/2] [cpullvm] Specify and require -munaligned-access for Arm/AArch64 variants that currently build with unaligned access (#389) Requiring `-munaligned-access` for multilib should provide better build-time safeguards if people try using `-mno-unaligned-access` when they truly need it disabled. If people require an aligned variant, we'll consider adding one in the future. And, if people want to mix and match (build with `-mno-unaligned-access` but match against a library built with `-munaligned-access`) they can still override multilib and point at the library variant manually. At the same time, expicitly specify `-munaligned-access` for these configs in the compile flags. This should be NFC, but will hopefully make it more clear what our intent for these variants is and safeguard us from any unforseen changes in defaults, etc. Note that this also shouldn't impact our musl configs where we specify `-mstrict-align`/`-mno-unaligned-access` via `EXTRA_MUSL-EMBEDDED_CFLAGS`--those are used when building musl *only* and those flags are placed after the generic `COMPILE_FLAGS` so will override them. As mentioned above, this should resolve #388 for now until we want to support aligned variants. (Backported from 13fce8b8) Signed-off-by: Jonathon Penix --- .../embedded-multilib/json/multilib.json | 20 +++++++++---------- .../json/variants/aarch64a_pacret.json | 2 +- .../aarch64a_pacret_bkey_bti_tlsie.json | 2 +- .../json/variants/aarch64a_pacret_bti.json | 2 +- .../aarch64a_soft_nofp_pacret_bkey_bti.json | 2 +- .../aarch64a_soft_nofp_pacret_bti.json | 2 +- .../variants/aarch64a_soft_nofp_tlsie.json | 2 +- .../json/variants/aarch64a_tlsie.json | 2 +- .../json/variants/armv7a_soft_neon.json | 2 +- .../json/variants/armv7a_soft_nofp.json | 2 +- .../variants/armv7m_hard_fpv5_d16_nopic.json | 2 +- .../json/variants/armv8_soft_neon.json | 2 +- qualcomm-software/test/multilib/aarch64.test | 4 ++++ qualcomm-software/test/multilib/armv7.test | 4 ++++ qualcomm-software/test/multilib/armv7m.test | 1 + qualcomm-software/test/multilib/armv8.test | 4 ++++ 16 files changed, 34 insertions(+), 21 deletions(-) diff --git a/qualcomm-software/embedded-multilib/json/multilib.json b/qualcomm-software/embedded-multilib/json/multilib.json index 05f01d1bddc1..453cddf812ec 100644 --- a/qualcomm-software/embedded-multilib/json/multilib.json +++ b/qualcomm-software/embedded-multilib/json/multilib.json @@ -3,52 +3,52 @@ { "variant": "aarch64a_tlsie", "json": "aarch64a_tlsie.json", - "flags": "--target=aarch64-unknown-none-elf" + "flags": "--target=aarch64-unknown-none-elf -munaligned-access" }, { "variant": "aarch64a_pacret", "json": "aarch64a_pacret.json", - "flags": "--target=aarch64-unknown-none-elf -march=armv8.3-a -mbranch-protection=pac-ret+leaf" + "flags": "--target=aarch64-unknown-none-elf -march=armv8.3-a -mbranch-protection=pac-ret+leaf -munaligned-access" }, { "variant": "aarch64a_pacret_bti", "json": "aarch64a_pacret_bti.json", - "flags": "--target=aarch64-unknown-none-elf -march=armv8.5-a -mbranch-protection=pac-ret+leaf+bti" + "flags": "--target=aarch64-unknown-none-elf -march=armv8.5-a -mbranch-protection=pac-ret+leaf+bti -munaligned-access" }, { "variant": "aarch64a_pacret_bkey_bti_tlsie", "json": "aarch64a_pacret_bkey_bti_tlsie.json", - "flags": "--target=aarch64-unknown-none-elf -march=armv8.5-a -mbranch-protection=pac-ret+leaf+b-key+bti" + "flags": "--target=aarch64-unknown-none-elf -march=armv8.5-a -mbranch-protection=pac-ret+leaf+b-key+bti -munaligned-access" }, { "variant": "aarch64a_soft_nofp_tlsie", "json": "aarch64a_soft_nofp_tlsie.json", - "flags": "--target=aarch64-unknown-none-elf -march=armvX+nofp -march=armvX+nosimd -mabi=aapcs-soft" + "flags": "--target=aarch64-unknown-none-elf -march=armvX+nofp -march=armvX+nosimd -mabi=aapcs-soft -munaligned-access" }, { "variant": "aarch64a_soft_nofp_pacret_bti", "json": "aarch64a_soft_nofp_pacret_bti.json", - "flags": "--target=aarch64-unknown-none-elf -march=armv8.5-a -march=armvX+nofp -march=armvX+nosimd -mbranch-protection=pac-ret+leaf+bti -mabi=aapcs-soft" + "flags": "--target=aarch64-unknown-none-elf -march=armv8.5-a -march=armvX+nofp -march=armvX+nosimd -mbranch-protection=pac-ret+leaf+bti -mabi=aapcs-soft -munaligned-access" }, { "variant": "aarch64a_soft_nofp_pacret_bkey_bti", "json": "aarch64a_soft_nofp_pacret_bkey_bti.json", - "flags": "--target=aarch64-unknown-none-elf -march=armv8.5-a -march=armvX+nofp -march=armvX+nosimd -mbranch-protection=pac-ret+leaf+b-key+bti -mabi=aapcs-soft" + "flags": "--target=aarch64-unknown-none-elf -march=armv8.5-a -march=armvX+nofp -march=armvX+nosimd -mbranch-protection=pac-ret+leaf+b-key+bti -mabi=aapcs-soft -munaligned-access" }, { "variant": "armv7a_soft_neon", "json": "armv7a_soft_neon.json", - "flags": "--target=armv7-unknown-none-eabi -mfpu=neon" + "flags": "--target=armv7-unknown-none-eabi -mfpu=neon -munaligned-access" }, { "variant": "armv7a_soft_nofp", "json": "armv7a_soft_nofp.json", - "flags": "--target=armv7-unknown-none-eabi -mfpu=none" + "flags": "--target=armv7-unknown-none-eabi -mfpu=none -munaligned-access" }, { "variant": "armv8_soft_neon", "json": "armv8_soft_neon.json", - "flags": "--target=armv8a-unknown-none-eabi -mfpu=neon-fp-armv8" + "flags": "--target=armv8a-unknown-none-eabi -mfpu=neon-fp-armv8 -munaligned-access" }, { "variant": "armv7m_soft_nofp", diff --git a/qualcomm-software/embedded-multilib/json/variants/aarch64a_pacret.json b/qualcomm-software/embedded-multilib/json/variants/aarch64a_pacret.json index aefb60f70b67..d8752e723af3 100644 --- a/qualcomm-software/embedded-multilib/json/variants/aarch64a_pacret.json +++ b/qualcomm-software/embedded-multilib/json/variants/aarch64a_pacret.json @@ -3,7 +3,7 @@ "common": { "TARGET_ARCH": "aarch64a", "VARIANT": "aarch64a_pacret", - "COMPILE_FLAGS": "-march=armv8.3a -mbranch-protection=pac-ret+leaf -fPIC", + "COMPILE_FLAGS": "-march=armv8.3a -mbranch-protection=pac-ret+leaf -munaligned-access -fPIC", "ENABLE_EXCEPTIONS": "OFF", "ENABLE_RTTI": "OFF", "TEST_EXECUTOR": "qemu", diff --git a/qualcomm-software/embedded-multilib/json/variants/aarch64a_pacret_bkey_bti_tlsie.json b/qualcomm-software/embedded-multilib/json/variants/aarch64a_pacret_bkey_bti_tlsie.json index a347461a27ba..dfbb57198319 100644 --- a/qualcomm-software/embedded-multilib/json/variants/aarch64a_pacret_bkey_bti_tlsie.json +++ b/qualcomm-software/embedded-multilib/json/variants/aarch64a_pacret_bkey_bti_tlsie.json @@ -3,7 +3,7 @@ "common": { "TARGET_ARCH": "aarch64a", "VARIANT": "aarch64a_pacret_bkey_bti_tlsie", - "COMPILE_FLAGS": "-march=armv8.5a -mbranch-protection=pac-ret+leaf+b-key+bti -fPIC", + "COMPILE_FLAGS": "-march=armv8.5a -mbranch-protection=pac-ret+leaf+b-key+bti -munaligned-access -fPIC", "ENABLE_EXCEPTIONS": "OFF", "ENABLE_RTTI": "OFF", "TEST_EXECUTOR": "qemu", diff --git a/qualcomm-software/embedded-multilib/json/variants/aarch64a_pacret_bti.json b/qualcomm-software/embedded-multilib/json/variants/aarch64a_pacret_bti.json index 08cdab21d77b..3ffb5b3e20f2 100644 --- a/qualcomm-software/embedded-multilib/json/variants/aarch64a_pacret_bti.json +++ b/qualcomm-software/embedded-multilib/json/variants/aarch64a_pacret_bti.json @@ -3,7 +3,7 @@ "common": { "TARGET_ARCH": "aarch64a", "VARIANT": "aarch64a_pacret_bti", - "COMPILE_FLAGS": "-march=armv8.5a -mbranch-protection=pac-ret+leaf+bti -fPIC", + "COMPILE_FLAGS": "-march=armv8.5a -mbranch-protection=pac-ret+leaf+bti -munaligned-access -fPIC", "ENABLE_EXCEPTIONS": "OFF", "ENABLE_RTTI": "OFF", "TEST_EXECUTOR": "qemu", diff --git a/qualcomm-software/embedded-multilib/json/variants/aarch64a_soft_nofp_pacret_bkey_bti.json b/qualcomm-software/embedded-multilib/json/variants/aarch64a_soft_nofp_pacret_bkey_bti.json index bd07c5c8c797..b30f3a671f67 100644 --- a/qualcomm-software/embedded-multilib/json/variants/aarch64a_soft_nofp_pacret_bkey_bti.json +++ b/qualcomm-software/embedded-multilib/json/variants/aarch64a_soft_nofp_pacret_bkey_bti.json @@ -3,7 +3,7 @@ "common": { "TARGET_ARCH": "aarch64a", "VARIANT": "aarch64a_soft_nofp_pacret_bkey_bti", - "COMPILE_FLAGS": "-march=armv8.5a+nofp+nosimd -mbranch-protection=pac-ret+leaf+b-key+bti -mabi=aapcs-soft -fPIC", + "COMPILE_FLAGS": "-march=armv8.5a+nofp+nosimd -mbranch-protection=pac-ret+leaf+b-key+bti -mabi=aapcs-soft -munaligned-access -fPIC", "ENABLE_EXCEPTIONS": "OFF", "ENABLE_RTTI": "OFF", "TEST_EXECUTOR": "qemu", diff --git a/qualcomm-software/embedded-multilib/json/variants/aarch64a_soft_nofp_pacret_bti.json b/qualcomm-software/embedded-multilib/json/variants/aarch64a_soft_nofp_pacret_bti.json index cfe77e916cf7..c15433c9d526 100644 --- a/qualcomm-software/embedded-multilib/json/variants/aarch64a_soft_nofp_pacret_bti.json +++ b/qualcomm-software/embedded-multilib/json/variants/aarch64a_soft_nofp_pacret_bti.json @@ -3,7 +3,7 @@ "common": { "TARGET_ARCH": "aarch64a", "VARIANT": "aarch64a_soft_nofp_pacret_bti", - "COMPILE_FLAGS": "-march=armv8.5a+nofp+nosimd -mbranch-protection=pac-ret+leaf+bti -mabi=aapcs-soft -fPIC", + "COMPILE_FLAGS": "-march=armv8.5a+nofp+nosimd -mbranch-protection=pac-ret+leaf+bti -mabi=aapcs-soft -munaligned-access -fPIC", "ENABLE_EXCEPTIONS": "OFF", "ENABLE_RTTI": "OFF", "TEST_EXECUTOR": "qemu", diff --git a/qualcomm-software/embedded-multilib/json/variants/aarch64a_soft_nofp_tlsie.json b/qualcomm-software/embedded-multilib/json/variants/aarch64a_soft_nofp_tlsie.json index 0fa221f6956d..b3c15df0b161 100644 --- a/qualcomm-software/embedded-multilib/json/variants/aarch64a_soft_nofp_tlsie.json +++ b/qualcomm-software/embedded-multilib/json/variants/aarch64a_soft_nofp_tlsie.json @@ -3,7 +3,7 @@ "common": { "TARGET_ARCH": "aarch64a", "VARIANT": "aarch64a_soft_nofp_tlsie", - "COMPILE_FLAGS": "-march=armv8-a+nofp+nosimd -mabi=aapcs-soft -fPIC", + "COMPILE_FLAGS": "-march=armv8-a+nofp+nosimd -mabi=aapcs-soft -munaligned-access -fPIC", "ENABLE_EXCEPTIONS": "OFF", "ENABLE_RTTI": "OFF", "TEST_EXECUTOR": "qemu", diff --git a/qualcomm-software/embedded-multilib/json/variants/aarch64a_tlsie.json b/qualcomm-software/embedded-multilib/json/variants/aarch64a_tlsie.json index 55f1be57f4c9..8dd1e859a204 100644 --- a/qualcomm-software/embedded-multilib/json/variants/aarch64a_tlsie.json +++ b/qualcomm-software/embedded-multilib/json/variants/aarch64a_tlsie.json @@ -3,7 +3,7 @@ "common": { "TARGET_ARCH": "aarch64a", "VARIANT": "aarch64a_tlsie", - "COMPILE_FLAGS": "-march=armv8-a -fPIC", + "COMPILE_FLAGS": "-march=armv8-a -munaligned-access -fPIC", "ENABLE_EXCEPTIONS": "OFF", "ENABLE_RTTI": "OFF", "TEST_EXECUTOR": "qemu", diff --git a/qualcomm-software/embedded-multilib/json/variants/armv7a_soft_neon.json b/qualcomm-software/embedded-multilib/json/variants/armv7a_soft_neon.json index 210389e28d14..41e6b65b4fb3 100644 --- a/qualcomm-software/embedded-multilib/json/variants/armv7a_soft_neon.json +++ b/qualcomm-software/embedded-multilib/json/variants/armv7a_soft_neon.json @@ -3,7 +3,7 @@ "common": { "TARGET_ARCH": "armv7a", "VARIANT": "armv7a_soft_neon", - "COMPILE_FLAGS": "-mfloat-abi=softfp -march=armv7a -mthumb -mfpu=neon -fPIC", + "COMPILE_FLAGS": "-mfloat-abi=softfp -march=armv7a -mthumb -mfpu=neon -munaligned-access -fPIC", "ENABLE_EXCEPTIONS": "OFF", "ENABLE_RTTI": "OFF", "TEST_EXECUTOR": "qemu", diff --git a/qualcomm-software/embedded-multilib/json/variants/armv7a_soft_nofp.json b/qualcomm-software/embedded-multilib/json/variants/armv7a_soft_nofp.json index 22dbb53efd1a..bab3de182766 100644 --- a/qualcomm-software/embedded-multilib/json/variants/armv7a_soft_nofp.json +++ b/qualcomm-software/embedded-multilib/json/variants/armv7a_soft_nofp.json @@ -3,7 +3,7 @@ "common": { "TARGET_ARCH": "armv7a", "VARIANT": "armv7a_soft_nofp", - "COMPILE_FLAGS": "-mfloat-abi=softfp -march=armv7a -mthumb -mfpu=none -mhwdiv=none -fPIC", + "COMPILE_FLAGS": "-mfloat-abi=softfp -march=armv7a -mthumb -mfpu=none -mhwdiv=none -munaligned-access -fPIC", "ENABLE_EXCEPTIONS": "OFF", "ENABLE_RTTI": "OFF", "TEST_EXECUTOR": "qemu", diff --git a/qualcomm-software/embedded-multilib/json/variants/armv7m_hard_fpv5_d16_nopic.json b/qualcomm-software/embedded-multilib/json/variants/armv7m_hard_fpv5_d16_nopic.json index c752cdbc640c..164b8a474b53 100644 --- a/qualcomm-software/embedded-multilib/json/variants/armv7m_hard_fpv5_d16_nopic.json +++ b/qualcomm-software/embedded-multilib/json/variants/armv7m_hard_fpv5_d16_nopic.json @@ -3,7 +3,7 @@ "common": { "TARGET_ARCH": "armv7m", "VARIANT": "armv7m_hard_fpv5_d16_nopic", - "COMPILE_FLAGS": "-mfloat-abi=hard -march=armv7m -mfpu=fpv5-d16", + "COMPILE_FLAGS": "-mfloat-abi=hard -march=armv7m -mfpu=fpv5-d16 -munaligned-access", "ENABLE_EXCEPTIONS": "OFF", "ENABLE_RTTI": "OFF", "TEST_EXECUTOR": "qemu", diff --git a/qualcomm-software/embedded-multilib/json/variants/armv8_soft_neon.json b/qualcomm-software/embedded-multilib/json/variants/armv8_soft_neon.json index f33e78bf4ebe..1ae2418c2b53 100644 --- a/qualcomm-software/embedded-multilib/json/variants/armv8_soft_neon.json +++ b/qualcomm-software/embedded-multilib/json/variants/armv8_soft_neon.json @@ -3,7 +3,7 @@ "common": { "TARGET_ARCH": "armv8", "VARIANT": "arvm8_soft_neon", - "COMPILE_FLAGS": "-mfloat-abi=softfp -march=armv8 -mthumb -mfpu=neon-fp-armv8 -fPIC", + "COMPILE_FLAGS": "-mfloat-abi=softfp -march=armv8 -mthumb -mfpu=neon-fp-armv8 -munaligned-access -fPIC", "ENABLE_EXCEPTIONS": "OFF", "ENABLE_RTTI": "OFF", "TEST_EXECUTOR": "qemu", diff --git a/qualcomm-software/test/multilib/aarch64.test b/qualcomm-software/test/multilib/aarch64.test index a3377fcdd591..e87824ee78d7 100644 --- a/qualcomm-software/test/multilib/aarch64.test +++ b/qualcomm-software/test/multilib/aarch64.test @@ -4,6 +4,7 @@ # the original multilib. # RUN: %clang -print-multi-directory --target=aarch64-none-elf | FileCheck %s --check-prefix=CHECK-AARCH64 +# RUN: %clang -print-multi-directory --target=aarch64-none-elf -munaligned-access | FileCheck %s --check-prefix=CHECK-AARCH64 # RUN: %clang -print-multi-directory --target=aarch64-none-elf -mcpu=cortex-a53 | FileCheck %s --check-prefix=CHECK-AARCH64 # CHECK-AARCH64: aarch64-none-elf/aarch64a_tlsie{{$}} # CHECK-AARCH64-EMPTY: @@ -40,3 +41,6 @@ # RUN: %clang -print-multi-directory --target=aarch64-none-elf -march=armv8.5a -mgeneral-regs-only -mllvm -aarch64-enable-simd-scalar=false -mbranch-protection=pac-ret+leaf+b-key+bti -mabi=aapcs-soft | FileCheck %s --check-prefix=CHECK-NOFP-PACRET-BKEY-BTI # CHECK-NOFP-PACRET-BKEY-BTI: aarch64-none-elf/aarch64a_soft_nofp_pacret_bkey_bti{{$}} # CHECK-NOFP-PACRET-BKEY-BTI-EMPTY: + +# RUN: %clang -print-multi-directory -print-multi-directory --target=aarch64-none-elf -mno-unaligned-access 2>&1 | FileCheck %s --check-prefix=NOT-FOUND +# NOT-FOUND: warning: no multilib found matching flags diff --git a/qualcomm-software/test/multilib/armv7.test b/qualcomm-software/test/multilib/armv7.test index 4bde58a60dad..fe351fca4367 100644 --- a/qualcomm-software/test/multilib/armv7.test +++ b/qualcomm-software/test/multilib/armv7.test @@ -1,6 +1,7 @@ # RUN: %clang -print-multi-directory --target=arm-none-eabi -march=armv7a -mfloat-abi=softfp -mfpu=neon | FileCheck %s --check-prefix=CHECK-ARMV7 # RUN: %clang -print-multi-directory --target=arm-none-eabi -march=armv7a -mfloat-abi=softfp -marm -mfpu=neon | FileCheck %s --check-prefix=CHECK-ARMV7 # RUN: %clang -print-multi-directory --target=arm-none-eabi -march=armv7a -mfloat-abi=softfp -mthumb -mfpu=neon | FileCheck %s --check-prefix=CHECK-ARMV7 +# RUN: %clang -print-multi-directory --target=arm-none-eabi -march=armv7a -mfloat-abi=softfp -mfpu=neon -munaligned-access | FileCheck %s --check-prefix=CHECK-ARMV7 # CHECK-ARMV7: arm-none-eabi/armv7a_soft_neon{{$}} # CHECK-ARMV7-EMPTY: @@ -9,3 +10,6 @@ # RUN: %clang -print-multi-directory --target=arm-none-eabi -march=armv7a -mfloat-abi=softfp -mthumb -mfpu=none -mhwdiv=none | FileCheck %s --check-prefix=CHECK-ARMV7-NOFP # CHECK-ARMV7-NOFP: arm-none-eabi/armv7a_soft_nofp{{$}} # CHECK-ARMV7-NOFP-EMPTY: + +# RUN: %clang -print-multi-directory --target=arm-none-eabi -march=armv7a -mfloat-abi=softfp -mthumb -mfpu=neon -mno-unaligned-access 2>&1 | FileCheck %s --check-prefix=NOT-FOUND +# NOT-FOUND: warning: no multilib found matching flags diff --git a/qualcomm-software/test/multilib/armv7m.test b/qualcomm-software/test/multilib/armv7m.test index 0a4607f5ed6c..d63b4e01c78b 100644 --- a/qualcomm-software/test/multilib/armv7m.test +++ b/qualcomm-software/test/multilib/armv7m.test @@ -3,6 +3,7 @@ # CHECK-SOFT-NOFP-EMPTY: # RUN: %clang -print-multi-directory --target=armv7m-none-eabihf -mfloat-abi=hard -mfpu=fpv5-d16 -fno-pic | FileCheck %s --check-prefix=CHECK-HARD-FPV5-D16-NOPIC +# RUN: %clang -print-multi-directory --target=armv7m-none-eabihf -mfloat-abi=hard -mfpu=fpv5-d16 -fno-pic -munaligned-access | FileCheck %s --check-prefix=CHECK-HARD-FPV5-D16-NOPIC # RUN: %clang -print-multi-directory --target=armv7em-none-eabihf -mfloat-abi=hard -mfpu=fpv5-d16 -fno-pic | FileCheck %s --check-prefix=CHECK-HARD-FPV5-D16-NOPIC # CHECK-HARD-FPV5-D16-NOPIC: arm-none-eabi/armv7m_hard_fpv5_d16_nopic{{$}} # CHECK-HARD-FPV5-D16-NOPIC-EMPTY: diff --git a/qualcomm-software/test/multilib/armv8.test b/qualcomm-software/test/multilib/armv8.test index 847da6fda0fb..c83dc0452b5d 100644 --- a/qualcomm-software/test/multilib/armv8.test +++ b/qualcomm-software/test/multilib/armv8.test @@ -1,6 +1,7 @@ # RUN: %clang -print-multi-directory --target=arm-none-eabi -march=armv8a -mfloat-abi=softfp -mfpu=neon-fp-armv8 | FileCheck %s --check-prefix=CHECK-ARMV8-SOFT-NEON # RUN: %clang -print-multi-directory --target=arm-none-eabi -march=armv8a -mfloat-abi=softfp -mthumb -mfpu=neon-fp-armv8 | FileCheck %s --check-prefix=CHECK-ARMV8-SOFT-NEON # RUN: %clang -print-multi-directory --target=arm-none-eabi -march=armv8a -mfloat-abi=softfp -marm -mfpu=neon-fp-armv8 | FileCheck %s --check-prefix=CHECK-ARMV8-SOFT-NEON +# RUN: %clang -print-multi-directory --target=arm-none-eabi -march=armv8a -mfloat-abi=softfp -mthumb -mfpu=neon-fp-armv8 -munaligned-access | FileCheck %s --check-prefix=CHECK-ARMV8-SOFT-NEON # CHECK-ARMV8-SOFT-NEON: arm-none-eabi/armv8_soft_neon{{$}} # CHECK-ARMV8-SOFT-NEON-EMPTY: @@ -11,3 +12,6 @@ # RUN: %clang -print-multi-directory --target=arm-none-eabi -march=armv8a -mthumb -mfloat-abi=softfp -mfpu=neon | FileCheck %s --check-prefix=CHECK-ARMV7-SOFT-NEON # CHECK-ARMV7-SOFT-NEON: arm-none-eabi/armv7a_soft_neon{{$}} # CHECK-ARMV7-SOFT-NEON-EMPTY: + +# RUN: %clang -print-multi-directory --target=arm-none-eabi -march=armv8a -mfloat-abi=softfp -mthumb -mfpu=neon-fp-armv8 -mno-unaligned-access 2>&1 | FileCheck %s --check-prefix=NOT-FOUND +# NOT-FOUND: warning: no multilib found matching flags From 7340d09724ab23445253a71be079ebb330b03f45 Mon Sep 17 00:00:00 2001 From: Jonathon Penix Date: Wed, 24 Jun 2026 17:38:35 -0700 Subject: [PATCH 2/2] [cpullvm][Multilib] Add aligned AArch64 variants Add aligned alternatives of the following variants: - aarch64a_tlsie - aarch64a_pacret_bkey_bti_tlsie - aarch64a_soft_nofp_tlsie - aarch64a_soft_nofp_pacret_bti So far these are the only variants where folks have needed unaligned variants, so we're just going to duplicate these for now. See https://github.com/qualcomm/cpullvm-toolchain/issues/388 for additional context around our Arm/AArch64 variant alignment situation. Signed-off-by: Jonathon Penix --- .../embedded-multilib/json/multilib.json | 20 +++++++++++ .../json/variants/aarch64a_aligned_tlsie.json | 33 ++++++++++++++++++ ...arch64a_pacret_bkey_bti_aligned_tlsie.json | 33 ++++++++++++++++++ .../aarch64a_soft_nofp_aligned_tlsie.json | 34 +++++++++++++++++++ ...aarch64a_soft_nofp_pacret_bti_aligned.json | 33 ++++++++++++++++++ qualcomm-software/test/multilib/aarch64.test | 25 ++++++++++++-- 6 files changed, 175 insertions(+), 3 deletions(-) create mode 100644 qualcomm-software/embedded-multilib/json/variants/aarch64a_aligned_tlsie.json create mode 100644 qualcomm-software/embedded-multilib/json/variants/aarch64a_pacret_bkey_bti_aligned_tlsie.json create mode 100644 qualcomm-software/embedded-multilib/json/variants/aarch64a_soft_nofp_aligned_tlsie.json create mode 100644 qualcomm-software/embedded-multilib/json/variants/aarch64a_soft_nofp_pacret_bti_aligned.json diff --git a/qualcomm-software/embedded-multilib/json/multilib.json b/qualcomm-software/embedded-multilib/json/multilib.json index 453cddf812ec..a4e826ac506d 100644 --- a/qualcomm-software/embedded-multilib/json/multilib.json +++ b/qualcomm-software/embedded-multilib/json/multilib.json @@ -5,6 +5,11 @@ "json": "aarch64a_tlsie.json", "flags": "--target=aarch64-unknown-none-elf -munaligned-access" }, + { + "variant": "aarch64a_aligned_tlsie", + "json": "aarch64a_aligned_tlsie.json", + "flags": "--target=aarch64-unknown-none-elf -mno-unaligned-access" + }, { "variant": "aarch64a_pacret", "json": "aarch64a_pacret.json", @@ -20,16 +25,31 @@ "json": "aarch64a_pacret_bkey_bti_tlsie.json", "flags": "--target=aarch64-unknown-none-elf -march=armv8.5-a -mbranch-protection=pac-ret+leaf+b-key+bti -munaligned-access" }, + { + "variant": "aarch64a_pacret_bkey_bti_aligned_tlsie", + "json": "aarch64a_pacret_bkey_bti_aligned_tlsie.json", + "flags": "--target=aarch64-unknown-none-elf -march=armv8.5-a -mbranch-protection=pac-ret+leaf+b-key+bti -mno-unaligned-access" + }, { "variant": "aarch64a_soft_nofp_tlsie", "json": "aarch64a_soft_nofp_tlsie.json", "flags": "--target=aarch64-unknown-none-elf -march=armvX+nofp -march=armvX+nosimd -mabi=aapcs-soft -munaligned-access" }, + { + "variant": "aarch64a_soft_nofp_aligned_tlsie", + "json": "aarch64a_soft_nofp_aligned_tlsie.json", + "flags": "--target=aarch64-unknown-none-elf -march=armvX+nofp -march=armvX+nosimd -mabi=aapcs-soft -mno-unaligned-access" + }, { "variant": "aarch64a_soft_nofp_pacret_bti", "json": "aarch64a_soft_nofp_pacret_bti.json", "flags": "--target=aarch64-unknown-none-elf -march=armv8.5-a -march=armvX+nofp -march=armvX+nosimd -mbranch-protection=pac-ret+leaf+bti -mabi=aapcs-soft -munaligned-access" }, + { + "variant": "aarch64a_soft_nofp_pacret_bti_aligned", + "json": "aarch64a_soft_nofp_pacret_bti_aligned.json", + "flags": "--target=aarch64-unknown-none-elf -march=armv8.5-a -march=armvX+nofp -march=armvX+nosimd -mbranch-protection=pac-ret+leaf+bti -mabi=aapcs-soft -mno-unaligned-access" + }, { "variant": "aarch64a_soft_nofp_pacret_bkey_bti", "json": "aarch64a_soft_nofp_pacret_bkey_bti.json", diff --git a/qualcomm-software/embedded-multilib/json/variants/aarch64a_aligned_tlsie.json b/qualcomm-software/embedded-multilib/json/variants/aarch64a_aligned_tlsie.json new file mode 100644 index 000000000000..a51c810ecaef --- /dev/null +++ b/qualcomm-software/embedded-multilib/json/variants/aarch64a_aligned_tlsie.json @@ -0,0 +1,33 @@ +{ + "args": { + "common": { + "TARGET_ARCH": "aarch64a", + "VARIANT": "aarch64a_aligned_tlsie", + "COMPILE_FLAGS": "-march=armv8-a -mno-unaligned-access -fPIC", + "ENABLE_EXCEPTIONS": "OFF", + "ENABLE_RTTI": "OFF", + "TEST_EXECUTOR": "qemu", + "QEMU_MACHINE": "virt", + "QEMU_CPU": "cortex-a57", + "FLASH_ADDRESS": "0x40000000", + "FLASH_SIZE": "0x00400000", + "RAM_ADDRESS": "0x40400000", + "RAM_SIZE": "0x00200000", + "LIBRARY_BUILD_TYPE": "minsizerelease" + }, + "picolibc": { + "ENABLE_CXX_LIBS": "ON", + "ENABLE_LIBC_TESTS": "ON", + "ENABLE_COMPILER_RT_TESTS": "OFF", + "ENABLE_LIBCXX_TESTS": "OFF", + "TLS_MODEL": "initial-exec" + }, + "musl-embedded": { + "ENABLE_CXX_LIBS": "ON", + "ENABLE_LIBC_TESTS": "OFF", + "ENABLE_COMPILER_RT_TESTS": "OFF", + "ENABLE_LIBCXX_TESTS": "OFF", + "EXTRA_MUSL-EMBEDDED_CFLAGS": "-mstrict-align" + } + } +} diff --git a/qualcomm-software/embedded-multilib/json/variants/aarch64a_pacret_bkey_bti_aligned_tlsie.json b/qualcomm-software/embedded-multilib/json/variants/aarch64a_pacret_bkey_bti_aligned_tlsie.json new file mode 100644 index 000000000000..0d8603157af0 --- /dev/null +++ b/qualcomm-software/embedded-multilib/json/variants/aarch64a_pacret_bkey_bti_aligned_tlsie.json @@ -0,0 +1,33 @@ +{ + "args": { + "common": { + "TARGET_ARCH": "aarch64a", + "VARIANT": "aarch64a_pacret_bkey_bti_aligned_tlsie", + "COMPILE_FLAGS": "-march=armv8.5a -mbranch-protection=pac-ret+leaf+b-key+bti -mno-unaligned-access -fPIC", + "ENABLE_EXCEPTIONS": "OFF", + "ENABLE_RTTI": "OFF", + "TEST_EXECUTOR": "qemu", + "QEMU_MACHINE": "virt", + "QEMU_CPU": "cortex-a57", + "FLASH_ADDRESS": "0x40000000", + "FLASH_SIZE": "0x00400000", + "RAM_ADDRESS": "0x40400000", + "RAM_SIZE": "0x00200000", + "LIBRARY_BUILD_TYPE": "minsizerelease" + }, + "picolibc": { + "ENABLE_CXX_LIBS": "ON", + "ENABLE_LIBC_TESTS": "OFF", + "ENABLE_COMPILER_RT_TESTS": "OFF", + "ENABLE_LIBCXX_TESTS": "OFF", + "TLS_MODEL": "initial-exec" + }, + "musl-embedded": { + "ENABLE_CXX_LIBS": "ON", + "ENABLE_LIBC_TESTS": "OFF", + "ENABLE_COMPILER_RT_TESTS": "OFF", + "ENABLE_LIBCXX_TESTS": "OFF", + "EXTRA_MUSL-EMBEDDED_CFLAGS": "-mstrict-align" + } + } +} diff --git a/qualcomm-software/embedded-multilib/json/variants/aarch64a_soft_nofp_aligned_tlsie.json b/qualcomm-software/embedded-multilib/json/variants/aarch64a_soft_nofp_aligned_tlsie.json new file mode 100644 index 000000000000..6bb3925bb858 --- /dev/null +++ b/qualcomm-software/embedded-multilib/json/variants/aarch64a_soft_nofp_aligned_tlsie.json @@ -0,0 +1,34 @@ +{ + "args": { + "common": { + "TARGET_ARCH": "aarch64a", + "VARIANT": "aarch64a_soft_nofp_aligned_tlsie", + "COMPILE_FLAGS": "-march=armv8-a+nofp+nosimd -mabi=aapcs-soft -mno-unaligned-access -fPIC", + "ENABLE_EXCEPTIONS": "OFF", + "ENABLE_RTTI": "OFF", + "TEST_EXECUTOR": "qemu", + "QEMU_MACHINE": "virt", + "QEMU_CPU": "cortex-a57", + "FLASH_ADDRESS": "0x40000000", + "FLASH_SIZE": "0x00400000", + "RAM_ADDRESS": "0x40400000", + "RAM_SIZE": "0x00200000", + "LIBRARY_BUILD_TYPE": "minsizerelease" + }, + "picolibc": { + "ENABLE_CXX_LIBS": "OFF", + "ENABLE_LIBC_TESTS": "ON", + "ENABLE_COMPILER_RT_TESTS": "OFF", + "ENABLE_LIBCXX_TESTS": "OFF", + "TLS_MODEL": "initial-exec" + }, + "musl-embedded": { + "ENABLE_CXX_LIBS": "OFF", + "ENABLE_LIBC_TESTS": "OFF", + "ENABLE_COMPILER_RT_TESTS": "OFF", + "ENABLE_LIBCXX_TESTS": "OFF", + "EXTRA_MUSL-EMBEDDED_CONFIG_FLAGS": "--quic-aarch64-nofp", + "EXTRA_MUSL-EMBEDDED_CFLAGS": "-mstrict-align" + } + } +} diff --git a/qualcomm-software/embedded-multilib/json/variants/aarch64a_soft_nofp_pacret_bti_aligned.json b/qualcomm-software/embedded-multilib/json/variants/aarch64a_soft_nofp_pacret_bti_aligned.json new file mode 100644 index 000000000000..b173bc71b955 --- /dev/null +++ b/qualcomm-software/embedded-multilib/json/variants/aarch64a_soft_nofp_pacret_bti_aligned.json @@ -0,0 +1,33 @@ +{ + "args": { + "common": { + "TARGET_ARCH": "aarch64a", + "VARIANT": "aarch64a_soft_nofp_pacret_bti_aligned", + "COMPILE_FLAGS": "-march=armv8.5a+nofp+nosimd -mbranch-protection=pac-ret+leaf+bti -mabi=aapcs-soft -mno-unaligned-access -fPIC", + "ENABLE_EXCEPTIONS": "OFF", + "ENABLE_RTTI": "OFF", + "TEST_EXECUTOR": "qemu", + "QEMU_MACHINE": "virt", + "QEMU_CPU": "cortex-a57", + "FLASH_ADDRESS": "0x40000000", + "FLASH_SIZE": "0x00400000", + "RAM_ADDRESS": "0x40400000", + "RAM_SIZE": "0x00200000", + "LIBRARY_BUILD_TYPE": "minsizerelease" + }, + "picolibc": { + "ENABLE_CXX_LIBS": "OFF", + "ENABLE_LIBC_TESTS": "OFF", + "ENABLE_COMPILER_RT_TESTS": "OFF", + "ENABLE_LIBCXX_TESTS": "OFF" + }, + "musl-embedded": { + "ENABLE_CXX_LIBS": "OFF", + "ENABLE_LIBC_TESTS": "OFF", + "ENABLE_COMPILER_RT_TESTS": "OFF", + "ENABLE_LIBCXX_TESTS": "OFF", + "EXTRA_MUSL-EMBEDDED_CONFIG_FLAGS": "--quic-aarch64-nofp", + "EXTRA_MUSL-EMBEDDED_CFLAGS": "-mstrict-align" + } + } +} diff --git a/qualcomm-software/test/multilib/aarch64.test b/qualcomm-software/test/multilib/aarch64.test index e87824ee78d7..2ba9a0c28ac5 100644 --- a/qualcomm-software/test/multilib/aarch64.test +++ b/qualcomm-software/test/multilib/aarch64.test @@ -9,6 +9,11 @@ # CHECK-AARCH64: aarch64-none-elf/aarch64a_tlsie{{$}} # CHECK-AARCH64-EMPTY: +# RUN: %clang -print-multi-directory --target=aarch64-none-elf -mno-unaligned-access | FileCheck %s --check-prefix=CHECK-AARCH64-ALIGNED +# RUN: %clang -print-multi-directory --target=aarch64-none-elf -mcpu=cortex-a53 -mno-unaligned-access | FileCheck %s --check-prefix=CHECK-AARCH64-ALIGNED +# CHECK-AARCH64-ALIGNED: aarch64-none-elf/aarch64a_aligned_tlsie{{$}} +# CHECK-AARCH64-ALIGNED-EMPTY: + # RUN: %clang -print-multi-directory --target=aarch64-none-elf -march=armv8.3a -mbranch-protection=pac-ret+leaf | FileCheck %s --check-prefix=CHECK-PACRET # RUN: %clang -print-multi-directory --target=aarch64-none-elf -mcpu=cortex-a53 -march=armv8.3a -mbranch-protection=pac-ret+leaf | FileCheck %s --check-prefix=CHECK-PACRET # CHECK-PACRET: aarch64-none-elf/aarch64a_pacret{{$}} @@ -24,23 +29,37 @@ # CHECK-PACRET-BKEY-BTI: aarch64-none-elf/aarch64a_pacret_bkey_bti_tlsie{{$}} # CHECK-PACRET-BKEY-BTI-EMPTY: +# RUN: %clang -print-multi-directory --target=aarch64-none-elf -march=armv8.5a -mbranch-protection=pac-ret+leaf+b-key+bti -mno-unaligned-access | FileCheck %s --check-prefix=CHECK-PACRET-BKEY-BTI-ALIGNED +# RUN: %clang -print-multi-directory --target=aarch64-none-elf -mcpu=cortex-a53 -march=armv8.5a -mbranch-protection=pac-ret+leaf+b-key+bti -mno-unaligned-access | FileCheck %s --check-prefix=CHECK-PACRET-BKEY-BTI-ALIGNED +# CHECK-PACRET-BKEY-BTI-ALIGNED: aarch64-none-elf/aarch64a_pacret_bkey_bti_aligned_tlsie{{$}} +# CHECK-PACRET-BKEY-BTI-ALIGNED-EMPTY: + # RUN: %clang -print-multi-directory --target=aarch64-none-elf -march=armv8+nofp+nosimd -mabi=aapcs-soft | FileCheck %s --check-prefix=CHECK-NOFP # RUN: %clang -print-multi-directory --target=aarch64-none-elf -mcpu=cortex-a53+nofp+nosimd -mabi=aapcs-soft | FileCheck %s --check-prefix=CHECK-NOFP # RUN: %clang -print-multi-directory --target=aarch64-none-elf -mgeneral-regs-only -mllvm -aarch64-enable-simd-scalar=false -mabi=aapcs-soft | FileCheck %s --check-prefix=CHECK-NOFP # CHECK-NOFP: aarch64-none-elf/aarch64a_soft_nofp_tlsie{{$}} # CHECK-NOFP-EMPTY: +# RUN: %clang -print-multi-directory --target=aarch64-none-elf -march=armv8+nofp+nosimd -mabi=aapcs-soft -mno-unaligned-access | FileCheck %s --check-prefix=CHECK-NOFP-ALIGNED +# RUN: %clang -print-multi-directory --target=aarch64-none-elf -mcpu=cortex-a53+nofp+nosimd -mabi=aapcs-soft -mno-unaligned-access | FileCheck %s --check-prefix=CHECK-NOFP-ALIGNED +# RUN: %clang -print-multi-directory --target=aarch64-none-elf -mgeneral-regs-only -mllvm -aarch64-enable-simd-scalar=false -mabi=aapcs-soft -mno-unaligned-access | FileCheck %s --check-prefix=CHECK-NOFP-ALIGNED +# CHECK-NOFP-ALIGNED: aarch64-none-elf/aarch64a_soft_nofp_aligned_tlsie{{$}} +# CHECK-NOFP-ALIGNED-EMPTY: + # RUN: %clang -print-multi-directory --target=aarch64-none-elf -march=armv8.5a+nofp+nosimd -mbranch-protection=pac-ret+leaf+bti -mabi=aapcs-soft | FileCheck %s --check-prefix=CHECK-NOFP-PACRET-BTI # RUN: %clang -print-multi-directory --target=aarch64-none-elf -mcpu=cortex-a53 -march=armv8.5a+nofp+nosimd -mbranch-protection=pac-ret+leaf+bti -mabi=aapcs-soft | FileCheck %s --check-prefix=CHECK-NOFP-PACRET-BTI # RUN: %clang -print-multi-directory --target=aarch64-none-elf -march=armv8.5a -mgeneral-regs-only -mllvm -aarch64-enable-simd-scalar=false -mbranch-protection=pac-ret+leaf+bti -mabi=aapcs-soft | FileCheck %s --check-prefix=CHECK-NOFP-PACRET-BTI # CHECK-NOFP-PACRET-BTI: aarch64-none-elf/aarch64a_soft_nofp_pacret_bti{{$}} # CHECK-NOFP-PACRET-BTI-EMPTY: +# RUN: %clang -print-multi-directory --target=aarch64-none-elf -march=armv8.5a+nofp+nosimd -mbranch-protection=pac-ret+leaf+bti -mabi=aapcs-soft -mno-unaligned-access | FileCheck %s --check-prefix=CHECK-NOFP-PACRET-BTI-ALIGNED +# RUN: %clang -print-multi-directory --target=aarch64-none-elf -mcpu=cortex-a53 -march=armv8.5a+nofp+nosimd -mbranch-protection=pac-ret+leaf+bti -mabi=aapcs-soft -mno-unaligned-access | FileCheck %s --check-prefix=CHECK-NOFP-PACRET-BTI-ALIGNED +# RUN: %clang -print-multi-directory --target=aarch64-none-elf -march=armv8.5a -mgeneral-regs-only -mllvm -aarch64-enable-simd-scalar=false -mbranch-protection=pac-ret+leaf+bti -mabi=aapcs-soft -mno-unaligned-access | FileCheck %s --check-prefix=CHECK-NOFP-PACRET-BTI-ALIGNED +# CHECK-NOFP-PACRET-BTI-ALIGNED: aarch64-none-elf/aarch64a_soft_nofp_pacret_bti_aligned{{$}} +# CHECK-NOFP-PACRET-BTI-ALIGNED-EMPTY: + # RUN: %clang -print-multi-directory --target=aarch64-none-elf -march=armv8.5a+nofp+nosimd -mbranch-protection=pac-ret+leaf+b-key+bti -mabi=aapcs-soft | FileCheck %s --check-prefix=CHECK-NOFP-PACRET-BKEY-BTI # RUN: %clang -print-multi-directory --target=aarch64-none-elf -mcpu=cortex-a53 -march=armv8.5a+nofp+nosimd -mbranch-protection=pac-ret+leaf+b-key+bti -mabi=aapcs-soft | FileCheck %s --check-prefix=CHECK-NOFP-PACRET-BKEY-BTI # RUN: %clang -print-multi-directory --target=aarch64-none-elf -march=armv8.5a -mgeneral-regs-only -mllvm -aarch64-enable-simd-scalar=false -mbranch-protection=pac-ret+leaf+b-key+bti -mabi=aapcs-soft | FileCheck %s --check-prefix=CHECK-NOFP-PACRET-BKEY-BTI # CHECK-NOFP-PACRET-BKEY-BTI: aarch64-none-elf/aarch64a_soft_nofp_pacret_bkey_bti{{$}} # CHECK-NOFP-PACRET-BKEY-BTI-EMPTY: - -# RUN: %clang -print-multi-directory -print-multi-directory --target=aarch64-none-elf -mno-unaligned-access 2>&1 | FileCheck %s --check-prefix=NOT-FOUND -# NOT-FOUND: warning: no multilib found matching flags