From 8b498d3c69575e4155adb0ec2c73c326eadf59e0 Mon Sep 17 00:00:00 2001 From: Jonathon Penix Date: Mon, 11 May 2026 15:49:44 -0700 Subject: [PATCH 1/8] [cpullvm] Add armv7m -mfpu=fpv5-d16 hard float variant The intention here is to offer a variant for Cortex M7 users with fpv5-d16 enabled. There's a few misc. things to note here: - The normalized triple clang uses when `-mcpu=cortex-m7` is used is actually along the lines of `thumbv7em*` rather than the `thumb7m` we use here. Our `multilib.yaml.in` has mappings for these which we inherited from ATfE. So, align with what their configs seem to do and stick with thumbv7m. - Picolibc is the only libc we want to support for this variant--a musl-embedded variant is intentionally omitted as we're moving away from musl-embedded. - This variant is built with PIC in keeping with our other 32bit Arm variants (where the nopic ones were late/special additions). - We build our other armv7m configurations with `-mno-unaligned-access` (and we don't have both aligned and unaligned variants like ATfE). I'm following suit here under the assumption it is a safe default, though I'm not entirely clear what is supported for our user. Signed-off-by: Jonathon Penix --- .../embedded-multilib/json/multilib.json | 6 +++++ .../json/variants/armv7m_hard_fpv5_d16.json | 25 +++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 qualcomm-software/embedded-multilib/json/variants/armv7m_hard_fpv5_d16.json diff --git a/qualcomm-software/embedded-multilib/json/multilib.json b/qualcomm-software/embedded-multilib/json/multilib.json index 8291cfb6e12c..583cdbe5b294 100644 --- a/qualcomm-software/embedded-multilib/json/multilib.json +++ b/qualcomm-software/embedded-multilib/json/multilib.json @@ -55,6 +55,12 @@ "json": "armv7m_soft_nofp.json", "flags": "--target=thumbv7m-unknown-none-eabi -mfpu=none" }, + { + "variant": "armv7m_hard_fpv5_d16", + "json": "armv7m_hard_fpv5_d16.json", + "flags": "--target=thumbv7m-unknown-none-eabihf -mfpu=fpv5-d16", + "libraries_supported": "picolibc" + }, { "variant": "riscv32imc_ilp32_nothreads_nopic", "json": "riscv32imc_ilp32_nothreads_nopic.json", diff --git a/qualcomm-software/embedded-multilib/json/variants/armv7m_hard_fpv5_d16.json b/qualcomm-software/embedded-multilib/json/variants/armv7m_hard_fpv5_d16.json new file mode 100644 index 000000000000..61d5efa507a0 --- /dev/null +++ b/qualcomm-software/embedded-multilib/json/variants/armv7m_hard_fpv5_d16.json @@ -0,0 +1,25 @@ +{ + "args": { + "common": { + "TARGET_ARCH": "armv7m", + "VARIANT": "armv7m_hard_fpv5_d16", + "COMPILE_FLAGS": "-mfloat-abi=hard -march=armv7m -mfpu=fpv5-d16 -mno-unaligned-access -fPIC", + "ENABLE_EXCEPTIONS": "OFF", + "ENABLE_RTTI": "OFF", + "TEST_EXECUTOR": "qemu", + "QEMU_MACHINE": "mps2-an500", + "QEMU_CPU": "cortex-m7", + "FLASH_ADDRESS": "0x00000000", + "FLASH_SIZE": "0x00400000", + "RAM_ADDRESS": "0x20000000", + "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" + } + } +} From afbd5bf8ad13dfa22f3d39eefdce4b69de47a2d5 Mon Sep 17 00:00:00 2001 From: Jonathon Penix Date: Mon, 11 May 2026 16:51:37 -0700 Subject: [PATCH 2/8] make nopic Discussing with Ana, sounds like we know that the user isn't using PIC and we've had issues with 32bit Arm fPIC variants + Zephyr + eld in the past (see https://github.com/qualcomm/cpullvm-toolchain/pull/309). So let's make this nopic Signed-off-by: Jonathon Penix --- qualcomm-software/embedded-multilib/json/multilib.json | 6 +++--- ...m_hard_fpv5_d16.json => armv7m_hard_fpv5_d16_nopic.json} | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) rename qualcomm-software/embedded-multilib/json/variants/{armv7m_hard_fpv5_d16.json => armv7m_hard_fpv5_d16_nopic.json} (95%) diff --git a/qualcomm-software/embedded-multilib/json/multilib.json b/qualcomm-software/embedded-multilib/json/multilib.json index 583cdbe5b294..5557e728a48b 100644 --- a/qualcomm-software/embedded-multilib/json/multilib.json +++ b/qualcomm-software/embedded-multilib/json/multilib.json @@ -56,9 +56,9 @@ "flags": "--target=thumbv7m-unknown-none-eabi -mfpu=none" }, { - "variant": "armv7m_hard_fpv5_d16", - "json": "armv7m_hard_fpv5_d16.json", - "flags": "--target=thumbv7m-unknown-none-eabihf -mfpu=fpv5-d16", + "variant": "armv7m_hard_fpv5_d16_nopic", + "json": "armv7m_hard_fpv5_d16_nopic.json", + "flags": "--target=thumbv7m-unknown-none-eabihf -mfpu=fpv5-d16 -fno-pic", "libraries_supported": "picolibc" }, { diff --git a/qualcomm-software/embedded-multilib/json/variants/armv7m_hard_fpv5_d16.json b/qualcomm-software/embedded-multilib/json/variants/armv7m_hard_fpv5_d16_nopic.json similarity index 95% rename from qualcomm-software/embedded-multilib/json/variants/armv7m_hard_fpv5_d16.json rename to qualcomm-software/embedded-multilib/json/variants/armv7m_hard_fpv5_d16_nopic.json index 61d5efa507a0..4aea4287055b 100644 --- a/qualcomm-software/embedded-multilib/json/variants/armv7m_hard_fpv5_d16.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", - "COMPILE_FLAGS": "-mfloat-abi=hard -march=armv7m -mfpu=fpv5-d16 -mno-unaligned-access -fPIC", + "COMPILE_FLAGS": "-mfloat-abi=hard -march=armv7m -mfpu=fpv5-d16 -mno-unaligned-access", "ENABLE_EXCEPTIONS": "OFF", "ENABLE_RTTI": "OFF", "TEST_EXECUTOR": "qemu", From 7558e6ae224ce22b9fe7c3ab6c4f702ef4e921db Mon Sep 17 00:00:00 2001 From: Jonathon Penix Date: Mon, 11 May 2026 16:56:58 -0700 Subject: [PATCH 3/8] don't force mno-unaligned-access Discussing with Ana, the relevant build is resolving to -munaligned-access. So don't force -mno-unaligned-access for the variant Signed-off-by: Jonathon Penix --- .../json/variants/armv7m_hard_fpv5_d16_nopic.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 4aea4287055b..f793fb409703 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", - "COMPILE_FLAGS": "-mfloat-abi=hard -march=armv7m -mfpu=fpv5-d16 -mno-unaligned-access", + "COMPILE_FLAGS": "-mfloat-abi=hard -march=armv7m -mfpu=fpv5-d16", "ENABLE_EXCEPTIONS": "OFF", "ENABLE_RTTI": "OFF", "TEST_EXECUTOR": "qemu", From 881123b40e22094d98368b41a71391779d2fa20d Mon Sep 17 00:00:00 2001 From: Jonathon Penix Date: Mon, 11 May 2026 17:04:36 -0700 Subject: [PATCH 4/8] fix variant name after nopic renaming Signed-off-by: Jonathon Penix --- .../json/variants/armv7m_hard_fpv5_d16_nopic.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 f793fb409703..c752cdbc640c 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 @@ -2,7 +2,7 @@ "args": { "common": { "TARGET_ARCH": "armv7m", - "VARIANT": "armv7m_hard_fpv5_d16", + "VARIANT": "armv7m_hard_fpv5_d16_nopic", "COMPILE_FLAGS": "-mfloat-abi=hard -march=armv7m -mfpu=fpv5-d16", "ENABLE_EXCEPTIONS": "OFF", "ENABLE_RTTI": "OFF", From 6c1384af12821e29e33ba0f61479e29797ded65c Mon Sep 17 00:00:00 2001 From: Jonathon Penix Date: Tue, 12 May 2026 17:01:55 -0700 Subject: [PATCH 5/8] add test Signed-off-by: Jonathon Penix --- qualcomm-software/test/multilib/armv7m.test | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 qualcomm-software/test/multilib/armv7m.test diff --git a/qualcomm-software/test/multilib/armv7m.test b/qualcomm-software/test/multilib/armv7m.test new file mode 100644 index 000000000000..f11292717c0a --- /dev/null +++ b/qualcomm-software/test/multilib/armv7m.test @@ -0,0 +1,4 @@ +# RUN: %clang -print-multi-directory --target=armv7m-none-eabihf -mfloat-abi=hard -mfpu=fpv5-d16 | FileCheck %s --check-prefix=CHECK-HARD-FPV5-D16 +# RUN: %clang -print-multi-directory --target=armv7em-none-eabihf -mfloat-abi=hard -mfpu=fpv5-d16 | FileCheck %s --check-prefix=CHECK-HARD-FPV5-D16 +# CHECK-HARD-FPV5-D16: arm-none-eabi/armv7m_hard_fpv5_d16_nopic{{$}} +# CHECK-HARD-FPV5-D16-EMPTY: From 44c32696d63ea44fbc2519ceadc1c21604204553 Mon Sep 17 00:00:00 2001 From: Jonathon Penix Date: Tue, 12 May 2026 17:06:42 -0700 Subject: [PATCH 6/8] make nopic explicit in test Signed-off-by: Jonathon Penix --- qualcomm-software/test/multilib/armv7m.test | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/qualcomm-software/test/multilib/armv7m.test b/qualcomm-software/test/multilib/armv7m.test index f11292717c0a..dfe6c016f1bb 100644 --- a/qualcomm-software/test/multilib/armv7m.test +++ b/qualcomm-software/test/multilib/armv7m.test @@ -1,4 +1,7 @@ -# RUN: %clang -print-multi-directory --target=armv7m-none-eabihf -mfloat-abi=hard -mfpu=fpv5-d16 | FileCheck %s --check-prefix=CHECK-HARD-FPV5-D16 -# RUN: %clang -print-multi-directory --target=armv7em-none-eabihf -mfloat-abi=hard -mfpu=fpv5-d16 | FileCheck %s --check-prefix=CHECK-HARD-FPV5-D16 -# CHECK-HARD-FPV5-D16: arm-none-eabi/armv7m_hard_fpv5_d16_nopic{{$}} -# CHECK-HARD-FPV5-D16-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=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: + +# RUN: %clang -print-multi-directory --target=armv7m-none-eabihf -mfloat-abi=hard -mfpu=fpv5-d16 -fPIC | FileCheck %s --check-prefix=NOT-FOUND +# NOT-FOUND: warning: no multilib found matching flags From f7780cf327d832ac2657379c2b78473f60a8fb6b Mon Sep 17 00:00:00 2001 From: Jonathon Penix Date: Tue, 12 May 2026 17:12:59 -0700 Subject: [PATCH 7/8] fix pipe Signed-off-by: Jonathon Penix --- qualcomm-software/test/multilib/armv7m.test | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qualcomm-software/test/multilib/armv7m.test b/qualcomm-software/test/multilib/armv7m.test index dfe6c016f1bb..a0b44f9ab0bb 100644 --- a/qualcomm-software/test/multilib/armv7m.test +++ b/qualcomm-software/test/multilib/armv7m.test @@ -3,5 +3,5 @@ # CHECK-HARD-FPV5-D16-NOPIC: arm-none-eabi/armv7m_hard_fpv5_d16_nopic{{$}} # CHECK-HARD-FPV5-D16-NOPIC-EMPTY: -# RUN: %clang -print-multi-directory --target=armv7m-none-eabihf -mfloat-abi=hard -mfpu=fpv5-d16 -fPIC | FileCheck %s --check-prefix=NOT-FOUND +# RUN: %clang -print-multi-directory --target=armv7m-none-eabihf -mfloat-abi=hard -mfpu=fpv5-d16 -fPIC 2>&1 | FileCheck %s --check-prefix=NOT-FOUND # NOT-FOUND: warning: no multilib found matching flags From 10fc759b107f48e2e48634e90315fb8a0ba3ba82 Mon Sep 17 00:00:00 2001 From: Jonathon Penix Date: Thu, 21 May 2026 11:54:35 -0700 Subject: [PATCH 8/8] enforce -munaligned-access for multilib matching Signed-off-by: Jonathon Penix --- qualcomm-software/embedded-multilib/json/multilib.json | 2 +- qualcomm-software/test/multilib/armv7m.test | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/qualcomm-software/embedded-multilib/json/multilib.json b/qualcomm-software/embedded-multilib/json/multilib.json index 5557e728a48b..8e44c7b88980 100644 --- a/qualcomm-software/embedded-multilib/json/multilib.json +++ b/qualcomm-software/embedded-multilib/json/multilib.json @@ -58,7 +58,7 @@ { "variant": "armv7m_hard_fpv5_d16_nopic", "json": "armv7m_hard_fpv5_d16_nopic.json", - "flags": "--target=thumbv7m-unknown-none-eabihf -mfpu=fpv5-d16 -fno-pic", + "flags": "--target=thumbv7m-unknown-none-eabihf -mfpu=fpv5-d16 -munaligned-access -fno-pic", "libraries_supported": "picolibc" }, { diff --git a/qualcomm-software/test/multilib/armv7m.test b/qualcomm-software/test/multilib/armv7m.test index a0b44f9ab0bb..ecbfff161dd1 100644 --- a/qualcomm-software/test/multilib/armv7m.test +++ b/qualcomm-software/test/multilib/armv7m.test @@ -4,4 +4,5 @@ # CHECK-HARD-FPV5-D16-NOPIC-EMPTY: # RUN: %clang -print-multi-directory --target=armv7m-none-eabihf -mfloat-abi=hard -mfpu=fpv5-d16 -fPIC 2>&1 | FileCheck %s --check-prefix=NOT-FOUND +# RUN: %clang -print-multi-directory --target=armv7m-none-eabihf -mfloat-abi=hard -mfpu=fpv5-d16 -mno-unaligned-access 2>&1 | FileCheck %s --check-prefix=NOT-FOUND # NOT-FOUND: warning: no multilib found matching flags