aboutsummaryrefslogtreecommitdiff
path: root/packages/gcc/12.1.0/0005-sh-Avoid-mb-m1-multilib-combination.patch
diff options
context:
space:
mode:
Diffstat (limited to 'packages/gcc/12.1.0/0005-sh-Avoid-mb-m1-multilib-combination.patch')
-rw-r--r--packages/gcc/12.1.0/0005-sh-Avoid-mb-m1-multilib-combination.patch64
1 files changed, 64 insertions, 0 deletions
diff --git a/packages/gcc/12.1.0/0005-sh-Avoid-mb-m1-multilib-combination.patch b/packages/gcc/12.1.0/0005-sh-Avoid-mb-m1-multilib-combination.patch
new file mode 100644
index 00000000..981f20db
--- /dev/null
+++ b/packages/gcc/12.1.0/0005-sh-Avoid-mb-m1-multilib-combination.patch
@@ -0,0 +1,64 @@
+From 497bbd01e39ca21091c0e3bb83c83f49319d3cab Mon Sep 17 00:00:00 2001
+From: Chris Packham <chris.packham@alliedtelesis.co.nz>
+Date: Tue, 17 May 2022 21:36:05 +1200
+Subject: [PATCH] sh: Avoid mb/m1 multilib combination
+
+https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105607
+
+It's not entirely clear why but the mb/m1 combination fails when
+building libgcc.
+
+ gcc/libgcc/config/sh/lib1funcs.S: Assembler messages:
+ gcc/libgcc/config/sh/lib1funcs.S:933: Error: opcode not valid for this cpu variant
+ gcc/libgcc/config/sh/lib1funcs.S:935: Error: opcode not valid for this cpu variant
+ gcc/libgcc/config/sh/lib1funcs.S:942: Error: opcode not valid for this cpu variant
+ gcc/libgcc/config/sh/lib1funcs.S:944: Error: opcode not valid for this cpu variant
+ make[4]: *** [Makefile:491: _movmem_i4_s.o] Error 1
+
+The assembly that is being complained about is
+
+ 931 L_movmem_loop:
+ 932 mov.l r3,@(12,r4)
+ 933 dt r6
+ 934 mov.l @r5+,r0
+ 935 bt/s L_movmem_2mod4_end
+ 936 mov.l @r5+,r1
+ 937 add #16,r4
+ 938 L_movmem_start_even:
+ 939 mov.l @r5+,r2
+ 940 mov.l @r5+,r3
+ 941 mov.l r0,@r4
+ 942 dt r6
+ 943 mov.l r1,@(4,r4)
+ 944 bf/s L_movmem_loop
+ 945 mov.l r2,@(8,r4)
+ 946 rts
+ 947 mov.l r3,@(12,r4)
+
+Under GCC11 the combination was not built but somehow under GCC12 it is.
+As a workaround add mb/m1 to the list of excluded combinations.
+
+Signed-off-by: Chris Packham <chris.packham@alliedtelesis.co.nz>
+---
+ gcc/config/sh/t-sh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/gcc/config/sh/t-sh b/gcc/config/sh/t-sh
+index dd5652e11bfb..fa901201e5e6 100644
+--- a/gcc/config/sh/t-sh
++++ b/gcc/config/sh/t-sh
+@@ -63,9 +63,9 @@ MULTILIB_MATCHES = $(shell \
+
+ # SH1 and SH2A support big endian only.
+ ifeq ($(DEFAULT_ENDIAN),ml)
+-MULTILIB_EXCEPTIONS = m1 ml/m1 m2a* ml/m2a* $(TM_MULTILIB_EXCEPTIONS_CONFIG)
++MULTILIB_EXCEPTIONS = m1 ml/m1 mb/m1 m2a* ml/m2a* $(TM_MULTILIB_EXCEPTIONS_CONFIG)
+ else
+-MULTILIB_EXCEPTIONS = ml/m1 ml/m2a* $(TM_MULTILIB_EXCEPTIONS_CONFIG)
++MULTILIB_EXCEPTIONS = ml/m1 mb/m1 ml/m2a* $(TM_MULTILIB_EXCEPTIONS_CONFIG)
+ endif
+
+ MULTILIB_OSDIRNAMES = \
+--
+2.36.1
+