diff options
Diffstat (limited to 'meta/recipes-devtools')
-rw-r--r-- | meta/recipes-devtools/gcc/gcc-13.2.inc | 1 | ||||
-rw-r--r-- | meta/recipes-devtools/gcc/gcc/0025-gcc-testsuite-mips.patch | 225 |
2 files changed, 226 insertions, 0 deletions
diff --git a/meta/recipes-devtools/gcc/gcc-13.2.inc b/meta/recipes-devtools/gcc/gcc-13.2.inc index 7329562f65..7f97ecc332 100644 --- a/meta/recipes-devtools/gcc/gcc-13.2.inc +++ b/meta/recipes-devtools/gcc/gcc-13.2.inc | |||
@@ -64,6 +64,7 @@ SRC_URI = "${BASEURI} \ | |||
64 | file://0022-libatomic-Do-not-enforce-march-on-aarch64.patch \ | 64 | file://0022-libatomic-Do-not-enforce-march-on-aarch64.patch \ |
65 | file://0023-Fix-install-path-of-linux64.h.patch \ | 65 | file://0023-Fix-install-path-of-linux64.h.patch \ |
66 | file://0024-Avoid-hardcoded-build-paths-into-ppc-libgcc.patch \ | 66 | file://0024-Avoid-hardcoded-build-paths-into-ppc-libgcc.patch \ |
67 | file://0025-gcc-testsuite-mips.patch \ | ||
67 | " | 68 | " |
68 | SRC_URI[sha256sum] = "e275e76442a6067341a27f04c5c6b83d8613144004c0413528863dc6b5c743da" | 69 | SRC_URI[sha256sum] = "e275e76442a6067341a27f04c5c6b83d8613144004c0413528863dc6b5c743da" |
69 | 70 | ||
diff --git a/meta/recipes-devtools/gcc/gcc/0025-gcc-testsuite-mips.patch b/meta/recipes-devtools/gcc/gcc/0025-gcc-testsuite-mips.patch new file mode 100644 index 0000000000..49eaece923 --- /dev/null +++ b/meta/recipes-devtools/gcc/gcc/0025-gcc-testsuite-mips.patch | |||
@@ -0,0 +1,225 @@ | |||
1 | gcc testsuite tweaks for mips/OE | ||
2 | |||
3 | Disable loongson-mmi runtine, qemu doesn't appear to fully support them even if some | ||
4 | of the instruction decoding is there. | ||
5 | |||
6 | Also disable MSA mips runtime extensions. For some reason qemu appears to accept the test | ||
7 | code when it shouldn't. Our selected MIPS cpu for QEMU doesn't support them. | ||
8 | |||
9 | MIPS is unusual in the gcc testsuite as it uses EFFECTIVE_TARGETS and loops | ||
10 | multiple times through the vector testsuite. In the case of the two above, we can | ||
11 | compile/link them but not run them. Even with the runtime disabled, if the code | ||
12 | marks it as a runtime test, it will elevate itself to that. Setting the default | ||
13 | target to compile therefore isn't enough. | ||
14 | |||
15 | Therefore add code to downgrade runtime tests to link tests if the hardware | ||
16 | support isn't there to run them. This avoids thousands of test failures. To do | ||
17 | this we have to hook downgrade code into the main test runner. | ||
18 | |||
19 | Enable that downgrading for other cases where hardware to run vector extensions is | ||
20 | unavailable to remove test failures on other architectures too. | ||
21 | |||
22 | Also, for gcc.target tests, add checks on wheter loongson or msa code can | ||
23 | be run before trying that, allowing downgrading of tests there to work too. | ||
24 | |||
25 | Upstream-Status: Pending | ||
26 | [Parts of the patch may be able to be split off and acceptable to upstream with | ||
27 | discussion. Need to investigate why qemu-user passes the 'bad' instructions'] | ||
28 | |||
29 | Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> | ||
30 | |||
31 | Index: gcc-13.2.0/gcc/testsuite/lib/target-supports.exp | ||
32 | =================================================================== | ||
33 | --- gcc-13.2.0.orig/gcc/testsuite/lib/target-supports.exp | ||
34 | +++ gcc-13.2.0/gcc/testsuite/lib/target-supports.exp | ||
35 | @@ -2155,14 +2155,7 @@ proc check_mips_loongson_mmi_hw_availabl | ||
36 | if { !([istarget mips*-*-*]) } { | ||
37 | expr 0 | ||
38 | } else { | ||
39 | - check_runtime_nocache mips_loongson_mmi_hw_available { | ||
40 | - #include <loongson-mmiintrin.h> | ||
41 | - int main() | ||
42 | - { | ||
43 | - asm volatile ("paddw $f2,$f4,$f6"); | ||
44 | - return 0; | ||
45 | - } | ||
46 | - } "-mloongson-mmi" | ||
47 | + expr 0 | ||
48 | } | ||
49 | }] | ||
50 | } | ||
51 | @@ -2176,29 +2169,7 @@ proc check_mips_msa_hw_available { } { | ||
52 | if { !([istarget mips*-*-*]) } { | ||
53 | expr 0 | ||
54 | } else { | ||
55 | - check_runtime_nocache mips_msa_hw_available { | ||
56 | - #if !defined(__mips_msa) | ||
57 | - #error "MSA NOT AVAIL" | ||
58 | - #else | ||
59 | - #if !(((__mips == 64) || (__mips == 32)) && (__mips_isa_rev >= 2)) | ||
60 | - #error "MSA NOT AVAIL FOR ISA REV < 2" | ||
61 | - #endif | ||
62 | - #if !defined(__mips_hard_float) | ||
63 | - #error "MSA HARD_FLOAT REQUIRED" | ||
64 | - #endif | ||
65 | - #if __mips_fpr != 64 | ||
66 | - #error "MSA 64-bit FPR REQUIRED" | ||
67 | - #endif | ||
68 | - #include <msa.h> | ||
69 | - | ||
70 | - int main() | ||
71 | - { | ||
72 | - v8i16 v = __builtin_msa_ldi_h (0); | ||
73 | - v[0] = 0; | ||
74 | - return v[0]; | ||
75 | - } | ||
76 | - #endif | ||
77 | - } "-mmsa" | ||
78 | + expr 0 | ||
79 | } | ||
80 | }] | ||
81 | } | ||
82 | @@ -9187,6 +9158,7 @@ proc is-effective-target-keyword { arg } | ||
83 | |||
84 | proc et-dg-runtest { runtest testcases flags default-extra-flags } { | ||
85 | global dg-do-what-default | ||
86 | + global do-what-limit | ||
87 | global EFFECTIVE_TARGETS | ||
88 | global et_index | ||
89 | |||
90 | @@ -9194,6 +9166,7 @@ proc et-dg-runtest { runtest testcases f | ||
91 | foreach target $EFFECTIVE_TARGETS { | ||
92 | set target_flags $flags | ||
93 | set dg-do-what-default compile | ||
94 | + set do-what-limit link | ||
95 | set et_index [lsearch -exact $EFFECTIVE_TARGETS $target] | ||
96 | if { [info procs add_options_for_${target}] != [list] } { | ||
97 | set target_flags [add_options_for_${target} "$flags"] | ||
98 | @@ -9201,8 +9174,10 @@ proc et-dg-runtest { runtest testcases f | ||
99 | if { [info procs check_effective_target_${target}_runtime] | ||
100 | != [list] && [check_effective_target_${target}_runtime] } { | ||
101 | set dg-do-what-default run | ||
102 | + set do-what-limit run | ||
103 | } | ||
104 | $runtest $testcases $target_flags ${default-extra-flags} | ||
105 | + unset do-what-limit | ||
106 | } | ||
107 | } else { | ||
108 | set et_index 0 | ||
109 | @@ -10789,6 +10764,7 @@ proc check_effective_target_sigsetjmp {} | ||
110 | proc check_vect_support_and_set_flags { } { | ||
111 | global DEFAULT_VECTCFLAGS | ||
112 | global dg-do-what-default | ||
113 | + global do-what-limit | ||
114 | global EFFECTIVE_TARGETS | ||
115 | |||
116 | if [istarget powerpc-*paired*] { | ||
117 | @@ -10797,6 +10773,7 @@ proc check_vect_support_and_set_flags { | ||
118 | set dg-do-what-default run | ||
119 | } else { | ||
120 | set dg-do-what-default compile | ||
121 | + set do-what-limit link | ||
122 | } | ||
123 | } elseif [istarget powerpc*-*-*] { | ||
124 | # Skip targets not supporting -maltivec. | ||
125 | @@ -10821,6 +10798,7 @@ proc check_vect_support_and_set_flags { | ||
126 | lappend DEFAULT_VECTCFLAGS "-mcpu=970" | ||
127 | } | ||
128 | set dg-do-what-default compile | ||
129 | + set do-what-limit link | ||
130 | } | ||
131 | } elseif { [istarget i?86-*-*] || [istarget x86_64-*-*] } { | ||
132 | lappend DEFAULT_VECTCFLAGS "-msse2" | ||
133 | @@ -10828,6 +10806,7 @@ proc check_vect_support_and_set_flags { | ||
134 | set dg-do-what-default run | ||
135 | } else { | ||
136 | set dg-do-what-default compile | ||
137 | + set do-what-limit link | ||
138 | } | ||
139 | } elseif { [istarget mips*-*-*] | ||
140 | && [check_effective_target_nomips16] } { | ||
141 | @@ -10847,6 +10826,7 @@ proc check_vect_support_and_set_flags { | ||
142 | set dg-do-what-default run | ||
143 | } else { | ||
144 | set dg-do-what-default compile | ||
145 | + set do-what-limit link | ||
146 | } | ||
147 | } elseif [istarget alpha*-*-*] { | ||
148 | # Alpha's vectorization capabilities are extremely limited. | ||
149 | @@ -10860,6 +10840,7 @@ proc check_vect_support_and_set_flags { | ||
150 | set dg-do-what-default run | ||
151 | } else { | ||
152 | set dg-do-what-default compile | ||
153 | + set do-what-limit link | ||
154 | } | ||
155 | } elseif [istarget ia64-*-*] { | ||
156 | set dg-do-what-default run | ||
157 | @@ -10873,6 +10854,7 @@ proc check_vect_support_and_set_flags { | ||
158 | set dg-do-what-default run | ||
159 | } else { | ||
160 | set dg-do-what-default compile | ||
161 | + set do-what-limit link | ||
162 | } | ||
163 | } elseif [istarget aarch64*-*-*] { | ||
164 | set dg-do-what-default run | ||
165 | @@ -10897,6 +10879,7 @@ proc check_vect_support_and_set_flags { | ||
166 | } else { | ||
167 | lappend DEFAULT_VECTCFLAGS "-march=z14" "-mzarch" | ||
168 | set dg-do-what-default compile | ||
169 | + set do-what-limit link | ||
170 | } | ||
171 | } elseif [istarget amdgcn-*-*] { | ||
172 | set dg-do-what-default run | ||
173 | Index: gcc-13.2.0/gcc/testsuite/gcc.target/mips/mips.exp | ||
174 | =================================================================== | ||
175 | --- gcc-13.2.0.orig/gcc/testsuite/gcc.target/mips/mips.exp | ||
176 | +++ gcc-13.2.0/gcc/testsuite/gcc.target/mips/mips.exp | ||
177 | @@ -709,7 +709,23 @@ proc mips_first_unsupported_option { ups | ||
178 | global mips_option_tests | ||
179 | upvar $upstatus status | ||
180 | |||
181 | + if { [mips_have_test_option_p status "-mmsa"] } { | ||
182 | + verbose -log "Found -mmsa" | ||
183 | + if { ![check_mips_msa_hw_available] } { | ||
184 | + verbose -log "No MSA avail" | ||
185 | + return "-mmsa" | ||
186 | + } | ||
187 | + } | ||
188 | + if { [mips_have_test_option_p status "-mloongson-mmi"] } { | ||
189 | + verbose -log "Found -mloonson-mmi" | ||
190 | + if { ![check_mips_loongson_mmi_hw_available] } { | ||
191 | + verbose -log "No MMI avail" | ||
192 | + return "-mloonson-mmi" | ||
193 | + } | ||
194 | + } | ||
195 | + | ||
196 | foreach { option code } [array get mips_option_tests] { | ||
197 | + | ||
198 | if { [mips_have_test_option_p status $option] } { | ||
199 | regsub -all "\n" $code "\\n\\\n" asm | ||
200 | # Use check_runtime from target-supports.exp, which caches | ||
201 | Index: gcc-13.2.0/gcc/testsuite/lib/gcc-dg.exp | ||
202 | =================================================================== | ||
203 | --- gcc-13.2.0.orig/gcc/testsuite/lib/gcc-dg.exp | ||
204 | +++ gcc-13.2.0/gcc/testsuite/lib/gcc-dg.exp | ||
205 | @@ -240,9 +240,20 @@ proc schedule-cleanups { opts } { | ||
206 | |||
207 | proc gcc-dg-test-1 { target_compile prog do_what extra_tool_flags } { | ||
208 | # Set up the compiler flags, based on what we're going to do. | ||
209 | + global do-what-limit | ||
210 | |||
211 | set options [list] | ||
212 | |||
213 | + if [info exists do-what-limit] then { | ||
214 | + # Demote run tests to $do-what-limit if set | ||
215 | + switch $do_what { | ||
216 | + run { | ||
217 | + set do_what $do-what-limit | ||
218 | + set dg-do-what $do-what-limit | ||
219 | + } | ||
220 | + } | ||
221 | + } | ||
222 | + | ||
223 | switch $do_what { | ||
224 | "preprocess" { | ||
225 | set compile_type "preprocess" | ||