Fix PR87374: ICE with -mslow-flash-data and -mword-relocations
GCC ICEs under -mslow-flash-data and -mword-relocations because there is no way to load an address, both literal pools and MOVW/MOVT being forbidden. This patch gives an error message when both options are specified by the user and adds the according dg-skip-if directives for tests that use either of these options. It also explicitely set the option when in PIC mode as per documentation rather than always check for target_word_relocation together with flag_pic. 2018-10-31 Thomas Preud'homme <thomas.preudhomme@linaro.org> gcc/ PR target/87374 * config/arm/arm.c (arm_option_check_internal): Disable the combined use of -mslow-flash-data and -mword-relocations. (arm_option_override): Enable -mword-relocations if -fpic or -fPIC. * config/arm/arm.md (SYMBOL_REF MOVT splitter): Stop checking for flag_pic. * doc/invoke.texi (-mword-relocations): Mention conflict with -mslow-flash-data. (-mslow-flash-data): Reciprocally. gcc/testsuite/ PR target/87374 * gcc.target/arm/movdi_movt.c: Skip if both -mslow-flash-data and -mword-relocations would be passed when compiling the test. * gcc.target/arm/movsi_movt.c: Likewise. * gcc.target/arm/pr81863.c: Likewise. * gcc.target/arm/thumb2-slow-flash-data-1.c: Likewise. * gcc.target/arm/thumb2-slow-flash-data-2.c: Likewise. * gcc.target/arm/thumb2-slow-flash-data-3.c: Likewise. * gcc.target/arm/thumb2-slow-flash-data-4.c: Likewise. * gcc.target/arm/thumb2-slow-flash-data-5.c: Likewise. * gcc.target/arm/tls-disable-literal-pool.c: Likewise. From-SVN: r265662
This commit is contained in:
parent
563cc649be
commit
6dc8ee419e
14 changed files with 53 additions and 10 deletions
|
@ -1,3 +1,15 @@
|
|||
2018-10-31 Thomas Preud'homme <thomas.preudhomme@linaro.org>
|
||||
|
||||
PR target/87374
|
||||
* config/arm/arm.c (arm_option_check_internal): Disable the combined
|
||||
use of -mslow-flash-data and -mword-relocations.
|
||||
(arm_option_override): Enable -mword-relocations if -fpic or -fPIC.
|
||||
* config/arm/arm.md (SYMBOL_REF MOVT splitter): Stop checking for
|
||||
flag_pic.
|
||||
* doc/invoke.texi (-mword-relocations): Mention conflict with
|
||||
-mslow-flash-data.
|
||||
(-mslow-flash-data): Reciprocally.
|
||||
|
||||
2018-10-31 Richard Henderson <richard.henderson@linaro.org>
|
||||
|
||||
* config/aarch64/aarch64.c (aarch64_hard_regno_mode_ok): Force
|
||||
|
|
|
@ -2893,17 +2893,22 @@ arm_option_check_internal (struct gcc_options *opts)
|
|||
flag_pic = 0;
|
||||
}
|
||||
|
||||
/* We only support -mpure-code and -mslow-flash-data on M-profile targets
|
||||
with MOVT. */
|
||||
if ((target_pure_code || target_slow_flash_data)
|
||||
&& (!TARGET_HAVE_MOVT || arm_arch_notm || flag_pic || TARGET_NEON))
|
||||
if (target_pure_code || target_slow_flash_data)
|
||||
{
|
||||
const char *flag = (target_pure_code ? "-mpure-code" :
|
||||
"-mslow-flash-data");
|
||||
error ("%s only supports non-pic code on M-profile targets with the "
|
||||
"MOVT instruction", flag);
|
||||
}
|
||||
|
||||
/* We only support -mpure-code and -mslow-flash-data on M-profile targets
|
||||
with MOVT. */
|
||||
if (!TARGET_HAVE_MOVT || arm_arch_notm || flag_pic || TARGET_NEON)
|
||||
error ("%s only supports non-pic code on M-profile targets with the "
|
||||
"MOVT instruction", flag);
|
||||
|
||||
/* Cannot load addresses: -mslow-flash-data forbids literal pool and
|
||||
-mword-relocations forbids relocation of MOVT/MOVW. */
|
||||
if (target_word_relocations)
|
||||
error ("%s incompatible with -mword-relocations", flag);
|
||||
}
|
||||
}
|
||||
|
||||
/* Recompute the global settings depending on target attribute options. */
|
||||
|
@ -3489,6 +3494,9 @@ arm_option_override (void)
|
|||
arm_pic_register = pic_register;
|
||||
}
|
||||
|
||||
if (flag_pic)
|
||||
target_word_relocations = 1;
|
||||
|
||||
/* Enable -mfix-cortex-m3-ldrd by default for Cortex-M3 cores. */
|
||||
if (fix_cm3_ldrd == 2)
|
||||
{
|
||||
|
|
|
@ -6128,7 +6128,7 @@
|
|||
[(set (match_operand:SI 0 "arm_general_register_operand" "")
|
||||
(match_operand:SI 1 "general_operand" ""))]
|
||||
"TARGET_USE_MOVT && GET_CODE (operands[1]) == SYMBOL_REF
|
||||
&& !flag_pic && !target_word_relocations
|
||||
&& !target_word_relocations
|
||||
&& !arm_tls_referenced_p (operands[1])"
|
||||
[(clobber (const_int 0))]
|
||||
{
|
||||
|
|
|
@ -17034,7 +17034,7 @@ this option and always use the original scheme.
|
|||
Only generate absolute relocations on word-sized values (i.e. R_ARM_ABS32).
|
||||
This is enabled by default on targets (uClinux, SymbianOS) where the runtime
|
||||
loader imposes this restriction, and when @option{-fpic} or @option{-fPIC}
|
||||
is specified.
|
||||
is specified. This option conflicts with @option{-mslow-flash-data}.
|
||||
|
||||
@item -mfix-cortex-m3-ldrd
|
||||
@opindex mfix-cortex-m3-ldrd
|
||||
|
@ -17071,7 +17071,7 @@ to Neon is high.
|
|||
Assume loading data from flash is slower than fetching instruction.
|
||||
Therefore literal load is minimized for better performance.
|
||||
This option is only supported when compiling for ARMv7 M-profile and
|
||||
off by default.
|
||||
off by default. It conflicts with @option{-mword-relocations}.
|
||||
|
||||
@item -masm-syntax-unified
|
||||
@opindex masm-syntax-unified
|
||||
|
|
|
@ -1,3 +1,17 @@
|
|||
2018-10-31 Thomas Preud'homme <thomas.preudhomme@linaro.org>
|
||||
|
||||
PR target/87374
|
||||
* gcc.target/arm/movdi_movt.c: Skip if both -mslow-flash-data and
|
||||
-mword-relocations would be passed when compiling the test.
|
||||
* gcc.target/arm/movsi_movt.c: Likewise.
|
||||
* gcc.target/arm/pr81863.c: Likewise.
|
||||
* gcc.target/arm/thumb2-slow-flash-data-1.c: Likewise.
|
||||
* gcc.target/arm/thumb2-slow-flash-data-2.c: Likewise.
|
||||
* gcc.target/arm/thumb2-slow-flash-data-3.c: Likewise.
|
||||
* gcc.target/arm/thumb2-slow-flash-data-4.c: Likewise.
|
||||
* gcc.target/arm/thumb2-slow-flash-data-5.c: Likewise.
|
||||
* gcc.target/arm/tls-disable-literal-pool.c: Likewise.
|
||||
|
||||
2018-10-31 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR testsuite/87802
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
/* { dg-do compile { target { arm_cortex_m && { arm_thumb2_ok || arm_thumb1_movt_ok } } } } */
|
||||
/* { dg-skip-if "-mslow-flash-data and -mword-relocations incompatible" { *-*-* } { "-mword-relocations" } } */
|
||||
/* { dg-options "-O2 -mslow-flash-data" } */
|
||||
|
||||
unsigned long long
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
/* { dg-do compile { target { arm_cortex_m && { arm_thumb2_ok || arm_thumb1_movt_ok } } } } */
|
||||
/* { dg-skip-if "-mslow-flash-data and -mword-relocations incompatible" { *-*-* } { "-mword-relocations" } } */
|
||||
/* { dg-options "-O2 -mslow-flash-data" } */
|
||||
|
||||
unsigned
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
/* testsuite/gcc.target/arm/pr48183.c */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-skip-if "-mslow-flash-data and -mword-relocations incompatible" { *-*-* } { "-mslow-flash-data" } } */
|
||||
/* { dg-options "-O2 -mword-relocations -march=armv7-a -marm" } */
|
||||
/* { dg-final { scan-assembler-not "\[\\t \]+movw" } } */
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-require-effective-target arm_cortex_m } */
|
||||
/* { dg-require-effective-target arm_thumb2_ok } */
|
||||
/* { dg-skip-if "-mslow-flash-data and -mword-relocations incompatible" { *-*-* } { "-mword-relocations" } } */
|
||||
/* { dg-options "-O2 -mthumb -mslow-flash-data" } */
|
||||
|
||||
float sf;
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
/* { dg-require-effective-target arm_thumb2_ok } */
|
||||
/* { dg-skip-if "avoid conflicts with multilib options" { *-*-* } { "-mcpu=*" } { "-mcpu=cortex-m4" "-mcpu=cortex-m7" } } */
|
||||
/* { dg-skip-if "do not override -mfloat-abi" { *-*-* } { "-mfloat-abi=*" } { "-mfloat-abi=hard" } } */
|
||||
/* { dg-skip-if "-mslow-flash-data and -mword-relocations incompatible" { *-*-* } { "-mword-relocations" } } */
|
||||
/* { dg-options "-march=armv7e-m+fp -mfloat-abi=hard -O2 -mthumb -mslow-flash-data" } */
|
||||
|
||||
float f (float);
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
/* { dg-require-effective-target arm_thumb2_ok } */
|
||||
/* { dg-skip-if "avoid conflicts with multilib options" { *-*-* } { "-mcpu=*" } { "-mcpu=cortex-m4" "-mcpu=cortex-m7" } } */
|
||||
/* { dg-skip-if "do not override -mfloat-abi" { *-*-* } { "-mfloat-abi=*" } { "-mfloat-abi=hard" } } */
|
||||
/* { dg-skip-if "-mslow-flash-data and -mword-relocations incompatible" { *-*-* } { "-mword-relocations" } } */
|
||||
/* { dg-options "-march=armv7e-m+fp -mfloat-abi=hard -mthumb -mslow-flash-data" } */
|
||||
|
||||
/* From PR71607 */
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
/* { dg-require-effective-target arm_thumb2_ok } */
|
||||
/* { dg-skip-if "avoid conflicts with multilib options" { *-*-* } { "-mcpu=*" } { "-mcpu=cortex-m4" "-mcpu=cortex-m7" } } */
|
||||
/* { dg-skip-if "do not override -mfloat-abi" { *-*-* } { "-mfloat-abi=*" } { "-mfloat-abi=hard" } } */
|
||||
/* { dg-skip-if "-mslow-flash-data and -mword-relocations incompatible" { *-*-* } { "-mword-relocations" } } */
|
||||
/* { dg-options "-march=armv7e-m+fp -mfloat-abi=hard -O2 -mthumb -mslow-flash-data" } */
|
||||
|
||||
double __attribute__ ((target ("fpu=fpv5-d16")))
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
/* { dg-require-effective-target arm_thumb2_ok } */
|
||||
/* { dg-skip-if "avoid conflicts with multilib options" { *-*-* } { "-mcpu=*" } { "-mcpu=cortex-m4" "-mcpu=cortex-m7" } } */
|
||||
/* { dg-skip-if "do not override -mfloat-abi" { *-*-* } { "-mfloat-abi=*" } { "-mfloat-abi=hard" } } */
|
||||
/* { dg-skip-if "-mslow-flash-data and -mword-relocations incompatible" { *-*-* } { "-mword-relocations" } } */
|
||||
/* { dg-options "-march=armv7e-m+fp -mfloat-abi=hard -O2 -mthumb -mslow-flash-data" } */
|
||||
|
||||
double __attribute__ ((target ("fpu=fpv5-sp-d16")))
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
/* { dg-require-effective-target tls_native } */
|
||||
/* { dg-require-effective-target arm_cortex_m } */
|
||||
/* { dg-require-effective-target arm_thumb2_ok } */
|
||||
/* { dg-skip-if "-mslow-flash-data and -mword-relocations incompatible" { *-*-* } { "-mword-relocations" } } */
|
||||
/* { dg-options "-mslow-flash-data" } */
|
||||
|
||||
__thread int x = 0;
|
||||
|
|
Loading…
Add table
Reference in a new issue