aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorChristophe Lyon <christophe.lyon@linaro.org>2016-03-10 13:29:48 +0000
committerChristophe Lyon <clyon@gcc.gnu.org>2016-03-10 14:29:48 +0100
commit48bb1a55e8b1a1624a9b8f49414e6680e517599c (patch)
treec9bf36489bb3609e511dbb8a841e8cc78b46686d /gcc
parent71017a7b7837a4eeb1d1c0b2b155c6567f4f3d95 (diff)
downloadgcc-48bb1a55e8b1a1624a9b8f49414e6680e517599c.zip
gcc-48bb1a55e8b1a1624a9b8f49414e6680e517599c.tar.gz
gcc-48bb1a55e8b1a1624a9b8f49414e6680e517599c.tar.bz2
re PR target/70113 ([AArch64] -mpc-relative-literal-loads conflicts with fix-cortex-a53-843419)
2016-03-10 Christophe Lyon <christophe.lyon@linaro.org> PR target/70113. * config/aarch64/aarch64.h (TARGET_FIX_ERR_A53_843419_DEFAULT): Always define to 0 or 1. (TARGET_FIX_ERR_A53_843419): New macro. * config/aarch64/aarch64-elf-raw.h (TARGET_FIX_ERR_A53_843419_DEFAULT): Update for above changes. * config/aarch64/aarch64-linux.h: Likewise. * config/aarch64/aarch64.c (aarch64_override_options_after_change_1): Do not default aarch64_nopcrelative_literal_loads to true if Cortex-A53 erratum 843419 is on. (aarch64_attributes): Handle fix-cortex-a53-843419. (aarch64_can_inline_p): Likewise. * config/aarch64/aarch64.opt (aarch64_fix_a53_err843419): Save. From-SVN: r234108
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog17
-rw-r--r--gcc/config/aarch64/aarch64-elf-raw.h2
-rw-r--r--gcc/config/aarch64/aarch64-linux.h2
-rw-r--r--gcc/config/aarch64/aarch64.c23
-rw-r--r--gcc/config/aarch64/aarch64.h14
-rw-r--r--gcc/config/aarch64/aarch64.opt2
6 files changed, 54 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b6db5de..cb91e97 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,20 @@
+2016-03-10 Christophe Lyon <christophe.lyon@linaro.org>
+
+ PR target/70113.
+ * config/aarch64/aarch64.h (TARGET_FIX_ERR_A53_843419_DEFAULT):
+ Always define to 0 or 1.
+ (TARGET_FIX_ERR_A53_843419): New macro.
+ * config/aarch64/aarch64-elf-raw.h
+ (TARGET_FIX_ERR_A53_843419_DEFAULT): Update for above changes.
+ * config/aarch64/aarch64-linux.h: Likewise.
+ * config/aarch64/aarch64.c
+ (aarch64_override_options_after_change_1): Do not default
+ aarch64_nopcrelative_literal_loads to true if Cortex-A53 erratum
+ 843419 is on.
+ (aarch64_attributes): Handle fix-cortex-a53-843419.
+ (aarch64_can_inline_p): Likewise.
+ * config/aarch64/aarch64.opt (aarch64_fix_a53_err843419): Save.
+
2016-03-10 Alan Lawrence <alan.lawrence@arm.com>
Jakub Jelinek <jakub@redhat.com>
diff --git a/gcc/config/aarch64/aarch64-elf-raw.h b/gcc/config/aarch64/aarch64-elf-raw.h
index 2dcb6d4..9097017 100644
--- a/gcc/config/aarch64/aarch64-elf-raw.h
+++ b/gcc/config/aarch64/aarch64-elf-raw.h
@@ -35,7 +35,7 @@
" %{mfix-cortex-a53-835769:--fix-cortex-a53-835769}"
#endif
-#ifdef TARGET_FIX_ERR_A53_843419_DEFAULT
+#if TARGET_FIX_ERR_A53_843419_DEFAULT
#define CA53_ERR_843419_SPEC \
" %{!mno-fix-cortex-a53-843419:--fix-cortex-a53-843419}"
#else
diff --git a/gcc/config/aarch64/aarch64-linux.h b/gcc/config/aarch64/aarch64-linux.h
index 6064b26..5fcaa59 100644
--- a/gcc/config/aarch64/aarch64-linux.h
+++ b/gcc/config/aarch64/aarch64-linux.h
@@ -53,7 +53,7 @@
" %{mfix-cortex-a53-835769:--fix-cortex-a53-835769}"
#endif
-#ifdef TARGET_FIX_ERR_A53_843419_DEFAULT
+#if TARGET_FIX_ERR_A53_843419_DEFAULT
#define CA53_ERR_843419_SPEC \
" %{!mno-fix-cortex-a53-843419:--fix-cortex-a53-843419}"
#else
diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
index 801f95a..51dfe79 100644
--- a/gcc/config/aarch64/aarch64.c
+++ b/gcc/config/aarch64/aarch64.c
@@ -8132,9 +8132,18 @@ aarch64_override_options_after_change_1 (struct gcc_options *opts)
if (opts->x_nopcrelative_literal_loads == 1)
aarch64_nopcrelative_literal_loads = false;
- /* If it is not set on the command line, we default to no
- pc relative literal loads. */
- if (opts->x_nopcrelative_literal_loads == 2)
+ /* If it is not set on the command line, we default to no pc
+ relative literal loads, unless the workaround for Cortex-A53
+ erratum 843419 is in effect. */
+ /* This is PR70113. When building the Linux kernel with
+ CONFIG_ARM64_ERRATUM_843419, support for relocations
+ R_AARCH64_ADR_PREL_PG_HI21 and R_AARCH64_ADR_PREL_PG_HI21_NC is
+ removed from the kernel to avoid loading objects with possibly
+ offending sequences. With nopcrelative_literal_loads, we would
+ generate such relocations, preventing the kernel build from
+ succeeding. */
+ if (opts->x_nopcrelative_literal_loads == 2
+ && !TARGET_FIX_ERR_A53_843419)
aarch64_nopcrelative_literal_loads = true;
/* In the tiny memory model it makes no sense
@@ -8818,6 +8827,8 @@ static const struct aarch64_attribute_info aarch64_attributes[] =
OPT_mgeneral_regs_only },
{ "fix-cortex-a53-835769", aarch64_attr_bool, true, NULL,
OPT_mfix_cortex_a53_835769 },
+ { "fix-cortex-a53-843419", aarch64_attr_bool, true, NULL,
+ OPT_mfix_cortex_a53_843419 },
{ "cmodel", aarch64_attr_enum, false, NULL, OPT_mcmodel_ },
{ "strict-align", aarch64_attr_mask, false, NULL, OPT_mstrict_align },
{ "omit-leaf-frame-pointer", aarch64_attr_bool, true, NULL,
@@ -9232,6 +9243,12 @@ aarch64_can_inline_p (tree caller, tree callee)
2, TARGET_FIX_ERR_A53_835769_DEFAULT))
return false;
+ if (!aarch64_tribools_ok_for_inlining_p (
+ caller_opts->x_aarch64_fix_a53_err843419,
+ callee_opts->x_aarch64_fix_a53_err843419,
+ 2, TARGET_FIX_ERR_A53_843419))
+ return false;
+
/* If the user explicitly specified -momit-leaf-frame-pointer for the
caller and calle and they don't match up, reject inlining. */
if (!aarch64_tribools_ok_for_inlining_p (
diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
index 8b463c9..ec96ce3 100644
--- a/gcc/config/aarch64/aarch64.h
+++ b/gcc/config/aarch64/aarch64.h
@@ -179,6 +179,20 @@ extern unsigned aarch64_architecture_version;
((aarch64_fix_a53_err835769 == 2) \
? TARGET_FIX_ERR_A53_835769_DEFAULT : aarch64_fix_a53_err835769)
+/* Make sure this is always defined so we don't have to check for ifdefs
+ but rather use normal ifs. */
+#ifndef TARGET_FIX_ERR_A53_843419_DEFAULT
+#define TARGET_FIX_ERR_A53_843419_DEFAULT 0
+#else
+#undef TARGET_FIX_ERR_A53_843419_DEFAULT
+#define TARGET_FIX_ERR_A53_843419_DEFAULT 1
+#endif
+
+/* Apply the workaround for Cortex-A53 erratum 843419. */
+#define TARGET_FIX_ERR_A53_843419 \
+ ((aarch64_fix_a53_err843419 == 2) \
+ ? TARGET_FIX_ERR_A53_843419_DEFAULT : aarch64_fix_a53_err843419)
+
/* ARMv8.1 Adv.SIMD support. */
#define TARGET_SIMD_RDMA (TARGET_SIMD && AARCH64_ISA_RDMA)
diff --git a/gcc/config/aarch64/aarch64.opt b/gcc/config/aarch64/aarch64.opt
index 49ef0c6..c637ff4 100644
--- a/gcc/config/aarch64/aarch64.opt
+++ b/gcc/config/aarch64/aarch64.opt
@@ -73,7 +73,7 @@ Target Report Var(aarch64_fix_a53_err835769) Init(2) Save
Workaround for ARM Cortex-A53 Erratum number 835769.
mfix-cortex-a53-843419
-Target Report
+Target Report Var(aarch64_fix_a53_err843419) Init(2) Save
Workaround for ARM Cortex-A53 Erratum number 843419.
mlittle-endian