/usr/src/gcc-5/debian/patches/mpc-relative-literal-loads-rename.diff is in gcc-5-source 5.5.0-12ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 | Description: Backport mpc-relative-literal-loads option rename
This is a backport of a change from the linaro gcc-6 branch (by Yvan Roux),
which is itself a backport of a change by Wilco Dijkstra to the FSF tree. It
is included to simplify the backport of the fix for LP: #1695093. Original
commit message follows:
.
This patch cleans up the -mpc-relative-loads option processing. Rename to
avoid the confusing nopcrelative_literal_loads names. Fix the option
processing code to correctly support -mno-pc-relative-loads rather than
ignore it.
.
Fixed-Upstream: https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=237607
Bug-Ubuntu: https://bugs.launchpad.net/bugs/1695093
Author: Wilco Dijkstra <wdijkstr@arm.com>
Author: Yvan Roux <yvan.roux@linaro.org>
Author: dann frazier <dannf@ubuntu.com>
Last-Update: 2017-07-11
---
Index: b/src/gcc/config/aarch64/aarch64.c
===================================================================
--- a/src/gcc/config/aarch64/aarch64.c
+++ b/src/gcc/config/aarch64/aarch64.c
@@ -185,7 +185,7 @@ enum aarch64_processor aarch64_tune = co
unsigned long aarch64_tune_flags = 0;
/* Global flag for PC relative loads. */
-bool aarch64_nopcrelative_literal_loads;
+bool aarch64_pcrelative_literal_loads;
/* Support for command line parsing of boolean flags in the tuning
structures. */
@@ -1639,7 +1639,7 @@ aarch64_expand_mov_immediate (rtx dest,
we need to expand the literal pool access carefully.
This is something that needs to be done in a number
of places, so could well live as a separate function. */
- if (aarch64_nopcrelative_literal_loads)
+ if (!aarch64_pcrelative_literal_loads)
{
gcc_assert (can_create_pseudo_p ());
base = gen_reg_rtx (ptr_mode);
@@ -3779,7 +3779,7 @@ aarch64_classify_address (struct aarch64
return ((GET_CODE (sym) == LABEL_REF
|| (GET_CODE (sym) == SYMBOL_REF
&& CONSTANT_POOL_ADDRESS_P (sym)
- && !aarch64_nopcrelative_literal_loads)));
+ && aarch64_pcrelative_literal_loads)));
}
return false;
@@ -5041,7 +5041,7 @@ aarch64_secondary_reload (bool in_p ATTR
if (MEM_P (x) && GET_CODE (x) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (x)
&& (SCALAR_FLOAT_MODE_P (GET_MODE (x))
|| targetm.vector_mode_supported_p (GET_MODE (x)))
- && aarch64_nopcrelative_literal_loads)
+ && !aarch64_pcrelative_literal_loads)
{
sri->icode = aarch64_constant_pool_reload_icode (mode);
return NO_REGS;
@@ -7673,32 +7673,31 @@ aarch64_override_options_after_change_1
opts->x_align_functions = aarch64_tune_params.function_align;
}
- /* If nopcrelative_literal_loads is set on the command line, this
+ /* We default to no pc-relative literal loads. */
+
+ aarch64_pcrelative_literal_loads = false;
+
+ /* If -mpc-relative-literal-loads is set on the command line, this
implies that the user asked for PC relative literal loads. */
- if (opts->x_nopcrelative_literal_loads == 1)
- aarch64_nopcrelative_literal_loads = false;
+ if (opts->x_pcrelative_literal_loads == 1)
+ aarch64_pcrelative_literal_loads = true;
- /* 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
+ offending sequences. Without -mpc-relative-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
- to disallow non PC relative literal pool loads
- as many other things will break anyway. */
- if (opts->x_nopcrelative_literal_loads
- && (aarch64_cmodel == AARCH64_CMODEL_TINY
- || aarch64_cmodel == AARCH64_CMODEL_TINY_PIC))
- aarch64_nopcrelative_literal_loads = false;
+ if (opts->x_pcrelative_literal_loads == 2
+ && TARGET_FIX_ERR_A53_843419)
+ aarch64_pcrelative_literal_loads = true;
+
+ /* In the tiny memory model it makes no sense to disallow PC relative
+ literal pool loads. */
+ if (aarch64_cmodel == AARCH64_CMODEL_TINY
+ || aarch64_cmodel == AARCH64_CMODEL_TINY_PIC)
+ aarch64_pcrelative_literal_loads = true;
}
/* 'Unpack' up the internal tuning structs and update the options
@@ -8957,7 +8956,7 @@ aarch64_classify_symbol (rtx x, rtx offs
/* This is alright even in PIC code as the constant
pool reference is always PC relative and within
the same translation unit. */
- if (nopcrelative_literal_loads
+ if (!aarch64_pcrelative_literal_loads
&& CONSTANT_POOL_ADDRESS_P (x))
return SYMBOL_SMALL_ABSOLUTE;
else
Index: b/src/gcc/config/aarch64/aarch64.md
===================================================================
--- a/src/gcc/config/aarch64/aarch64.md
+++ b/src/gcc/config/aarch64/aarch64.md
@@ -4733,7 +4733,7 @@
[(set (match_operand:GPF_TF 0 "register_operand" "=w")
(mem:GPF_TF (match_operand 1 "aarch64_constant_pool_symref" "S")))
(clobber (match_operand:P 2 "register_operand" "=&r"))]
- "TARGET_FLOAT && aarch64_nopcrelative_literal_loads"
+ "TARGET_FLOAT && !aarch64_pcrelative_literal_loads"
{
aarch64_expand_mov_immediate (operands[2], XEXP (operands[1], 0));
emit_move_insn (operands[0], gen_rtx_MEM (<GPF_TF:MODE>mode, operands[2]));
@@ -4746,7 +4746,7 @@
[(set (match_operand:VALL 0 "register_operand" "=w")
(mem:VALL (match_operand 1 "aarch64_constant_pool_symref" "S")))
(clobber (match_operand:P 2 "register_operand" "=&r"))]
- "TARGET_FLOAT && aarch64_nopcrelative_literal_loads"
+ "TARGET_FLOAT && !aarch64_pcrelative_literal_loads"
{
aarch64_expand_mov_immediate (operands[2], XEXP (operands[1], 0));
emit_move_insn (operands[0], gen_rtx_MEM (<VALL:MODE>mode, operands[2]));
Index: b/src/gcc/config/aarch64/aarch64.opt
===================================================================
--- a/src/gcc/config/aarch64/aarch64.opt
+++ b/src/gcc/config/aarch64/aarch64.opt
@@ -146,5 +146,5 @@ EnumValue
Enum(aarch64_abi) String(lp64) Value(AARCH64_ABI_LP64)
mpc-relative-literal-loads
-Target Report Save Var(nopcrelative_literal_loads) Init(2) Save
+Target Report Save Var(pcrelative_literal_loads) Init(2) Save
PC relative literal loads.
Index: b/src/gcc/config/aarch64/aarch64-protos.h
===================================================================
--- a/src/gcc/config/aarch64/aarch64-protos.h
+++ b/src/gcc/config/aarch64/aarch64-protos.h
@@ -436,7 +436,7 @@ int aarch64_ccmp_mode_to_code (enum mach
bool extract_base_offset_in_addr (rtx mem, rtx *base, rtx *offset);
bool aarch64_operands_ok_for_ldpstp (rtx *, bool, enum machine_mode);
bool aarch64_operands_adjust_ok_for_ldpstp (rtx *, bool, enum machine_mode);
-extern bool aarch64_nopcrelative_literal_loads;
+extern bool aarch64_pcrelative_literal_loads;
/* Defined in common/config/aarch64-common.c. */
bool aarch64_handle_option (struct gcc_options *, struct gcc_options *,
|