From 404e8129c26ea5387a51248eebff1820db6f5015 Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Wed, 24 Mar 2021 00:36:59 -0700 Subject: compiler-rt: Fix build on armv6 Fixes Issue #445 Signed-off-by: Khem Raj --- ...ompiler-rt-Use-mcr-based-barrier-on-armv6.patch | 74 ++++++++++++++++++++++ recipes-devtools/clang/common.inc | 1 + 2 files changed, 75 insertions(+) create mode 100644 recipes-devtools/clang/clang/0030-compiler-rt-Use-mcr-based-barrier-on-armv6.patch diff --git a/recipes-devtools/clang/clang/0030-compiler-rt-Use-mcr-based-barrier-on-armv6.patch b/recipes-devtools/clang/clang/0030-compiler-rt-Use-mcr-based-barrier-on-armv6.patch new file mode 100644 index 0000000..458dbcc --- /dev/null +++ b/recipes-devtools/clang/clang/0030-compiler-rt-Use-mcr-based-barrier-on-armv6.patch @@ -0,0 +1,74 @@ +From 97123bf7bc7cc2a55c3dfb5006be5dd66c46d790 Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Wed, 24 Mar 2021 00:32:09 -0700 +Subject: [PATCH] compiler-rt: Use mcr based barrier on armv6 + +dsb is an armv7 instruction and wont work when we are building for armv6. + +Upstream-Status: Pending +Signed-off-by: Khem Raj +--- + compiler-rt/lib/builtins/arm/sync-ops.h | 8 ++++---- + compiler-rt/lib/builtins/assembly.h | 8 ++++++++ + 2 files changed, 12 insertions(+), 4 deletions(-) + +diff --git a/compiler-rt/lib/builtins/arm/sync-ops.h b/compiler-rt/lib/builtins/arm/sync-ops.h +index c9623249e5d2..7a26170741ad 100644 +--- a/compiler-rt/lib/builtins/arm/sync-ops.h ++++ b/compiler-rt/lib/builtins/arm/sync-ops.h +@@ -19,14 +19,14 @@ + .thumb; \ + .syntax unified; \ + DEFINE_COMPILERRT_THUMB_FUNCTION(__sync_fetch_and_##op) \ +- dmb; \ ++ DMB; \ + mov r12, r0; \ + LOCAL_LABEL(tryatomic_##op) : ldrex r0, [r12]; \ + op(r2, r0, r1); \ + strex r3, r2, [r12]; \ + cmp r3, #0; \ + bne LOCAL_LABEL(tryatomic_##op); \ +- dmb; \ ++ DMB; \ + bx lr + + #define SYNC_OP_8(op) \ +@@ -35,14 +35,14 @@ + .syntax unified; \ + DEFINE_COMPILERRT_THUMB_FUNCTION(__sync_fetch_and_##op) \ + push {r4, r5, r6, lr}; \ +- dmb; \ ++ DMB; \ + mov r12, r0; \ + LOCAL_LABEL(tryatomic_##op) : ldrexd r0, r1, [r12]; \ + op(r4, r5, r0, r1, r2, r3); \ + strexd r6, r4, r5, [r12]; \ + cmp r6, #0; \ + bne LOCAL_LABEL(tryatomic_##op); \ +- dmb; \ ++ DMB; \ + pop { r4, r5, r6, pc } + + #define MINMAX_4(rD, rN, rM, cmp_kind) \ +diff --git a/compiler-rt/lib/builtins/assembly.h b/compiler-rt/lib/builtins/assembly.h +index f6ce6a9fccff..5c6cd9376ac4 100644 +--- a/compiler-rt/lib/builtins/assembly.h ++++ b/compiler-rt/lib/builtins/assembly.h +@@ -181,6 +181,14 @@ + JMP(ip) + #endif + ++#if __ARM_ARCH >= 7 ++#define DMB dmb ++#elif __ARM_ARCH >= 6 ++#define DMB mcr p15, #0, r0, c7, c10, #5 ++#else ++#error Only use this with ARMv6+ ++#endif ++ + #if defined(USE_THUMB_2) + #define WIDE(op) op.w + #else +-- +2.31.0 + diff --git a/recipes-devtools/clang/common.inc b/recipes-devtools/clang/common.inc index b6af90c..9de7674 100644 --- a/recipes-devtools/clang/common.inc +++ b/recipes-devtools/clang/common.inc @@ -38,6 +38,7 @@ SRC_URI = "\ file://0027-compiler-rt-Include-stddef.h.patch \ file://0028-llvm-Do-not-use-find_library-for-ncurses.patch \ file://0029-llvm-Recognize-yoe-and-poky-as-OE-distro.patch \ + file://0030-compiler-rt-Use-mcr-based-barrier-on-armv6.patch \ " # Fallback to no-PIE if not set GCCPIE ??= "" -- cgit v1.2.3-54-g00ecf