gcc + glibc package update from upstream el7
Signed-off-by: basebuilder_pel7ppc64bebuilder0 <basebuilder@powerel.org>master
parent
d4ecfd388a
commit
84f24d821e
|
@ -93,3 +93,4 @@
|
|||
+typedef struct {const char *Array; String_Template *Bounds; } Fat_Pointer;
|
||||
|
||||
/* Types for Node/Entity Kinds: */
|
||||
|
||||
|
|
|
@ -32,3 +32,4 @@
|
|||
+
|
||||
/* Implement TARGET_HANDLE_OPTION.
|
||||
This function handles the target specific options for CPU/target selection.
|
||||
|
||||
|
|
|
@ -40,3 +40,5 @@
|
|||
+fi
|
||||
+
|
||||
# It may not be safe to run linking tests in AC_PROG_CC/AC_PROG_CXX.
|
||||
|
||||
|
||||
|
|
|
@ -14,3 +14,4 @@
|
|||
+ __attribute__((__aligned__(sizeof (void *))));
|
||||
} omp_nest_lock_t;
|
||||
#endif
|
||||
|
||||
|
|
|
@ -20,3 +20,4 @@
|
|||
+ std::__throw_runtime_error(__N("random_device could not be read"));
|
||||
return __ret;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
2015-07-14 Matthias Klose <doko@ubuntu.com>
|
||||
|
||||
PR target/66840
|
||||
* config/rs6000/t-rs6000 (TM_H): Add rs6000-cpus.def.
|
||||
|
||||
diff -Nrup a/gcc/config/rs6000/t-rs6000 b/gcc/config/rs6000/t-rs6000
|
||||
--- /gcc/config/rs6000/t-rs6000 2013-08-14 05:55:11.000000000 -0600
|
||||
+++ gcc/config/rs6000/t-rs6000 2018-04-18 12:09:30.614737081 -0600
|
||||
@@ -19,6 +19,7 @@
|
||||
# <http://www.gnu.org/licenses/>.
|
||||
|
||||
TM_H += $(srcdir)/config/rs6000/rs6000-builtin.def
|
||||
+TM_H += $(srcdir)/config/rs6000/rs6000-cpus.def
|
||||
|
||||
rs6000.o: $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
|
||||
$(RTL_H) $(REGS_H) hard-reg-set.h \
|
|
@ -0,0 +1,87 @@
|
|||
2016-12-13 Michael Meissner <meissner@linux.vnet.ibm.com>
|
||||
|
||||
Backport from mainline
|
||||
2016-12-07 Michael Meissner <meissner@linux.vnet.ibm.com>
|
||||
|
||||
PR target/72717
|
||||
* config/rs6000/rs6000.c (rs6000_expand_vector_init): If the
|
||||
V2DImode elements are SUBREG's convert the result into DImode
|
||||
rather than failing in emit_move_insn.
|
||||
|
||||
--- gcc/testsuite/gcc.target/powerpc/pr72717.c (nonexistent)
|
||||
+++ gcc/testsuite/gcc.target/powerpc/pr72717.c (revision 243626)
|
||||
@@ -0,0 +1,18 @@
|
||||
+/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
|
||||
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
|
||||
+/* { dg-require-effective-target powerpc_p8vector_ok } */
|
||||
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
|
||||
+/* { dg-options "-mcpu=power8 -O2" } */
|
||||
+
|
||||
+typedef long V __attribute__((__vector_size__(32)));
|
||||
+
|
||||
+extern void foo (V *, V*);
|
||||
+
|
||||
+/* This test generated an failure in emit_move_insn. */
|
||||
+
|
||||
+void
|
||||
+foo(V *p, V *q)
|
||||
+{
|
||||
+ V v = *q;
|
||||
+ *p = v << v[0];
|
||||
+}
|
||||
--- gcc/config/rs6000/rs6000.c (revision 243625)
|
||||
+++ gcc/config/rs6000/rs6000.c (revision 243626)
|
||||
@@ -6667,25 +6667,43 @@
|
||||
/* Double word values on VSX can use xxpermdi or lxvdsx. */
|
||||
if (VECTOR_MEM_VSX_P (mode) && (mode == V2DFmode || mode == V2DImode))
|
||||
{
|
||||
- rtx op0 = XVECEXP (vals, 0, 0);
|
||||
- rtx op1 = XVECEXP (vals, 0, 1);
|
||||
+ rtx op[2];
|
||||
+ size_t i;
|
||||
+ size_t num_elements = (all_same) ? 1 : 2;
|
||||
+ for (i = 0; i < num_elements; i++)
|
||||
+ {
|
||||
+ op[i] = XVECEXP (vals, 0, i);
|
||||
+ /* Just in case there is a SUBREG with a smaller mode, do a
|
||||
+ conversion. */
|
||||
+ if (GET_MODE (op[i]) != inner_mode)
|
||||
+ {
|
||||
+ rtx tmp = gen_reg_rtx (inner_mode);
|
||||
+ convert_move (tmp, op[i], 0);
|
||||
+ op[i] = tmp;
|
||||
+ }
|
||||
+ /* Allow load with splat double word. */
|
||||
+ else if (MEM_P (op[i]))
|
||||
+ {
|
||||
+ if (!all_same)
|
||||
+ op[i] = force_reg (inner_mode, op[i]);
|
||||
+ }
|
||||
+ else if (!REG_P (op[i]))
|
||||
+ op[i] = force_reg (inner_mode, op[i]);
|
||||
+ }
|
||||
+
|
||||
if (all_same)
|
||||
{
|
||||
- if (!MEM_P (op0) && !REG_P (op0))
|
||||
- op0 = force_reg (inner_mode, op0);
|
||||
if (mode == V2DFmode)
|
||||
- emit_insn (gen_vsx_splat_v2df (target, op0));
|
||||
+ emit_insn (gen_vsx_splat_v2df (target, op[0]));
|
||||
else
|
||||
- emit_insn (gen_vsx_splat_v2di (target, op0));
|
||||
+ emit_insn (gen_vsx_splat_v2di (target, op[0]));
|
||||
}
|
||||
else
|
||||
{
|
||||
- op0 = force_reg (inner_mode, op0);
|
||||
- op1 = force_reg (inner_mode, op1);
|
||||
if (mode == V2DFmode)
|
||||
- emit_insn (gen_vsx_concat_v2df (target, op0, op1));
|
||||
+ emit_insn (gen_vsx_concat_v2df (target, op[0], op[1]));
|
||||
else
|
||||
- emit_insn (gen_vsx_concat_v2di (target, op0, op1));
|
||||
+ emit_insn (gen_vsx_concat_v2di (target, op[0], op[1]));
|
||||
}
|
||||
return;
|
||||
}
|
|
@ -40,3 +40,4 @@
|
|||
+ __builtin_abort();
|
||||
+ return 0;
|
||||
+}
|
||||
|
||||
|
|
|
@ -0,0 +1,67 @@
|
|||
2017-07-18 Jonathan Wakely <jwakely@redhat.com>
|
||||
|
||||
PR libstdc++/81395
|
||||
* include/bits/fstream.tcc (basic_filebuf::xsgetn): Don't set buffer
|
||||
pointers for write mode after reading.
|
||||
* testsuite/27_io/basic_filebuf/sgetn/char/81395.cc: New.
|
||||
|
||||
--- libstdc++-v3/include/bits/fstream.tcc (revision 254017)
|
||||
+++ libstdc++-v3/include/bits/fstream.tcc (revision 254018)
|
||||
@@ -699,7 +699,7 @@
|
||||
|
||||
if (__n == 0)
|
||||
{
|
||||
- _M_set_buffer(0);
|
||||
+ // Set _M_reading. Buffer is already in initial 'read' mode.
|
||||
_M_reading = true;
|
||||
}
|
||||
else if (__len == 0)
|
||||
--- libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/81395.cc (nonexistent)
|
||||
+++ libstdc++-v3/testsuite/27_io/basic_filebuf/sgetn/char/81395.cc (revision 254018)
|
||||
@@ -0,0 +1,46 @@
|
||||
+// Copyright (C) 2017 Free Software Foundation, Inc.
|
||||
+//
|
||||
+// This file is part of the GNU ISO C++ Library. This library is free
|
||||
+// software; you can redistribute it and/or modify it under the
|
||||
+// terms of the GNU General Public License as published by the
|
||||
+// Free Software Foundation; either version 3, or (at your option)
|
||||
+// any later version.
|
||||
+
|
||||
+// This library is distributed in the hope that it will be useful,
|
||||
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+// GNU General Public License for more details.
|
||||
+
|
||||
+// You should have received a copy of the GNU General Public License along
|
||||
+// with this library; see the file COPYING3. If not see
|
||||
+// <http://www.gnu.org/licenses/>.
|
||||
+
|
||||
+// { dg-require-fileio "" }
|
||||
+
|
||||
+// PR libstdc++/81395
|
||||
+
|
||||
+#include <fstream>
|
||||
+#include <cstring> // for std::memset
|
||||
+#include <cstdio> // For BUFSIZ
|
||||
+
|
||||
+using std::memset;
|
||||
+
|
||||
+int main()
|
||||
+{
|
||||
+ {
|
||||
+ std::filebuf fb;
|
||||
+ fb.open("test.txt", std::ios::out);
|
||||
+ char data[BUFSIZ];
|
||||
+ memset(data, 'A', sizeof(data));
|
||||
+ fb.sputn(data, sizeof(data));
|
||||
+ }
|
||||
+
|
||||
+ std::filebuf fb;
|
||||
+ fb.open("test.txt", std::ios::in|std::ios::out);
|
||||
+ char buf[BUFSIZ];
|
||||
+ memset(buf, 0, sizeof(buf));
|
||||
+ fb.sgetn(buf, sizeof(buf));
|
||||
+ // Switch from reading to writing without seeking first:
|
||||
+ fb.sputn("B", 1);
|
||||
+ fb.pubsync();
|
||||
+}
|
|
@ -49,3 +49,4 @@ index f24c5c6e0ac..7c126e4122b 100644
|
|||
+
|
||||
return 0
|
||||
}
|
||||
|
||||
|
|
|
@ -44,3 +44,4 @@ index 6f8e7128921..468d649a4fa 100644
|
|||
+
|
||||
|
||||
#include "stack-check-6.c"
|
||||
|
||||
|
|
|
@ -48,3 +48,5 @@ index b92c126..c341801 100644
|
|||
These will all be equality tests. */
|
||||
-/* { dg-final { scan-assembler-times "(\?:je|jne)" 3 } } */
|
||||
+/* { dg-final { scan-assembler-times "(\?:jmp|je|jne)" 3 } } */
|
||||
|
||||
|
||||
|
|
|
@ -91,3 +91,4 @@ index 89d71e592dd..ffea1e564ba 100644
|
|||
+
|
||||
/* Set BLOCK_NUMBER for all the blocks in FN. */
|
||||
extern void number_blocks (tree);
|
||||
|
||||
|
|
|
@ -2702,3 +2702,4 @@ index 821cea9cb33..2c669a9822f 100644
|
|||
+ }
|
||||
return 0
|
||||
}
|
||||
|
||||
|
|
|
@ -85,3 +85,4 @@ index 183103f01e5..fe5b2c2b844 100644
|
|||
-/* { dg-final { scan-assembler-times "orq" 3 } } */
|
||||
+/* { dg-final { scan-assembler-times "sub\[ql\]" 4 } } */
|
||||
+/* { dg-final { scan-assembler-times "or\[ql\]" 3 } } */
|
||||
|
||||
|
|
|
@ -518,3 +518,4 @@ index fa24a1f..d1db41c 100644
|
|||
+/* { dg-options "-O2 -mno-indirect-branch-register -mno-indirect-branch-register -mfunction-return=thunk -mindirect-branch=thunk -fno-pic" } */
|
||||
|
||||
extern void (*bar) (void);
|
||||
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
2018-04-10 Segher Boessenkool <segher@kernel.crashing.org>
|
||||
|
||||
PR target/85287
|
||||
* gcc/config/rs6000/rs6000.md (allocate_stack): Put the residual size
|
||||
for stack clash protection in a register whenever we need it to be in
|
||||
a register.
|
||||
|
||||
|
||||
--- a/gcc/config/rs6000/rs6000.md 2018/04/10 21:09:30 259298
|
||||
+++ b/gcc/config/rs6000/rs6000.md 2018/04/10 21:37:34 259299
|
||||
@@ -9783,14 +9783,12 @@
|
||||
/* Now handle residuals. We just have to set operands[1] correctly
|
||||
and let the rest of the expander run. */
|
||||
operands[1] = residual;
|
||||
- if (!CONST_INT_P (residual))
|
||||
- operands[1] = force_reg (Pmode, operands[1]);
|
||||
}
|
||||
|
||||
- if (GET_CODE (operands[1]) != CONST_INT
|
||||
- || INTVAL (operands[1]) < -32767
|
||||
- || INTVAL (operands[1]) > 32768)
|
||||
+ if (!(CONST_INT_P (operands[1])
|
||||
+ && IN_RANGE (INTVAL (operands[1]), -32767, 32768)))
|
||||
{
|
||||
+ operands[1] = force_reg (Pmode, operands[1]);
|
||||
neg_op0 = gen_reg_rtx (Pmode);
|
||||
if (TARGET_32BIT)
|
||||
emit_insn (gen_negsi2 (neg_op0, operands[1]));
|
||||
@@ -9798,7 +9796,7 @@
|
||||
emit_insn (gen_negdi2 (neg_op0, operands[1]));
|
||||
}
|
||||
else
|
||||
- neg_op0 = GEN_INT (- INTVAL (operands[1]));
|
||||
+ neg_op0 = GEN_INT (-INTVAL (operands[1]));
|
||||
|
||||
insn = emit_insn ((* ((TARGET_32BIT) ? gen_movsi_update_stack
|
||||
: gen_movdi_di_update_stack))
|
||||
|
|
@ -0,0 +1,91 @@
|
|||
diff --git a/gcc/testsuite/gcc.dg/stack-check-5.c b/gcc/testsuite/gcc.dg/stack-check-5.c
|
||||
index 850e023ea4e..604fa3cf6c5 100644
|
||||
--- a/gcc/testsuite/gcc.dg/stack-check-5.c
|
||||
+++ b/gcc/testsuite/gcc.dg/stack-check-5.c
|
||||
@@ -1,7 +1,7 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fstack-clash-protection -fdump-rtl-pro_and_epilogue -fno-optimize-sibling-calls --param stack-clash-protection-probe-interval=12 --param stack-clash-protection-guard-size=12" } */
|
||||
/* { dg-require-effective-target supports_stack_clash_protection } */
|
||||
-/* { dg-skip-if "" { *-*-* } { "-fstack-protector" } { "" } } */
|
||||
+/* { dg-skip-if "" { *-*-* } { "-fstack-protector*" } { "" } } */
|
||||
|
||||
|
||||
/* Otherwise the S/390 back-end might save the stack pointer in f2 ()
|
||||
diff --git a/gcc/testsuite/gcc.dg/stack-check-6.c b/gcc/testsuite/gcc.dg/stack-check-6.c
|
||||
index ab4b0e8894c..fe75612b737 100644
|
||||
--- a/gcc/testsuite/gcc.dg/stack-check-6.c
|
||||
+++ b/gcc/testsuite/gcc.dg/stack-check-6.c
|
||||
@@ -1,7 +1,7 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fstack-clash-protection -fdump-rtl-pro_and_epilogue -fno-optimize-sibling-calls --param stack-clash-protection-probe-interval=12 --param stack-clash-protection-guard-size=12" } */
|
||||
/* { dg-require-effective-target supports_stack_clash_protection } */
|
||||
-/* { dg-skip-if "" { *-*-* } { "-fstack-protector" } { "" } } */
|
||||
+/* { dg-skip-if "" { *-*-* } { "-fstack-protector*" } { "" } } */
|
||||
|
||||
|
||||
extern void foo (char *);
|
||||
diff --git a/gcc/testsuite/gcc.dg/stack-check-6a.c b/gcc/testsuite/gcc.dg/stack-check-6a.c
|
||||
index 468d649a4fa..8fb9c621585 100644
|
||||
--- a/gcc/testsuite/gcc.dg/stack-check-6a.c
|
||||
+++ b/gcc/testsuite/gcc.dg/stack-check-6a.c
|
||||
@@ -4,7 +4,7 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fstack-clash-protection -fdump-rtl-pro_and_epilogue -fno-optimize-sibling-calls --param stack-clash-protection-probe-interval=12 --param stack-clash-protection-guard-size=16" } */
|
||||
/* { dg-require-effective-target supports_stack_clash_protection } */
|
||||
-/* { dg-skip-if "" { *-*-* } { "-fstack-protector" } { "" } } */
|
||||
+/* { dg-skip-if "" { *-*-* } { "-fstack-protector*" } { "" } } */
|
||||
|
||||
|
||||
#include "stack-check-6.c"
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/stack-check-11.c b/gcc/testsuite/gcc.target/i386/stack-check-11.c
|
||||
index fe5b2c2b844..43a291857b6 100644
|
||||
--- a/gcc/testsuite/gcc.target/i386/stack-check-11.c
|
||||
+++ b/gcc/testsuite/gcc.target/i386/stack-check-11.c
|
||||
@@ -1,6 +1,8 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fstack-clash-protection" } */
|
||||
/* { dg-require-effective-target supports_stack_clash_protection } */
|
||||
+/* { dg-skip-if "" { *-*-* } { "-fstack-protector*" } { "" } } */
|
||||
+
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/stack-check-17.c b/gcc/testsuite/gcc.target/i386/stack-check-17.c
|
||||
index dcd29305a2c..da6ea016815 100644
|
||||
--- a/gcc/testsuite/gcc.target/i386/stack-check-17.c
|
||||
+++ b/gcc/testsuite/gcc.target/i386/stack-check-17.c
|
||||
@@ -1,6 +1,8 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fstack-clash-protection -mtune=generic -fomit-frame-pointer" } */
|
||||
/* { dg-require-effective-target supports_stack_clash_protection } */
|
||||
+/* { dg-skip-if "" { *-*-* } { "-fstack-protector*" } { "" } } */
|
||||
+
|
||||
|
||||
|
||||
int x0, x1;
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/stack-check-18.c b/gcc/testsuite/gcc.target/i386/stack-check-18.c
|
||||
index 1638f776267..1cf4bbcfafb 100644
|
||||
--- a/gcc/testsuite/gcc.target/i386/stack-check-18.c
|
||||
+++ b/gcc/testsuite/gcc.target/i386/stack-check-18.c
|
||||
@@ -1,7 +1,7 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fstack-clash-protection -mtune=generic -fdump-rtl-expand" } */
|
||||
/* { dg-require-effective-target supports_stack_clash_protection } */
|
||||
-/* { dg-skip-if "" { *-*-* } { "-fstack-protector" } { "" } } */
|
||||
+/* { dg-skip-if "" { *-*-* } { "-fstack-protector*" } { "" } } */
|
||||
|
||||
int f1 (char *);
|
||||
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/stack-check-19.c b/gcc/testsuite/gcc.target/i386/stack-check-19.c
|
||||
index c341801189c..49f3a20af8b 100644
|
||||
--- a/gcc/testsuite/gcc.target/i386/stack-check-19.c
|
||||
+++ b/gcc/testsuite/gcc.target/i386/stack-check-19.c
|
||||
@@ -1,7 +1,7 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fstack-clash-protection -mtune=generic -fdump-rtl-expand" } */
|
||||
/* { dg-require-effective-target supports_stack_clash_protection } */
|
||||
-/* { dg-skip-if "" { *-*-* } { "-fstack-protector" } { "" } } */
|
||||
+/* { dg-skip-if "" { *-*-* } { "-fstack-protector*" } { "" } } */
|
||||
|
||||
int f1 (char *);
|
||||
|
|
@ -0,0 +1,114 @@
|
|||
commit f7765f70e0e254fd9ce4469c7281c69cd06c9467
|
||||
Author: law <law@138bc75d-0d04-0410-961f-82ee72b054a4>
|
||||
Date: Wed Jan 24 21:57:16 2018 +0000
|
||||
|
||||
PR target/83994
|
||||
* i386.c (get_probe_interval): Move to earlier point.
|
||||
(ix86_compute_frame_layout): If -fstack-clash-protection and
|
||||
the frame is larger than the probe interval, then use pushes
|
||||
to save registers rather than reg->mem moves.
|
||||
(ix86_expand_prologue): Remove conditional for int_registers_saved
|
||||
assertion.
|
||||
|
||||
PR target/83994
|
||||
* gcc.target/i386/pr83994.c: New test.
|
||||
|
||||
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
|
||||
index 15cfe83..5230227 100644
|
||||
--- a/gcc/config/i386/i386.c
|
||||
+++ b/gcc/config/i386/i386.c
|
||||
@@ -9371,6 +9371,18 @@ ix86_builtin_setjmp_frame_value (void)
|
||||
return stack_realign_fp ? hard_frame_pointer_rtx : virtual_stack_vars_rtx;
|
||||
}
|
||||
|
||||
+/* Return the probing interval for -fstack-clash-protection. */
|
||||
+
|
||||
+static HOST_WIDE_INT
|
||||
+get_probe_interval (void)
|
||||
+{
|
||||
+ if (flag_stack_clash_protection)
|
||||
+ return (HOST_WIDE_INT_1U
|
||||
+ << PARAM_VALUE (PARAM_STACK_CLASH_PROTECTION_PROBE_INTERVAL));
|
||||
+ else
|
||||
+ return (HOST_WIDE_INT_1U << STACK_CHECK_PROBE_INTERVAL_EXP);
|
||||
+}
|
||||
+
|
||||
/* When using -fsplit-stack, the allocation routines set a field in
|
||||
the TCB to the bottom of the stack plus this much space, measured
|
||||
in bytes. */
|
||||
@@ -9545,7 +9557,15 @@ ix86_compute_frame_layout (struct ix86_frame *frame)
|
||||
to_allocate = offset - frame->sse_reg_save_offset;
|
||||
|
||||
if ((!to_allocate && frame->nregs <= 1)
|
||||
- || (TARGET_64BIT && to_allocate >= (HOST_WIDE_INT) 0x80000000))
|
||||
+ || (TARGET_64BIT && to_allocate >= (HOST_WIDE_INT) 0x80000000)
|
||||
+ /* If stack clash probing needs a loop, then it needs a
|
||||
+ scratch register. But the returned register is only guaranteed
|
||||
+ to be safe to use after register saves are complete. So if
|
||||
+ stack clash protections are enabled and the allocated frame is
|
||||
+ larger than the probe interval, then use pushes to save
|
||||
+ callee saved registers. */
|
||||
+ || (flag_stack_clash_protection && to_allocate > get_probe_interval ()))
|
||||
+
|
||||
frame->save_regs_using_mov = false;
|
||||
|
||||
if (ix86_using_red_zone ()
|
||||
@@ -10181,18 +10201,6 @@ release_scratch_register_on_entry (struct scratch_reg *sr)
|
||||
}
|
||||
}
|
||||
|
||||
-/* Return the probing interval for -fstack-clash-protection. */
|
||||
-
|
||||
-static HOST_WIDE_INT
|
||||
-get_probe_interval (void)
|
||||
-{
|
||||
- if (flag_stack_clash_protection)
|
||||
- return (HOST_WIDE_INT_1U
|
||||
- << PARAM_VALUE (PARAM_STACK_CLASH_PROTECTION_PROBE_INTERVAL));
|
||||
- else
|
||||
- return (HOST_WIDE_INT_1U << STACK_CHECK_PROBE_INTERVAL_EXP);
|
||||
-}
|
||||
-
|
||||
/* Emit code to adjust the stack pointer by SIZE bytes while probing it.
|
||||
|
||||
This differs from the next routine in that it tries hard to prevent
|
||||
@@ -11064,12 +11072,11 @@ ix86_expand_prologue (void)
|
||||
&& (flag_stack_check == STATIC_BUILTIN_STACK_CHECK
|
||||
|| flag_stack_clash_protection))
|
||||
{
|
||||
- /* This assert wants to verify that integer registers were saved
|
||||
- prior to probing. This is necessary when probing may be implemented
|
||||
- as a function call (Windows). It is not necessary for stack clash
|
||||
- protection probing. */
|
||||
- if (!flag_stack_clash_protection)
|
||||
- gcc_assert (int_registers_saved);
|
||||
+ /* We expect the GP registers to be saved when probes are used
|
||||
+ as the probing sequences might need a scratch register and
|
||||
+ the routine to allocate one assumes the integer registers
|
||||
+ have already been saved. */
|
||||
+ gcc_assert (int_registers_saved);
|
||||
|
||||
if (flag_stack_clash_protection)
|
||||
{
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/pr83994.c b/gcc/testsuite/gcc.target/i386/pr83994.c
|
||||
new file mode 100644
|
||||
index 0000000..dc0b7cb
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gcc.target/i386/pr83994.c
|
||||
@@ -0,0 +1,16 @@
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-O2 -march=i686 -fpic -fstack-clash-protection" } */
|
||||
+/* { dg-require-effective-target ia32 } */
|
||||
+
|
||||
+void f1 (char *);
|
||||
+
|
||||
+__attribute__ ((regparm (3)))
|
||||
+int
|
||||
+f2 (int arg1, int arg2, int arg3)
|
||||
+{
|
||||
+ char buf[16384];
|
||||
+ f1 (buf);
|
||||
+ f1 (buf);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
|
@ -0,0 +1,163 @@
|
|||
commit 33839c8f8aa7857cc5f22ddb3f0960999cb0dfc7
|
||||
Author: law <law@138bc75d-0d04-0410-961f-82ee72b054a4>
|
||||
Date: Wed Jan 31 05:02:30 2018 +0000
|
||||
|
||||
PR target/84064
|
||||
* i386.c (ix86_adjust_stack_and_probe_stack_clash): New argument
|
||||
INT_REGISTERS_SAVED. Check it prior to calling
|
||||
get_scratch_register_on_entry.
|
||||
(ix86_adjust_stack_and_probe): Similarly.
|
||||
(ix86_emit_probe_stack_range): Similarly.
|
||||
(ix86_expand_prologue): Corresponding changes.
|
||||
|
||||
PR target/84064
|
||||
* gcc.target/i386/pr84064: New test.
|
||||
|
||||
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
|
||||
index 5230227..2fe2a0c 100644
|
||||
--- a/gcc/config/i386/i386.c
|
||||
+++ b/gcc/config/i386/i386.c
|
||||
@@ -10206,10 +10206,14 @@ release_scratch_register_on_entry (struct scratch_reg *sr)
|
||||
This differs from the next routine in that it tries hard to prevent
|
||||
attacks that jump the stack guard. Thus it is never allowed to allocate
|
||||
more than PROBE_INTERVAL bytes of stack space without a suitable
|
||||
- probe. */
|
||||
+ probe.
|
||||
+
|
||||
+ INT_REGISTERS_SAVED is true if integer registers have already been
|
||||
+ pushed on the stack. */
|
||||
|
||||
static void
|
||||
-ix86_adjust_stack_and_probe_stack_clash (const HOST_WIDE_INT size)
|
||||
+ix86_adjust_stack_and_probe_stack_clash (const HOST_WIDE_INT size,
|
||||
+ const bool int_registers_saved)
|
||||
{
|
||||
struct machine_function *m = cfun->machine;
|
||||
struct ix86_frame frame;
|
||||
@@ -10318,6 +10322,12 @@ ix86_adjust_stack_and_probe_stack_clash (const HOST_WIDE_INT size)
|
||||
}
|
||||
else
|
||||
{
|
||||
+ /* We expect the GP registers to be saved when probes are used
|
||||
+ as the probing sequences might need a scratch register and
|
||||
+ the routine to allocate one assumes the integer registers
|
||||
+ have already been saved. */
|
||||
+ gcc_assert (int_registers_saved);
|
||||
+
|
||||
struct scratch_reg sr;
|
||||
get_scratch_register_on_entry (&sr);
|
||||
|
||||
@@ -10376,10 +10386,14 @@ ix86_adjust_stack_and_probe_stack_clash (const HOST_WIDE_INT size)
|
||||
emit_insn (gen_blockage ());
|
||||
}
|
||||
|
||||
-/* Emit code to adjust the stack pointer by SIZE bytes while probing it. */
|
||||
+/* Emit code to adjust the stack pointer by SIZE bytes while probing it.
|
||||
+
|
||||
+ INT_REGISTERS_SAVED is true if integer registers have already been
|
||||
+ pushed on the stack. */
|
||||
|
||||
static void
|
||||
-ix86_adjust_stack_and_probe (const HOST_WIDE_INT size)
|
||||
+ix86_adjust_stack_and_probe (const HOST_WIDE_INT size,
|
||||
+ const bool int_registers_saved)
|
||||
{
|
||||
/* We skip the probe for the first interval + a small dope of 4 words and
|
||||
probe that many bytes past the specified size to maintain a protection
|
||||
@@ -10440,6 +10454,12 @@ ix86_adjust_stack_and_probe (const HOST_WIDE_INT size)
|
||||
equality test for the loop condition. */
|
||||
else
|
||||
{
|
||||
+ /* We expect the GP registers to be saved when probes are used
|
||||
+ as the probing sequences might need a scratch register and
|
||||
+ the routine to allocate one assumes the integer registers
|
||||
+ have already been saved. */
|
||||
+ gcc_assert (int_registers_saved);
|
||||
+
|
||||
HOST_WIDE_INT rounded_size;
|
||||
struct scratch_reg sr;
|
||||
|
||||
@@ -10564,10 +10584,14 @@ output_adjust_stack_and_probe (rtx reg)
|
||||
}
|
||||
|
||||
/* Emit code to probe a range of stack addresses from FIRST to FIRST+SIZE,
|
||||
- inclusive. These are offsets from the current stack pointer. */
|
||||
+ inclusive. These are offsets from the current stack pointer.
|
||||
+
|
||||
+ INT_REGISTERS_SAVED is true if integer registers have already been
|
||||
+ pushed on the stack. */
|
||||
|
||||
static void
|
||||
-ix86_emit_probe_stack_range (HOST_WIDE_INT first, HOST_WIDE_INT size)
|
||||
+ix86_emit_probe_stack_range (HOST_WIDE_INT first, HOST_WIDE_INT size,
|
||||
+ const bool int_registers_saved)
|
||||
{
|
||||
/* See if we have a constant small number of probes to generate. If so,
|
||||
that's the easy case. The run-time loop is made up of 7 insns in the
|
||||
@@ -10595,6 +10619,12 @@ ix86_emit_probe_stack_range (HOST_WIDE_INT first, HOST_WIDE_INT size)
|
||||
equality test for the loop condition. */
|
||||
else
|
||||
{
|
||||
+ /* We expect the GP registers to be saved when probes are used
|
||||
+ as the probing sequences might need a scratch register and
|
||||
+ the routine to allocate one assumes the integer registers
|
||||
+ have already been saved. */
|
||||
+ gcc_assert (int_registers_saved);
|
||||
+
|
||||
HOST_WIDE_INT rounded_size, last;
|
||||
struct scratch_reg sr;
|
||||
|
||||
@@ -11072,20 +11102,15 @@ ix86_expand_prologue (void)
|
||||
&& (flag_stack_check == STATIC_BUILTIN_STACK_CHECK
|
||||
|| flag_stack_clash_protection))
|
||||
{
|
||||
- /* We expect the GP registers to be saved when probes are used
|
||||
- as the probing sequences might need a scratch register and
|
||||
- the routine to allocate one assumes the integer registers
|
||||
- have already been saved. */
|
||||
- gcc_assert (int_registers_saved);
|
||||
-
|
||||
if (flag_stack_clash_protection)
|
||||
{
|
||||
- ix86_adjust_stack_and_probe_stack_clash (allocate);
|
||||
+ ix86_adjust_stack_and_probe_stack_clash (allocate,
|
||||
+ int_registers_saved);
|
||||
allocate = 0;
|
||||
}
|
||||
else if (STACK_CHECK_MOVING_SP)
|
||||
{
|
||||
- ix86_adjust_stack_and_probe (allocate);
|
||||
+ ix86_adjust_stack_and_probe (allocate, int_registers_saved);
|
||||
allocate = 0;
|
||||
}
|
||||
else
|
||||
@@ -11096,9 +11121,11 @@ ix86_expand_prologue (void)
|
||||
size = 0x80000000 - get_stack_check_protect () - 1;
|
||||
|
||||
if (TARGET_STACK_PROBE)
|
||||
- ix86_emit_probe_stack_range (0, size + get_stack_check_protect ());
|
||||
+ ix86_emit_probe_stack_range (0, size + get_stack_check_protect (),
|
||||
+ int_registers_saved);
|
||||
else
|
||||
- ix86_emit_probe_stack_range (get_stack_check_protect (), size);
|
||||
+ ix86_emit_probe_stack_range (get_stack_check_protect (), size,
|
||||
+ int_registers_saved);
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/pr84064.c b/gcc/testsuite/gcc.target/i386/pr84064.c
|
||||
new file mode 100644
|
||||
index 0000000..01f8d9e
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gcc.target/i386/pr84064.c
|
||||
@@ -0,0 +1,10 @@
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-O2 -march=i686 -fstack-clash-protection" } */
|
||||
+/* { dg-require-effective-target ia32 } */
|
||||
+
|
||||
+void
|
||||
+f (void *p1, void *p2)
|
||||
+{
|
||||
+ __builtin_memcpy (p1, p2, 1000);
|
||||
+}
|
||||
+
|
|
@ -0,0 +1,182 @@
|
|||
commit 14041afe24556efd5845564aa183b6451fd9d6cc
|
||||
Author: law <law@138bc75d-0d04-0410-961f-82ee72b054a4>
|
||||
Date: Thu Feb 1 16:22:56 2018 +0000
|
||||
|
||||
PR target/84128
|
||||
* config/i386/i386.c (release_scratch_register_on_entry): Add new
|
||||
OFFSET and RELEASE_VIA_POP arguments. Use SP+OFFSET to restore
|
||||
the scratch if RELEASE_VIA_POP is false.
|
||||
(ix86_adjust_stack_and_probe_stack_clash): Un-constify SIZE.
|
||||
If we have to save a temporary register, decrement SIZE appropriately.
|
||||
Pass new arguments to release_scratch_register_on_entry.
|
||||
(ix86_adjust_stack_and_probe): Likewise.
|
||||
(ix86_emit_probe_stack_range): Pass new arguments to
|
||||
release_scratch_register_on_entry.
|
||||
|
||||
PR target/84128
|
||||
* gcc.target/i386/pr84128.c: New test.
|
||||
|
||||
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
|
||||
index 2fe2a0c..c25d26c 100644
|
||||
--- a/gcc/config/i386/i386.c
|
||||
+++ b/gcc/config/i386/i386.c
|
||||
@@ -10182,22 +10182,39 @@ get_scratch_register_on_entry (struct scratch_reg *sr)
|
||||
}
|
||||
}
|
||||
|
||||
-/* Release a scratch register obtained from the preceding function. */
|
||||
+/* Release a scratch register obtained from the preceding function.
|
||||
+
|
||||
+ If RELEASE_VIA_POP is true, we just pop the register off the stack
|
||||
+ to release it. This is what non-Linux systems use with -fstack-check.
|
||||
+
|
||||
+ Otherwise we use OFFSET to locate the saved register and the
|
||||
+ allocated stack space becomes part of the local frame and is
|
||||
+ deallcated by the epilogue. */
|
||||
|
||||
static void
|
||||
-release_scratch_register_on_entry (struct scratch_reg *sr)
|
||||
+release_scratch_register_on_entry (struct scratch_reg *sr, HOST_WIDE_INT offset,
|
||||
+ bool release_via_pop)
|
||||
{
|
||||
if (sr->saved)
|
||||
{
|
||||
- struct machine_function *m = cfun->machine;
|
||||
- rtx x, insn = emit_insn (gen_pop (sr->reg));
|
||||
+ if (release_via_pop)
|
||||
+ {
|
||||
+ struct machine_function *m = cfun->machine;
|
||||
+ rtx x, insn = emit_insn (gen_pop (sr->reg));
|
||||
|
||||
- /* The RTX_FRAME_RELATED_P mechanism doesn't know about pop. */
|
||||
- RTX_FRAME_RELATED_P (insn) = 1;
|
||||
- x = gen_rtx_PLUS (Pmode, stack_pointer_rtx, GEN_INT (UNITS_PER_WORD));
|
||||
- x = gen_rtx_SET (VOIDmode, stack_pointer_rtx, x);
|
||||
- add_reg_note (insn, REG_FRAME_RELATED_EXPR, x);
|
||||
- m->fs.sp_offset -= UNITS_PER_WORD;
|
||||
+ /* The RTX FRAME_RELATED_P mechanism doesn't know about pop. */
|
||||
+ RTX_FRAME_RELATED_P (insn) = 1;
|
||||
+ x = gen_rtx_PLUS (Pmode, stack_pointer_rtx, GEN_INT (UNITS_PER_WORD));
|
||||
+ x = gen_rtx_SET (VOIDmode, stack_pointer_rtx, x);
|
||||
+ add_reg_note (insn, REG_FRAME_RELATED_EXPR, x);
|
||||
+ m->fs.sp_offset -= UNITS_PER_WORD;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ rtx x = gen_rtx_PLUS (Pmode, stack_pointer_rtx, GEN_INT (offset));
|
||||
+ x = gen_rtx_SET (VOIDmode, sr->reg, gen_rtx_MEM (word_mode, x));
|
||||
+ emit_insn (x);
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10212,7 +10229,7 @@ release_scratch_register_on_entry (struct scratch_reg *sr)
|
||||
pushed on the stack. */
|
||||
|
||||
static void
|
||||
-ix86_adjust_stack_and_probe_stack_clash (const HOST_WIDE_INT size,
|
||||
+ix86_adjust_stack_and_probe_stack_clash (HOST_WIDE_INT size,
|
||||
const bool int_registers_saved)
|
||||
{
|
||||
struct machine_function *m = cfun->machine;
|
||||
@@ -10331,6 +10348,12 @@ ix86_adjust_stack_and_probe_stack_clash (const HOST_WIDE_INT size,
|
||||
struct scratch_reg sr;
|
||||
get_scratch_register_on_entry (&sr);
|
||||
|
||||
+ /* If we needed to save a register, then account for any space
|
||||
+ that was pushed (we are not going to pop the register when
|
||||
+ we do the restore). */
|
||||
+ if (sr.saved)
|
||||
+ size -= UNITS_PER_WORD;
|
||||
+
|
||||
/* Step 1: round SIZE down to a multiple of the interval. */
|
||||
HOST_WIDE_INT rounded_size = size & -probe_interval;
|
||||
|
||||
@@ -10379,7 +10402,9 @@ ix86_adjust_stack_and_probe_stack_clash (const HOST_WIDE_INT size,
|
||||
m->fs.cfa_reg == stack_pointer_rtx);
|
||||
dump_stack_clash_frame_info (PROBE_LOOP, size != rounded_size);
|
||||
|
||||
- release_scratch_register_on_entry (&sr);
|
||||
+ /* This does not deallocate the space reserved for the scratch
|
||||
+ register. That will be deallocated in the epilogue. */
|
||||
+ release_scratch_register_on_entry (&sr, size, false);
|
||||
}
|
||||
|
||||
/* Make sure nothing is scheduled before we are done. */
|
||||
@@ -10392,7 +10417,7 @@ ix86_adjust_stack_and_probe_stack_clash (const HOST_WIDE_INT size,
|
||||
pushed on the stack. */
|
||||
|
||||
static void
|
||||
-ix86_adjust_stack_and_probe (const HOST_WIDE_INT size,
|
||||
+ix86_adjust_stack_and_probe (HOST_WIDE_INT size,
|
||||
const bool int_registers_saved)
|
||||
{
|
||||
/* We skip the probe for the first interval + a small dope of 4 words and
|
||||
@@ -10465,6 +10490,11 @@ ix86_adjust_stack_and_probe (const HOST_WIDE_INT size,
|
||||
|
||||
get_scratch_register_on_entry (&sr);
|
||||
|
||||
+ /* If we needed to save a register, then account for any space
|
||||
+ that was pushed (we are not going to pop the register when
|
||||
+ we do the restore). */
|
||||
+ if (sr.saved)
|
||||
+ size -= UNITS_PER_WORD;
|
||||
|
||||
/* Step 1: round SIZE to the previous multiple of the interval. */
|
||||
|
||||
@@ -10516,7 +10546,9 @@ ix86_adjust_stack_and_probe (const HOST_WIDE_INT size,
|
||||
(get_probe_interval ()
|
||||
+ dope))));
|
||||
|
||||
- release_scratch_register_on_entry (&sr);
|
||||
+ /* This does not deallocate the space reserved for the scratch
|
||||
+ register. That will be deallocated in the epilogue. */
|
||||
+ release_scratch_register_on_entry (&sr, size, false);
|
||||
}
|
||||
|
||||
gcc_assert (cfun->machine->fs.cfa_reg != stack_pointer_rtx);
|
||||
@@ -10669,7 +10701,7 @@ ix86_emit_probe_stack_range (HOST_WIDE_INT first, HOST_WIDE_INT size,
|
||||
sr.reg),
|
||||
rounded_size - size));
|
||||
|
||||
- release_scratch_register_on_entry (&sr);
|
||||
+ release_scratch_register_on_entry (&sr, size, true);
|
||||
}
|
||||
|
||||
/* Make sure nothing is scheduled before we are done. */
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/pr84128.c b/gcc/testsuite/gcc.target/i386/pr84128.c
|
||||
new file mode 100644
|
||||
index 0000000..a8323fd
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gcc.target/i386/pr84128.c
|
||||
@@ -0,0 +1,30 @@
|
||||
+/* { dg-do run } */
|
||||
+/* { dg-options "-O2 -march=i686 -mtune=generic -fstack-clash-protection" } */
|
||||
+/* { dg-require-effective-target ia32 } */
|
||||
+
|
||||
+__attribute__ ((noinline, noclone, weak, regparm (3)))
|
||||
+int
|
||||
+f1 (long arg0, int (*pf) (long, void *))
|
||||
+{
|
||||
+ unsigned char buf[32768];
|
||||
+ return pf (arg0, buf);
|
||||
+}
|
||||
+
|
||||
+__attribute__ ((noinline, noclone, weak))
|
||||
+int
|
||||
+f2 (long arg0, void *ignored)
|
||||
+{
|
||||
+ if (arg0 != 17)
|
||||
+ __builtin_abort ();
|
||||
+ return 19;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ if (f1 (17, f2) != 19)
|
||||
+ __builtin_abort ();
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+
|
|
@ -0,0 +1,80 @@
|
|||
commit 5fdcac79eb72406c59fa72073dfb3ba21380f56d
|
||||
Author: ktkachov <ktkachov@138bc75d-0d04-0410-961f-82ee72b054a4>
|
||||
Date: Tue Apr 10 09:58:57 2018 +0000
|
||||
|
||||
[explow] PR target/85173: validize memory before passing it on to target probe_stack
|
||||
|
||||
In this PR the expansion code emits an invalid memory address for the stack probe, which the backend fails to recognise.
|
||||
The address is created explicitly in anti_adjust_stack_and_probe_stack_clash in explow.c and passed down to gen_probe_stack
|
||||
without any validation in emit_stack_probe.
|
||||
|
||||
This patch fixes the ICE by calling validize_mem on the memory location before passing it down to the target.
|
||||
Jakub pointed out that we also want to create valid addresses for the probe_stack_address case, so this patch
|
||||
creates an expand operand and legitimizes it before passing it down to the probe_stack_address expander.
|
||||
|
||||
This patch passes bootstrap and testing on arm-none-linux-gnueabihf and aarch64-none-linux-gnu
|
||||
and ppc64le-redhat-linux on gcc112 in the compile farm.
|
||||
|
||||
PR target/85173
|
||||
* explow.c (emit_stack_probe): Call validize_mem on memory location
|
||||
before passing it to gen_probe_stack. Create address operand and
|
||||
legitimize it for the probe_stack_address case.
|
||||
|
||||
* gcc.target/arm/pr85173.c: New test.
|
||||
|
||||
|
||||
|
||||
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@259266 138bc75d-0d04-0410-961f-82ee72b054a4
|
||||
|
||||
diff --git a/gcc/explow.c b/gcc/explow.c
|
||||
index 9386489..e2253ae 100644
|
||||
--- a/gcc/explow.c
|
||||
+++ b/gcc/explow.c
|
||||
@@ -1549,13 +1549,20 @@ emit_stack_probe (rtx address)
|
||||
{
|
||||
#ifdef HAVE_probe_stack_address
|
||||
if (HAVE_probe_stack_address)
|
||||
- emit_insn (gen_probe_stack_address (address));
|
||||
+ {
|
||||
+ struct expand_operand ops[1];
|
||||
+ insn_code icode = targetm.code_for_probe_stack_address;
|
||||
+ create_address_operand (ops, address);
|
||||
+ maybe_legitimize_operands (icode, 0, 1, ops);
|
||||
+ expand_insn (icode, 1, ops);
|
||||
+ }
|
||||
else
|
||||
#endif
|
||||
{
|
||||
rtx memref = gen_rtx_MEM (word_mode, address);
|
||||
|
||||
MEM_VOLATILE_P (memref) = 1;
|
||||
+ memref = validize_mem (memref);
|
||||
|
||||
/* See if we have an insn to probe the stack. */
|
||||
#ifdef HAVE_probe_stack
|
||||
diff --git a/gcc/testsuite/gcc.target/arm/pr85173.c b/gcc/testsuite/gcc.target/arm/pr85173.c
|
||||
new file mode 100644
|
||||
index 0000000..36105c9
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gcc.target/arm/pr85173.c
|
||||
@@ -0,0 +1,20 @@
|
||||
+/* PR target/85173. */
|
||||
+
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-probe-interval=14" } */
|
||||
+/* { dg-require-effective-target arm_thumb2_ok } */
|
||||
+
|
||||
+__attribute__((noinline, noclone)) void
|
||||
+foo (char *p)
|
||||
+{
|
||||
+ asm volatile ("" : : "r" (p) : "memory");
|
||||
+}
|
||||
+
|
||||
+/* Nonconstant alloca, small local frame. */
|
||||
+__attribute__((noinline, noclone)) void
|
||||
+f5 (int x)
|
||||
+{
|
||||
+ char locals[128];
|
||||
+ char *vla = __builtin_alloca (x);
|
||||
+ foo (vla);
|
||||
+}
|
|
@ -0,0 +1,64 @@
|
|||
commit 49033c9c57a415db02ac5d98badf5f53342bca83
|
||||
Author: krebbel <krebbel@138bc75d-0d04-0410-961f-82ee72b054a4>
|
||||
Date: Thu Apr 12 09:14:57 2018 +0000
|
||||
|
||||
IBM Z: Spectre: Prevent thunk cfi to be emitted with -fno-dwarf2-cfi-asm
|
||||
|
||||
The CFI magic we emit as part of the indirect branch thunks in order to
|
||||
have somewhat sane unwind information must not be emitted with
|
||||
-fno-dwarf2-cfi-asm.
|
||||
|
||||
gcc/ChangeLog:
|
||||
|
||||
2018-04-12 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
|
||||
|
||||
* config/s390/s390.c (s390_output_indirect_thunk_function): Check
|
||||
also for flag_dwarf2_cfi_asm.
|
||||
|
||||
gcc/testsuite/ChangeLog:
|
||||
|
||||
2018-04-12 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
|
||||
|
||||
* gcc.target/s390/nobp-no-dwarf2-cfi.c: New test.
|
||||
|
||||
|
||||
|
||||
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@259340 138bc75d-0d04-0410-961f-82ee72b054a4
|
||||
|
||||
diff -Nrup gcc/config/s390/s390.c gcc/config/s390/s390.c
|
||||
--- gcc/config/s390/s390.c 2018-04-18 13:35:43.856279249 -0600
|
||||
+++ gcc/config/s390/s390.c 2018-04-18 13:36:21.037007877 -0600
|
||||
@@ -14091,7 +14091,7 @@ s390_output_indirect_thunk_function (uns
|
||||
|
||||
calls: Instead of caller->thunk the backtrace will be
|
||||
caller->callee->thunk */
|
||||
- if (flag_asynchronous_unwind_tables)
|
||||
+ if (flag_asynchronous_unwind_tables && flag_dwarf2_cfi_asm)
|
||||
{
|
||||
fputs ("\t.cfi_signal_frame\n", asm_out_file);
|
||||
fprintf (asm_out_file, "\t.cfi_return_column %d\n", regno);
|
||||
diff --git gcc/testsuite/gcc.target/s390/nobp-no-dwarf2-cfi.c gcc/testsuite/gcc.target/s390/nobp-no-dwarf2-cfi.c
|
||||
new file mode 100644
|
||||
index 0000000..75e32a1
|
||||
--- /dev/null
|
||||
+++ gcc/testsuite/gcc.target/s390/nobp-no-dwarf2-cfi.c
|
||||
@@ -0,0 +1,19 @@
|
||||
+/* { dg-do run } */
|
||||
+/* { dg-options "-O3 -march=z900 --save-temps -mfunction-return-reg=thunk -mindirect-branch-table -fno-dwarf2-cfi-asm" } */
|
||||
+
|
||||
+/* Make sure that we do not emit .cfi directives when -fno-dwarf2-cfi-asm is being used. */
|
||||
+
|
||||
+int
|
||||
+main ()
|
||||
+{
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+/* 1 x main
|
||||
+/* { dg-final { scan-assembler-times "jg\t__s390_indirect_jump" 1 } } */
|
||||
+/* { dg-final { scan-assembler "ex\t" } } */
|
||||
+
|
||||
+/* { dg-final { scan-assembler-not "section\t.s390_indirect_jump" } } */
|
||||
+/* { dg-final { scan-assembler-not "section\t.s390_indirect_call" } } */
|
||||
+/* { dg-final { scan-assembler "section\t.s390_return_reg" } } */
|
||||
+/* { dg-final { scan-assembler-not "section\t.s390_return_mem" } } */
|
|
@ -0,0 +1,414 @@
|
|||
commit 4361c221ff4b53f585a2e8c0ba38956c8132609f
|
||||
Author: hjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>
|
||||
Date: Mon Feb 26 15:29:30 2018 +0000
|
||||
|
||||
i386: Update -mfunction-return= for return with pop
|
||||
|
||||
When -mfunction-return= is used, simple_return_pop_internal should pop
|
||||
return address into ECX register, adjust stack by bytes to pop from stack
|
||||
and jump to the return thunk via ECX register.
|
||||
|
||||
Tested on i686 and x86-64.
|
||||
|
||||
PR target/84530
|
||||
* config/i386/i386-protos.h (ix86_output_indirect_jmp): Remove
|
||||
the bool argument.
|
||||
(ix86_output_indirect_function_return): New prototype.
|
||||
(ix86_split_simple_return_pop_internal): Likewise.
|
||||
* config/i386/i386.c (indirect_return_via_cx): New.
|
||||
(indirect_return_via_cx_bnd): Likewise.
|
||||
(indirect_thunk_name): Handle return va CX_REG.
|
||||
(output_indirect_thunk_function): Create alias for
|
||||
__x86_return_thunk_[re]cx and __x86_return_thunk_[re]cx_bnd.
|
||||
(ix86_output_indirect_jmp): Remove the bool argument.
|
||||
(ix86_output_indirect_function_return): New function.
|
||||
(ix86_split_simple_return_pop_internal): Likewise.
|
||||
* config/i386/i386.md (*indirect_jump): Don't pass false
|
||||
to ix86_output_indirect_jmp.
|
||||
(*tablejump_1): Likewise.
|
||||
(simple_return_pop_internal): Change it to define_insn_and_split.
|
||||
Call ix86_split_simple_return_pop_internal to split it for
|
||||
-mfunction-return=.
|
||||
(simple_return_indirect_internal): Call
|
||||
ix86_output_indirect_function_return instead of
|
||||
ix86_output_indirect_jmp.
|
||||
|
||||
gcc/testsuite/
|
||||
|
||||
PR target/84530
|
||||
* gcc.target/i386/ret-thunk-22.c: New test.
|
||||
* gcc.target/i386/ret-thunk-23.c: Likewise.
|
||||
* gcc.target/i386/ret-thunk-24.c: Likewise.
|
||||
* gcc.target/i386/ret-thunk-25.c: Likewise.
|
||||
* gcc.target/i386/ret-thunk-26.c: Likewise.
|
||||
|
||||
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@257992 138bc75d-0d04-0410-961f-82ee72b054a4
|
||||
|
||||
diff --git a/gcc/config/i386/i386-protos.h b/gcc/config/i386/i386-protos.h
|
||||
index 4e4b2100f79..394d4aebf96 100644
|
||||
--- a/gcc/config/i386/i386-protos.h
|
||||
+++ b/gcc/config/i386/i386-protos.h
|
||||
@@ -306,8 +306,10 @@ extern enum attr_cpu ix86_schedule;
|
||||
#endif
|
||||
|
||||
extern const char * ix86_output_call_insn (rtx insn, rtx call_op);
|
||||
-extern const char * ix86_output_indirect_jmp (rtx call_op, bool ret_p);
|
||||
+extern const char * ix86_output_indirect_jmp (rtx call_op);
|
||||
extern const char * ix86_output_function_return (bool long_p);
|
||||
+extern const char * ix86_output_indirect_function_return (rtx ret_op);
|
||||
+extern void ix86_split_simple_return_pop_internal (rtx);
|
||||
|
||||
#ifdef RTX_CODE
|
||||
/* Target data for multipass lookahead scheduling.
|
||||
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
|
||||
index c25d26ca826..a8238a001ee 100644
|
||||
--- a/gcc/config/i386/i386.c
|
||||
+++ b/gcc/config/i386/i386.c
|
||||
@@ -8777,6 +8777,9 @@ static bool indirect_thunk_needed = false;
|
||||
by call and return thunks functions. */
|
||||
static int indirect_thunks_used;
|
||||
|
||||
+/* True if return thunk function via CX is needed. */
|
||||
+static bool indirect_return_via_cx;
|
||||
+
|
||||
#ifndef INDIRECT_LABEL
|
||||
# define INDIRECT_LABEL "LIND"
|
||||
#endif
|
||||
@@ -8786,26 +8789,29 @@ static int indirect_thunks_used;
|
||||
static void
|
||||
indirect_thunk_name (char name[32], int regno, bool ret_p)
|
||||
{
|
||||
- if (regno >= 0 && ret_p)
|
||||
+ if (regno != INVALID_REGNUM && regno != CX_REG && ret_p)
|
||||
gcc_unreachable ();
|
||||
|
||||
if (USE_HIDDEN_LINKONCE)
|
||||
{
|
||||
- if (regno >= 0)
|
||||
+ const char *prefix;
|
||||
+
|
||||
+ prefix = "";
|
||||
+
|
||||
+ const char *ret = ret_p ? "return" : "indirect";
|
||||
+
|
||||
+ if (regno != INVALID_REGNUM)
|
||||
{
|
||||
const char *reg_prefix;
|
||||
if (LEGACY_INT_REGNO_P (regno))
|
||||
reg_prefix = TARGET_64BIT ? "r" : "e";
|
||||
else
|
||||
reg_prefix = "";
|
||||
- sprintf (name, "__x86_indirect_thunk_%s%s",
|
||||
- reg_prefix, reg_names[regno]);
|
||||
+ sprintf (name, "__x86_%s_thunk%s_%s%s",
|
||||
+ ret, prefix, reg_prefix, reg_names[regno]);
|
||||
}
|
||||
else
|
||||
- {
|
||||
- const char *ret = ret_p ? "return" : "indirect";
|
||||
- sprintf (name, "__x86_%s_thunk", ret);
|
||||
- }
|
||||
+ sprintf (name, "__x86_%s_thunk%s", ret, prefix);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -8947,9 +8953,18 @@ output_indirect_thunk_function (int regno)
|
||||
ASM_OUTPUT_LABEL (asm_out_file, name);
|
||||
}
|
||||
|
||||
- if (regno < 0)
|
||||
+ /* Create alias for __x86_return_thunk or
|
||||
+ __x86_return_thunk_ecx. */
|
||||
+ bool need_alias;
|
||||
+ if (regno == INVALID_REGNUM)
|
||||
+ need_alias = true;
|
||||
+ else if (regno == CX_REG)
|
||||
+ need_alias = indirect_return_via_cx;
|
||||
+ else
|
||||
+ need_alias = false;
|
||||
+
|
||||
+ if (need_alias)
|
||||
{
|
||||
- /* Create alias for __x86.return_thunk/__x86.return_thunk_bnd. */
|
||||
char alias[32];
|
||||
|
||||
indirect_thunk_name (alias, regno, true);
|
||||
@@ -24704,21 +24719,21 @@ ix86_output_indirect_branch (rtx call_op, const char *xasm,
|
||||
else
|
||||
ix86_output_indirect_branch_via_push (call_op, xasm, sibcall_p);
|
||||
}
|
||||
+
|
||||
/* Output indirect jump. CALL_OP is the jump target. Jump is a
|
||||
function return if RET_P is true. */
|
||||
|
||||
const char *
|
||||
-ix86_output_indirect_jmp (rtx call_op, bool ret_p)
|
||||
+ix86_output_indirect_jmp (rtx call_op)
|
||||
{
|
||||
if (cfun->machine->indirect_branch_type != indirect_branch_keep)
|
||||
{
|
||||
struct ix86_frame frame;
|
||||
ix86_compute_frame_layout (&frame);
|
||||
|
||||
- /* We can't have red-zone if this isn't a function return since
|
||||
- "call" in the indirect thunk pushes the return address onto
|
||||
- stack, destroying red-zone. */
|
||||
- if (!ret_p && frame.red_zone_size != 0)
|
||||
+ /* We can't have red-zone since "call" in the indirect thunk
|
||||
+ pushes the return address onto the stack, destroying the red-zone. */
|
||||
+ if (frame.red_zone_size != 0)
|
||||
gcc_unreachable ();
|
||||
|
||||
ix86_output_indirect_branch (call_op, "%0", true);
|
||||
@@ -24759,6 +24774,75 @@ ix86_output_function_return (bool long_p)
|
||||
return "rep%; ret";
|
||||
}
|
||||
|
||||
+/* Output indirect function return. RET_OP is the function return
|
||||
+ target. */
|
||||
+
|
||||
+const char *
|
||||
+ix86_output_indirect_function_return (rtx ret_op)
|
||||
+{
|
||||
+ if (cfun->machine->function_return_type != indirect_branch_keep)
|
||||
+ {
|
||||
+ char thunk_name[32];
|
||||
+ enum indirect_thunk_prefix need_prefix
|
||||
+ = indirect_thunk_need_prefix (current_output_insn);
|
||||
+ unsigned int regno = REGNO (ret_op);
|
||||
+ gcc_assert (regno == CX_REG);
|
||||
+
|
||||
+ if (cfun->machine->function_return_type
|
||||
+ != indirect_branch_thunk_inline)
|
||||
+ {
|
||||
+ bool need_thunk = (cfun->machine->function_return_type
|
||||
+ == indirect_branch_thunk);
|
||||
+ indirect_thunk_name (thunk_name, regno, need_prefix, true);
|
||||
+ if (need_thunk)
|
||||
+ {
|
||||
+ indirect_return_via_cx = true;
|
||||
+ indirect_thunks_used |= 1 << CX_REG;
|
||||
+ }
|
||||
+ fprintf (asm_out_file, "\tjmp\t%s\n", thunk_name);
|
||||
+ }
|
||||
+ else
|
||||
+ output_indirect_thunk (need_prefix, regno);
|
||||
+
|
||||
+ return "";
|
||||
+ }
|
||||
+ else
|
||||
+ return "jmp\t%A0";
|
||||
+}
|
||||
+
|
||||
+/* Split simple return with popping POPC bytes from stack to indirect
|
||||
+ branch with stack adjustment . */
|
||||
+
|
||||
+void
|
||||
+ix86_split_simple_return_pop_internal (rtx popc)
|
||||
+{
|
||||
+ struct machine_function *m = cfun->machine;
|
||||
+ rtx ecx = gen_rtx_REG (SImode, CX_REG);
|
||||
+ rtx insn;
|
||||
+
|
||||
+ /* There is no "pascal" calling convention in any 64bit ABI. */
|
||||
+ gcc_assert (!TARGET_64BIT);
|
||||
+
|
||||
+ insn = emit_insn (gen_pop (ecx));
|
||||
+ m->fs.cfa_offset -= UNITS_PER_WORD;
|
||||
+ m->fs.sp_offset -= UNITS_PER_WORD;
|
||||
+
|
||||
+ rtx x = plus_constant (Pmode, stack_pointer_rtx, UNITS_PER_WORD);
|
||||
+ x = gen_rtx_SET (VOIDmode, stack_pointer_rtx, x);
|
||||
+ add_reg_note (insn, REG_CFA_ADJUST_CFA, x);
|
||||
+ add_reg_note (insn, REG_CFA_REGISTER, gen_rtx_SET (VOIDmode, ecx, pc_rtx));
|
||||
+ RTX_FRAME_RELATED_P (insn) = 1;
|
||||
+
|
||||
+ x = gen_rtx_PLUS (Pmode, stack_pointer_rtx, popc);
|
||||
+ x = gen_rtx_SET (VOIDmode, stack_pointer_rtx, x);
|
||||
+ insn = emit_insn (x);
|
||||
+ add_reg_note (insn, REG_CFA_ADJUST_CFA, x);
|
||||
+ RTX_FRAME_RELATED_P (insn) = 1;
|
||||
+
|
||||
+ /* Now return address is in ECX. */
|
||||
+ emit_jump_insn (gen_simple_return_indirect_internal (ecx));
|
||||
+}
|
||||
+
|
||||
/* Output the assembly for a call instruction. */
|
||||
|
||||
const char *
|
||||
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
|
||||
index 228f8f6d77a..3320ec233d2 100644
|
||||
--- a/gcc/config/i386/i386.md
|
||||
+++ b/gcc/config/i386/i386.md
|
||||
@@ -11282,7 +11282,7 @@
|
||||
(define_insn "*indirect_jump"
|
||||
[(set (pc) (match_operand:W 0 "indirect_branch_operand" "rw"))]
|
||||
""
|
||||
- "* return ix86_output_indirect_jmp (operands[0], false);"
|
||||
+ "* return ix86_output_indirect_jmp (operands[0]);"
|
||||
[(set (attr "type")
|
||||
(if_then_else (match_test "(cfun->machine->indirect_branch_type
|
||||
!= indirect_branch_keep)")
|
||||
@@ -11336,7 +11336,7 @@
|
||||
[(set (pc) (match_operand:W 0 "indirect_branch_operand" "rw"))
|
||||
(use (label_ref (match_operand 1)))]
|
||||
""
|
||||
- "* return ix86_output_indirect_jmp (operands[0], false);"
|
||||
+ "* return ix86_output_indirect_jmp (operands[0]);"
|
||||
[(set (attr "type")
|
||||
(if_then_else (match_test "(cfun->machine->indirect_branch_type
|
||||
!= indirect_branch_keep)")
|
||||
@@ -11769,11 +11769,14 @@
|
||||
(set_attr "prefix_rep" "1")
|
||||
(set_attr "modrm" "0")])
|
||||
|
||||
-(define_insn "simple_return_pop_internal"
|
||||
+(define_insn_and_split "simple_return_pop_internal"
|
||||
[(simple_return)
|
||||
(use (match_operand:SI 0 "const_int_operand"))]
|
||||
"reload_completed"
|
||||
"ret\t%0"
|
||||
+ "&& cfun->machine->function_return_type != indirect_branch_keep"
|
||||
+ [(const_int 0)]
|
||||
+ "ix86_split_simple_return_pop_internal (operands[0]); DONE;"
|
||||
[(set_attr "length" "3")
|
||||
(set_attr "atom_unit" "jeu")
|
||||
(set_attr "length_immediate" "2")
|
||||
@@ -11783,7 +11786,7 @@
|
||||
[(simple_return)
|
||||
(use (match_operand:SI 0 "register_operand" "r"))]
|
||||
"reload_completed"
|
||||
- "* return ix86_output_indirect_jmp (operands[0], true);"
|
||||
+ "* return ix86_output_indirect_function_return (operands[0]);"
|
||||
[(set (attr "type")
|
||||
(if_then_else (match_test "(cfun->machine->indirect_branch_type
|
||||
!= indirect_branch_keep)")
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-22.c b/gcc/testsuite/gcc.target/i386/ret-thunk-22.c
|
||||
new file mode 100644
|
||||
index 00000000000..89e086de97b
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-22.c
|
||||
@@ -0,0 +1,15 @@
|
||||
+/* PR target/r84530 */
|
||||
+/* { dg-do compile { target ia32 } } */
|
||||
+/* { dg-options "-O2 -mfunction-return=thunk" } */
|
||||
+
|
||||
+struct s { _Complex unsigned short x; };
|
||||
+struct s gs = { 100 + 200i };
|
||||
+struct s __attribute__((noinline)) foo (void) { return gs; }
|
||||
+
|
||||
+/* { dg-final { scan-assembler-times "popl\[\\t \]*%ecx" 1 } } */
|
||||
+/* { dg-final { scan-assembler "lea\[l\]?\[\\t \]*4\\(%esp\\), %esp" } } */
|
||||
+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk_ecx" } } */
|
||||
+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
+/* { dg-final { scan-assembler {\tpause} } } */
|
||||
+/* { dg-final { scan-assembler {\tlfence} } } */
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-23.c b/gcc/testsuite/gcc.target/i386/ret-thunk-23.c
|
||||
new file mode 100644
|
||||
index 00000000000..43f0ccaa854
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-23.c
|
||||
@@ -0,0 +1,15 @@
|
||||
+/* PR target/r84530 */
|
||||
+/* { dg-do compile { target ia32 } } */
|
||||
+/* { dg-options "-O2 -mfunction-return=thunk-extern" } */
|
||||
+
|
||||
+struct s { _Complex unsigned short x; };
|
||||
+struct s gs = { 100 + 200i };
|
||||
+struct s __attribute__((noinline)) foo (void) { return gs; }
|
||||
+
|
||||
+/* { dg-final { scan-assembler-times "popl\[\\t \]*%ecx" 1 } } */
|
||||
+/* { dg-final { scan-assembler "lea\[l\]?\[\\t \]*4\\(%esp\\), %esp" } } */
|
||||
+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk_ecx" } } */
|
||||
+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */
|
||||
+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */
|
||||
+/* { dg-final { scan-assembler-not {\tpause} } } */
|
||||
+/* { dg-final { scan-assembler-not {\tlfence} } } */
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-24.c b/gcc/testsuite/gcc.target/i386/ret-thunk-24.c
|
||||
new file mode 100644
|
||||
index 00000000000..8729e35147e
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-24.c
|
||||
@@ -0,0 +1,15 @@
|
||||
+/* PR target/r84530 */
|
||||
+/* { dg-do compile { target ia32 } } */
|
||||
+/* { dg-options "-O2 -mfunction-return=thunk-inline" } */
|
||||
+
|
||||
+struct s { _Complex unsigned short x; };
|
||||
+struct s gs = { 100 + 200i };
|
||||
+struct s __attribute__((noinline)) foo (void) { return gs; }
|
||||
+
|
||||
+/* { dg-final { scan-assembler-times "popl\[\\t \]*%ecx" 1 } } */
|
||||
+/* { dg-final { scan-assembler "lea\[l\]?\[\\t \]*4\\(%esp\\), %esp" } } */
|
||||
+/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk_ecx" } } */
|
||||
+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
+/* { dg-final { scan-assembler {\tpause} } } */
|
||||
+/* { dg-final { scan-assembler {\tlfence} } } */
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-25.c b/gcc/testsuite/gcc.target/i386/ret-thunk-25.c
|
||||
new file mode 100644
|
||||
index 00000000000..f73553c9a9f
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-25.c
|
||||
@@ -0,0 +1,14 @@
|
||||
+/* PR target/r84530 */
|
||||
+/* { dg-do compile { target ia32 } } */
|
||||
+/* { dg-options "-O2 -mfunction-return=thunk -fno-pic" } */
|
||||
+
|
||||
+struct s { _Complex unsigned short x; };
|
||||
+struct s gs = { 100 + 200i };
|
||||
+struct s __attribute__((noinline)) foo (void) { return gs; }
|
||||
+
|
||||
+/* { dg-final { scan-assembler-times "popl\[\\t \]*%ecx" 1 } } */
|
||||
+/* { dg-final { scan-assembler "lea\[l\]?\[\\t \]*4\\(%esp\\), %esp" } } */
|
||||
+/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
+/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
+/* { dg-final { scan-assembler {\tpause} } } */
|
||||
+/* { dg-final { scan-assembler {\tlfence} } } */
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-26.c b/gcc/testsuite/gcc.target/i386/ret-thunk-26.c
|
||||
new file mode 100644
|
||||
index 00000000000..9144e988735
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-26.c
|
||||
@@ -0,0 +1,40 @@
|
||||
+/* PR target/r84530 */
|
||||
+/* { dg-do run } */
|
||||
+/* { dg-options "-Os -mfunction-return=thunk" } */
|
||||
+
|
||||
+struct S { int i; };
|
||||
+__attribute__((const, noinline, noclone))
|
||||
+struct S foo (int x)
|
||||
+{
|
||||
+ struct S s;
|
||||
+ s.i = x;
|
||||
+ return s;
|
||||
+}
|
||||
+
|
||||
+int a[2048], b[2048], c[2048], d[2048];
|
||||
+struct S e[2048];
|
||||
+
|
||||
+__attribute__((noinline, noclone)) void
|
||||
+bar (void)
|
||||
+{
|
||||
+ int i;
|
||||
+ for (i = 0; i < 1024; i++)
|
||||
+ {
|
||||
+ e[i] = foo (i);
|
||||
+ a[i+2] = a[i] + a[i+1];
|
||||
+ b[10] = b[10] + i;
|
||||
+ c[i] = c[2047 - i];
|
||||
+ d[i] = d[i + 1];
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main ()
|
||||
+{
|
||||
+ int i;
|
||||
+ bar ();
|
||||
+ for (i = 0; i < 1024; i++)
|
||||
+ if (e[i].i != i)
|
||||
+ __builtin_abort ();
|
||||
+ return 0;
|
||||
+}
|
|
@ -0,0 +1,175 @@
|
|||
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
|
||||
index a8238a001ee..34f27c597a2 100644
|
||||
--- a/gcc/config/i386/i386.c
|
||||
+++ b/gcc/config/i386/i386.c
|
||||
@@ -8770,13 +8770,16 @@ ix86_setup_frame_addresses (void)
|
||||
labels in call and return thunks. */
|
||||
static int indirectlabelno;
|
||||
|
||||
-/* True if call and return thunk functions are needed. */
|
||||
+/* True if call thunk function is needed. */
|
||||
static bool indirect_thunk_needed = false;
|
||||
|
||||
/* Bit masks of integer registers, which contain branch target, used
|
||||
- by call and return thunks functions. */
|
||||
+ by call thunk functions. */
|
||||
static int indirect_thunks_used;
|
||||
|
||||
+/* True if return thunk function is needed. */
|
||||
+static bool indirect_return_needed = false;
|
||||
+
|
||||
/* True if return thunk function via CX is needed. */
|
||||
static bool indirect_return_via_cx;
|
||||
|
||||
@@ -8899,17 +8902,19 @@ output_indirect_thunk (int regno)
|
||||
}
|
||||
|
||||
/* Output a funtion with a call and return thunk for indirect branch.
|
||||
- If REGNO != -1, the function address is in REGNO. Otherwise, the
|
||||
- function address is on the top of stack. */
|
||||
+ If REGNO != UNVALID_REGNUM,
|
||||
+ the function address is in REGNO. Otherwise, the function address is
|
||||
+ on the top of stack. Thunk is used for function return if RET_P is
|
||||
+ true. */
|
||||
|
||||
static void
|
||||
-output_indirect_thunk_function (int regno)
|
||||
+output_indirect_thunk_function (unsigned int regno, bool ret_p)
|
||||
{
|
||||
char name[32];
|
||||
tree decl;
|
||||
|
||||
/* Create __x86_indirect_thunk. */
|
||||
- indirect_thunk_name (name, regno, false);
|
||||
+ indirect_thunk_name (name, regno, ret_p);
|
||||
decl = build_decl (BUILTINS_LOCATION, FUNCTION_DECL,
|
||||
get_identifier (name),
|
||||
build_function_type_list (void_type_node, NULL_TREE));
|
||||
@@ -8953,45 +8958,6 @@ output_indirect_thunk_function (int regno)
|
||||
ASM_OUTPUT_LABEL (asm_out_file, name);
|
||||
}
|
||||
|
||||
- /* Create alias for __x86_return_thunk or
|
||||
- __x86_return_thunk_ecx. */
|
||||
- bool need_alias;
|
||||
- if (regno == INVALID_REGNUM)
|
||||
- need_alias = true;
|
||||
- else if (regno == CX_REG)
|
||||
- need_alias = indirect_return_via_cx;
|
||||
- else
|
||||
- need_alias = false;
|
||||
-
|
||||
- if (need_alias)
|
||||
- {
|
||||
- char alias[32];
|
||||
-
|
||||
- indirect_thunk_name (alias, regno, true);
|
||||
-#if TARGET_MACHO
|
||||
- if (TARGET_MACHO)
|
||||
- {
|
||||
- fputs ("\t.weak_definition\t", asm_out_file);
|
||||
- assemble_name (asm_out_file, alias);
|
||||
- fputs ("\n\t.private_extern\t", asm_out_file);
|
||||
- assemble_name (asm_out_file, alias);
|
||||
- putc ('\n', asm_out_file);
|
||||
- ASM_OUTPUT_LABEL (asm_out_file, alias);
|
||||
- }
|
||||
-#else
|
||||
- ASM_OUTPUT_DEF (asm_out_file, alias, name);
|
||||
- if (USE_HIDDEN_LINKONCE)
|
||||
- {
|
||||
- fputs ("\t.globl\t", asm_out_file);
|
||||
- assemble_name (asm_out_file, alias);
|
||||
- putc ('\n', asm_out_file);
|
||||
- fputs ("\t.hidden\t", asm_out_file);
|
||||
- assemble_name (asm_out_file, alias);
|
||||
- putc ('\n', asm_out_file);
|
||||
- }
|
||||
-#endif
|
||||
- }
|
||||
-
|
||||
DECL_INITIAL (decl) = make_node (BLOCK);
|
||||
current_function_decl = decl;
|
||||
allocate_struct_function (decl, false);
|
||||
@@ -9038,14 +9004,19 @@ ix86_code_end (void)
|
||||
rtx xops[2];
|
||||
int regno;
|
||||
|
||||
+ if (indirect_return_needed)
|
||||
+ output_indirect_thunk_function (INVALID_REGNUM, true);
|
||||
+ if (indirect_return_via_cx)
|
||||
+ output_indirect_thunk_function (CX_REG, true);
|
||||
if (indirect_thunk_needed)
|
||||
- output_indirect_thunk_function (-1);
|
||||
+ output_indirect_thunk_function (INVALID_REGNUM, false);
|
||||
|
||||
for (regno = FIRST_REX_INT_REG; regno <= LAST_REX_INT_REG; regno++)
|
||||
{
|
||||
int i = regno - FIRST_REX_INT_REG + LAST_INT_REG + 1;
|
||||
if ((indirect_thunks_used & (1 << i)))
|
||||
- output_indirect_thunk_function (regno);
|
||||
+ output_indirect_thunk_function (regno, false);
|
||||
+
|
||||
}
|
||||
|
||||
for (regno = AX_REG; regno <= SP_REG; regno++)
|
||||
@@ -9054,7 +9025,7 @@ ix86_code_end (void)
|
||||
tree decl;
|
||||
|
||||
if ((indirect_thunks_used & (1 << regno)))
|
||||
- output_indirect_thunk_function (regno);
|
||||
+ output_indirect_thunk_function (regno, false);
|
||||
|
||||
if (!(pic_labels_used & (1 << regno)))
|
||||
continue;
|
||||
@@ -24758,8 +24729,8 @@ ix86_output_function_return (bool long_p)
|
||||
{
|
||||
bool need_thunk = (cfun->machine->function_return_type
|
||||
== indirect_branch_thunk);
|
||||
- indirect_thunk_name (thunk_name, -1, true);
|
||||
- indirect_thunk_needed |= need_thunk;
|
||||
+ indirect_thunk_name (thunk_name, INVALID_REGNUM, true);
|
||||
+ indirect_return_needed |= need_thunk;
|
||||
fprintf (asm_out_file, "\tjmp\t%s\n", thunk_name);
|
||||
}
|
||||
else
|
||||
@@ -24783,8 +24754,6 @@ ix86_output_indirect_function_return (rtx ret_op)
|
||||
if (cfun->machine->function_return_type != indirect_branch_keep)
|
||||
{
|
||||
char thunk_name[32];
|
||||
- enum indirect_thunk_prefix need_prefix
|
||||
- = indirect_thunk_need_prefix (current_output_insn);
|
||||
unsigned int regno = REGNO (ret_op);
|
||||
gcc_assert (regno == CX_REG);
|
||||
|
||||
@@ -24793,7 +24762,7 @@ ix86_output_indirect_function_return (rtx ret_op)
|
||||
{
|
||||
bool need_thunk = (cfun->machine->function_return_type
|
||||
== indirect_branch_thunk);
|
||||
- indirect_thunk_name (thunk_name, regno, need_prefix, true);
|
||||
+ indirect_thunk_name (thunk_name, regno, true);
|
||||
if (need_thunk)
|
||||
{
|
||||
indirect_return_via_cx = true;
|
||||
@@ -24802,7 +24771,7 @@ ix86_output_indirect_function_return (rtx ret_op)
|
||||
fprintf (asm_out_file, "\tjmp\t%s\n", thunk_name);
|
||||
}
|
||||
else
|
||||
- output_indirect_thunk (need_prefix, regno);
|
||||
+ output_indirect_thunk (regno);
|
||||
|
||||
return "";
|
||||
}
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-9.c b/gcc/testsuite/gcc.target/i386/ret-thunk-9.c
|
||||
index d1db41cc128..a605c26c46f 100644
|
||||
--- a/gcc/testsuite/gcc.target/i386/ret-thunk-9.c
|
||||
+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-9.c
|
||||
@@ -13,7 +13,7 @@ foo (void)
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
-/* { dg-final { scan-assembler "__x86_indirect_thunk:" } } */
|
||||
+/* { dg-final { scan-assembler "__x86_return_thunk:" } } */
|
||||
/* { dg-final { scan-assembler-times {\tpause} 1 { target { ! x32 } } } } */
|
||||
/* { dg-final { scan-assembler-times {\tlfence} 1 { target { ! x32 } } } } */
|
||||
/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */
|
|
@ -0,0 +1,516 @@
|
|||
diff --git a/gcc/config/i386/constraints.md b/gcc/config/i386/constraints.md
|
||||
index 43faabb7e87..328a90f45d1 100644
|
||||
--- a/gcc/config/i386/constraints.md
|
||||
+++ b/gcc/config/i386/constraints.md
|
||||
@@ -135,7 +135,7 @@
|
||||
|
||||
(define_constraint "w"
|
||||
"@internal Call memory operand."
|
||||
- (and (not (match_test "ix86_indirect_branch_register"))
|
||||
+ (and (not (match_test "TARGET_INDIRECT_BRANCH_REGISTER"))
|
||||
(not (match_test "TARGET_X32"))
|
||||
(match_operand 0 "memory_operand")))
|
||||
|
||||
diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h
|
||||
index 8ff702615b6..95206478001 100644
|
||||
--- a/gcc/config/i386/i386.h
|
||||
+++ b/gcc/config/i386/i386.h
|
||||
@@ -2413,6 +2413,10 @@ extern void debug_dispatch_window (int);
|
||||
#define TARGET_RECIP_VEC_DIV ((recip_mask & RECIP_MASK_VEC_DIV) != 0)
|
||||
#define TARGET_RECIP_VEC_SQRT ((recip_mask & RECIP_MASK_VEC_SQRT) != 0)
|
||||
|
||||
+#define TARGET_INDIRECT_BRANCH_REGISTER \
|
||||
+ (ix86_indirect_branch_register \
|
||||
+ || cfun->machine->indirect_branch_type != indirect_branch_keep)
|
||||
+
|
||||
#define IX86_HLE_ACQUIRE (1 << 16)
|
||||
#define IX86_HLE_RELEASE (1 << 17)
|
||||
|
||||
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
|
||||
index 3320ec233d2..7a83d079bfc 100644
|
||||
--- a/gcc/config/i386/i386.md
|
||||
+++ b/gcc/config/i386/i386.md
|
||||
@@ -11274,7 +11274,7 @@
|
||||
[(set (pc) (match_operand 0 "indirect_branch_operand"))]
|
||||
""
|
||||
{
|
||||
- if (TARGET_X32 || ix86_indirect_branch_register)
|
||||
+ if (TARGET_X32 || TARGET_INDIRECT_BRANCH_REGISTER)
|
||||
operands[0] = convert_memory_address (word_mode, operands[0]);
|
||||
cfun->machine->has_local_indirect_jump = true;
|
||||
})
|
||||
@@ -11327,7 +11327,7 @@
|
||||
OPTAB_DIRECT);
|
||||
}
|
||||
|
||||
- if (TARGET_X32 || ix86_indirect_branch_register)
|
||||
+ if (TARGET_X32 || TARGET_INDIRECT_BRANCH_REGISTER)
|
||||
operands[0] = convert_memory_address (word_mode, operands[0]);
|
||||
cfun->machine->has_local_indirect_jump = true;
|
||||
})
|
||||
diff --git a/gcc/config/i386/predicates.md b/gcc/config/i386/predicates.md
|
||||
index 6c7a593084c..f6cf50ad6f5 100644
|
||||
--- a/gcc/config/i386/predicates.md
|
||||
+++ b/gcc/config/i386/predicates.md
|
||||
@@ -540,7 +540,7 @@
|
||||
;; Test for a valid operand for indirect branch.
|
||||
(define_predicate "indirect_branch_operand"
|
||||
(ior (match_operand 0 "register_operand")
|
||||
- (and (not (match_test "ix86_indirect_branch_register"))
|
||||
+ (and (not (match_test "TARGET_INDIRECT_BRANCH_REGISTER"))
|
||||
(not (match_test "TARGET_X32"))
|
||||
(match_operand 0 "memory_operand"))))
|
||||
|
||||
@@ -550,7 +550,7 @@
|
||||
(ior (match_test "constant_call_address_operand
|
||||
(op, mode == VOIDmode ? mode : Pmode)")
|
||||
(match_operand 0 "call_register_no_elim_operand")
|
||||
- (and (not (match_test "ix86_indirect_branch_register"))
|
||||
+ (and (not (match_test "TARGET_INDIRECT_BRANCH_REGISTER"))
|
||||
(and (not (match_test "TARGET_X32"))
|
||||
(match_operand 0 "memory_operand")))))
|
||||
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c
|
||||
index 321db770c35..135bc73b9ce 100644
|
||||
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c
|
||||
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c
|
||||
@@ -14,7 +14,7 @@ male_indirect_jump (long offset)
|
||||
/* Our gcc-4.8 based compiler is not as aggressive at sibcalls
|
||||
where the target is in a MEM. Thus we have to scan for different
|
||||
patterns here than in newer compilers. */
|
||||
-/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" } } */
|
||||
+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c
|
||||
index d58451660f8..867df67143b 100644
|
||||
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c
|
||||
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c
|
||||
@@ -14,7 +14,7 @@ male_indirect_jump (long offset)
|
||||
/* Our gcc-4.8 based compiler is not as aggressive at sibcalls
|
||||
where the target is in a MEM. Thus we have to scan for different
|
||||
patterns here than in newer compilers. */
|
||||
-/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" } } */
|
||||
+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c
|
||||
index 9e24a385387..2c7fb52b59d 100644
|
||||
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c
|
||||
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c
|
||||
@@ -12,9 +12,8 @@ male_indirect_jump (long offset)
|
||||
return 0;
|
||||
}
|
||||
|
||||
-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
|
||||
-/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */
|
||||
+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
|
||||
+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler {\tpause} } } */
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c
|
||||
index 127b5d94523..0d3f895009d 100644
|
||||
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c
|
||||
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c
|
||||
@@ -12,9 +12,8 @@ male_indirect_jump (long offset)
|
||||
return 0;
|
||||
}
|
||||
|
||||
-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
|
||||
-/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */
|
||||
+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
|
||||
+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler {\tpause} } } */
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c
|
||||
index 17c2d0faf88..3c72036dbaf 100644
|
||||
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c
|
||||
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c
|
||||
@@ -35,9 +35,8 @@ bar (int i)
|
||||
}
|
||||
}
|
||||
|
||||
-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
|
||||
-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */
|
||||
+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target *-*-linux* } } } */
|
||||
+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler {\tpause} } } */
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c
|
||||
index cd7e8d78199..e20816781f9 100644
|
||||
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c
|
||||
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c
|
||||
@@ -17,7 +17,7 @@ male_indirect_jump (long offset)
|
||||
/* Our gcc-4.8 based compiler is not as aggressive at sibcalls
|
||||
where the target is in a MEM. Thus we have to scan for different
|
||||
patterns here than in newer compilers. */
|
||||
-/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" } } */
|
||||
+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c
|
||||
index 4dbd7a5e5d3..0f30d74ee37 100644
|
||||
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c
|
||||
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c
|
||||
@@ -15,7 +15,7 @@ male_indirect_jump (long offset)
|
||||
/* Our gcc-4.8 based compiler is not as aggressive at sibcalls
|
||||
where the target is in a MEM. Thus we have to scan for different
|
||||
patterns here than in newer compilers. */
|
||||
-/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" } } */
|
||||
+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c
|
||||
index 4aeec1833cd..89a2bac8403 100644
|
||||
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c
|
||||
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c
|
||||
@@ -14,10 +14,9 @@ male_indirect_jump (long offset)
|
||||
return 0;
|
||||
}
|
||||
|
||||
-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */
|
||||
/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */
|
||||
/* { dg-final { scan-assembler {\tpause} } } */
|
||||
/* { dg-final { scan-assembler {\tlfence} } } */
|
||||
/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */
|
||||
-/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c
|
||||
index ac0e5999f63..3eb83c3779a 100644
|
||||
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c
|
||||
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c
|
||||
@@ -13,10 +13,9 @@ male_indirect_jump (long offset)
|
||||
return 0;
|
||||
}
|
||||
|
||||
-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */
|
||||
/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */
|
||||
/* { dg-final { scan-assembler {\tpause} } } */
|
||||
/* { dg-final { scan-assembler {\tlfence} } } */
|
||||
/* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */
|
||||
-/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c
|
||||
index 573cf1ef09e..0098dd1133d 100644
|
||||
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c
|
||||
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c
|
||||
@@ -14,9 +14,8 @@ male_indirect_jump (long offset)
|
||||
return 0;
|
||||
}
|
||||
|
||||
-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
-/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */
|
||||
-/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */
|
||||
-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
|
||||
-/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */
|
||||
+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
|
||||
+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */
|
||||
+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */
|
||||
+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c
|
||||
index b2b37fc6e2e..ece8de15a4b 100644
|
||||
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c
|
||||
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c
|
||||
@@ -13,9 +13,8 @@ male_indirect_jump (long offset)
|
||||
return 0;
|
||||
}
|
||||
|
||||
-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
-/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */
|
||||
-/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */
|
||||
-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
|
||||
-/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */
|
||||
+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
|
||||
+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */
|
||||
+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */
|
||||
+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c
|
||||
index 4a43e199931..d53fc887dcc 100644
|
||||
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c
|
||||
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c
|
||||
@@ -36,9 +36,8 @@ bar (int i)
|
||||
}
|
||||
}
|
||||
|
||||
-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */
|
||||
-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */
|
||||
+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target *-*-linux* } } } */
|
||||
+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c
|
||||
index 72de88e04aa..1f78b07f84a 100644
|
||||
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c
|
||||
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c
|
||||
@@ -14,7 +14,7 @@ male_indirect_jump (long offset)
|
||||
/* Our gcc-4.8 based compiler is not as aggressive at sibcalls
|
||||
where the target is in a MEM. Thus we have to scan for different
|
||||
patterns here than in newer compilers. */
|
||||
-/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" } } */
|
||||
+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c
|
||||
index d4137b38a1e..5397a5874aa 100644
|
||||
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c
|
||||
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c
|
||||
@@ -14,7 +14,7 @@ male_indirect_jump (long offset)
|
||||
/* Our gcc-4.8 based compiler is not as aggressive at sibcalls
|
||||
where the target is in a MEM. Thus we have to scan for different
|
||||
patterns here than in newer compilers. */
|
||||
-/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" } } */
|
||||
+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c
|
||||
index d9964c25bbd..385626850a2 100644
|
||||
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c
|
||||
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c
|
||||
@@ -12,9 +12,8 @@ male_indirect_jump (long offset)
|
||||
return 0;
|
||||
}
|
||||
|
||||
-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
|
||||
-/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */
|
||||
-/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */
|
||||
-/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */
|
||||
+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
|
||||
+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */
|
||||
+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */
|
||||
+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c
|
||||
index d4dca4dc5fe..1ae49b137ca 100644
|
||||
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c
|
||||
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c
|
||||
@@ -12,9 +12,7 @@ male_indirect_jump (long offset)
|
||||
return 0;
|
||||
}
|
||||
|
||||
-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
|
||||
-/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */
|
||||
-/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */
|
||||
+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
|
||||
+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c
|
||||
index aece9383697..2b9a33e93dc 100644
|
||||
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c
|
||||
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c
|
||||
@@ -35,9 +35,8 @@ bar (int i)
|
||||
}
|
||||
}
|
||||
|
||||
-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
|
||||
-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */
|
||||
+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target *-*-linux* } } } */
|
||||
+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c
|
||||
index e3cea3fa3c2..dbda34ab038 100644
|
||||
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c
|
||||
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c
|
||||
@@ -14,7 +14,7 @@ male_indirect_jump (long offset)
|
||||
/* Our gcc-4.8 based compiler is not as aggressive at sibcalls
|
||||
where the target is in a MEM. Thus we have to scan for different
|
||||
patterns here than in newer compilers. */
|
||||
-/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" } } */
|
||||
+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler {\tpause} } } */
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c
|
||||
index 62229969c90..810824666ef 100644
|
||||
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c
|
||||
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c
|
||||
@@ -14,7 +14,7 @@ male_indirect_jump (long offset)
|
||||
/* Our gcc-4.8 based compiler is not as aggressive at sibcalls
|
||||
where the target is in a MEM. Thus we have to scan for different
|
||||
patterns here than in newer compilers. */
|
||||
-/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" } } */
|
||||
+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler {\tpause} } } */
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c
|
||||
index 2eef6f35a75..4a63ebed8ab 100644
|
||||
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c
|
||||
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c
|
||||
@@ -12,7 +12,7 @@ male_indirect_jump (long offset)
|
||||
return 0;
|
||||
}
|
||||
|
||||
-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */
|
||||
/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */
|
||||
/* { dg-final { scan-assembler-times {\tpause} 1 } } */
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c
|
||||
index e825a10f14c..a395ffca018 100644
|
||||
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c
|
||||
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c
|
||||
@@ -12,7 +12,7 @@ male_indirect_jump (long offset)
|
||||
return 0;
|
||||
}
|
||||
|
||||
-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
|
||||
/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */
|
||||
/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */
|
||||
/* { dg-final { scan-assembler-times {\tpause} 1 } } */
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c
|
||||
index c67066cf197..ea009245a58 100644
|
||||
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c
|
||||
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c
|
||||
@@ -35,8 +35,8 @@ bar (int i)
|
||||
}
|
||||
}
|
||||
|
||||
-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
-/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */
|
||||
+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target *-*-linux* } } } */
|
||||
+/* { dg-final { scan-assembler-not "pushq\[ \t\]%(r|e)ax" } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler {\tpause} } } */
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-10.c b/gcc/testsuite/gcc.target/i386/ret-thunk-10.c
|
||||
index e6fea84a4d9..af9023af613 100644
|
||||
--- a/gcc/testsuite/gcc.target/i386/ret-thunk-10.c
|
||||
+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-10.c
|
||||
@@ -15,9 +15,6 @@ foo (void)
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */
|
||||
/* { dg-final { scan-assembler-times {\tpause} 2 } } */
|
||||
/* { dg-final { scan-assembler-times {\tlfence} 2 } } */
|
||||
-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
|
||||
-/* { dg-final { scan-assembler "__x86_indirect_thunk:" { target { ! x32 } } } } */
|
||||
-/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */
|
||||
-/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" { target { x32 } } } } */
|
||||
-/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */
|
||||
+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
+/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" } } */
|
||||
+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-11.c b/gcc/testsuite/gcc.target/i386/ret-thunk-11.c
|
||||
index e239ec4542f..ba467c59b36 100644
|
||||
--- a/gcc/testsuite/gcc.target/i386/ret-thunk-11.c
|
||||
+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-11.c
|
||||
@@ -15,9 +15,6 @@ foo (void)
|
||||
/* { dg-final { scan-assembler-times {\tlfence} 1 } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
|
||||
-/* { dg-final { scan-assembler "__x86_indirect_thunk:" { target { ! x32 } } } } */
|
||||
-/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */
|
||||
-/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" { target { x32 } } } } */
|
||||
-/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */
|
||||
+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
+/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" } } */
|
||||
+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-12.c b/gcc/testsuite/gcc.target/i386/ret-thunk-12.c
|
||||
index fa3181303c9..43e57cac2c3 100644
|
||||
--- a/gcc/testsuite/gcc.target/i386/ret-thunk-12.c
|
||||
+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-12.c
|
||||
@@ -15,8 +15,6 @@ foo (void)
|
||||
/* { dg-final { scan-assembler-times {\tlfence} 1 } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
|
||||
-/* { dg-final { scan-assembler "__x86_indirect_thunk:" { target { ! x32 } } } } */
|
||||
-/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */
|
||||
-/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" { target { x32 } } } } */
|
||||
-/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */
|
||||
+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
+/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" } } */
|
||||
+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-13.c b/gcc/testsuite/gcc.target/i386/ret-thunk-13.c
|
||||
index fd5b41fdd3f..55f156c4376 100644
|
||||
--- a/gcc/testsuite/gcc.target/i386/ret-thunk-13.c
|
||||
+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-13.c
|
||||
@@ -14,9 +14,8 @@ foo (void)
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */
|
||||
/* { dg-final { scan-assembler-times {\tpause} 2 } } */
|
||||
/* { dg-final { scan-assembler-times {\tlfence} 2 } } */
|
||||
-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 3 } } */
|
||||
/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 3 } } */
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_indirect_thunk" } } */
|
||||
-/* { dg-final { scan-assembler-not "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */
|
||||
-/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */
|
||||
+/* { dg-final { scan-assembler-not "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-14.c b/gcc/testsuite/gcc.target/i386/ret-thunk-14.c
|
||||
index d606373ead1..1c790436a53 100644
|
||||
--- a/gcc/testsuite/gcc.target/i386/ret-thunk-14.c
|
||||
+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-14.c
|
||||
@@ -16,7 +16,6 @@ foo (void)
|
||||
/* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
|
||||
-/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */
|
||||
-/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */
|
||||
+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?bar" { target *-*-linux* } } } */
|
||||
+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-15.c b/gcc/testsuite/gcc.target/i386/ret-thunk-15.c
|
||||
index 75e45e226b8..58aba319cba 100644
|
||||
--- a/gcc/testsuite/gcc.target/i386/ret-thunk-15.c
|
||||
+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-15.c
|
||||
@@ -16,7 +16,6 @@ foo (void)
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler-times {\tpause} 1 } } */
|
||||
/* { dg-final { scan-assembler-times {\tlfence} 1 } } */
|
||||
-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
|
||||
-/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */
|
||||
-/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */
|
||||
+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?bar" { target *-*-linux* } } } */
|
||||
+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-9.c b/gcc/testsuite/gcc.target/i386/ret-thunk-9.c
|
||||
index a605c26c46f..eee230ca2f6 100644
|
||||
--- a/gcc/testsuite/gcc.target/i386/ret-thunk-9.c
|
||||
+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-9.c
|
||||
@@ -14,11 +14,8 @@ foo (void)
|
||||
/* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
|
||||
/* { dg-final { scan-assembler "__x86_return_thunk:" } } */
|
||||
-/* { dg-final { scan-assembler-times {\tpause} 1 { target { ! x32 } } } } */
|
||||
-/* { dg-final { scan-assembler-times {\tlfence} 1 { target { ! x32 } } } } */
|
||||
-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */
|
||||
-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
|
||||
-/* { dg-final { scan-assembler-times {\tpause} 2 { target { x32 } } } } */
|
||||
-/* { dg-final { scan-assembler-times {\tlfence} 2 { target { x32 } } } } */
|
||||
-/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */
|
||||
-/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */
|
||||
+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?bar" { target *-*-linux* } } } */
|
||||
+/* { dg-final { scan-assembler-times {\tpause} 2 } } */
|
||||
+/* { dg-final { scan-assembler-times {\tlfence} 2 } } */
|
||||
+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
|
||||
+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */
|
|
@ -0,0 +1,162 @@
|
|||
* cif-code.def: Add NEVER_EXECUTED.
|
||||
* ipa-inline-analysis.c (reset_inline_summary,
|
||||
compute_inline_parameters, estimate_calls_size_and_time,
|
||||
inline_update_overall_summary): Track number of calls.
|
||||
(never_executed_edge_p): New predicate.
|
||||
* ipa-inline.c (want_inline_self_recursive_call_p): do not inline
|
||||
recursively for calls that are not going to be executed.
|
||||
(inline_small_functions): Do not inline never exeucted edge if callee
|
||||
has too many calls.
|
||||
* ipa-inline.h (inline_summary): Add num calls.
|
||||
(never_executed_edge_p): New.
|
||||
|
||||
--- gcc/cif-code.def (revision 257016)
|
||||
+++ gcc/cif-code.def (working copy)
|
||||
@@ -103,3 +103,6 @@ DEFCIFCODE(TARGET_OPTION_MISMATCH, N_("t
|
||||
|
||||
/* We can't inline because of mismatched optimization levels. */
|
||||
DEFCIFCODE(OPTIMIZATION_MISMATCH, N_("optimization level attribute mismatch"))
|
||||
+
|
||||
+/* We know that the call will be optimized out. */
|
||||
+DEFCIFCODE(NEVER_EXECUTED, N_("never executed"))
|
||||
--- gcc/ipa-inline-analysis.c (revision 257016)
|
||||
+++ gcc/ipa-inline-analysis.c (working copy)
|
||||
@@ -990,6 +990,7 @@ reset_inline_summary (struct cgraph_node
|
||||
info->stack_frame_offset = 0;
|
||||
info->size = 0;
|
||||
info->time = 0;
|
||||
+ info->num_calls = 0;
|
||||
info->growth = 0;
|
||||
info->scc_no = 0;
|
||||
if (info->loop_iterations)
|
||||
@@ -2704,6 +2705,7 @@ compute_inline_parameters (struct cgraph
|
||||
/* Inlining characteristics are maintained by the cgraph_mark_inline. */
|
||||
info->time = info->self_time;
|
||||
info->size = info->self_size;
|
||||
+ info->num_calls = 0;
|
||||
info->stack_frame_offset = 0;
|
||||
info->estimated_stack_size = info->estimated_self_stack_size;
|
||||
#ifdef ENABLE_CHECKING
|
||||
@@ -2816,7 +2818,7 @@ estimate_edge_size_and_time (struct cgra
|
||||
|
||||
static void
|
||||
estimate_calls_size_and_time (struct cgraph_node *node, int *size, int *time,
|
||||
- inline_hints *hints,
|
||||
+ inline_hints *hints, int *num,
|
||||
clause_t possible_truths,
|
||||
vec<tree> known_vals,
|
||||
vec<tree> known_binfos,
|
||||
@@ -2826,6 +2828,7 @@ estimate_calls_size_and_time (struct cgr
|
||||
for (e = node->callees; e; e = e->next_callee)
|
||||
{
|
||||
struct inline_edge_summary *es = inline_edge_summary (e);
|
||||
+ (*num)++;
|
||||
if (!es->predicate
|
||||
|| evaluate_predicate (es->predicate, possible_truths))
|
||||
{
|
||||
@@ -2838,7 +2841,7 @@ estimate_calls_size_and_time (struct cgr
|
||||
known_aggs, hints);
|
||||
}
|
||||
else
|
||||
- estimate_calls_size_and_time (e->callee, size, time, hints,
|
||||
+ estimate_calls_size_and_time (e->callee, size, time, hints, num,
|
||||
possible_truths,
|
||||
known_vals, known_binfos,
|
||||
known_aggs);
|
||||
@@ -2846,6 +2849,7 @@ estimate_calls_size_and_time (struct cgr
|
||||
}
|
||||
for (e = node->indirect_calls; e; e = e->next_callee)
|
||||
{
|
||||
+ (*num)++;
|
||||
struct inline_edge_summary *es = inline_edge_summary (e);
|
||||
if (!es->predicate
|
||||
|| evaluate_predicate (es->predicate, possible_truths))
|
||||
@@ -2936,7 +2940,8 @@ estimate_node_size_and_time (struct cgra
|
||||
if (DECL_DECLARED_INLINE_P (node->symbol.decl))
|
||||
hints |= INLINE_HINT_declared_inline;
|
||||
|
||||
- estimate_calls_size_and_time (node, &size, &time, &hints, possible_truths,
|
||||
+ int num = 0;
|
||||
+ estimate_calls_size_and_time (node, &size, &time, &hints, &num, possible_truths,
|
||||
known_vals, known_binfos, known_aggs);
|
||||
gcc_checking_assert (size >= 0);
|
||||
gcc_checking_assert (time >= 0);
|
||||
@@ -3369,13 +3374,14 @@ inline_update_overall_summary (struct cg
|
||||
|
||||
info->size = 0;
|
||||
info->time = 0;
|
||||
+ info->num_calls = 0;
|
||||
for (i = 0; vec_safe_iterate (info->entry, i, &e); i++)
|
||||
{
|
||||
info->size += e->size, info->time += e->time;
|
||||
if (info->time > MAX_TIME * INLINE_TIME_SCALE)
|
||||
info->time = MAX_TIME * INLINE_TIME_SCALE;
|
||||
}
|
||||
- estimate_calls_size_and_time (node, &info->size, &info->time, NULL,
|
||||
+ estimate_calls_size_and_time (node, &info->size, &info->time, NULL, &info->num_calls,
|
||||
~(clause_t) (1 << predicate_false_condition),
|
||||
vNULL, vNULL, vNULL);
|
||||
info->time = (info->time + INLINE_TIME_SCALE / 2) / INLINE_TIME_SCALE;
|
||||
@@ -3528,6 +3534,14 @@ do_estimate_edge_hints (struct cgraph_ed
|
||||
return hints;
|
||||
}
|
||||
|
||||
+/* Return true if edge is never executed. */
|
||||
+bool
|
||||
+never_executed_edge_p (struct cgraph_edge *e)
|
||||
+{
|
||||
+ struct inline_edge_summary *es = inline_edge_summary (e);
|
||||
+ return es->predicate && false_predicate_p (es->predicate);
|
||||
+}
|
||||
+
|
||||
|
||||
/* Estimate self time of the function NODE after inlining EDGE. */
|
||||
|
||||
--- gcc/ipa-inline.c (revision 257016)
|
||||
+++ gcc/ipa-inline.c (working copy)
|
||||
@@ -656,6 +656,11 @@ want_inline_self_recursive_call_p (struc
|
||||
reason = "--param max-inline-recursive-depth exceeded.";
|
||||
want_inline = false;
|
||||
}
|
||||
+ else if (never_executed_edge_p (edge))
|
||||
+ {
|
||||
+ reason = "edge is never executed.";
|
||||
+ want_inline = false;
|
||||
+ }
|
||||
|
||||
if (outer_node->global.inlined_to)
|
||||
caller_freq = outer_node->callers->frequency;
|
||||
@@ -1597,6 +1602,14 @@ inline_small_functions (void)
|
||||
outer_node = where, depth++;
|
||||
where = where->callers->caller;
|
||||
}
|
||||
+ if (never_executed_edge_p (edge)
|
||||
+ && inline_summary (edge->callee)->num_calls > 30)
|
||||
+ {
|
||||
+ if (dump_file)
|
||||
+ fprintf (dump_file, "Never executed edge\n");
|
||||
+ edge->inline_failed = CIF_NEVER_EXECUTED;
|
||||
+ continue;
|
||||
+ }
|
||||
if (outer_node
|
||||
&& !want_inline_self_recursive_call_p (edge, outer_node,
|
||||
true, depth))
|
||||
--- gcc/ipa-inline.h (revision 257016)
|
||||
+++ gcc/ipa-inline.h (working copy)
|
||||
@@ -132,6 +132,7 @@ struct GTY(()) inline_summary
|
||||
/* Estimated size of the function after inlining. */
|
||||
int time;
|
||||
int size;
|
||||
+ int num_calls;
|
||||
|
||||
/* Conditional size/time information. The summaries are being
|
||||
merged during inlining. */
|
||||
@@ -226,6 +227,7 @@ inline_hints do_estimate_edge_hints (str
|
||||
void initialize_growth_caches (void);
|
||||
void free_growth_caches (void);
|
||||
void compute_inline_parameters (struct cgraph_node *, bool);
|
||||
+bool never_executed_edge_p (struct cgraph_edge *);
|
||||
|
||||
/* In ipa-inline-transform.c */
|
||||
bool inline_call (struct cgraph_edge *, bool, vec<cgraph_edge_p> *, int *, bool);
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
2015-09-03 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
|
||||
|
||||
* optabs.c (expand_binop): Don't create a broadcast vector with a
|
||||
source element wider than the inner mode.
|
||||
|
||||
* gcc.target/powerpc/vec-shift.c: New test.
|
||||
|
||||
--- gcc/optabs.c
|
||||
+++ gcc/optabs.c
|
||||
@@ -1608,6 +1608,15 @@ expand_binop (machine_mode mode, optab binoptab, rtx op0, rtx op1,
|
||||
|
||||
if (otheroptab && optab_handler (otheroptab, mode) != CODE_FOR_nothing)
|
||||
{
|
||||
+ /* The scalar may have been extended to be too wide. Truncate
|
||||
+ it back to the proper size to fit in the broadcast vector. */
|
||||
+ machine_mode inner_mode = GET_MODE_INNER (mode);
|
||||
+ if (!CONST_INT_P (op1)
|
||||
+ && (GET_MODE_BITSIZE (inner_mode)
|
||||
+ < GET_MODE_BITSIZE (GET_MODE (op1))))
|
||||
+ op1 = force_reg (inner_mode,
|
||||
+ simplify_gen_unary (TRUNCATE, inner_mode, op1,
|
||||
+ GET_MODE (op1)));
|
||||
rtx vop1 = expand_vector_broadcast (mode, op1);
|
||||
if (vop1)
|
||||
{
|
||||
--- /dev/null
|
||||
+++ gcc/testsuite/gcc.target/powerpc/vec-shift.c
|
||||
@@ -0,0 +1,20 @@
|
||||
+/* { dg-do compile { target { powerpc*-*-* } } } */
|
||||
+/* { dg-require-effective-target powerpc_altivec_ok } */
|
||||
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
|
||||
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power7" } } */
|
||||
+/* { dg-options "-mcpu=power7 -O2" } */
|
||||
+
|
||||
+/* This used to ICE. During gimplification, "i" is widened to an unsigned
|
||||
+ int. We used to fail at expand time as we tried to cram an SImode item
|
||||
+ into a QImode memory slot. This has been fixed to properly truncate the
|
||||
+ shift amount when splatting it into a vector. */
|
||||
+
|
||||
+typedef unsigned char v16ui __attribute__((vector_size(16)));
|
||||
+
|
||||
+v16ui vslb(v16ui v, unsigned char i)
|
||||
+{
|
||||
+ return v << i;
|
||||
+}
|
||||
+
|
||||
+/* { dg-final { scan-assembler "vspltb" } } */
|
||||
+/* { dg-final { scan-assembler "vslb" } } */
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,263 @@
|
|||
2017-06-28 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
|
||||
|
||||
* config/s390/predicates.md: Use s390_rel_address_ok_p.
|
||||
* config/s390/s390-protos.h: Add prototype of
|
||||
s390_rel_address_ok_p.
|
||||
* config/s390/s390.c (s390_got_symbol): New function.
|
||||
(s390_rel_address_ok_p): New function.
|
||||
(legitimize_pic_address): Use s390_rel_address_ok_p.
|
||||
(s390_load_got): Use s390_got_symbol.
|
||||
(s390_option_override): Issue error if
|
||||
-mno-pic-data-is-text-relative is used without -fpic/-fPIC.
|
||||
* config/s390/s390.h (TARGET_DEFAULT_PIC_DATA_IS_TEXT_RELATIVE):
|
||||
New macro.
|
||||
* config/s390/s390.opt: New option mpic-data-is-text-relative.
|
||||
|
||||
--- gcc/config/s390/predicates.md 2013-08-14 07:55:12.000000000 -0400
|
||||
+++ gcc/config/s390/predicates.md 2018-04-09 21:36:49.428209951 -0400
|
||||
@@ -116,7 +116,7 @@
|
||||
if (GET_CODE (op) == SYMBOL_REF)
|
||||
return (!SYMBOL_REF_ALIGN1_P (op)
|
||||
&& SYMBOL_REF_TLS_MODEL (op) == 0
|
||||
- && (!flag_pic || SYMBOL_REF_LOCAL_P (op)));
|
||||
+ && s390_rel_address_ok_p (op));
|
||||
|
||||
/* Everything else must have a CONST, so strip it. */
|
||||
if (GET_CODE (op) != CONST)
|
||||
@@ -141,7 +141,7 @@
|
||||
if (GET_CODE (op) == SYMBOL_REF)
|
||||
return ((SYMBOL_REF_FLAGS (op) & SYMBOL_FLAG_ALIGN1) == 0
|
||||
&& SYMBOL_REF_TLS_MODEL (op) == 0
|
||||
- && (!flag_pic || SYMBOL_REF_LOCAL_P (op)));
|
||||
+ && s390_rel_address_ok_p (op));
|
||||
|
||||
/* Now we must have a @GOTENT offset or @PLT stub
|
||||
or an @INDNTPOFF TLS offset. */
|
||||
--- gcc/config/s390/s390.c 2015-06-18 10:33:04.000000000 -0400
|
||||
+++ gcc/config/s390/s390.c 2018-04-09 21:32:43.489851529 -0400
|
||||
@@ -491,6 +491,23 @@ s390_label_align (rtx label)
|
||||
return align_labels_log;
|
||||
}
|
||||
|
||||
+static GTY(()) rtx got_symbol;
|
||||
+
|
||||
+/* Return the GOT table symbol. The symbol will be created when the
|
||||
+ function is invoked for the first time. */
|
||||
+
|
||||
+static rtx
|
||||
+s390_got_symbol (void)
|
||||
+{
|
||||
+ if (!got_symbol)
|
||||
+ {
|
||||
+ got_symbol = gen_rtx_SYMBOL_REF (Pmode, "_GLOBAL_OFFSET_TABLE_");
|
||||
+ SYMBOL_REF_FLAGS (got_symbol) = SYMBOL_FLAG_LOCAL;
|
||||
+ }
|
||||
+
|
||||
+ return got_symbol;
|
||||
+}
|
||||
+
|
||||
static enum machine_mode
|
||||
s390_libgcc_cmp_return_mode (void)
|
||||
{
|
||||
@@ -1863,6 +1880,9 @@ s390_option_override (void)
|
||||
if (flag_prefetch_loop_arrays < 0 && HAVE_prefetch && optimize >= 3)
|
||||
flag_prefetch_loop_arrays = 1;
|
||||
|
||||
+ if (!s390_pic_data_is_text_relative && !flag_pic)
|
||||
+ error ("-mno-pic-data-is-text-relative cannot be used without -fpic/-fPIC");
|
||||
+
|
||||
/* Use the alternative scheduling-pressure algorithm by default. */
|
||||
maybe_set_param_value (PARAM_SCHED_PRESSURE_ALGORITHM, 2,
|
||||
global_options.x_param_values,
|
||||
@@ -3557,6 +3577,26 @@ s390_load_address (rtx dst, rtx src)
|
||||
emit_insn (gen_force_la_31 (dst, src));
|
||||
}
|
||||
|
||||
+/* Return true if it ok to use SYMBOL_REF in a relative address. */
|
||||
+
|
||||
+bool
|
||||
+s390_rel_address_ok_p (rtx symbol_ref)
|
||||
+{
|
||||
+ tree decl;
|
||||
+
|
||||
+ if (symbol_ref == s390_got_symbol () || CONSTANT_POOL_ADDRESS_P (symbol_ref))
|
||||
+ return true;
|
||||
+
|
||||
+ decl = SYMBOL_REF_DECL (symbol_ref);
|
||||
+
|
||||
+ if (!flag_pic || SYMBOL_REF_LOCAL_P (symbol_ref))
|
||||
+ return (s390_pic_data_is_text_relative
|
||||
+ || (decl
|
||||
+ && TREE_CODE (decl) == FUNCTION_DECL));
|
||||
+
|
||||
+ return false;
|
||||
+}
|
||||
+
|
||||
/* Return a legitimate reference for ORIG (an address) using the
|
||||
register REG. If REG is 0, a new pseudo is generated.
|
||||
|
||||
@@ -3594,7 +3634,7 @@ legitimize_pic_address (rtx orig, rtx re
|
||||
}
|
||||
|
||||
if ((GET_CODE (addr) == LABEL_REF
|
||||
- || (GET_CODE (addr) == SYMBOL_REF && SYMBOL_REF_LOCAL_P (addr))
|
||||
+ || (GET_CODE (addr) == SYMBOL_REF && s390_rel_address_ok_p (addr))
|
||||
|| (GET_CODE (addr) == UNSPEC &&
|
||||
(XINT (addr, 1) == UNSPEC_GOTENT
|
||||
|| (TARGET_CPU_ZARCH && XINT (addr, 1) == UNSPEC_PLT))))
|
||||
@@ -8545,7 +8585,6 @@ restore_gprs (rtx base, int offset, int
|
||||
|
||||
/* Return insn sequence to load the GOT register. */
|
||||
|
||||
-static GTY(()) rtx got_symbol;
|
||||
rtx
|
||||
s390_load_got (void)
|
||||
{
|
||||
@@ -8557,23 +8596,17 @@ s390_load_got (void)
|
||||
aren't usable. */
|
||||
rtx got_rtx = gen_rtx_REG (Pmode, 12);
|
||||
|
||||
- if (!got_symbol)
|
||||
- {
|
||||
- got_symbol = gen_rtx_SYMBOL_REF (Pmode, "_GLOBAL_OFFSET_TABLE_");
|
||||
- SYMBOL_REF_FLAGS (got_symbol) = SYMBOL_FLAG_LOCAL;
|
||||
- }
|
||||
-
|
||||
start_sequence ();
|
||||
|
||||
if (TARGET_CPU_ZARCH)
|
||||
{
|
||||
- emit_move_insn (got_rtx, got_symbol);
|
||||
+ emit_move_insn (got_rtx, s390_got_symbol ());
|
||||
}
|
||||
else
|
||||
{
|
||||
rtx offset;
|
||||
|
||||
- offset = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, got_symbol),
|
||||
+ offset = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, s390_got_symbol ()),
|
||||
UNSPEC_LTREL_OFFSET);
|
||||
offset = gen_rtx_CONST (Pmode, offset);
|
||||
offset = force_const_mem (Pmode, offset);
|
||||
--- gcc/config/s390/s390.h 2014-01-14 10:37:03.000000000 -0500
|
||||
+++ gcc/config/s390/s390.h 2018-04-09 21:21:28.076858052 -0400
|
||||
@@ -814,6 +814,10 @@ do { \
|
||||
|
||||
#define LEGITIMATE_PIC_OPERAND_P(X) legitimate_pic_operand_p (X)
|
||||
|
||||
+#ifndef TARGET_DEFAULT_PIC_DATA_IS_TEXT_RELATIVE
|
||||
+#define TARGET_DEFAULT_PIC_DATA_IS_TEXT_RELATIVE 1
|
||||
+#endif
|
||||
+
|
||||
|
||||
/* Assembler file format. */
|
||||
|
||||
--- gcc/config/s390/s390.opt 2015-06-18 10:33:05.000000000 -0400
|
||||
+++ gcc/config/s390/s390.opt 2018-04-09 21:28:18.842465842 -0400
|
||||
@@ -158,6 +158,10 @@ mzarch
|
||||
Target Report RejectNegative Negative(mesa) Mask(ZARCH)
|
||||
z/Architecture
|
||||
|
||||
+mpic-data-is-text-relative
|
||||
+Target Report Var(s390_pic_data_is_text_relative) Init(TARGET_DEFAULT_PIC_DATA_IS_TEXT_RELATIVE)
|
||||
+Assume data segments are relative to text segment.
|
||||
+
|
||||
mbranch-cost=
|
||||
Target Report Joined RejectNegative UInteger Var(s390_branch_cost) Init(1)
|
||||
Set the branch costs for conditional branch instructions. Reasonable
|
||||
--- gcc/config/s390/s390-protos.h 2014-01-14 10:37:04.000000000 -0500
|
||||
+++ gcc/config/s390/s390-protos.h 2018-04-09 21:21:28.072858046 -0400
|
||||
@@ -52,6 +52,7 @@ extern bool s390_contiguous_bitmask_p (u
|
||||
extern bool s390_split_ok_p (rtx, rtx, enum machine_mode, int);
|
||||
extern bool s390_overlap_p (rtx, rtx, HOST_WIDE_INT);
|
||||
extern bool s390_offset_p (rtx, rtx, rtx);
|
||||
+extern bool s390_rel_address_ok_p (rtx);
|
||||
extern int tls_symbolic_operand (rtx);
|
||||
|
||||
extern bool s390_match_ccmode (rtx, enum machine_mode);
|
||||
--- gcc/testsuite/gcc.target/s390/nodatarel-1.c 1969-12-31 19:00:00.000000000 -0500
|
||||
+++ gcc/testsuite/gcc.target/s390/nodatarel-1.c 2018-04-09 21:21:28.077858053 -0400
|
||||
@@ -0,0 +1,83 @@
|
||||
+/* Test -mno-pic-data-is-text-relative option. No relative addressing
|
||||
+ of elements in .data and .bss are allowed with that option. */
|
||||
+
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-O3 -fno-optimize-sibling-calls -fpic -mno-pic-data-is-text-relative -march=z10 -mtune=z9-109 -mzarch" } */
|
||||
+
|
||||
+static int a = 3;
|
||||
+
|
||||
+/* With -mno-pic-data-is-text-relative these must be addressed via
|
||||
+ GOT. */
|
||||
+
|
||||
+int __attribute__((noinline,noclone))
|
||||
+foo ()
|
||||
+{
|
||||
+ return a;
|
||||
+}
|
||||
+
|
||||
+static int __attribute__((noinline,noclone))
|
||||
+foostatic (void)
|
||||
+{
|
||||
+ return a;
|
||||
+}
|
||||
+
|
||||
+/* Just to make a potentially modified. */
|
||||
+
|
||||
+void
|
||||
+bar (int b)
|
||||
+{
|
||||
+ a = b;
|
||||
+}
|
||||
+
|
||||
+/* { dg-final { scan-assembler-times "a@GOTENT" 3 } } */
|
||||
+
|
||||
+/* The exrl target is a label_ref which should not be affected at
|
||||
+ all. */
|
||||
+
|
||||
+void
|
||||
+mymemcpy (char *dst, char *src, long size)
|
||||
+{
|
||||
+ __builtin_memcpy (dst, src, size);
|
||||
+}
|
||||
+
|
||||
+/* { dg-final { scan-assembler "exrl" } } */
|
||||
+
|
||||
+
|
||||
+/* PLT slots can still be addressed relatively. */
|
||||
+
|
||||
+int
|
||||
+callfoo ()
|
||||
+{
|
||||
+ return foo ();
|
||||
+}
|
||||
+
|
||||
+/* { dg-final { scan-assembler-times "foo@PLT" 1 } } */
|
||||
+
|
||||
+
|
||||
+/* GOT entries can still be addressed relatively. */
|
||||
+
|
||||
+void *
|
||||
+fooptr ()
|
||||
+{
|
||||
+ return &foo;
|
||||
+}
|
||||
+
|
||||
+/* { dg-final { scan-assembler-times "foo@GOTENT" 1 } } */
|
||||
+
|
||||
+
|
||||
+/* A static function can be addressed relatively. */
|
||||
+
|
||||
+int
|
||||
+callfoostatic ()
|
||||
+{
|
||||
+ return foostatic ();
|
||||
+}
|
||||
+
|
||||
+void *
|
||||
+foostaticptr ()
|
||||
+{
|
||||
+ return &foostatic;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+/* { dg-final { scan-assembler-not "foostatic@" } } */
|
176
SPECS/gcc.spec
176
SPECS/gcc.spec
|
@ -2,10 +2,10 @@
|
|||
%global SVNREV 225304
|
||||
# Note, gcc_release must be integer, if you want to add suffixes to
|
||||
# %{release}, append them after %{gcc_release} on Release: line.
|
||||
%global gcc_release 28
|
||||
%global gcc_release 36
|
||||
%global _unpackaged_files_terminate_build 0
|
||||
%global _performance_build 1
|
||||
%global multilib_64_archs sparc64 s390x
|
||||
%global multilib_64_archs sparc64
|
||||
%ifarch %{ix86} x86_64 ia64 ppc ppc64 ppc64le ppc64p7 alpha aarch64
|
||||
%global build_ada 0
|
||||
%else
|
||||
|
@ -26,7 +26,7 @@
|
|||
%else
|
||||
%global build_libquadmath 0
|
||||
%endif
|
||||
%ifarch %{ix86} x86_64 ppc ppc64
|
||||
%ifarch %{ix86} x86_64 ppc ppc64 ppc64p7
|
||||
%global build_libasan 1
|
||||
%else
|
||||
%global build_libasan 0
|
||||
|
@ -47,7 +47,7 @@
|
|||
%global build_libitm 0
|
||||
%endif
|
||||
%global build_cloog 1
|
||||
%global build_libstdcxx_docs 0
|
||||
%global build_libstdcxx_docs 1
|
||||
%ifarch %{ix86} x86_64 ppc ppc64 ppc64le ppc64p7 s390 s390x %{arm} aarch64
|
||||
%global attr_ifunc 1
|
||||
%else
|
||||
|
@ -59,7 +59,7 @@
|
|||
# With this then on the new arch do rpmbuild -ba -v --with java_bootstrap gcc.spec
|
||||
%global bootstrap_java %{?_with_java_bootstrap:%{build_java}}%{!?_with_java_bootstrap:0}
|
||||
%global build_java_tar %{?_with_java_tar:%{build_java}}%{!?_with_java_tar:0}
|
||||
%ifarch s390x
|
||||
%ifarch s390
|
||||
%global multilib_32_arch s390
|
||||
%endif
|
||||
%ifarch sparc64
|
||||
|
@ -68,9 +68,9 @@
|
|||
%ifarch ppc
|
||||
%global multilib_32_arch ppc
|
||||
%endif
|
||||
#%ifarch x86_64
|
||||
#%global multilib_32_arch i686
|
||||
#%endif
|
||||
%ifarch i386
|
||||
%global multilib_32_arch i686
|
||||
%endif
|
||||
Summary: Various compilers (C, C++, Objective-C, Java, ...)
|
||||
Name: gcc
|
||||
%global gcc_version 4.8.5
|
||||
|
@ -258,6 +258,12 @@ Patch62: gcc48-pr80362.patch
|
|||
Patch63: gcc48-pr80692.patch
|
||||
Patch64: gcc48-pr82274.patch
|
||||
Patch65: gcc48-pr78416.patch
|
||||
Patch66: gcc48-rh1546728.patch
|
||||
Patch67: gcc48-rh1555397.patch
|
||||
Patch68: gcc48-pr81395.patch
|
||||
Patch69: gcc48-pr72717.patch
|
||||
Patch70: gcc48-pr66840.patch
|
||||
Patch71: gcc48-rh1546372.patch
|
||||
|
||||
Patch1000: fastjar-0.97-segfault.patch
|
||||
Patch1001: fastjar-0.97-len1.patch
|
||||
|
@ -295,6 +301,12 @@ Patch1320: gcc48-rh1469697-20.patch
|
|||
Patch1321: gcc48-rh1469697-21.patch
|
||||
Patch1322: gcc48-rh1469697-22.patch
|
||||
Patch1323: gcc48-rh1469697-23.patch
|
||||
Patch1324: gcc48-rh1537828-1.patch
|
||||
Patch1325: gcc48-rh1537828-2.patch
|
||||
Patch1326: gcc48-rh1537828-3.patch
|
||||
Patch1327: gcc48-rh1537828-4.patch
|
||||
Patch1328: gcc48-rh1537828-5.patch
|
||||
Patch1329: gcc48-rh1537828-10.patch
|
||||
|
||||
Patch1401: gcc48-rh1535655-1.patch
|
||||
Patch1402: gcc48-rh1535655-2.patch
|
||||
|
@ -302,6 +314,11 @@ Patch1403: gcc48-rh1535655-3.patch
|
|||
Patch1404: gcc48-rh1535655-4.patch
|
||||
Patch1405: gcc48-rh1535655-5.patch
|
||||
Patch1406: gcc48-rh1535655-6.patch
|
||||
Patch1407: gcc48-rh1552021.patch
|
||||
Patch1408: gcc48-rh1537828-6.patch
|
||||
Patch1409: gcc48-rh1537828-7.patch
|
||||
Patch1410: gcc48-rh1537828-8.patch
|
||||
Patch1411: gcc48-rh1537828-9.patch
|
||||
|
||||
# On ARM EABI systems, we do want -gnueabi to be part of the
|
||||
# target triple.
|
||||
|
@ -311,7 +328,10 @@ Patch1406: gcc48-rh1535655-6.patch
|
|||
%ifarch sparcv9
|
||||
%global gcc_target_platform sparc64-%{_vendor}-%{_target_os}
|
||||
%endif
|
||||
%ifarch ppc ppc64
|
||||
%ifarch ppc ppc64p7
|
||||
%global gcc_target_platform ppc64-%{_vendor}-%{_target_os}
|
||||
%endif
|
||||
%ifarch ppc64
|
||||
%global gcc_target_platform ppc64-powerel-%{_target_os}
|
||||
%endif
|
||||
%ifarch ppc64le
|
||||
|
@ -968,7 +988,7 @@ package or when debugging this package.
|
|||
%patch3 -p0 -b .rh330771~
|
||||
%patch4 -p0 -b .i386-libgomp~
|
||||
%patch5 -p0 -b .sparc-config-detection~
|
||||
#%patch6 -p0 -b .libgomp-omp_h-multilib~
|
||||
%patch6 -p0 -b .libgomp-omp_h-multilib~
|
||||
%patch7 -p0 -b .libtool-no-rpath~
|
||||
%if %{build_cloog}
|
||||
%patch8 -p0 -b .cloog-dl~
|
||||
|
@ -979,7 +999,7 @@ package or when debugging this package.
|
|||
%patch11 -p0 -b .libstdc++-docs~
|
||||
%endif
|
||||
%patch12 -p0 -b .no-add-needed~
|
||||
#%patch13 -p0 -b .pr56564~
|
||||
%patch13 -p0 -b .pr56564~
|
||||
%if 0%{?fedora} >= 20 || 0%{?rhel} >= 7
|
||||
%patch14 -p0 -b .color-auto~
|
||||
%endif
|
||||
|
@ -991,8 +1011,8 @@ rm -f libgo/go/crypto/elliptic/p224{,_test}.go
|
|||
%patch18 -p0 -b .aarch64-ada~
|
||||
%endif
|
||||
%patch19 -p0 -b .aarch64-async-unw-tables~
|
||||
#%patch20 -p0 -b .aarch64-unwind-opt~
|
||||
#%patch21 -p0 -b .rh1243366~
|
||||
%patch20 -p0 -b .aarch64-unwind-opt~
|
||||
%patch21 -p0 -b .rh1243366~
|
||||
%patch22 -p0 -b .rh1180633~
|
||||
%patch23 -p0 -b .rh1278872~
|
||||
%patch24 -p0 -b .pr67281~
|
||||
|
@ -1001,14 +1021,14 @@ rm -f libgo/go/crypto/elliptic/p224{,_test}.go
|
|||
%patch27 -p0 -b .pr53477~
|
||||
touch -r %{PATCH27} libstdc++-v3/python/libstdcxx/v6/printers.py
|
||||
%patch28 -p0 -b .rh1296211~
|
||||
#%patch29 -p0 -b .rh1304449~
|
||||
#%patch30 -p0 -b .s390-z13~
|
||||
%patch29 -p0 -b .rh1304449~
|
||||
%patch30 -p0 -b .s390-z13~
|
||||
%patch31 -p0 -b .rh1312850~
|
||||
%patch32 -p0 -b .pr65142~
|
||||
%patch33 -p0 -b .pr52714~
|
||||
%patch34 -p0 -b .rh1344807~
|
||||
#%patch35 -p0 -b .libgomp-20160715~
|
||||
#%patch36 -p0 -b .pr63293~
|
||||
%patch35 -p0 -b .libgomp-20160715~
|
||||
%patch36 -p0 -b .pr63293~
|
||||
%patch37 -p0 -b .pr72863~
|
||||
%patch38 -p0 -b .pr78064~
|
||||
%patch39 -p0 -b .pr62258~
|
||||
|
@ -1026,8 +1046,8 @@ touch -r %{PATCH27} libstdc++-v3/python/libstdcxx/v6/printers.py
|
|||
%patch51 -p0 -b .rh1457969~
|
||||
%patch52 -p0 -b .pr69644~
|
||||
%patch53 -p0 -b .rh1487434~
|
||||
#%patch54 -p0 -b .rh1468546~
|
||||
#%patch55 -p0 -b .rh1469384~
|
||||
%patch54 -p0 -b .rh1468546~
|
||||
%patch55 -p0 -b .rh1469384~
|
||||
%patch56 -p0 -b .rh1491395~
|
||||
%patch57 -p0 -b .rh1482762~
|
||||
%patch58 -p0 -b .pr77375~
|
||||
|
@ -1038,6 +1058,12 @@ touch -r %{PATCH27} libstdc++-v3/python/libstdcxx/v6/printers.py
|
|||
%patch63 -p0 -b .pr80692~
|
||||
%patch64 -p0 -b .pr82274~
|
||||
%patch65 -p0 -b .pr78416~
|
||||
%patch66 -p0 -b .rh1546728~
|
||||
%patch67 -p0 -b .rh1555397~
|
||||
%patch68 -p0 -b .pr81395~
|
||||
%patch69 -p0 -b .pr72717~
|
||||
%patch70 -p0 -b .pr66840~
|
||||
%patch71 -p0 -b .rh1546372~
|
||||
|
||||
%if 0%{?_enable_debug_packages}
|
||||
cat > split-debuginfo.sh <<\EOF
|
||||
|
@ -1091,10 +1117,10 @@ rm libjava/testsuite/libjava.lang/PR35020*
|
|||
|
||||
tar xzf %{SOURCE4}
|
||||
|
||||
#%patch1000 -p0 -b .fastjar-0.97-segfault~
|
||||
%patch1000 -p0 -b .fastjar-0.97-segfault~
|
||||
%patch1001 -p0 -b .fastjar-0.97-len1~
|
||||
%patch1002 -p0 -b .fastjar-0.97-filename0~
|
||||
#%patch1003 -p0 -b .fastjar-CVE-2010-0831~
|
||||
%patch1003 -p0 -b .fastjar-CVE-2010-0831~
|
||||
%patch1004 -p0 -b .fastjar-man~
|
||||
%patch1005 -p0 -b .fastjar-0.97-aarch64-config~
|
||||
%patch1006 -p0 -b .fastjar-0.97-ppc64le-config~
|
||||
|
@ -1118,26 +1144,38 @@ tar xjf %{SOURCE10}
|
|||
%patch1308 -p1 -b .stack-clash-8~
|
||||
%patch1309 -p1 -b .stack-clash-9~
|
||||
%patch1310 -p1 -b .stack-clash-10~
|
||||
#%patch1311 -p1 -b .stack-clash-11~
|
||||
%patch1311 -p1 -b .stack-clash-11~
|
||||
%patch1312 -p1 -b .stack-clash-12~
|
||||
%patch1313 -p1 -b .stack-clash-13~
|
||||
%patch1314 -p1 -b .stack-clash-14~
|
||||
%patch1315 -p1 -b .stack-clash-15~
|
||||
#%patch1316 -p1 -b .stack-clash-16~
|
||||
%patch1316 -p1 -b .stack-clash-16~
|
||||
%patch1317 -p1 -b .stack-clash-17~
|
||||
#%patch1318 -p1 -b .stack-clash-18~
|
||||
#%patch1319 -p1 -b .stack-clash-19~
|
||||
%patch1318 -p1 -b .stack-clash-18~
|
||||
%patch1319 -p1 -b .stack-clash-19~
|
||||
%patch1320 -p1 -b .stack-clash-20~
|
||||
%patch1321 -p1 -b .stack-clash-21~
|
||||
%patch1322 -p1 -b .stack-clash-22~
|
||||
%patch1323 -p1 -b .stack-clash-23~
|
||||
%patch1324 -p1 -b .stack-clash-24~
|
||||
%patch1325 -p1 -b .stack-clash-25~
|
||||
%patch1326 -p1 -b .stack-clash-26~
|
||||
%patch1327 -p1 -b .stack-clash-27~
|
||||
%patch1328 -p1 -b .stack-clash-28~
|
||||
%patch1329 -p1 -b .stack-clash-29~
|
||||
|
||||
%patch1401 -p1 -b .retpolines-1~
|
||||
#%patch1402 -p1 -b .retpolines-2~
|
||||
#%patch1403 -p1 -b .retpolines-3~
|
||||
#%patch1404 -p1 -b .retpolines-4~
|
||||
%patch1402 -p1 -b .retpolines-2~
|
||||
%patch1403 -p1 -b .retpolines-3~
|
||||
%patch1404 -p1 -b .retpolines-4~
|
||||
%patch1405 -p1 -b .retpolines-5~
|
||||
#%patch1406 -p1 -b .retpolines-6~
|
||||
%patch1406 -p1 -b .retpolines-6~
|
||||
%patch1407 -p0 -b .retpolines-7~
|
||||
%patch1408 -p0 -b .retpolines-8~
|
||||
%patch1409 -p1 -b .retpolines-9~
|
||||
%patch1410 -p1 -b .retpolines-10~
|
||||
%patch1411 -p1 -b .retpolines-11~
|
||||
|
||||
|
||||
sed -i -e 's/4\.8\.5/4.8.5/' gcc/BASE-VER
|
||||
echo 'PowerEL %{version}-%{gcc_release}' > gcc/DEV-PHASE
|
||||
|
@ -1192,7 +1230,6 @@ fi
|
|||
rm -f gcc/testsuite/go.test/test/chan/goroutines.go
|
||||
|
||||
%build
|
||||
|
||||
# Undo the broken autoconf change in recent Fedora versions
|
||||
export CONFIG_SITE=NONE
|
||||
|
||||
|
@ -1248,13 +1285,10 @@ ISL_FLAG_PIC=-fPIC
|
|||
%else
|
||||
ISL_FLAG_PIC=-fpic
|
||||
%endif
|
||||
%ifarch x86_64
|
||||
CLOOG_OPT_FLAGS="-m64 -O3 -march=core2 -mtune=core2 -mmmx -msse -msse2 -mssse3 -msse4 -msse4.1 -msse4.2 -mavx"
|
||||
%endif
|
||||
cd isl-build
|
||||
../../isl-%{isl_version}/configure --disable-shared \
|
||||
CC=/usr/bin/gcc CXX=/usr/bin/g++ \
|
||||
CFLAGS="${CLOOG_OPT_FLAGS} $ISL_FLAG_PIC" --prefix=`cd ..; pwd`/isl-install
|
||||
CFLAGS="${CFLAGS:-%optflags} $ISL_FLAG_PIC" --prefix=`cd ..; pwd`/isl-install
|
||||
make %{?_smp_mflags}
|
||||
make install
|
||||
cd ..
|
||||
|
@ -1272,7 +1306,7 @@ isl_prefix=`cd ../isl-install; pwd` \
|
|||
../../cloog-%{cloog_version}/configure --with-isl=system \
|
||||
--with-isl-prefix=`cd ../isl-install; pwd` \
|
||||
CC=/usr/bin/gcc CXX=/usr/bin/g++ \
|
||||
CFLAGS="${CLOOG_OPT_FLAGS}" CXXFLAGS="${CLOOG_OPT_FLAGS}" \
|
||||
CFLAGS="${CFLAGS:-%optflags}" CXXFLAGS="${CXXFLAGS:-%optflags}" \
|
||||
--prefix=`cd ..; pwd`/cloog-install
|
||||
sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool
|
||||
sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool
|
||||
|
@ -1358,9 +1392,11 @@ CC="$CC" CFLAGS="$OPT_FLAGS" \
|
|||
%else
|
||||
--without-isl --without-cloog \
|
||||
%endif
|
||||
%if 0%{?fedora} >= 21 || 0%{?rhel} >= 7
|
||||
%if %{attr_ifunc}
|
||||
--enable-gnu-indirect-function \
|
||||
%endif
|
||||
%endif
|
||||
%ifarch %{arm}
|
||||
--disable-sjlj-exceptions \
|
||||
%endif
|
||||
|
@ -1390,7 +1426,7 @@ CC="$CC" CFLAGS="$OPT_FLAGS" \
|
|||
%endif
|
||||
%ifarch ppc
|
||||
%if 0%{?rhel} >= 7
|
||||
--with-cpu-32=power6 --with-tune-32=power6 --with-cpu-64=power7 --with-tune-64=power7 \
|
||||
--with-cpu-32=power7 --with-tune-32=power7 --with-cpu-64=power7 --with-tune-64=power7 \
|
||||
%endif
|
||||
%if 0%{?rhel} == 6
|
||||
--with-cpu-32=power4 --with-tune-32=power6 --with-cpu-64=power4 --with-tune-64=power6 \
|
||||
|
@ -1399,11 +1435,11 @@ CC="$CC" CFLAGS="$OPT_FLAGS" \
|
|||
%ifarch ppc
|
||||
--build=%{gcc_target_platform} --target=%{gcc_target_platform} --with-cpu=default32
|
||||
%endif
|
||||
%ifarch %{ix86} x86_64
|
||||
%ifarch %{ix86}
|
||||
--with-tune=generic \
|
||||
%endif
|
||||
%ifarch x86_64
|
||||
--disable-multilib \
|
||||
--with-tune=core2 --disable-multilib \
|
||||
%endif
|
||||
%if 0%{?rhel} >= 7
|
||||
%ifarch %{ix86}
|
||||
|
@ -1417,7 +1453,7 @@ CC="$CC" CFLAGS="$OPT_FLAGS" \
|
|||
--with-arch=i686 \
|
||||
%endif
|
||||
%ifarch x86_64
|
||||
--with-arch_32=i686 \
|
||||
--with-arch=core2 --with-arch_32=core2 \
|
||||
%endif
|
||||
%endif
|
||||
%ifarch s390 s390x
|
||||
|
@ -1994,7 +2030,7 @@ ln -sf ../`echo ../../../../lib64/libgij.so.14.* | sed s~/../lib64/~/~` 32/libgi
|
|||
mv -f %{buildroot}%{_prefix}/lib/libobjc.*a 32/
|
||||
mv -f %{buildroot}%{_prefix}/lib/libgomp.*a 32/
|
||||
%endif
|
||||
%ifarch sparc64 ppc64 ppc64p7
|
||||
%ifarch sparc64
|
||||
ln -sf ../lib32/libgfortran.a 32/libgfortran.a
|
||||
ln -sf lib64/libgfortran.a libgfortran.a
|
||||
ln -sf ../lib32/libstdc++.a 32/libstdc++.a
|
||||
|
@ -2471,7 +2507,7 @@ fi
|
|||
%ifarch sparc64 sparcv9
|
||||
%{_prefix}/bin/sparc-%{_vendor}-%{_target_os}-gcc
|
||||
%endif
|
||||
%ifarch ppc64 ppc64p7
|
||||
%ifarch ppc
|
||||
%{_prefix}/bin/ppc-%{_vendor}-%{_target_os}-gcc
|
||||
%endif
|
||||
%{_prefix}/bin/%{gcc_target_platform}-gcc
|
||||
|
@ -2544,7 +2580,7 @@ fi
|
|||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/fxsrintrin.h
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/xsaveintrin.h
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/xsaveoptintrin.h
|
||||
#%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/pkuintrin.h
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/pkuintrin.h
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/mm_malloc.h
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/mm3dnow.h
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/include/cpuid.h
|
||||
|
@ -2810,7 +2846,7 @@ fi
|
|||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32/libstdc++.a
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32/libsupc++.a
|
||||
%endif
|
||||
%ifarch sparc64 ppc64 ppc64p7
|
||||
%ifarch sparc64
|
||||
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64/libstdc++.a
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64/libsupc++.a
|
||||
|
@ -2936,7 +2972,7 @@ fi
|
|||
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32/libgfortran.a
|
||||
%endif
|
||||
%ifarch sparc64 ppc64 ppc64p7
|
||||
%ifarch sparc64
|
||||
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64/libgfortran.a
|
||||
%endif
|
||||
|
@ -3072,7 +3108,7 @@ fi
|
|||
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32/libgcj_bc.so
|
||||
%endif
|
||||
%ifarch sparc64 ppc64 ppc64p7
|
||||
%ifarch sparc64
|
||||
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64/libgcj_bc.so
|
||||
%endif
|
||||
|
@ -3156,7 +3192,7 @@ fi
|
|||
%exclude %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32/adalib/libgnat.a
|
||||
%exclude %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32/adalib/libgnarl.a
|
||||
%endif
|
||||
%ifarch sparc64 ppc64 ppc64p7
|
||||
%ifarch sparc64
|
||||
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64/adainclude
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64/adalib
|
||||
|
@ -3184,7 +3220,7 @@ fi
|
|||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32/adalib/libgnat.a
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32/adalib/libgnarl.a
|
||||
%endif
|
||||
%ifarch sparc64 ppc64 ppc64p7
|
||||
%ifarch sparc64
|
||||
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64
|
||||
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64/adalib
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64/adalib/libgnat.a
|
||||
|
@ -3237,7 +3273,7 @@ fi
|
|||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32/libmudflap.a
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32/libmudflapth.a
|
||||
%endif
|
||||
%ifarch sparc64 ppc64 ppc64p7
|
||||
%ifarch sparc64
|
||||
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64/libmudflap.a
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64/libmudflapth.a
|
||||
|
@ -3282,7 +3318,7 @@ fi
|
|||
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32/libquadmath.a
|
||||
%endif
|
||||
%ifarch sparc64 ppc64 ppc64p7
|
||||
%ifarch sparc64
|
||||
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64/libquadmath.a
|
||||
%endif
|
||||
|
@ -3325,7 +3361,7 @@ fi
|
|||
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32/libitm.a
|
||||
%endif
|
||||
%ifarch sparc64 ppc64 ppc64p7
|
||||
%ifarch sparc64
|
||||
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64/libitm.a
|
||||
%endif
|
||||
|
@ -3351,7 +3387,7 @@ fi
|
|||
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32/libatomic.a
|
||||
%endif
|
||||
%ifarch sparc64 ppc64 ppc64p7
|
||||
%ifarch sparc64
|
||||
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64/libatomic.a
|
||||
%endif
|
||||
|
@ -3378,7 +3414,7 @@ fi
|
|||
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32/libasan.a
|
||||
%endif
|
||||
%ifarch sparc64 ppc64 ppc64p7
|
||||
%ifarch sparc64
|
||||
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64/libasan.a
|
||||
%endif
|
||||
|
@ -3461,7 +3497,7 @@ fi
|
|||
%endif
|
||||
%{_prefix}/%{_lib}/go/%{gcc_version}/%{gcc_target_platform}
|
||||
%ifarch %{multilib_64_archs}
|
||||
%ifnarch sparc64 ppc64 ppc64p7
|
||||
%ifnarch sparc64
|
||||
%dir %{_prefix}/lib/go
|
||||
%dir %{_prefix}/lib/go/%{gcc_version}
|
||||
%if "%{version}" != "%{gcc_version}"
|
||||
|
@ -3474,7 +3510,7 @@ fi
|
|||
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32/libgobegin.a
|
||||
%endif
|
||||
%ifarch sparc64 ppc64 ppc64p7
|
||||
%ifarch sparc64
|
||||
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64/libgobegin.a
|
||||
%endif
|
||||
|
@ -3495,7 +3531,7 @@ fi
|
|||
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib32/libgo.a
|
||||
%endif
|
||||
%ifarch sparc64 ppc64 ppc64p7
|
||||
%ifarch sparc64
|
||||
%dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64
|
||||
%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_version}/lib64/libgo.a
|
||||
%endif
|
||||
|
@ -3522,6 +3558,36 @@ fi
|
|||
%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/plugin
|
||||
|
||||
%changelog
|
||||
* Tue Jun 12 2018 Marek Polacek <polacek@redhat.com> 4.8.5-36
|
||||
- back out the last change
|
||||
|
||||
* Tue Jun 5 2018 Marek Polacek <polacek@redhat.com> 4.8.5-35
|
||||
- adjust C++11 signatures to take a const_iterator (#1575888)
|
||||
|
||||
* Thu Apr 26 2018 Marek Polacek <polacek@redhat.com> 4.8.5-34
|
||||
- fix infinite looping in -fipa-cp-clone (#1546372)
|
||||
- don't look for vsld gcc.target/powerpc/pr72717.c
|
||||
|
||||
* Wed Apr 25 2018 Jeff Law <law@redhat.com> 4.8.5-33
|
||||
- Fix two minor problems with the backported spectre updates
|
||||
from upstream. (#1537828)
|
||||
|
||||
* Thu Apr 19 2018 Jeff Law <law@redhat.com> 4.8.5-32
|
||||
- Backport various stack-clash and spectre fixes from upstream
|
||||
(#1537828)
|
||||
|
||||
* Tue Apr 10 2018 Marek Polacek <polacek@redhat.com> 4.8.5-31
|
||||
- backport s390 -mpic-data-is-text-relative feature (#1555397)
|
||||
- fix crash when write follows large read (#1463706)
|
||||
- fix emit_move_insn ICE (#1565536)
|
||||
- add missing rs6000-cpus.def (#1512202)
|
||||
|
||||
* Wed Apr 4 2018 Marek Polacek <polacek@redhat.com> 4.8.5-30
|
||||
- fix ICE when generating a vector shift by scalar (#1546728)
|
||||
|
||||
* Tue Mar 27 2018 Jeff Law <law@redhat.com> 4.8.5-29
|
||||
- s390 retpoline support for spectre mitigation (#1552021)
|
||||
|
||||
* Fri Jan 19 2018 Marek Polacek <polacek@redhat.com> 4.8.5-28
|
||||
- Minor testsuite fixes to clean up test results (#1469697)
|
||||
- retpoline support for spectre mitigation (#1535655)
|
||||
|
|
687
SPECS/glibc.spec
687
SPECS/glibc.spec
|
@ -1,6 +1,6 @@
|
|||
%define glibcsrcdir glibc-2.17-c758a686
|
||||
%define glibcversion 2.17
|
||||
%define glibcrelease 222%{?dist}
|
||||
%define glibcrelease 260%{?dist}
|
||||
##############################################################################
|
||||
# We support the following options:
|
||||
# --with/--without,
|
||||
|
@ -33,12 +33,6 @@
|
|||
%undefine with_valgrind
|
||||
%endif
|
||||
%endif
|
||||
%if %{with werror}
|
||||
%ifarch s390x
|
||||
# The 64-bit s390x builds are not -Werror clean yet.
|
||||
%undefine with_werror
|
||||
%endif
|
||||
%endif
|
||||
%if %{with bootstrap}
|
||||
# Disable benchtests, -Werror, docs, and valgrind if we're bootstrapping
|
||||
%undefine with_benchtests
|
||||
|
@ -221,7 +215,6 @@ Patch0028: glibc-fedora-localedata-rh61908.patch
|
|||
Patch0030: glibc-fedora-uname-getrlimit.patch
|
||||
Patch0031: glibc-fedora-__libc_multiple_libcs.patch
|
||||
Patch0032: glibc-fedora-elf-rh737223.patch
|
||||
Patch0033: glibc-fedora-elf-ORIGIN.patch
|
||||
Patch0034: glibc-fedora-elf-init-hidden_undef.patch
|
||||
|
||||
# Needs to be sent upstream
|
||||
|
@ -260,6 +253,11 @@ Patch0066: glibc-rh1227699.patch
|
|||
# CVE-2015-7547
|
||||
Patch0067: glibc-rh1296031.patch
|
||||
|
||||
# releng patch from Fedora
|
||||
Patch0068: glibc-rh1349982.patch
|
||||
|
||||
# These changes were brought forward from RHEL 6 for compatibility
|
||||
Patch0069: glibc-rh1448107.patch
|
||||
##############################################################################
|
||||
#
|
||||
# Patches from upstream
|
||||
|
@ -1161,6 +1159,264 @@ Patch1900: glibc-rh1534635.patch
|
|||
Patch1901: glibc-rh1529982.patch
|
||||
|
||||
Patch1902: glibc-rh1523119-compat-symbols.patch
|
||||
Patch2500: glibc-rh1505492-nscd_stat.patch
|
||||
Patch2501: glibc-rh1564638.patch
|
||||
Patch2502: glibc-rh1566623.patch
|
||||
Patch2503: glibc-rh1349967.patch
|
||||
Patch2504: glibc-rh1505492-undef-malloc.patch
|
||||
Patch2505: glibc-rh1505492-undef-elf-dtv-resize.patch
|
||||
Patch2506: glibc-rh1505492-undef-elision.patch
|
||||
Patch2507: glibc-rh1505492-undef-max_align_t.patch
|
||||
Patch2508: glibc-rh1505492-unused-tst-default-attr.patch
|
||||
Patch2509: glibc-rh1505492-prototypes-rtkaio.patch
|
||||
Patch2510: glibc-rh1505492-zerodiv-log.patch
|
||||
Patch2511: glibc-rh1505492-selinux.patch
|
||||
Patch2512: glibc-rh1505492-undef-abi.patch
|
||||
Patch2513: glibc-rh1505492-unused-math.patch
|
||||
Patch2514: glibc-rh1505492-prototypes-1.patch
|
||||
Patch2515: glibc-rh1505492-uninit-intl-plural.patch
|
||||
Patch2516: glibc-rh1505492-undef-1.patch
|
||||
Patch2517: glibc-rh1505492-undef-2.patch
|
||||
Patch2518: glibc-rh1505492-bounded-1.patch
|
||||
Patch2519: glibc-rh1505492-bounded-2.patch
|
||||
Patch2520: glibc-rh1505492-bounded-3.patch
|
||||
Patch2521: glibc-rh1505492-bounded-4.patch
|
||||
Patch2522: glibc-rh1505492-undef-3.patch
|
||||
Patch2523: glibc-rh1505492-bounded-5.patch
|
||||
Patch2524: glibc-rh1505492-bounded-6.patch
|
||||
Patch2525: glibc-rh1505492-bounded-7.patch
|
||||
Patch2526: glibc-rh1505492-bounded-8.patch
|
||||
Patch2527: glibc-rh1505492-unused-1.patch
|
||||
Patch2528: glibc-rh1505492-bounded-9.patch
|
||||
Patch2529: glibc-rh1505492-bounded-10.patch
|
||||
Patch2530: glibc-rh1505492-bounded-11.patch
|
||||
Patch2531: glibc-rh1505492-bounded-12.patch
|
||||
Patch2532: glibc-rh1505492-bounded-13.patch
|
||||
Patch2533: glibc-rh1505492-unused-2.patch
|
||||
Patch2534: glibc-rh1505492-bounded-14.patch
|
||||
Patch2535: glibc-rh1505492-bounded-15.patch
|
||||
Patch2536: glibc-rh1505492-bounded-16.patch
|
||||
Patch2537: glibc-rh1505492-bounded-17.patch
|
||||
Patch2538: glibc-rh1505492-malloc_size_t.patch
|
||||
Patch2539: glibc-rh1505492-malloc_ptrdiff_t.patch
|
||||
Patch2540: glibc-rh1505492-prototypes-2.patch
|
||||
Patch2541: glibc-rh1505492-prototypes-libc_fatal.patch
|
||||
Patch2542: glibc-rh1505492-getlogin.patch
|
||||
Patch2543: glibc-rh1505492-undef-4.patch
|
||||
Patch2544: glibc-rh1505492-register.patch
|
||||
Patch2545: glibc-rh1505492-prototypes-3.patch
|
||||
Patch2546: glibc-rh1505492-unused-3.patch
|
||||
Patch2547: glibc-rh1505492-ports-move-powerpc.patch
|
||||
Patch2548: glibc-rh1505492-unused-4.patch
|
||||
Patch2549: glibc-rh1505492-systemtap.patch
|
||||
Patch2550: glibc-rh1505492-prototypes-wcschr-1.patch
|
||||
Patch2551: glibc-rh1505492-prototypes-wcsrchr.patch
|
||||
Patch2552: glibc-rh1505492-prototypes-powerpc-wcscpy.patch
|
||||
Patch2553: glibc-rh1505492-prototypes-powerpc-wordcopy.patch
|
||||
Patch2554: glibc-rh1505492-bsd-flatten.patch
|
||||
Patch2555: glibc-rh1505492-unused-5.patch
|
||||
Patch2556: glibc-rh1505492-types-1.patch
|
||||
Patch2557: glibc-rh1505492-powerpc-sotruss.patch
|
||||
Patch2558: glibc-rh1505492-s390x-sotruss.patch
|
||||
Patch2559: glibc-rh1505492-ports-am33.patch
|
||||
Patch2560: glibc-rh1505492-ports-move-arm.patch
|
||||
Patch2561: glibc-rh1505492-undef-5.patch
|
||||
Patch2562: glibc-rh1505492-prototypes-4.patch
|
||||
Patch2563: glibc-rh1505492-ports-move-tile.patch
|
||||
Patch2564: glibc-rh1505492-ports-move-m68k.patch
|
||||
Patch2565: glibc-rh1505492-ports-move-mips.patch
|
||||
Patch2566: glibc-rh1505492-ports-move-aarch64.patch
|
||||
Patch2567: glibc-rh1505492-ports-move-alpha.patch
|
||||
Patch2568: glibc-rh1505492-ports-move-ia64.patch
|
||||
Patch2569: glibc-rh1505492-undef-6.patch
|
||||
Patch2570: glibc-rh1505492-undef-7.patch
|
||||
Patch2571: glibc-rh1505492-undef-intl.patch
|
||||
Patch2572: glibc-rh1505492-undef-obstack.patch
|
||||
Patch2573: glibc-rh1505492-undef-error.patch
|
||||
Patch2574: glibc-rh1505492-undef-string.patch
|
||||
Patch2575: glibc-rh1505492-undef-tempname.patch
|
||||
Patch2576: glibc-rh1505492-undef-8.patch
|
||||
Patch2577: glibc-rh1505492-undef-mktime.patch
|
||||
Patch2578: glibc-rh1505492-undef-sysconf.patch
|
||||
Patch2579: glibc-rh1505492-prototypes-Xat.patch
|
||||
Patch2580: glibc-rh1505492-undef-ipc64.patch
|
||||
Patch2581: glibc-rh1505492-undef-xfs-chown.patch
|
||||
Patch2582: glibc-rh1505492-undef-9.patch
|
||||
Patch2583: glibc-rh1505492-undef-10.patch
|
||||
Patch2584: glibc-rh1505492-undef-11.patch
|
||||
Patch2585: glibc-rh1505492-undef-12.patch
|
||||
Patch2586: glibc-rh1505492-prototypes-5.patch
|
||||
Patch2587: glibc-rh1505492-undef-13.patch
|
||||
Patch2588: glibc-rh1505492-undef-14.patch
|
||||
Patch2589: glibc-rh1505492-undef-15.patch
|
||||
Patch2590: glibc-rh1505492-ports-move-hppa.patch
|
||||
Patch2591: glibc-rh1505492-undef-16.patch
|
||||
Patch2592: glibc-rh1505492-undef-17.patch
|
||||
Patch2593: glibc-rh1505492-undef-18.patch
|
||||
Patch2594: glibc-rh1505492-undef-19.patch
|
||||
Patch2595: glibc-rh1505492-undef-20.patch
|
||||
Patch2596: glibc-rh1505492-undef-21.patch
|
||||
Patch2597: glibc-rh1505492-undef-22.patch
|
||||
Patch2598: glibc-rh1505492-undef-23.patch
|
||||
Patch2599: glibc-rh1505492-undef-24.patch
|
||||
Patch2600: glibc-rh1505492-prototypes-rwlock.patch
|
||||
Patch2601: glibc-rh1505492-undef-25.patch
|
||||
Patch2602: glibc-rh1505492-undef-26.patch
|
||||
Patch2603: glibc-rh1505492-undef-27.patch
|
||||
Patch2604: glibc-rh1505492-undef-28.patch
|
||||
Patch2605: glibc-rh1505492-undef-29.patch
|
||||
Patch2606: glibc-rh1505492-undef-30.patch
|
||||
Patch2607: glibc-rh1505492-undef-31.patch
|
||||
Patch2608: glibc-rh1505492-undef-32.patch
|
||||
Patch2609: glibc-rh1505492-undef-33.patch
|
||||
Patch2610: glibc-rh1505492-prototypes-memchr.patch
|
||||
Patch2611: glibc-rh1505492-undef-34.patch
|
||||
Patch2612: glibc-rh1505492-prototypes-powerpc-memmove.patch
|
||||
Patch2613: glibc-rh1505492-undef-35.patch
|
||||
Patch2614: glibc-rh1505492-undef-36.patch
|
||||
Patch2615: glibc-rh1505492-undef-37.patch
|
||||
Patch2616: glibc-rh1505492-uninit-1.patch
|
||||
Patch2617: glibc-rh1505492-undef-38.patch
|
||||
Patch2618: glibc-rh1505492-uninit-2.patch
|
||||
Patch2619: glibc-rh1505492-undef-39.patch
|
||||
Patch2620: glibc-rh1505492-undef-40.patch
|
||||
Patch2621: glibc-rh1505492-undef-41.patch
|
||||
Patch2622: glibc-rh1505492-undef-42.patch
|
||||
Patch2623: glibc-rh1505492-undef-43.patch
|
||||
Patch2624: glibc-rh1505492-undef-44.patch
|
||||
Patch2625: glibc-rh1505492-undef-45.patch
|
||||
Patch2626: glibc-rh1505492-undef-46.patch
|
||||
Patch2627: glibc-rh1505492-undef-47.patch
|
||||
Patch2628: glibc-rh1505492-prototypes-6.patch
|
||||
Patch2629: glibc-rh1505492-undef-48.patch
|
||||
Patch2630: glibc-rh1505492-prototypes-execve.patch
|
||||
Patch2631: glibc-rh1505492-prototypes-readv-writev.patch
|
||||
Patch2632: glibc-rh1505492-prototypes-7.patch
|
||||
Patch2633: glibc-rh1505492-prototypes-powerpc-pread-pwrite.patch
|
||||
Patch2634: glibc-rh1505492-s390-backtrace.patch
|
||||
Patch2635: glibc-rh1505492-unused-6.patch
|
||||
Patch2636: glibc-rh1505492-prototypes-8.patch
|
||||
Patch2637: glibc-rh1505492-prototypes-ctermid.patch
|
||||
Patch2638: glibc-rh1505492-unused-7.patch
|
||||
Patch2639: glibc-rh1505492-uninit-3.patch
|
||||
Patch2640: glibc-rh1505492-types-2.patch
|
||||
Patch2641: glibc-rh1505492-unused-8.patch
|
||||
Patch2642: glibc-rh1505492-unused-9.patch
|
||||
Patch2643: glibc-rh1505492-types-3.patch
|
||||
Patch2644: glibc-rh1505492-unused-10.patch
|
||||
Patch2645: glibc-rh1505492-types-5.patch
|
||||
Patch2646: glibc-rh1505492-unused-11.patch
|
||||
Patch2647: glibc-rh1505492-unused-12.patch
|
||||
Patch2648: glibc-rh1505492-unused-13.patch
|
||||
Patch2649: glibc-rh1505492-deprecated-1.patch
|
||||
Patch2650: glibc-rh1505492-unused-14.patch
|
||||
Patch2651: glibc-rh1505492-types-6.patch
|
||||
Patch2652: glibc-rh1505492-address.patch
|
||||
Patch2653: glibc-rh1505492-types-7.patch
|
||||
Patch2654: glibc-rh1505492-prototypes-9.patch
|
||||
Patch2655: glibc-rh1505492-diag.patch
|
||||
Patch2656: glibc-rh1505492-zerodiv-1.patch
|
||||
Patch2657: glibc-rh1505492-deprecated-2.patch
|
||||
Patch2658: glibc-rh1505492-unused-15.patch
|
||||
Patch2659: glibc-rh1505492-prototypes-sigvec.patch
|
||||
Patch2660: glibc-rh1505492-werror-activate.patch
|
||||
Patch2661: glibc-rh1505492-types-8.patch
|
||||
Patch2662: glibc-rh1505492-prototypes-intl.patch
|
||||
Patch2663: glibc-rh1505492-types-9.patch
|
||||
Patch2664: glibc-rh1505492-types-10.patch
|
||||
Patch2665: glibc-rh1505492-prototypes-sem_unlink.patch
|
||||
Patch2666: glibc-rh1505492-prototypes-s390-pthread_once.patch
|
||||
Patch2667: glibc-rh1505492-types-11.patch
|
||||
Patch2668: glibc-rh1505492-types-12.patch
|
||||
Patch2669: glibc-rh1505492-types-13.patch
|
||||
Patch2670: glibc-rh1505492-undef-49.patch
|
||||
Patch2671: glibc-rh1505492-undef-50.patch
|
||||
Patch2672: glibc-rh1505492-undef-51.patch
|
||||
Patch2673: glibc-rh1505492-undef-52.patch
|
||||
Patch2674: glibc-rh1505492-types-14.patch
|
||||
Patch2675: glibc-rh1505492-prototypes-10.patch
|
||||
Patch2676: glibc-rh1505492-prototypes-wcschr-2.patch
|
||||
Patch2677: glibc-rh1505492-prototypes-bzero.patch
|
||||
Patch2678: glibc-rh1505492-winline.patch
|
||||
Patch2679: glibc-rh1505492-prototypes-scandir.patch
|
||||
Patch2680: glibc-rh1505492-prototypes-timespec_get.patch
|
||||
Patch2681: glibc-rh1505492-prototypes-gettimeofday.patch
|
||||
Patch2682: glibc-rh1505492-prototypes-no_cancellation.patch
|
||||
Patch2683: glibc-rh1505492-prototypes-getttynam.patch
|
||||
Patch2684: glibc-rh1505492-undef-53.patch
|
||||
Patch2685: glibc-rh1505492-prototypes-stpcpy.patch
|
||||
Patch2686: glibc-rh1505492-undef-54.patch
|
||||
Patch2687: glibc-rh1505492-undef-55.patch
|
||||
Patch2688: glibc-rh1505492-undef-activate.patch
|
||||
Patch2689: glibc-rh1505492-prototypes-debug.patch
|
||||
Patch2690: glibc-rh1505492-prototypes-putXent.patch
|
||||
Patch2691: glibc-rh1505492-prototypes-11.patch
|
||||
Patch2692: glibc-rh1505492-prototypes-12.patch
|
||||
Patch2693: glibc-rh1505492-prototypes-13.patch
|
||||
Patch2694: glibc-rh1505492-prototypes-14.patch
|
||||
Patch2695: glibc-rh1505492-prototypes-15.patch
|
||||
Patch2696: glibc-rh1505492-prototypes-16.patch
|
||||
Patch2697: glibc-rh1505492-prototypes-17.patch
|
||||
Patch2698: glibc-rh1505492-prototypes-18.patch
|
||||
Patch2699: glibc-rh1505492-prototypes-activate.patch
|
||||
Patch2700: glibc-rh1505492-unused-16.patch
|
||||
Patch2701: glibc-rh1505492-unused-17.patch
|
||||
Patch2702: glibc-rh1505492-undef-56.patch
|
||||
Patch2703: glibc-rh1548002.patch
|
||||
Patch2704: glibc-rh1307241-1.patch
|
||||
Patch2705: glibc-rh1307241-2.patch
|
||||
|
||||
Patch2706: glibc-rh1563747.patch
|
||||
Patch2707: glibc-rh1476120.patch
|
||||
Patch2708: glibc-rh1505647.patch
|
||||
|
||||
Patch2709: glibc-rh1457479-1.patch
|
||||
Patch2710: glibc-rh1457479-2.patch
|
||||
Patch2711: glibc-rh1457479-3.patch
|
||||
Patch2712: glibc-rh1457479-4.patch
|
||||
Patch2713: glibc-rh1461231.patch
|
||||
|
||||
Patch2714: glibc-rh1577333.patch
|
||||
Patch2715: glibc-rh1531168-1.patch
|
||||
Patch2716: glibc-rh1531168-2.patch
|
||||
Patch2717: glibc-rh1531168-3.patch
|
||||
Patch2718: glibc-rh1579742.patch
|
||||
Patch2719: glibc-rh1579727-1.patch
|
||||
Patch2720: glibc-rh1579727-2.patch
|
||||
Patch2721: glibc-rh1579809-1.patch
|
||||
Patch2722: glibc-rh1579809-2.patch
|
||||
Patch2723: glibc-rh1505451.patch
|
||||
Patch2724: glibc-rh1505477.patch
|
||||
Patch2725: glibc-rh1505500.patch
|
||||
Patch2726: glibc-rh1563046.patch
|
||||
|
||||
# RHBZ 1560641 - backport of upstream sem_open patch
|
||||
Patch2727: glibc-rh1560641.patch
|
||||
|
||||
Patch2728: glibc-rh1550080.patch
|
||||
Patch2729: glibc-rh1526193.patch
|
||||
Patch2730: glibc-rh1372304-1.patch
|
||||
Patch2731: glibc-rh1372304-2.patch
|
||||
Patch2732: glibc-rh1540480-0.patch
|
||||
Patch2733: glibc-rh1540480-1.patch
|
||||
Patch2734: glibc-rh1540480-2.patch
|
||||
Patch2735: glibc-rh1540480-3.patch
|
||||
Patch2736: glibc-rh1540480-4.patch
|
||||
Patch2737: glibc-rh1540480-5.patch
|
||||
Patch2738: glibc-rh1540480-6.patch
|
||||
Patch2739: glibc-rh1540480-7.patch
|
||||
Patch2740: glibc-rh1540480-8.patch
|
||||
Patch2741: glibc-rh1447808-0.patch
|
||||
Patch2742: glibc-rh1447808-1.patch
|
||||
Patch2743: glibc-rh1447808-2.patch
|
||||
Patch2744: glibc-rh1401665-0.patch
|
||||
Patch2745: glibc-rh1401665-1a.patch
|
||||
Patch2746: glibc-rh1401665-1b.patch
|
||||
Patch2747: glibc-rh1401665-1c.patch
|
||||
Patch2748: glibc-rh1401665-2.patch
|
||||
Patch2749: glibc-rh1401665-3.patch
|
||||
Patch2750: glibc-rh1401665-4.patch
|
||||
Patch2751: glibc-rh1401665-5.patch
|
||||
|
||||
##############################################################################
|
||||
#
|
||||
|
@ -1293,6 +1549,8 @@ Patch2111: glibc-rh677316-legacy.patch
|
|||
Patch2112: glibc-rh1498566.patch
|
||||
Patch2113: glibc-rh1445644.patch
|
||||
|
||||
Patch2114: glibc-rh1471405.patch
|
||||
|
||||
##############################################################################
|
||||
# End of glibc patches.
|
||||
##############################################################################
|
||||
|
@ -1315,6 +1573,16 @@ Provides: ld-linux.so.3
|
|||
Provides: ld-linux.so.3(GLIBC_2.4)
|
||||
%endif
|
||||
|
||||
# This should remain "Provides: nss_db" (or become a subpackage) to allow easy
|
||||
# migration from old systems that previously had the old nss_db package
|
||||
# installed. Note that this doesn't make the migration that smooth, the
|
||||
# databases still need rebuilding because the formats were different.
|
||||
# The nss_db package was deprecated in F16 and onwards:
|
||||
# https://lists.fedoraproject.org/pipermail/devel/2011-July/153665.html
|
||||
# The different database format does cause some issues for users:
|
||||
# https://lists.fedoraproject.org/pipermail/devel/2011-December/160497.html
|
||||
Provides: nss_db
|
||||
|
||||
Requires: glibc-common = %{version}-%{release}
|
||||
|
||||
# Require libgcc in case some program calls pthread_cancel in its %%post
|
||||
|
@ -1358,9 +1626,13 @@ Conflicts: kernel < %{enablekernel}
|
|||
%ifarch %{power64}
|
||||
%ifarch ppc64le
|
||||
%define target ppc64le-powerel-linux
|
||||
%else
|
||||
%endif
|
||||
%ifarch ppc64
|
||||
%define target ppc64-powerel-linux
|
||||
%endif
|
||||
%ifnarch ppc64 ppc64le
|
||||
%define target ppc-powerel-linux
|
||||
%endif
|
||||
%endif
|
||||
|
||||
%ifarch %{multiarcharches}
|
||||
|
@ -1644,7 +1916,6 @@ package or when debugging this package.
|
|||
%patch0030 -p1
|
||||
%patch0031 -p1
|
||||
%patch0032 -p1
|
||||
%patch0033 -p1
|
||||
%patch0034 -p1
|
||||
%patch1051 -p1
|
||||
%patch0035 -p1
|
||||
|
@ -1729,6 +2000,7 @@ package or when debugging this package.
|
|||
|
||||
# PPC64LE Patch set:
|
||||
# 1064 to 1109.
|
||||
|
||||
%patch1064 -p1
|
||||
%patch1065 -p1
|
||||
%patch1066 -p1
|
||||
|
@ -2107,6 +2379,7 @@ package or when debugging this package.
|
|||
%patch1754 -p1
|
||||
%patch1755 -p1
|
||||
%patch1756 -p1
|
||||
%patch0068 -p1
|
||||
%patch1757 -p1
|
||||
%patch17580 -p1
|
||||
%patch1758 -p1
|
||||
|
@ -2216,7 +2489,7 @@ package or when debugging this package.
|
|||
%patch1855 -p1
|
||||
%patch1856 -p1
|
||||
|
||||
#%patch1857 -p1
|
||||
%patch1857 -p1
|
||||
%patch1858 -p1
|
||||
%patch1859 -p1
|
||||
%patch1860 -p1
|
||||
|
@ -2262,6 +2535,7 @@ package or when debugging this package.
|
|||
%patch2111 -p1
|
||||
%patch2112 -p1
|
||||
%patch2113 -p1
|
||||
%patch2114 -p1
|
||||
|
||||
%patch1878 -p1
|
||||
%patch1879 -p1
|
||||
|
@ -2290,6 +2564,262 @@ package or when debugging this package.
|
|||
%patch1900 -p1
|
||||
%patch1901 -p1
|
||||
%patch1902 -p1
|
||||
%patch2500 -p1
|
||||
%patch2501 -p1
|
||||
%patch2502 -p1
|
||||
%patch2503 -p1
|
||||
%patch2504 -p1
|
||||
%patch2505 -p1
|
||||
%patch2506 -p1
|
||||
%patch2507 -p1
|
||||
%patch2508 -p1
|
||||
%patch2509 -p1
|
||||
%patch2510 -p1
|
||||
%patch2511 -p1
|
||||
%patch2512 -p1
|
||||
%patch2513 -p1
|
||||
%patch2514 -p1
|
||||
%patch2515 -p1
|
||||
%patch2516 -p1
|
||||
%patch2517 -p1
|
||||
%patch2518 -p1
|
||||
%patch2519 -p1
|
||||
%patch2520 -p1
|
||||
%patch2521 -p1
|
||||
%patch2522 -p1
|
||||
%patch2523 -p1
|
||||
%patch2524 -p1
|
||||
%patch2525 -p1
|
||||
%patch2526 -p1
|
||||
%patch2527 -p1
|
||||
%patch2528 -p1
|
||||
%patch2529 -p1
|
||||
%patch2530 -p1
|
||||
%patch2531 -p1
|
||||
%patch2532 -p1
|
||||
%patch2533 -p1
|
||||
%patch2534 -p1
|
||||
%patch2535 -p1
|
||||
%patch2536 -p1
|
||||
%patch2537 -p1
|
||||
%patch2538 -p1
|
||||
%patch2539 -p1
|
||||
%patch2540 -p1
|
||||
%patch2541 -p1
|
||||
%patch2542 -p1
|
||||
%patch2543 -p1
|
||||
%patch0069 -p1
|
||||
%patch2544 -p1
|
||||
%patch2545 -p1
|
||||
%patch2546 -p1
|
||||
%patch2547 -p1
|
||||
%patch2548 -p1
|
||||
%patch2549 -p1
|
||||
%patch2550 -p1
|
||||
%patch2551 -p1
|
||||
%patch2552 -p1
|
||||
%patch2553 -p1
|
||||
%patch2554 -p1
|
||||
%patch2555 -p1
|
||||
%patch2556 -p1
|
||||
%patch2557 -p1
|
||||
%patch2558 -p1
|
||||
%patch2559 -p1
|
||||
%patch2560 -p1
|
||||
%patch2561 -p1
|
||||
%patch2562 -p1
|
||||
%patch2563 -p1
|
||||
%patch2564 -p1
|
||||
%patch2565 -p1
|
||||
%patch2566 -p1
|
||||
%patch2567 -p1
|
||||
%patch2568 -p1
|
||||
%patch2569 -p1
|
||||
%patch2570 -p1
|
||||
%patch2571 -p1
|
||||
%patch2572 -p1
|
||||
%patch2573 -p1
|
||||
%patch2574 -p1
|
||||
%patch2575 -p1
|
||||
%patch2576 -p1
|
||||
%patch2577 -p1
|
||||
%patch2578 -p1
|
||||
%patch2579 -p1
|
||||
%patch2580 -p1
|
||||
%patch2581 -p1
|
||||
%patch2582 -p1
|
||||
%patch2583 -p1
|
||||
%patch2584 -p1
|
||||
%patch2585 -p1
|
||||
%patch2586 -p1
|
||||
%patch2587 -p1
|
||||
%patch2588 -p1
|
||||
%patch2589 -p1
|
||||
%patch2590 -p1
|
||||
%patch2591 -p1
|
||||
%patch2592 -p1
|
||||
%patch2593 -p1
|
||||
%patch2594 -p1
|
||||
%patch2595 -p1
|
||||
%patch2596 -p1
|
||||
%patch2597 -p1
|
||||
%patch2598 -p1
|
||||
%patch2599 -p1
|
||||
%patch2600 -p1
|
||||
%patch2601 -p1
|
||||
%patch2602 -p1
|
||||
%patch2603 -p1
|
||||
%patch2604 -p1
|
||||
%patch2605 -p1
|
||||
%patch2606 -p1
|
||||
%patch2607 -p1
|
||||
%patch2608 -p1
|
||||
%patch2609 -p1
|
||||
%patch2610 -p1
|
||||
%patch2611 -p1
|
||||
%patch2612 -p1
|
||||
%patch2613 -p1
|
||||
%patch2614 -p1
|
||||
%patch2615 -p1
|
||||
%patch2616 -p1
|
||||
%patch2617 -p1
|
||||
%patch2618 -p1
|
||||
%patch2619 -p1
|
||||
%patch2620 -p1
|
||||
%patch2621 -p1
|
||||
%patch2622 -p1
|
||||
%patch2623 -p1
|
||||
%patch2624 -p1
|
||||
%patch2625 -p1
|
||||
%patch2626 -p1
|
||||
%patch2627 -p1
|
||||
%patch2628 -p1
|
||||
%patch2629 -p1
|
||||
%patch2630 -p1
|
||||
%patch2631 -p1
|
||||
%patch2632 -p1
|
||||
%patch2633 -p1
|
||||
%patch2634 -p1
|
||||
%patch2635 -p1
|
||||
%patch2636 -p1
|
||||
%patch2637 -p1
|
||||
%patch2638 -p1
|
||||
%patch2639 -p1
|
||||
%patch2640 -p1
|
||||
%patch2641 -p1
|
||||
%patch2642 -p1
|
||||
%patch2643 -p1
|
||||
%patch2644 -p1
|
||||
%patch2645 -p1
|
||||
%patch2646 -p1
|
||||
%patch2647 -p1
|
||||
%patch2648 -p1
|
||||
%patch2649 -p1
|
||||
%patch2650 -p1
|
||||
%patch2651 -p1
|
||||
%patch2652 -p1
|
||||
%patch2653 -p1
|
||||
%patch2654 -p1
|
||||
%patch2655 -p1
|
||||
%patch2656 -p1
|
||||
%patch2657 -p1
|
||||
%patch2658 -p1
|
||||
%patch2659 -p1
|
||||
%patch2660 -p1
|
||||
%patch2661 -p1
|
||||
%patch2662 -p1
|
||||
%patch2663 -p1
|
||||
%patch2664 -p1
|
||||
%patch2665 -p1
|
||||
%patch2666 -p1
|
||||
%patch2667 -p1
|
||||
%patch2668 -p1
|
||||
%patch2669 -p1
|
||||
%patch2670 -p1
|
||||
%patch2671 -p1
|
||||
%patch2672 -p1
|
||||
%patch2673 -p1
|
||||
%patch2674 -p1
|
||||
%patch2675 -p1
|
||||
%patch2676 -p1
|
||||
%patch2677 -p1
|
||||
%patch2678 -p1
|
||||
%patch2679 -p1
|
||||
%patch2680 -p1
|
||||
%patch2681 -p1
|
||||
%patch2682 -p1
|
||||
%patch2683 -p1
|
||||
%patch2684 -p1
|
||||
%patch2685 -p1
|
||||
%patch2686 -p1
|
||||
%patch2687 -p1
|
||||
%patch2688 -p1
|
||||
%patch2689 -p1
|
||||
%patch2690 -p1
|
||||
%patch2691 -p1
|
||||
%patch2692 -p1
|
||||
%patch2693 -p1
|
||||
%patch2694 -p1
|
||||
%patch2695 -p1
|
||||
%patch2696 -p1
|
||||
%patch2697 -p1
|
||||
%patch2698 -p1
|
||||
%patch2699 -p1
|
||||
%patch2700 -p1
|
||||
%patch2701 -p1
|
||||
%patch2702 -p1
|
||||
%patch2703 -p1
|
||||
%patch2704 -p1
|
||||
%patch2705 -p1
|
||||
|
||||
%patch2706 -p1
|
||||
%patch2707 -p1
|
||||
%patch2708 -p1
|
||||
|
||||
%patch2709 -p1
|
||||
%patch2710 -p1
|
||||
%patch2711 -p1
|
||||
%patch2712 -p1
|
||||
%patch2713 -p1
|
||||
|
||||
%patch2714 -p1
|
||||
%patch2715 -p1
|
||||
%patch2716 -p1
|
||||
%patch2717 -p1
|
||||
%patch2718 -p1
|
||||
%patch2719 -p1
|
||||
%patch2720 -p1
|
||||
%patch2721 -p1
|
||||
%patch2722 -p1
|
||||
%patch2723 -p1
|
||||
%patch2724 -p1
|
||||
%patch2725 -p1
|
||||
%patch2726 -p1
|
||||
%patch2727 -p1
|
||||
%patch2728 -p1
|
||||
%patch2729 -p1
|
||||
%patch2730 -p1
|
||||
%patch2731 -p1
|
||||
%patch2732 -p1
|
||||
%patch2733 -p1
|
||||
%patch2734 -p1
|
||||
%patch2735 -p1
|
||||
%patch2736 -p1
|
||||
%patch2737 -p1
|
||||
%patch2738 -p1
|
||||
%patch2739 -p1
|
||||
%patch2740 -p1
|
||||
%patch2741 -p1
|
||||
%patch2742 -p1
|
||||
%patch2743 -p1
|
||||
%patch2744 -p1
|
||||
%patch2745 -p1
|
||||
%patch2746 -p1
|
||||
%patch2747 -p1
|
||||
%patch2748 -p1
|
||||
%patch2749 -p1
|
||||
%patch2750 -p1
|
||||
%patch2751 -p1
|
||||
|
||||
##############################################################################
|
||||
# %%prep - Additional prep required...
|
||||
|
@ -2359,8 +2889,7 @@ BuildFlags="-march=i686 -mtune=generic"
|
|||
BuildFlags="$BuildFlags -mno-tls-direct-seg-refs"
|
||||
%endif
|
||||
%ifarch x86_64
|
||||
#BuildFlags="-m64 -O3 -march=core2 -mtune=core2 -mmmx -msse -msse2 -mssse3 -msse4 -msse4.1 -msse4.2 -mavx"
|
||||
BuildFlags="-march=core2 -mtune=core2"
|
||||
BuildFlags="-m64 -O3 -march=core2 -mtune=core2"
|
||||
%endif
|
||||
|
||||
##############################################################################
|
||||
|
@ -2455,7 +2984,7 @@ build_CFLAGS="$BuildFlags -g -O3 $*"
|
|||
configure_CFLAGS="$build_CFLAGS -fno-asynchronous-unwind-tables"
|
||||
../configure CC="$GCC" CXX="$GXX" CFLAGS="$configure_CFLAGS" \
|
||||
--prefix=%{_prefix} \
|
||||
--enable-add-ons=ports,nptl$AddOns \
|
||||
--enable-add-ons=nptl$AddOns \
|
||||
--with-headers=%{_prefix}/include $EnableKernel --enable-bind-now \
|
||||
--build=%{target} \
|
||||
%ifarch %{multiarcharches}
|
||||
|
@ -2525,8 +3054,8 @@ build power6
|
|||
|
||||
%if %{buildpower8}
|
||||
(
|
||||
GCC="$GCC -m64 -O3 -mcpu=power8 -mtune=power8"
|
||||
GXX="$GXX -m64 -O3 -mcpu=power8 -mtune=power8"
|
||||
GCC="$GCC -mcpu=power8 -mtune=power8"
|
||||
GXX="$GXX -mcpu=power8 -mtune=power8"
|
||||
core_with_options="--with-cpu=power8"
|
||||
build power8
|
||||
)
|
||||
|
@ -3454,6 +3983,132 @@ rm -f *.filelist*
|
|||
%endif
|
||||
|
||||
%changelog
|
||||
* Wed Jun 27 2018 Patsy Franklin <pfrankli@redhat.com> - 2.17-260
|
||||
- Update glibc-rh1560641.patch to initialize pad outside
|
||||
the conditional eliminating an uninitialized byte warning from
|
||||
valgrind. (#1560641)
|
||||
|
||||
* Fri Jun 15 2018 Arjun Shankar <arjun@redhat.com> - 2.17-259
|
||||
- Correctly set errno when send() fails on i686 (#1550080)
|
||||
|
||||
* Tue Jun 12 2018 Carlos O'Donell <carlos@redhat.com> - 2.17-258
|
||||
- Fix dynamic string token substitution in DT_RPATH etc. (#1447808, #1540480)
|
||||
- Additional robust mutex fixes (#1401665)
|
||||
|
||||
* Tue Jun 12 2018 Carlos O'Donell <carlos@redhat.com> - 2.17-257
|
||||
- Improve process-shared robust mutex support (#1401665)
|
||||
|
||||
* Tue Jun 12 2018 Carlos O'Donell <carlos@redhat.com> 2.17-256
|
||||
- CVE-2017-16997: Correctly handle DT_RPATH (#1540480).
|
||||
- Correctly process "$ORIGIN" element in DT_RPATH or DT_NEEDED (#1447808).
|
||||
|
||||
* Tue Jun 12 2018 Carlos O'Donell <codonell@redhat.com> - 2.17-255
|
||||
- Make transition from legacy nss_db easier (#1408964)
|
||||
|
||||
* Mon Jun 11 2018 Arjun Shankar <arjun@redhat.com> - 2.17-254
|
||||
- nptl: Avoid expected SIGALRM in most tests (#1372304)
|
||||
|
||||
* Fri Jun 8 2018 Patsy Franklin <pfrankli@redhat.com> - 2.17-253
|
||||
- Add support for el_GR@euro locale. Update el_GR, ur_IN and
|
||||
wal_ET locales. (#1448107)
|
||||
|
||||
* Fri Jun 8 2018 Arjun Shankar <arjun@redhat.com> - 2.17-252
|
||||
- Do not scale NPTL tests with available number of CPUs (#1526193)
|
||||
|
||||
* Thu Jun 7 2018 Arjun Shankar <arjun@redhat.com> - 2.17-251
|
||||
- Correctly set errno when send() fails on s390 and s390x (#1550080)
|
||||
|
||||
* Wed Jun 6 2018 Patsy Franklin <pfrankli@redhat.com> - 2.17-250
|
||||
- Initialize pad field in sem_open. (#1560641)
|
||||
|
||||
* Mon Jun 4 2018 Arjun Shankar <arjun@redhat.com> - 2.17-249
|
||||
- getlogin_r: Return early when process has no associated login UID (#1563046)
|
||||
|
||||
* Mon Jun 4 2018 Arjun Shankar <arjun@redhat.com> - 2.17-248
|
||||
- Return static array, not local array from transliteration function (#1505500)
|
||||
|
||||
* Mon Jun 4 2018 Arjun Shankar <arjun@redhat.com> - 2.17-247
|
||||
- Re-write multi-statement strftime_l macros using better style (#1505477)
|
||||
|
||||
* Mon Jun 4 2018 Arjun Shankar <arjun@redhat.com> - 2.17-246
|
||||
- Fix pthread_barrier_init typo (#1505451)
|
||||
|
||||
* Wed May 23 2018 Florian Weimer <fweimer@redhat.com> - 2.17-245
|
||||
- CVE-2018-11237: AVX-512 mempcpy for KNL buffer overflow (#1579809)
|
||||
|
||||
* Wed May 23 2018 Florian Weimer <fweimer@redhat.com> - 2.17-244
|
||||
- resolv: Fix crash after memory allocation failure (#1579727)
|
||||
|
||||
* Wed May 23 2018 Florian Weimer <fweimer@redhat.com> - 2.17-243
|
||||
- CVE-2018-11236: Path length overflow in realpath (#1579742)
|
||||
|
||||
* Tue May 22 2018 DJ Delorie <dj@redhat.com> - 2.17-242
|
||||
- S390: fix sys/ptrace.h to make it includible again after
|
||||
asm/ptrace.h (#1457479)
|
||||
|
||||
* Tue May 22 2018 Florian Weimer <fweimer@redhat.com> - 2.17-241
|
||||
- x86: setcontext, makecontext alignment issues (#1531168)
|
||||
|
||||
* Wed May 16 2018 DJ Delorie <dj@redhat.com> - 2.17-240
|
||||
- Remove abort() warning in manual (#1577333)
|
||||
|
||||
* Wed May 16 2018 DJ Delorie <dj@redhat.com> - 2.17-239
|
||||
- Add Open File Description (OFL) locks. (#1461231)
|
||||
|
||||
* Sun May 13 2018 Patsy Franklin <pfrankli@redhat.com> - 2.17-238
|
||||
- Properly handle more invalid --install-langs arguments. (#1349982)
|
||||
|
||||
* Fri May 11 2018 DJ Delorie <dj@redhat.com> - 2.17-237
|
||||
- Add O_TMPFILE macro (#1471405)
|
||||
- Update syscall names list to kernel 4.16 (#1563747)
|
||||
- Include <linux/falloc.h> in bits/fcntl-linux.h. (#1476120)
|
||||
- Fix netgroup cache keys. (#1505647)
|
||||
- Update ptrace constants. (#1457479)
|
||||
|
||||
* Thu May 3 2018 Arjun Shankar <arjun@redhat.com> - 2.17-236
|
||||
- Fix strfmon_l so that it groups digits (#1307241)
|
||||
|
||||
* Thu May 3 2018 Arjun Shankar <arjun@redhat.com> - 2.17-235
|
||||
- CVE-2018-6485: Integer overflow in posix_memalign in memalign (#1548002)
|
||||
|
||||
* Fri Apr 13 2018 Florian Weimer <fweimer@redhat.com> - 2.17-234
|
||||
- Adjust spec file for compiler warnings cleanup (#1505492)
|
||||
- Drop ports add-on
|
||||
- Do not attempt to disable warnings-as-errors on s390x
|
||||
|
||||
* Fri Apr 13 2018 Florian Weimer <fweimer@redhat.com> - 2.17-233
|
||||
- Compiler warnings cleanup, phase 7 (#1505492)
|
||||
|
||||
* Fri Apr 13 2018 Florian Weimer <fweimer@redhat.com> - 2.17-232
|
||||
- Compiler warnings cleanup, phase 6 (#1505492)
|
||||
|
||||
* Fri Apr 13 2018 Florian Weimer <fweimer@redhat.com> - 2.17-231
|
||||
- Compiler warnings cleanup, phase 5 (#1505492)
|
||||
|
||||
* Fri Apr 13 2018 Florian Weimer <fweimer@redhat.com> - 2.17-230
|
||||
- Compiler warnings cleanup, phase 4 (#1505492)
|
||||
|
||||
* Fri Apr 13 2018 Florian Weimer <fweimer@redhat.com> - 2.17-229
|
||||
- Compiler warnings cleanup, phase 3 (#1505492)
|
||||
|
||||
* Fri Apr 13 2018 Florian Weimer <fweimer@redhat.com> - 2.17-228
|
||||
- Compiler warnings cleanup, phase 2 (#1505492)
|
||||
|
||||
* Fri Apr 13 2018 Florian Weimer <fweimer@redhat.com> - 2.17-227
|
||||
- Fix downstream-specific compiler warnings (#1505492)
|
||||
|
||||
* Fri Apr 13 2018 Florian Weimer <fweimer@redhat.com> - 2.17-226
|
||||
- rtkaio: Do not define IN_MODULE (#1349967)
|
||||
|
||||
* Fri Apr 13 2018 Florian Weimer <fweimer@redhat.com> - 2.17-225
|
||||
- Fix K&R function definitions in libio (#1566623)
|
||||
|
||||
* Fri Apr 13 2018 Florian Weimer <fweimer@redhat.com> - 2.17-224
|
||||
- Fix type errors in string tests (#1564638)
|
||||
|
||||
* Fri Apr 13 2018 Florian Weimer <fweimer@redhat.com> - 2.17-223
|
||||
- Make nscd build reproducible for verification (#1505492)
|
||||
|
||||
* Thu Feb 1 2018 Florian Weimer <fweimer@redhat.com> - 2.17-222
|
||||
- Restore internal GLIBC_PRIVATE symbols for use during upgrades (#1523119)
|
||||
|
||||
|
|
Loading…
Reference in New Issue