Compare commits
No commits in common. 'c9' and 'i9' have entirely different histories.
@ -1,4 +1,4 @@
|
||||
fdeaf702eb50579d38faf7dc2aadbf5e27a2c432 SOURCES/gcc-11.5.0-20240719.tar.xz
|
||||
d190549fcae9ea175ede566a512187c8ff36671b SOURCES/gcc-11.3.1-20221121.tar.xz
|
||||
bbffc5a2b05e4f0c97e882f96c448504491dc4ed SOURCES/isl-0.18.tar.bz2
|
||||
6ec33952e824e837fef0e829c93d39d6a507082f SOURCES/newlib-cygwin-50e2a63b04bdd018484605fbb954fd1bd5147fa0.tar.xz
|
||||
0e0c6f8d68ab0878f02287ac082c1077c831cd81 SOURCES/nvptx-tools-5f6f343a302d620b0868edab376c00b15741e39e.tar.xz
|
||||
|
@ -1,4 +1,4 @@
|
||||
SOURCES/gcc-11.5.0-20240719.tar.xz
|
||||
SOURCES/gcc-11.3.1-20221121.tar.xz
|
||||
SOURCES/isl-0.18.tar.bz2
|
||||
SOURCES/newlib-cygwin-50e2a63b04bdd018484605fbb954fd1bd5147fa0.tar.xz
|
||||
SOURCES/nvptx-tools-5f6f343a302d620b0868edab376c00b15741e39e.tar.xz
|
||||
|
@ -1,51 +0,0 @@
|
||||
commit c14f38d4292ec22462a4080841d526f87428130a
|
||||
Author: Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
|
||||
Date: Thu Dec 16 15:33:17 2021 +0100
|
||||
|
||||
Fix FLUSH IOSTAT value
|
||||
|
||||
PR libfortran/101255
|
||||
|
||||
libgfortran/ChangeLog:
|
||||
|
||||
* io/file_pos.c: Fix error code.
|
||||
|
||||
gcc/testsuite/ChangeLog:
|
||||
|
||||
* gfortran.dg/iostat_5.f90: New file.
|
||||
|
||||
diff --git a/gcc/testsuite/gfortran.dg/iostat_5.f90 b/gcc/testsuite/gfortran.dg/iostat_5.f90
|
||||
new file mode 100644
|
||||
index 00000000000..1e72dfdf7e1
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gfortran.dg/iostat_5.f90
|
||||
@@ -0,0 +1,16 @@
|
||||
+! PR libfortran/101255
|
||||
+! { dg-do run }
|
||||
+
|
||||
+program test
|
||||
+ use ISO_FORTRAN_ENV, only: IOSTAT_EOR, IOSTAT_END
|
||||
+ implicit none
|
||||
+ character(len=50) :: err
|
||||
+ integer :: i
|
||||
+
|
||||
+ err = ""
|
||||
+ flush(99, iostat=i, iomsg=err)
|
||||
+
|
||||
+ if (err == "") stop 1
|
||||
+ if (i >= 0) stop 2
|
||||
+ if (i == IOSTAT_EOR .or. i == IOSTAT_END) stop 3
|
||||
+end
|
||||
diff --git a/libgfortran/io/file_pos.c b/libgfortran/io/file_pos.c
|
||||
index 7e71ca577e0..4ed1698f17a 100644
|
||||
--- a/libgfortran/io/file_pos.c
|
||||
+++ b/libgfortran/io/file_pos.c
|
||||
@@ -527,7 +527,7 @@ st_flush (st_parameter_filepos *fpp)
|
||||
}
|
||||
else
|
||||
/* FLUSH on unconnected unit is illegal: F95 std., 9.3.5. */
|
||||
- generate_error (&fpp->common, LIBERROR_BAD_OPTION,
|
||||
+ generate_error (&fpp->common, -LIBERROR_BAD_UNIT,
|
||||
"Specified UNIT in FLUSH is not connected");
|
||||
|
||||
if (needs_unlock)
|
@ -1,105 +0,0 @@
|
||||
The original patch had
|
||||
#define TARGET_CPU_NBITS 8
|
||||
but I've changed it to
|
||||
#define TARGET_CPU_NBITS 7
|
||||
|
||||
commit 5522dec054cb940fe83661b96249aa12c54c1d77
|
||||
Author: Andre Vieira <andre.simoesdiasvieira@arm.com>
|
||||
Date: Fri Apr 8 15:12:23 2022 +0100
|
||||
|
||||
aarch64: PR target/105157 Increase number of cores TARGET_CPU_DEFAULT can encode
|
||||
|
||||
This addresses the compile-time increase seen in the PR target/105157. This was
|
||||
being caused by selecting the wrong core tuning, as when we added the latest
|
||||
AArch64 the TARGET_CPU_generic tuning was pushed beyond the 0x3f mask we used
|
||||
to encode both target cpu and attributes into TARGET_CPU_DEFAULT.
|
||||
|
||||
gcc/ChangeLog:
|
||||
|
||||
PR target/105157
|
||||
* config.gcc: Shift ext_mask by TARGET_CPU_NBITS.
|
||||
* config/aarch64/aarch64.h (TARGET_CPU_NBITS): New macro.
|
||||
(TARGET_CPU_MASK): Likewise.
|
||||
(TARGET_CPU_DEFAULT): Use TARGET_CPU_NBITS.
|
||||
* config/aarch64/aarch64.cc (aarch64_get_tune_cpu): Use TARGET_CPU_MASK.
|
||||
(aarch64_get_arch): Likewise.
|
||||
(aarch64_override_options): Use TARGET_CPU_NBITS.
|
||||
|
||||
--- a/gcc/config.gcc
|
||||
+++ b/gcc/config.gcc
|
||||
@@ -4261,7 +4261,7 @@ case "${target}" in
|
||||
ext_val=`echo $ext_val | sed -e 's/[a-z0-9]\+//'`
|
||||
done
|
||||
|
||||
- ext_mask="(("$ext_mask") << 6)"
|
||||
+ ext_mask="(("$ext_mask") << TARGET_CPU_NBITS)"
|
||||
if [ x"$base_id" != x ]; then
|
||||
target_cpu_cname="TARGET_CPU_$base_id | $ext_mask"
|
||||
fi
|
||||
--- a/gcc/config/aarch64/aarch64.c
|
||||
+++ b/gcc/config/aarch64/aarch64.c
|
||||
@@ -18053,6 +18053,9 @@ aarch64_validate_mtune (const char *str, const struct processor **res)
|
||||
return false;
|
||||
}
|
||||
|
||||
+static_assert (TARGET_CPU_generic < TARGET_CPU_MASK,
|
||||
+ "TARGET_CPU_NBITS is big enough");
|
||||
+
|
||||
/* Return the CPU corresponding to the enum CPU.
|
||||
If it doesn't specify a cpu, return the default. */
|
||||
|
||||
@@ -18062,12 +18065,12 @@ aarch64_get_tune_cpu (enum aarch64_processor cpu)
|
||||
if (cpu != aarch64_none)
|
||||
return &all_cores[cpu];
|
||||
|
||||
- /* The & 0x3f is to extract the bottom 6 bits that encode the
|
||||
- default cpu as selected by the --with-cpu GCC configure option
|
||||
+ /* The & TARGET_CPU_MASK is to extract the bottom TARGET_CPU_NBITS bits that
|
||||
+ encode the default cpu as selected by the --with-cpu GCC configure option
|
||||
in config.gcc.
|
||||
???: The whole TARGET_CPU_DEFAULT and AARCH64_CPU_DEFAULT_FLAGS
|
||||
flags mechanism should be reworked to make it more sane. */
|
||||
- return &all_cores[TARGET_CPU_DEFAULT & 0x3f];
|
||||
+ return &all_cores[TARGET_CPU_DEFAULT & TARGET_CPU_MASK];
|
||||
}
|
||||
|
||||
/* Return the architecture corresponding to the enum ARCH.
|
||||
@@ -18079,7 +18082,8 @@ aarch64_get_arch (enum aarch64_arch arch)
|
||||
if (arch != aarch64_no_arch)
|
||||
return &all_architectures[arch];
|
||||
|
||||
- const struct processor *cpu = &all_cores[TARGET_CPU_DEFAULT & 0x3f];
|
||||
+ const struct processor *cpu
|
||||
+ = &all_cores[TARGET_CPU_DEFAULT & TARGET_CPU_MASK];
|
||||
|
||||
return &all_architectures[cpu->arch];
|
||||
}
|
||||
@@ -18166,7 +18170,7 @@ aarch64_override_options (void)
|
||||
{
|
||||
/* Get default configure-time CPU. */
|
||||
selected_cpu = aarch64_get_tune_cpu (aarch64_none);
|
||||
- aarch64_isa_flags = TARGET_CPU_DEFAULT >> 6;
|
||||
+ aarch64_isa_flags = TARGET_CPU_DEFAULT >> TARGET_CPU_NBITS;
|
||||
}
|
||||
|
||||
if (selected_tune)
|
||||
--- a/gcc/config/aarch64/aarch64.h
|
||||
+++ b/gcc/config/aarch64/aarch64.h
|
||||
@@ -813,10 +813,16 @@ enum target_cpus
|
||||
TARGET_CPU_generic
|
||||
};
|
||||
|
||||
+/* Define how many bits are used to represent the CPU in TARGET_CPU_DEFAULT.
|
||||
+ This needs to be big enough to fit the value of TARGET_CPU_generic.
|
||||
+ All bits after this are used to represent the AARCH64_CPU_DEFAULT_FLAGS. */
|
||||
+#define TARGET_CPU_NBITS 7
|
||||
+#define TARGET_CPU_MASK ((1 << TARGET_CPU_NBITS) - 1)
|
||||
+
|
||||
/* If there is no CPU defined at configure, use generic as default. */
|
||||
#ifndef TARGET_CPU_DEFAULT
|
||||
#define TARGET_CPU_DEFAULT \
|
||||
- (TARGET_CPU_generic | (AARCH64_CPU_DEFAULT_FLAGS << 6))
|
||||
+ (TARGET_CPU_generic | (AARCH64_CPU_DEFAULT_FLAGS << TARGET_CPU_NBITS))
|
||||
#endif
|
||||
|
||||
/* If inserting NOP before a mult-accumulate insn remember to adjust the
|
@ -1,107 +0,0 @@
|
||||
commit 6f5dcea85a31845ec6f4b6886734b0f02e013718
|
||||
Author: Jonathan Wakely <jwakely@redhat.com>
|
||||
Date: Tue Feb 27 17:50:34 2024 +0000
|
||||
|
||||
libstdc++: Fix conditions for using memcmp in std::lexicographical_compare_three_way [PR113960]
|
||||
|
||||
The change in r11-2981-g2f983fa69005b6 meant that
|
||||
std::lexicographical_compare_three_way started to use memcmp for
|
||||
unsigned integers on big endian targets, but for that to be valid we
|
||||
need the two value types to have the same size and we need to use that
|
||||
size to compute the length passed to memcmp.
|
||||
|
||||
I already defined a __is_memcmp_ordered_with trait that does the right
|
||||
checks, std::lexicographical_compare_three_way just needs to use it.
|
||||
|
||||
libstdc++-v3/ChangeLog:
|
||||
|
||||
PR libstdc++/113960
|
||||
* include/bits/stl_algobase.h (__is_byte_iter): Replace with ...
|
||||
(__memcmp_ordered_with): New concept.
|
||||
(lexicographical_compare_three_way): Use __memcmp_ordered_with
|
||||
instead of __is_byte_iter. Use correct length for memcmp.
|
||||
* testsuite/25_algorithms/lexicographical_compare_three_way/113960.cc:
|
||||
New test.
|
||||
|
||||
(cherry picked from commit f5cdda8acb06c20335855ed353ab9a441c12128a)
|
||||
|
||||
diff --git a/libstdc++-v3/include/bits/stl_algobase.h b/libstdc++-v3/include/bits/stl_algobase.h
|
||||
index 7664301a208..6e648e48ad0 100644
|
||||
--- a/libstdc++-v3/include/bits/stl_algobase.h
|
||||
+++ b/libstdc++-v3/include/bits/stl_algobase.h
|
||||
@@ -1780,11 +1780,14 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
|
||||
}
|
||||
|
||||
#if __cpp_lib_three_way_comparison
|
||||
- // Iter points to a contiguous range of unsigned narrow character type
|
||||
- // or std::byte, suitable for comparison by memcmp.
|
||||
- template<typename _Iter>
|
||||
- concept __is_byte_iter = contiguous_iterator<_Iter>
|
||||
- && __is_memcmp_ordered<iter_value_t<_Iter>>::__value;
|
||||
+ // Both iterators refer to contiguous ranges of unsigned narrow characters,
|
||||
+ // or std::byte, or big-endian unsigned integers, suitable for comparison
|
||||
+ // using memcmp.
|
||||
+ template<typename _Iter1, typename _Iter2>
|
||||
+ concept __memcmp_ordered_with
|
||||
+ = (__is_memcmp_ordered_with<iter_value_t<_Iter1>,
|
||||
+ iter_value_t<_Iter2>>::__value)
|
||||
+ && contiguous_iterator<_Iter1> && contiguous_iterator<_Iter2>;
|
||||
|
||||
// Return a struct with two members, initialized to the smaller of x and y
|
||||
// (or x if they compare equal) and the result of the comparison x <=> y.
|
||||
@@ -1834,20 +1837,20 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
|
||||
if (!std::is_constant_evaluated())
|
||||
if constexpr (same_as<_Comp, __detail::_Synth3way>
|
||||
|| same_as<_Comp, compare_three_way>)
|
||||
- if constexpr (__is_byte_iter<_InputIter1>)
|
||||
- if constexpr (__is_byte_iter<_InputIter2>)
|
||||
- {
|
||||
- const auto [__len, __lencmp] = _GLIBCXX_STD_A::
|
||||
- __min_cmp(__last1 - __first1, __last2 - __first2);
|
||||
- if (__len)
|
||||
- {
|
||||
- const auto __c
|
||||
- = __builtin_memcmp(&*__first1, &*__first2, __len) <=> 0;
|
||||
- if (__c != 0)
|
||||
- return __c;
|
||||
- }
|
||||
- return __lencmp;
|
||||
- }
|
||||
+ if constexpr (__memcmp_ordered_with<_InputIter1, _InputIter2>)
|
||||
+ {
|
||||
+ const auto [__len, __lencmp] = _GLIBCXX_STD_A::
|
||||
+ __min_cmp(__last1 - __first1, __last2 - __first2);
|
||||
+ if (__len)
|
||||
+ {
|
||||
+ const auto __blen = __len * sizeof(*__first1);
|
||||
+ const auto __c
|
||||
+ = __builtin_memcmp(&*__first1, &*__first2, __blen) <=> 0;
|
||||
+ if (__c != 0)
|
||||
+ return __c;
|
||||
+ }
|
||||
+ return __lencmp;
|
||||
+ }
|
||||
#endif // is_constant_evaluated
|
||||
while (__first1 != __last1)
|
||||
{
|
||||
diff --git a/libstdc++-v3/testsuite/25_algorithms/lexicographical_compare_three_way/113960.cc b/libstdc++-v3/testsuite/25_algorithms/lexicographical_compare_three_way/113960.cc
|
||||
new file mode 100644
|
||||
index 00000000000..d51ae1a3d50
|
||||
--- /dev/null
|
||||
+++ b/libstdc++-v3/testsuite/25_algorithms/lexicographical_compare_three_way/113960.cc
|
||||
@@ -0,0 +1,15 @@
|
||||
+// { dg-do run { target c++20 } }
|
||||
+
|
||||
+// PR libstdc++/113960
|
||||
+// std::map with std::vector as input overwrites itself with c++20, on s390x
|
||||
+
|
||||
+#include <algorithm>
|
||||
+#include <testsuite_hooks.h>
|
||||
+
|
||||
+int main()
|
||||
+{
|
||||
+ unsigned short a1[] { 1, 2, 3 };
|
||||
+ unsigned short a2[] { 1, 2, 4 };
|
||||
+ // Incorrect memcmp comparison for big endian targets.
|
||||
+ VERIFY( std::lexicographical_compare_three_way(a1, a1+3, a2, a2+3) < 0 );
|
||||
+}
|
@ -1,65 +0,0 @@
|
||||
commit 084768c865cd50a6f7ff177db2dbdbb7aadaeee0
|
||||
Author: Jakub Jelinek <jakub@redhat.com>
|
||||
Date: Tue Jul 23 10:50:29 2024 +0200
|
||||
|
||||
ssa: Fix up maybe_rewrite_mem_ref_base complex type handling [PR116034]
|
||||
|
||||
The folding into REALPART_EXPR is correct, used only when the mem_offset
|
||||
is zero, but for IMAGPART_EXPR it didn't check the exact offset value (just
|
||||
that it is not 0).
|
||||
The following patch fixes that by using IMAGPART_EXPR only if the offset
|
||||
is right and using BITFIELD_REF or whatever else otherwise.
|
||||
|
||||
2024-07-23 Jakub Jelinek <jakub@redhat.com>
|
||||
Andrew Pinski <quic_apinski@quicinc.com>
|
||||
|
||||
PR tree-optimization/116034
|
||||
* tree-ssa.c (maybe_rewrite_mem_ref_base): Only use IMAGPART_EXPR
|
||||
if MEM_REF offset is equal to element type size.
|
||||
|
||||
* gcc.dg/pr116034.c: New test.
|
||||
|
||||
(cherry picked from commit b9cefd67a2a464a3c9413e6b3f28e7dc7a9ef162)
|
||||
|
||||
diff --git a/gcc/testsuite/gcc.dg/pr116034.c b/gcc/testsuite/gcc.dg/pr116034.c
|
||||
new file mode 100644
|
||||
index 00000000000..9a31de03424
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gcc.dg/pr116034.c
|
||||
@@ -0,0 +1,22 @@
|
||||
+/* PR tree-optimization/116034 */
|
||||
+/* { dg-do run } */
|
||||
+/* { dg-options "-O1 -fno-strict-aliasing" } */
|
||||
+
|
||||
+int g;
|
||||
+
|
||||
+static inline int
|
||||
+foo (_Complex unsigned short c)
|
||||
+{
|
||||
+ __builtin_memmove (&g, 1 + (char *) &c, 2);
|
||||
+ return g;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main ()
|
||||
+{
|
||||
+ if (__SIZEOF_SHORT__ == 2
|
||||
+ && __CHAR_BIT__ == 8
|
||||
+ && (foo (__BYTE_ORDER__ != __ORDER_BIG_ENDIAN__ ? 0x100 : 1)
|
||||
+ != (__BYTE_ORDER__ != __ORDER_BIG_ENDIAN__ ? 1 : 0x100)))
|
||||
+ __builtin_abort ();
|
||||
+}
|
||||
--- a/gcc/tree-ssa.c
|
||||
+++ b/gcc/tree-ssa.c
|
||||
@@ -1506,7 +1506,10 @@ maybe_rewrite_mem_ref_base (tree *tp, bitmap suitable_for_renaming)
|
||||
}
|
||||
else if (TREE_CODE (TREE_TYPE (sym)) == COMPLEX_TYPE
|
||||
&& useless_type_conversion_p (TREE_TYPE (*tp),
|
||||
- TREE_TYPE (TREE_TYPE (sym))))
|
||||
+ TREE_TYPE (TREE_TYPE (sym)))
|
||||
+ && (integer_zerop (TREE_OPERAND (*tp, 1))
|
||||
+ || tree_int_cst_equal (TREE_OPERAND (*tp, 1),
|
||||
+ TYPE_SIZE_UNIT (TREE_TYPE (*tp)))))
|
||||
{
|
||||
*tp = build1 (integer_zerop (TREE_OPERAND (*tp, 1))
|
||||
? REALPART_EXPR : IMAGPART_EXPR,
|
@ -1,91 +0,0 @@
|
||||
commit ef5f7b89bbc352255595069eb870d6f30f1f9134
|
||||
Author: Andreas Krebbel <krebbel@linux.ibm.com>
|
||||
Date: Wed Feb 1 08:59:41 2023 +0100
|
||||
|
||||
New reg note REG_CFA_NORESTORE
|
||||
|
||||
This patch introduces a new reg note which can be used to tell the CFI
|
||||
verification in dwarf2cfi that a register is stored without intending
|
||||
to restore from it.
|
||||
|
||||
This is useful when storing e.g. register contents to the stack and
|
||||
generate CFI for it although the register is not really supposed to be
|
||||
restored.
|
||||
|
||||
gcc/ChangeLog:
|
||||
|
||||
* dwarf2cfi.c (dwarf2out_frame_debug_cfa_restore): Add
|
||||
EMIT_CFI parameter.
|
||||
(dwarf2out_frame_debug): Add case for REG_CFA_NORESTORE.
|
||||
* reg-notes.def (REG_CFA_NOTE): New reg note definition.
|
||||
|
||||
--- a/gcc/dwarf2cfi.c
|
||||
+++ b/gcc/dwarf2cfi.c
|
||||
@@ -1496,10 +1496,12 @@ dwarf2out_frame_debug_cfa_val_expression (rtx set)
|
||||
update_row_reg_save (cur_row, dwf_regno (dest), cfi);
|
||||
}
|
||||
|
||||
-/* A subroutine of dwarf2out_frame_debug, process a REG_CFA_RESTORE note. */
|
||||
+/* A subroutine of dwarf2out_frame_debug, process a REG_CFA_RESTORE
|
||||
+ note. When called with EMIT_CFI set to false emitting a CFI
|
||||
+ statement is suppressed. */
|
||||
|
||||
static void
|
||||
-dwarf2out_frame_debug_cfa_restore (rtx reg)
|
||||
+dwarf2out_frame_debug_cfa_restore (rtx reg, bool emit_cfi)
|
||||
{
|
||||
gcc_assert (REG_P (reg));
|
||||
|
||||
@@ -1507,7 +1509,8 @@ dwarf2out_frame_debug_cfa_restore (rtx reg)
|
||||
if (!span)
|
||||
{
|
||||
unsigned int regno = dwf_regno (reg);
|
||||
- add_cfi_restore (regno);
|
||||
+ if (emit_cfi)
|
||||
+ add_cfi_restore (regno);
|
||||
update_row_reg_save (cur_row, regno, NULL);
|
||||
}
|
||||
else
|
||||
@@ -1522,7 +1525,8 @@ dwarf2out_frame_debug_cfa_restore (rtx reg)
|
||||
reg = XVECEXP (span, 0, par_index);
|
||||
gcc_assert (REG_P (reg));
|
||||
unsigned int regno = dwf_regno (reg);
|
||||
- add_cfi_restore (regno);
|
||||
+ if (emit_cfi)
|
||||
+ add_cfi_restore (regno);
|
||||
update_row_reg_save (cur_row, regno, NULL);
|
||||
}
|
||||
}
|
||||
@@ -2309,6 +2313,7 @@ dwarf2out_frame_debug (rtx_insn *insn)
|
||||
break;
|
||||
|
||||
case REG_CFA_RESTORE:
|
||||
+ case REG_CFA_NO_RESTORE:
|
||||
n = XEXP (note, 0);
|
||||
if (n == NULL)
|
||||
{
|
||||
@@ -2317,7 +2322,7 @@ dwarf2out_frame_debug (rtx_insn *insn)
|
||||
n = XVECEXP (n, 0, 0);
|
||||
n = XEXP (n, 0);
|
||||
}
|
||||
- dwarf2out_frame_debug_cfa_restore (n);
|
||||
+ dwarf2out_frame_debug_cfa_restore (n, REG_NOTE_KIND (note) == REG_CFA_RESTORE);
|
||||
handled_one = true;
|
||||
break;
|
||||
|
||||
diff --git a/gcc/reg-notes.def b/gcc/reg-notes.def
|
||||
index 23de1f13ee9..1f74a605b3e 100644
|
||||
--- a/gcc/reg-notes.def
|
||||
+++ b/gcc/reg-notes.def
|
||||
@@ -157,6 +157,11 @@ REG_CFA_NOTE (CFA_VAL_EXPRESSION)
|
||||
first pattern is the register to be restored. */
|
||||
REG_CFA_NOTE (CFA_RESTORE)
|
||||
|
||||
+/* Like CFA_RESTORE but without actually emitting CFI. This can be
|
||||
+ used to tell the verification infrastructure that a register is
|
||||
+ saved without intending to restore it. */
|
||||
+REG_CFA_NOTE (CFA_NO_RESTORE)
|
||||
+
|
||||
/* Attached to insns that are RTX_FRAME_RELATED_P, marks insn that sets
|
||||
vDRAP from DRAP. If vDRAP is a register, vdrap_reg is initalized
|
||||
to the argument, if it is a MEM, it is ignored. */
|
@ -1,92 +0,0 @@
|
||||
commit 36ffb2e0293d1bbef30e3553a431679de00549b9
|
||||
Author: Andreas Krebbel <krebbel@linux.ibm.com>
|
||||
Date: Wed Feb 1 08:59:42 2023 +0100
|
||||
|
||||
IBM zSystems: Make stack_tie to work with hard frame pointer
|
||||
|
||||
With this patch a scheduling barrier is created to prevent the insn
|
||||
setting up the frame-pointer and instructions which save GPRs to the
|
||||
stack to be swapped. Otherwise broken CFI information would be
|
||||
generated since the stack save insns would use a base register which
|
||||
is not currently declared as holding the CFA.
|
||||
|
||||
Without -mpreserve-args this did not happen because the store multiple
|
||||
we used for saving the GPRs would also cover the frame-pointer
|
||||
register and therefore creates a dependency on the frame-pointer
|
||||
hardreg. However, with this patch the stack_tie is emitted regardless
|
||||
of -mpreserve-args since this in general appears to be the safer
|
||||
approach.
|
||||
|
||||
* config/s390/s390.c (save_gprs): Use gen_frame_mem.
|
||||
(restore_gprs): Likewise.
|
||||
(s390_emit_stack_tie): Make the stack_tie to be dependent on the
|
||||
frame pointer if a frame-pointer is used.
|
||||
(s390_emit_prologue): Emit stack_tie when frame-pointer is needed.
|
||||
* config/s390/s390.md (stack_tie): Add a register operand and
|
||||
rename to ...
|
||||
(@stack_tie<mode>): ... this.
|
||||
|
||||
--- a/gcc/config/s390/s390.c
|
||||
+++ b/gcc/config/s390/s390.c
|
||||
@@ -10898,9 +10898,7 @@ save_gprs (rtx base, int offset, int first, int last)
|
||||
int i;
|
||||
|
||||
addr = plus_constant (Pmode, base, offset);
|
||||
- addr = gen_rtx_MEM (Pmode, addr);
|
||||
-
|
||||
- set_mem_alias_set (addr, get_frame_alias_set ());
|
||||
+ addr = gen_frame_mem (Pmode, addr);
|
||||
|
||||
/* Special-case single register. */
|
||||
if (first == last)
|
||||
@@ -11012,8 +11010,7 @@ restore_gprs (rtx base, int offset, int first, int last)
|
||||
rtx addr, insn;
|
||||
|
||||
addr = plus_constant (Pmode, base, offset);
|
||||
- addr = gen_rtx_MEM (Pmode, addr);
|
||||
- set_mem_alias_set (addr, get_frame_alias_set ());
|
||||
+ addr = gen_frame_mem (Pmode, addr);
|
||||
|
||||
/* Special-case single register. */
|
||||
if (first == last)
|
||||
@@ -11062,10 +11059,11 @@ s390_load_got (void)
|
||||
static void
|
||||
s390_emit_stack_tie (void)
|
||||
{
|
||||
- rtx mem = gen_frame_mem (BLKmode,
|
||||
- gen_rtx_REG (Pmode, STACK_POINTER_REGNUM));
|
||||
-
|
||||
- emit_insn (gen_stack_tie (mem));
|
||||
+ rtx mem = gen_frame_mem (BLKmode, stack_pointer_rtx);
|
||||
+ if (frame_pointer_needed)
|
||||
+ emit_insn (gen_stack_tie (Pmode, mem, hard_frame_pointer_rtx));
|
||||
+ else
|
||||
+ emit_insn (gen_stack_tie (Pmode, mem, stack_pointer_rtx));
|
||||
}
|
||||
|
||||
/* Copy GPRS into FPR save slots. */
|
||||
@@ -11676,6 +11674,7 @@ s390_emit_prologue (void)
|
||||
|
||||
if (frame_pointer_needed)
|
||||
{
|
||||
+ s390_emit_stack_tie ();
|
||||
insn = emit_move_insn (hard_frame_pointer_rtx, stack_pointer_rtx);
|
||||
RTX_FRAME_RELATED_P (insn) = 1;
|
||||
}
|
||||
diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md
|
||||
index 4828aa08be6..00d39608e1d 100644
|
||||
--- a/gcc/config/s390/s390.md
|
||||
+++ b/gcc/config/s390/s390.md
|
||||
@@ -11590,9 +11590,10 @@ (define_insn "stack_protect_test<mode>"
|
||||
; This is used in s390_emit_prologue in order to prevent insns
|
||||
; adjusting the stack pointer to be moved over insns writing stack
|
||||
; slots using a copy of the stack pointer in a different register.
|
||||
-(define_insn "stack_tie"
|
||||
+(define_insn "@stack_tie<mode>"
|
||||
[(set (match_operand:BLK 0 "memory_operand" "+m")
|
||||
- (unspec:BLK [(match_dup 0)] UNSPEC_TIE))]
|
||||
+ (unspec:BLK [(match_dup 0)
|
||||
+ (match_operand:P 1 "register_operand" "r")] UNSPEC_TIE))]
|
||||
""
|
||||
""
|
||||
[(set_attr "length" "0")])
|
@ -1,545 +0,0 @@
|
||||
commit 8091199cdf4d0aa9c28e4526548ddc25d02898ca
|
||||
Author: Andreas Krebbel <krebbel@linux.ibm.com>
|
||||
Date: Wed Feb 1 08:59:42 2023 +0100
|
||||
|
||||
IBM zSystems: Save argument registers to the stack -mpreserve-args
|
||||
|
||||
This adds support for preserving the content of parameter registers to
|
||||
the stack and emit CFI for it. This useful for applications which want
|
||||
to implement their own stack unwinding and need access to function
|
||||
arguments.
|
||||
|
||||
With the -mpreserve-args option GPRs and FPRs are save to the stack
|
||||
slots which are reserved for stdargs in the register save area.
|
||||
|
||||
gcc/ChangeLog:
|
||||
|
||||
* config/s390/s390.c (s390_restore_gpr_p): New function.
|
||||
(s390_preserve_gpr_arg_in_range_p): New function.
|
||||
(s390_preserve_gpr_arg_p): New function.
|
||||
(s390_preserve_fpr_arg_p): New function.
|
||||
(s390_register_info_stdarg_fpr): Rename to ...
|
||||
(s390_register_info_arg_fpr): ... this. Add -mpreserve-args handling.
|
||||
(s390_register_info_stdarg_gpr): Rename to ...
|
||||
(s390_register_info_arg_gpr): ... this. Add -mpreserve-args handling.
|
||||
(s390_register_info): Use the renamed functions above.
|
||||
(s390_optimize_register_info): Likewise.
|
||||
(save_fpr): Generate CFI for -mpreserve-args.
|
||||
(save_gprs): Generate CFI for -mpreserve-args. Drop return value.
|
||||
(s390_emit_prologue): Adjust to changed calling convention of save_gprs.
|
||||
(s390_optimize_prologue): Likewise.
|
||||
* config/s390/s390.opt: New option -mpreserve-args
|
||||
|
||||
gcc/testsuite/ChangeLog:
|
||||
|
||||
* gcc.target/s390/preserve-args-1.c: New test.
|
||||
* gcc.target/s390/preserve-args-2.c: New test.
|
||||
|
||||
--- a/gcc/config/s390/s390.c
|
||||
+++ b/gcc/config/s390/s390.c
|
||||
@@ -411,6 +411,45 @@ struct s390_address
|
||||
#define FP_ARG_NUM_REG (TARGET_64BIT? 4 : 2)
|
||||
#define VEC_ARG_NUM_REG 8
|
||||
|
||||
+/* Return TRUE if GPR REGNO is supposed to be restored in the function
|
||||
+ epilogue. */
|
||||
+static inline bool
|
||||
+s390_restore_gpr_p (int regno)
|
||||
+{
|
||||
+ return (cfun_frame_layout.first_restore_gpr != -1
|
||||
+ && regno >= cfun_frame_layout.first_restore_gpr
|
||||
+ && regno <= cfun_frame_layout.last_restore_gpr);
|
||||
+}
|
||||
+
|
||||
+/* Return TRUE if any of the registers in range [FIRST, LAST] is saved
|
||||
+ because of -mpreserve-args. */
|
||||
+static inline bool
|
||||
+s390_preserve_gpr_arg_in_range_p (int first, int last)
|
||||
+{
|
||||
+ int num_arg_regs = MIN (crtl->args.info.gprs + cfun->va_list_gpr_size,
|
||||
+ GP_ARG_NUM_REG);
|
||||
+ return (num_arg_regs
|
||||
+ && s390_preserve_args_p
|
||||
+ && first <= GPR2_REGNUM + num_arg_regs - 1
|
||||
+ && last >= GPR2_REGNUM);
|
||||
+}
|
||||
+
|
||||
+static inline bool
|
||||
+s390_preserve_gpr_arg_p (int regno)
|
||||
+{
|
||||
+ return s390_preserve_gpr_arg_in_range_p (regno, regno);
|
||||
+}
|
||||
+
|
||||
+static inline bool
|
||||
+s390_preserve_fpr_arg_p (int regno)
|
||||
+{
|
||||
+ int num_arg_regs = MIN (crtl->args.info.fprs + cfun->va_list_fpr_size,
|
||||
+ FP_ARG_NUM_REG);
|
||||
+ return (s390_preserve_args_p
|
||||
+ && regno <= FPR0_REGNUM + num_arg_regs - 1
|
||||
+ && regno >= FPR0_REGNUM);
|
||||
+}
|
||||
+
|
||||
/* A couple of shortcuts. */
|
||||
#define CONST_OK_FOR_J(x) \
|
||||
CONST_OK_FOR_CONSTRAINT_P((x), 'J', "J")
|
||||
@@ -9893,61 +9932,89 @@ s390_register_info_gprtofpr ()
|
||||
}
|
||||
|
||||
/* Set the bits in fpr_bitmap for FPRs which need to be saved due to
|
||||
- stdarg.
|
||||
+ stdarg or -mpreserve-args.
|
||||
This is a helper routine for s390_register_info. */
|
||||
-
|
||||
static void
|
||||
-s390_register_info_stdarg_fpr ()
|
||||
+s390_register_info_arg_fpr ()
|
||||
{
|
||||
int i;
|
||||
- int min_fpr;
|
||||
- int max_fpr;
|
||||
+ int min_stdarg_fpr = INT_MAX, max_stdarg_fpr = -1;
|
||||
+ int min_preserve_fpr = INT_MAX, max_preserve_fpr = -1;
|
||||
+ int min_fpr, max_fpr;
|
||||
|
||||
/* Save the FP argument regs for stdarg. f0, f2 for 31 bit and
|
||||
f0-f4 for 64 bit. */
|
||||
- if (!cfun->stdarg
|
||||
- || !TARGET_HARD_FLOAT
|
||||
- || !cfun->va_list_fpr_size
|
||||
- || crtl->args.info.fprs >= FP_ARG_NUM_REG)
|
||||
- return;
|
||||
+ if (cfun->stdarg
|
||||
+ && TARGET_HARD_FLOAT
|
||||
+ && cfun->va_list_fpr_size
|
||||
+ && crtl->args.info.fprs < FP_ARG_NUM_REG)
|
||||
+ {
|
||||
+ min_stdarg_fpr = crtl->args.info.fprs;
|
||||
+ max_stdarg_fpr = min_stdarg_fpr + cfun->va_list_fpr_size - 1;
|
||||
+ if (max_stdarg_fpr >= FP_ARG_NUM_REG)
|
||||
+ max_stdarg_fpr = FP_ARG_NUM_REG - 1;
|
||||
+
|
||||
+ /* FPR argument regs start at f0. */
|
||||
+ min_stdarg_fpr += FPR0_REGNUM;
|
||||
+ max_stdarg_fpr += FPR0_REGNUM;
|
||||
+ }
|
||||
|
||||
- min_fpr = crtl->args.info.fprs;
|
||||
- max_fpr = min_fpr + cfun->va_list_fpr_size - 1;
|
||||
- if (max_fpr >= FP_ARG_NUM_REG)
|
||||
- max_fpr = FP_ARG_NUM_REG - 1;
|
||||
+ if (s390_preserve_args_p && crtl->args.info.fprs)
|
||||
+ {
|
||||
+ min_preserve_fpr = FPR0_REGNUM;
|
||||
+ max_preserve_fpr = MIN (FPR0_REGNUM + FP_ARG_NUM_REG - 1,
|
||||
+ FPR0_REGNUM + crtl->args.info.fprs - 1);
|
||||
+ }
|
||||
|
||||
- /* FPR argument regs start at f0. */
|
||||
- min_fpr += FPR0_REGNUM;
|
||||
- max_fpr += FPR0_REGNUM;
|
||||
+ min_fpr = MIN (min_stdarg_fpr, min_preserve_fpr);
|
||||
+ max_fpr = MAX (max_stdarg_fpr, max_preserve_fpr);
|
||||
+
|
||||
+ if (max_fpr == -1)
|
||||
+ return;
|
||||
|
||||
for (i = min_fpr; i <= max_fpr; i++)
|
||||
cfun_set_fpr_save (i);
|
||||
}
|
||||
|
||||
+
|
||||
/* Reserve the GPR save slots for GPRs which need to be saved due to
|
||||
- stdarg.
|
||||
+ stdarg or -mpreserve-args.
|
||||
This is a helper routine for s390_register_info. */
|
||||
|
||||
static void
|
||||
-s390_register_info_stdarg_gpr ()
|
||||
+s390_register_info_arg_gpr ()
|
||||
{
|
||||
int i;
|
||||
- int min_gpr;
|
||||
- int max_gpr;
|
||||
+ int min_stdarg_gpr = INT_MAX, max_stdarg_gpr = -1;
|
||||
+ int min_preserve_gpr = INT_MAX, max_preserve_gpr = -1;
|
||||
+ int min_gpr, max_gpr;
|
||||
|
||||
- if (!cfun->stdarg
|
||||
- || !cfun->va_list_gpr_size
|
||||
- || crtl->args.info.gprs >= GP_ARG_NUM_REG)
|
||||
- return;
|
||||
+ if (cfun->stdarg
|
||||
+ && cfun->va_list_gpr_size
|
||||
+ && crtl->args.info.gprs < GP_ARG_NUM_REG)
|
||||
+ {
|
||||
+ min_stdarg_gpr = crtl->args.info.gprs;
|
||||
+ max_stdarg_gpr = min_stdarg_gpr + cfun->va_list_gpr_size - 1;
|
||||
+ if (max_stdarg_gpr >= GP_ARG_NUM_REG)
|
||||
+ max_stdarg_gpr = GP_ARG_NUM_REG - 1;
|
||||
+
|
||||
+ /* GPR argument regs start at r2. */
|
||||
+ min_stdarg_gpr += GPR2_REGNUM;
|
||||
+ max_stdarg_gpr += GPR2_REGNUM;
|
||||
+ }
|
||||
+
|
||||
+ if (s390_preserve_args_p && crtl->args.info.gprs)
|
||||
+ {
|
||||
+ min_preserve_gpr = GPR2_REGNUM;
|
||||
+ max_preserve_gpr = MIN (GPR6_REGNUM,
|
||||
+ GPR2_REGNUM + crtl->args.info.gprs - 1);
|
||||
+ }
|
||||
|
||||
- min_gpr = crtl->args.info.gprs;
|
||||
- max_gpr = min_gpr + cfun->va_list_gpr_size - 1;
|
||||
- if (max_gpr >= GP_ARG_NUM_REG)
|
||||
- max_gpr = GP_ARG_NUM_REG - 1;
|
||||
+ min_gpr = MIN (min_stdarg_gpr, min_preserve_gpr);
|
||||
+ max_gpr = MAX (max_stdarg_gpr, max_preserve_gpr);
|
||||
|
||||
- /* GPR argument regs start at r2. */
|
||||
- min_gpr += GPR2_REGNUM;
|
||||
- max_gpr += GPR2_REGNUM;
|
||||
+ if (max_gpr == -1)
|
||||
+ return;
|
||||
|
||||
/* If r6 was supposed to be saved into an FPR and now needs to go to
|
||||
the stack for vararg we have to adjust the restore range to make
|
||||
@@ -10079,14 +10146,14 @@ s390_register_info ()
|
||||
if (clobbered_regs[i])
|
||||
cfun_gpr_save_slot (i) = SAVE_SLOT_STACK;
|
||||
|
||||
- s390_register_info_stdarg_fpr ();
|
||||
+ s390_register_info_arg_fpr ();
|
||||
s390_register_info_gprtofpr ();
|
||||
s390_register_info_set_ranges ();
|
||||
- /* stdarg functions might need to save GPRs 2 to 6. This might
|
||||
- override the GPR->FPR save decision made by
|
||||
- s390_register_info_gprtofpr for r6 since vararg regs must go to
|
||||
- the stack. */
|
||||
- s390_register_info_stdarg_gpr ();
|
||||
+
|
||||
+ /* Forcing argument registers to be saved on the stack might
|
||||
+ override the GPR->FPR save decision for r6 so this must come
|
||||
+ last. */
|
||||
+ s390_register_info_arg_gpr ();
|
||||
}
|
||||
|
||||
/* Return true if REGNO is a global register, but not one
|
||||
@@ -10141,7 +10208,7 @@ s390_optimize_register_info ()
|
||||
cfun_gpr_save_slot (i) = SAVE_SLOT_NONE;
|
||||
|
||||
s390_register_info_set_ranges ();
|
||||
- s390_register_info_stdarg_gpr ();
|
||||
+ s390_register_info_arg_gpr ();
|
||||
}
|
||||
|
||||
/* Fill cfun->machine with info about frame of current function. */
|
||||
@@ -10864,14 +10931,28 @@ static rtx
|
||||
save_fpr (rtx base, int offset, int regnum)
|
||||
{
|
||||
rtx addr;
|
||||
+ rtx insn;
|
||||
+
|
||||
addr = gen_rtx_MEM (DFmode, plus_constant (Pmode, base, offset));
|
||||
|
||||
- if (regnum >= 16 && regnum <= (16 + FP_ARG_NUM_REG))
|
||||
+ if (regnum >= FPR0_REGNUM && regnum <= (FPR0_REGNUM + FP_ARG_NUM_REG))
|
||||
set_mem_alias_set (addr, get_varargs_alias_set ());
|
||||
else
|
||||
set_mem_alias_set (addr, get_frame_alias_set ());
|
||||
|
||||
- return emit_move_insn (addr, gen_rtx_REG (DFmode, regnum));
|
||||
+ insn = emit_move_insn (addr, gen_rtx_REG (DFmode, regnum));
|
||||
+
|
||||
+ if (!call_used_regs[regnum] || s390_preserve_fpr_arg_p (regnum))
|
||||
+ RTX_FRAME_RELATED_P (insn) = 1;
|
||||
+
|
||||
+ if (s390_preserve_fpr_arg_p (regnum) && !cfun_fpr_save_p (regnum))
|
||||
+ {
|
||||
+ rtx reg = gen_rtx_REG (DFmode, regnum);
|
||||
+ add_reg_note (insn, REG_CFA_NO_RESTORE, reg);
|
||||
+ add_reg_note (insn, REG_CFA_OFFSET, gen_rtx_SET (addr, reg));
|
||||
+ }
|
||||
+
|
||||
+ return insn;
|
||||
}
|
||||
|
||||
/* Emit insn to restore fpr REGNUM from offset OFFSET relative
|
||||
@@ -10891,10 +10972,11 @@ restore_fpr (rtx base, int offset, int regnum)
|
||||
the register save area located at offset OFFSET
|
||||
relative to register BASE. */
|
||||
|
||||
-static rtx
|
||||
-save_gprs (rtx base, int offset, int first, int last)
|
||||
+static void
|
||||
+save_gprs (rtx base, int offset, int first, int last, rtx_insn *before = NULL)
|
||||
{
|
||||
rtx addr, insn, note;
|
||||
+ rtx_insn *out_insn;
|
||||
int i;
|
||||
|
||||
addr = plus_constant (Pmode, base, offset);
|
||||
@@ -10910,7 +10992,15 @@ save_gprs (rtx base, int offset, int first, int last)
|
||||
|
||||
if (!global_not_special_regno_p (first))
|
||||
RTX_FRAME_RELATED_P (insn) = 1;
|
||||
- return insn;
|
||||
+
|
||||
+ if (s390_preserve_gpr_arg_p (first) && !s390_restore_gpr_p (first))
|
||||
+ {
|
||||
+ rtx reg = gen_rtx_REG (Pmode, first);
|
||||
+ add_reg_note (insn, REG_CFA_NO_RESTORE, reg);
|
||||
+ add_reg_note (insn, REG_CFA_OFFSET, gen_rtx_SET (addr, reg));
|
||||
+ }
|
||||
+
|
||||
+ goto emit;
|
||||
}
|
||||
|
||||
|
||||
@@ -10939,7 +11029,12 @@ save_gprs (rtx base, int offset, int first, int last)
|
||||
set, even if it does not. Therefore we emit a new pattern
|
||||
without those registers as REG_FRAME_RELATED_EXPR note. */
|
||||
|
||||
- if (first >= 6 && !global_not_special_regno_p (first))
|
||||
+ /* In these cases all of the sets are marked as frame related:
|
||||
+ 1. call-save GPR saved and restored
|
||||
+ 2. argument GPR saved because of -mpreserve-args */
|
||||
+ if ((first >= GPR6_REGNUM && !global_not_special_regno_p (first))
|
||||
+ || s390_preserve_gpr_arg_in_range_p (first, last))
|
||||
+
|
||||
{
|
||||
rtx pat = PATTERN (insn);
|
||||
|
||||
@@ -10950,6 +11045,24 @@ save_gprs (rtx base, int offset, int first, int last)
|
||||
RTX_FRAME_RELATED_P (XVECEXP (pat, 0, i)) = 1;
|
||||
|
||||
RTX_FRAME_RELATED_P (insn) = 1;
|
||||
+
|
||||
+ /* For the -mpreserve-args register saves no restore operations
|
||||
+ will be emitted. CFI checking would complain about this. We
|
||||
+ manually generate the REG_CFA notes here to be able to mark
|
||||
+ those operations with REG_CFA_NO_RESTORE. */
|
||||
+ if (s390_preserve_gpr_arg_in_range_p (first, last))
|
||||
+ {
|
||||
+ for (int regno = first; regno <= last; regno++)
|
||||
+ {
|
||||
+ rtx reg = gen_rtx_REG (Pmode, regno);
|
||||
+ rtx reg_addr = plus_constant (Pmode, base,
|
||||
+ offset + (regno - first) * UNITS_PER_LONG);
|
||||
+ if (!s390_restore_gpr_p (regno))
|
||||
+ add_reg_note (insn, REG_CFA_NO_RESTORE, reg);
|
||||
+ add_reg_note (insn, REG_CFA_OFFSET,
|
||||
+ gen_rtx_SET (gen_frame_mem (Pmode, reg_addr), reg));
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
else if (last >= 6)
|
||||
{
|
||||
@@ -10960,7 +11073,7 @@ save_gprs (rtx base, int offset, int first, int last)
|
||||
break;
|
||||
|
||||
if (start > last)
|
||||
- return insn;
|
||||
+ goto emit;
|
||||
|
||||
addr = plus_constant (Pmode, base,
|
||||
offset + (start - first) * UNITS_PER_LONG);
|
||||
@@ -10978,7 +11091,7 @@ save_gprs (rtx base, int offset, int first, int last)
|
||||
add_reg_note (insn, REG_FRAME_RELATED_EXPR, note);
|
||||
RTX_FRAME_RELATED_P (insn) = 1;
|
||||
|
||||
- return insn;
|
||||
+ goto emit;
|
||||
}
|
||||
|
||||
note = gen_store_multiple (gen_rtx_MEM (Pmode, addr),
|
||||
@@ -10997,9 +11110,15 @@ save_gprs (rtx base, int offset, int first, int last)
|
||||
RTX_FRAME_RELATED_P (insn) = 1;
|
||||
}
|
||||
|
||||
- return insn;
|
||||
+ emit:
|
||||
+ if (before != NULL_RTX)
|
||||
+ out_insn = emit_insn_before (insn, before);
|
||||
+ else
|
||||
+ out_insn = emit_insn (insn);
|
||||
+ INSN_ADDRESSES_NEW (out_insn, -1);
|
||||
}
|
||||
|
||||
+
|
||||
/* Generate insn to restore registers FIRST to LAST from
|
||||
the register save area located at offset OFFSET
|
||||
relative to register BASE. */
|
||||
@@ -11423,12 +11542,12 @@ s390_emit_prologue (void)
|
||||
/* Save call saved gprs. */
|
||||
if (cfun_frame_layout.first_save_gpr != -1)
|
||||
{
|
||||
- insn = save_gprs (stack_pointer_rtx,
|
||||
- cfun_frame_layout.gprs_offset +
|
||||
- UNITS_PER_LONG * (cfun_frame_layout.first_save_gpr
|
||||
- - cfun_frame_layout.first_save_gpr_slot),
|
||||
- cfun_frame_layout.first_save_gpr,
|
||||
- cfun_frame_layout.last_save_gpr);
|
||||
+ save_gprs (stack_pointer_rtx,
|
||||
+ cfun_frame_layout.gprs_offset +
|
||||
+ UNITS_PER_LONG * (cfun_frame_layout.first_save_gpr
|
||||
+ - cfun_frame_layout.first_save_gpr_slot),
|
||||
+ cfun_frame_layout.first_save_gpr,
|
||||
+ cfun_frame_layout.last_save_gpr);
|
||||
|
||||
/* This is not 100% correct. If we have more than one register saved,
|
||||
then LAST_PROBE_OFFSET can move even closer to sp. */
|
||||
@@ -11436,8 +11555,6 @@ s390_emit_prologue (void)
|
||||
= (cfun_frame_layout.gprs_offset +
|
||||
UNITS_PER_LONG * (cfun_frame_layout.first_save_gpr
|
||||
- cfun_frame_layout.first_save_gpr_slot));
|
||||
-
|
||||
- emit_insn (insn);
|
||||
}
|
||||
|
||||
/* Dummy insn to mark literal pool slot. */
|
||||
@@ -11467,15 +11584,10 @@ s390_emit_prologue (void)
|
||||
{
|
||||
if (cfun_fpr_save_p (i))
|
||||
{
|
||||
- insn = save_fpr (stack_pointer_rtx, offset, i);
|
||||
+ save_fpr (stack_pointer_rtx, offset, i);
|
||||
if (offset < last_probe_offset)
|
||||
last_probe_offset = offset;
|
||||
offset += 8;
|
||||
-
|
||||
- /* If f4 and f6 are call clobbered they are saved due to
|
||||
- stdargs and therefore are not frame related. */
|
||||
- if (!call_used_regs[i])
|
||||
- RTX_FRAME_RELATED_P (insn) = 1;
|
||||
}
|
||||
else if (!TARGET_PACKED_STACK || call_used_regs[i])
|
||||
offset += 8;
|
||||
@@ -11491,11 +11603,10 @@ s390_emit_prologue (void)
|
||||
for (i = FPR15_REGNUM; i >= FPR8_REGNUM && offset >= 0; i--)
|
||||
if (cfun_fpr_save_p (i))
|
||||
{
|
||||
- insn = save_fpr (stack_pointer_rtx, offset, i);
|
||||
+ save_fpr (stack_pointer_rtx, offset, i);
|
||||
if (offset < last_probe_offset)
|
||||
last_probe_offset = offset;
|
||||
|
||||
- RTX_FRAME_RELATED_P (insn) = 1;
|
||||
offset -= 8;
|
||||
}
|
||||
if (offset >= cfun_frame_layout.f8_offset)
|
||||
@@ -11663,7 +11774,6 @@ s390_emit_prologue (void)
|
||||
|
||||
insn = save_fpr (temp_reg, offset, i);
|
||||
offset += 8;
|
||||
- RTX_FRAME_RELATED_P (insn) = 1;
|
||||
add_reg_note (insn, REG_FRAME_RELATED_EXPR,
|
||||
gen_rtx_SET (gen_rtx_MEM (DFmode, addr),
|
||||
gen_rtx_REG (DFmode, i)));
|
||||
@@ -14158,15 +14268,11 @@ s390_optimize_prologue (void)
|
||||
continue;
|
||||
|
||||
if (cfun_frame_layout.first_save_gpr != -1)
|
||||
- {
|
||||
- rtx s_pat = save_gprs (base,
|
||||
- off + (cfun_frame_layout.first_save_gpr
|
||||
- - first) * UNITS_PER_LONG,
|
||||
- cfun_frame_layout.first_save_gpr,
|
||||
- cfun_frame_layout.last_save_gpr);
|
||||
- new_insn = emit_insn_before (s_pat, insn);
|
||||
- INSN_ADDRESSES_NEW (new_insn, -1);
|
||||
- }
|
||||
+ save_gprs (base,
|
||||
+ off + (cfun_frame_layout.first_save_gpr
|
||||
+ - first) * UNITS_PER_LONG,
|
||||
+ cfun_frame_layout.first_save_gpr,
|
||||
+ cfun_frame_layout.last_save_gpr, insn);
|
||||
|
||||
remove_insn (insn);
|
||||
continue;
|
||||
diff --git a/gcc/config/s390/s390.opt b/gcc/config/s390/s390.opt
|
||||
index 57d1b95bd65..344aa551f44 100644
|
||||
--- a/gcc/config/s390/s390.opt
|
||||
+++ b/gcc/config/s390/s390.opt
|
||||
@@ -321,3 +321,7 @@ and the default behavior is to emit separate multiplication and addition
|
||||
instructions for long doubles in vector registers, because measurements show
|
||||
that this improves performance. This option allows overriding it for testing
|
||||
purposes.
|
||||
+
|
||||
+mpreserve-args
|
||||
+Target Var(s390_preserve_args_p) Init(0)
|
||||
+Store all argument registers on the stack.
|
||||
diff --git a/gcc/testsuite/gcc.target/s390/preserve-args-1.c b/gcc/testsuite/gcc.target/s390/preserve-args-1.c
|
||||
new file mode 100644
|
||||
index 00000000000..24dcf547432
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gcc.target/s390/preserve-args-1.c
|
||||
@@ -0,0 +1,17 @@
|
||||
+/* Functional tests for the -mpreserve-args cmdline option. */
|
||||
+
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-O3 -march=z900 -mpreserve-args" } */
|
||||
+
|
||||
+
|
||||
+int
|
||||
+foo (int a, int b, int c, double d, double e)
|
||||
+{
|
||||
+ return a + c + (int)d + (int)e;
|
||||
+}
|
||||
+
|
||||
+/* { dg-final { scan-assembler "stmg\t%r2,%r4,\[0-9\]*\\(%r15\\)" { target lp64 } } } */
|
||||
+/* { dg-final { scan-assembler "stm\t%r2,%r4,\[0-9\]*\\(%r15\\)" { target { ! lp64 } } } } */
|
||||
+
|
||||
+/* { dg-final { scan-assembler "std\t%f0,\[0-9\]*\\(%r15\\)" } } */
|
||||
+/* { dg-final { scan-assembler "std\t%f2,\[0-9\]*\\(%r15\\)" } } */
|
||||
diff --git a/gcc/testsuite/gcc.target/s390/preserve-args-2.c b/gcc/testsuite/gcc.target/s390/preserve-args-2.c
|
||||
new file mode 100644
|
||||
index 00000000000..006aad9c371
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gcc.target/s390/preserve-args-2.c
|
||||
@@ -0,0 +1,19 @@
|
||||
+/* This test requires special handling of a GPR which is saved because
|
||||
+ of -mpreserve-args but not restored. dwarf2cfi used to ICE for
|
||||
+ this in maybe_record_trace_start. The solution was to introduce a
|
||||
+ REG_CFA_NORESTORE reg note. */
|
||||
+
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-O2 -march=z900 -mpreserve-args" } */
|
||||
+
|
||||
+void *foo (void *);
|
||||
+void bar ();
|
||||
+int x;
|
||||
+void *
|
||||
+baz (void *y)
|
||||
+{
|
||||
+ if (__builtin_expect (x, 0))
|
||||
+ return foo (y);
|
||||
+ bar ();
|
||||
+ return foo (y);
|
||||
+}
|
||||
diff --git a/gcc/testsuite/gcc.target/s390/preserve-args-3.c b/gcc/testsuite/gcc.target/s390/preserve-args-3.c
|
||||
new file mode 100644
|
||||
index 00000000000..f4b135ab8e6
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gcc.target/s390/preserve-args-3.c
|
||||
@@ -0,0 +1,19 @@
|
||||
+/* Functional tests for the -mpreserve-args cmdline option. */
|
||||
+
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-O3 -march=z900 -mpreserve-args" } */
|
||||
+
|
||||
+#include <stdarg.h>
|
||||
+int
|
||||
+foo (int a, int, int c, double d, ...)
|
||||
+{
|
||||
+ va_list argp;
|
||||
+ va_start(argp, d);
|
||||
+ return a + c + va_arg(argp, int) + va_arg(argp, int) + (int)va_arg(argp, double);
|
||||
+}
|
||||
+
|
||||
+/* { dg-final { scan-assembler "stmg\t%r2,%r15,\[0-9\]*\\(%r15\\)" { target lp64 } } } */
|
||||
+/* { dg-final { scan-assembler "stm\t%r2,%r15,\[0-9\]*\\(%r15\\)" { target { ! lp64 } } } } */
|
||||
+
|
||||
+/* { dg-final { scan-assembler "std\t%f0,\[0-9\]*\\(%r15\\)" } } */
|
||||
+/* { dg-final { scan-assembler "std\t%f2,\[0-9\]*\\(%r15\\)" } } */
|
@ -1,348 +0,0 @@
|
||||
From 3439b79cb7f97464d65316a94d40d49505fb2150 Mon Sep 17 00:00:00 2001
|
||||
From: Marek Polacek <polacek@redhat.com>
|
||||
Date: Wed, 6 Dec 2023 15:34:24 -0500
|
||||
Subject: [PATCH] aarch64: add -fno-stack-protector to tests
|
||||
|
||||
These tests fail when the testsuite is executed with -fstack-protector-strong.
|
||||
To avoid this, this patch adds -fno-stack-protector to dg-options.
|
||||
|
||||
---
|
||||
gcc/testsuite/gcc.target/aarch64/ldp_stp_unaligned_2.c | 2 +-
|
||||
gcc/testsuite/gcc.target/aarch64/stack-check-12.c | 2 +-
|
||||
gcc/testsuite/gcc.target/aarch64/stack-check-prologue-11.c | 2 +-
|
||||
gcc/testsuite/gcc.target/aarch64/stack-check-prologue-12.c | 2 +-
|
||||
gcc/testsuite/gcc.target/aarch64/stack-check-prologue-13.c | 4 ++--
|
||||
gcc/testsuite/gcc.target/aarch64/stack-check-prologue-14.c | 4 ++--
|
||||
gcc/testsuite/gcc.target/aarch64/stack-check-prologue-15.c | 2 +-
|
||||
gcc/testsuite/gcc.target/aarch64/stack-check-prologue-17.c | 2 +-
|
||||
gcc/testsuite/gcc.target/aarch64/stack-check-prologue-18.c | 2 +-
|
||||
gcc/testsuite/gcc.target/aarch64/stack-check-prologue-2.c | 2 +-
|
||||
gcc/testsuite/gcc.target/aarch64/stack-check-prologue-5.c | 2 +-
|
||||
gcc/testsuite/gcc.target/aarch64/stack-check-prologue-6.c | 2 +-
|
||||
gcc/testsuite/gcc.target/aarch64/stack-check-prologue-8.c | 2 +-
|
||||
gcc/testsuite/gcc.target/aarch64/stack-check-prologue-9.c | 2 +-
|
||||
gcc/testsuite/gcc.target/aarch64/sve/struct_vect_24.c | 2 +-
|
||||
gcc/testsuite/gcc.target/aarch64/test_frame_1.c | 2 +-
|
||||
gcc/testsuite/gcc.target/aarch64/test_frame_10.c | 2 +-
|
||||
gcc/testsuite/gcc.target/aarch64/test_frame_11.c | 2 +-
|
||||
gcc/testsuite/gcc.target/aarch64/test_frame_13.c | 2 +-
|
||||
gcc/testsuite/gcc.target/aarch64/test_frame_15.c | 2 +-
|
||||
gcc/testsuite/gcc.target/aarch64/test_frame_2.c | 2 +-
|
||||
gcc/testsuite/gcc.target/aarch64/test_frame_4.c | 2 +-
|
||||
gcc/testsuite/gcc.target/aarch64/test_frame_6.c | 2 +-
|
||||
gcc/testsuite/gcc.target/aarch64/test_frame_7.c | 2 +-
|
||||
gcc/testsuite/gcc.target/aarch64/test_frame_8.c | 2 +-
|
||||
30 files changed, 32 insertions(+), 32 deletions(-)
|
||||
|
||||
diff --git a/gcc/testsuite/gcc.target/aarch64/ldp_stp_unaligned_2.c b/gcc/testsuite/gcc.target/aarch64/ldp_stp_unaligned_2.c
|
||||
index 1e46755a39a..50d7d7a2d5d 100644
|
||||
--- a/gcc/testsuite/gcc.target/aarch64/ldp_stp_unaligned_2.c
|
||||
+++ b/gcc/testsuite/gcc.target/aarch64/ldp_stp_unaligned_2.c
|
||||
@@ -1,4 +1,4 @@
|
||||
-/* { dg-options "-O2 -fomit-frame-pointer" } */
|
||||
+/* { dg-options "-O2 -fomit-frame-pointer -fno-stack-protector" } */
|
||||
|
||||
/* Check that we split unaligned LDP/STP into base and aligned offset. */
|
||||
|
||||
diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-12.c b/gcc/testsuite/gcc.target/aarch64/stack-check-12.c
|
||||
index be5a57a9ec6..e1a4c67b041 100644
|
||||
--- a/gcc/testsuite/gcc.target/aarch64/stack-check-12.c
|
||||
+++ b/gcc/testsuite/gcc.target/aarch64/stack-check-12.c
|
||||
@@ -1,5 +1,5 @@
|
||||
/* { dg-do compile } */
|
||||
-/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fno-asynchronous-unwind-tables -fno-unwind-tables" } */
|
||||
+/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fno-asynchronous-unwind-tables -fno-unwind-tables -fno-stack-protector" } */
|
||||
/* { dg-require-effective-target supports_stack_clash_protection } */
|
||||
|
||||
typedef unsigned __attribute__((mode(DI))) uint64_t;
|
||||
diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-11.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-11.c
|
||||
index 741f2f5fadc..d57aece05bb 100644
|
||||
--- a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-11.c
|
||||
+++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-11.c
|
||||
@@ -1,5 +1,5 @@
|
||||
/* { dg-do compile } */
|
||||
-/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16" } */
|
||||
+/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fno-stack-protector" } */
|
||||
/* { dg-require-effective-target supports_stack_clash_protection } */
|
||||
|
||||
#define SIZE (6 * 64 * 1024) + (1 * 32 * 1024)
|
||||
diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-12.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-12.c
|
||||
index ece68003ade..895d130e4fa 100644
|
||||
--- a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-12.c
|
||||
+++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-12.c
|
||||
@@ -1,5 +1,5 @@
|
||||
/* { dg-do compile } */
|
||||
-/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fomit-frame-pointer -momit-leaf-frame-pointer" } */
|
||||
+/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fomit-frame-pointer -momit-leaf-frame-pointer -fno-stack-protector" } */
|
||||
/* { dg-require-effective-target supports_stack_clash_protection } */
|
||||
|
||||
void
|
||||
diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-13.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-13.c
|
||||
index 0fc900c6943..1f1a6c497be 100644
|
||||
--- a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-13.c
|
||||
+++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-13.c
|
||||
@@ -1,5 +1,5 @@
|
||||
/* { dg-do compile } */
|
||||
-/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fomit-frame-pointer -momit-leaf-frame-pointer" } */
|
||||
+/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fomit-frame-pointer -momit-leaf-frame-pointer -fno-stack-protector" } */
|
||||
/* { dg-require-effective-target supports_stack_clash_protection } */
|
||||
|
||||
void h (void) __attribute__ ((noreturn));
|
||||
@@ -17,4 +17,4 @@ f (void)
|
||||
|
||||
/* SIZE is more than 1 guard-size, but only one 64KB page is used, expect only 1
|
||||
probe. Leaf function and omitting leaf pointers, tail call to noreturn which
|
||||
- may only omit an epilogue and not a prologue. Checking for LR saving. */
|
||||
\ No newline at end of file
|
||||
+ may only omit an epilogue and not a prologue. Checking for LR saving. */
|
||||
diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-14.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-14.c
|
||||
index ea733f861e7..facb3cb72a7 100644
|
||||
--- a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-14.c
|
||||
+++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-14.c
|
||||
@@ -1,5 +1,5 @@
|
||||
/* { dg-do compile } */
|
||||
-/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fomit-frame-pointer -momit-leaf-frame-pointer" } */
|
||||
+/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fomit-frame-pointer -momit-leaf-frame-pointer -fno-stack-protector" } */
|
||||
/* { dg-require-effective-target supports_stack_clash_protection } */
|
||||
|
||||
void h (void) __attribute__ ((noreturn));
|
||||
@@ -21,4 +21,4 @@ f (void)
|
||||
probe at 1024 and one implicit probe due to LR being saved. Leaf function
|
||||
and omitting leaf pointers, tail call to noreturn which may only omit an
|
||||
epilogue and not a prologue and control flow in between. Checking for
|
||||
- LR saving. */
|
||||
\ No newline at end of file
|
||||
+ LR saving. */
|
||||
diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-15.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-15.c
|
||||
index 63df4a5609a..f2ac60a6214 100644
|
||||
--- a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-15.c
|
||||
+++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-15.c
|
||||
@@ -1,5 +1,5 @@
|
||||
/* { dg-do compile } */
|
||||
-/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fomit-frame-pointer -momit-leaf-frame-pointer" } */
|
||||
+/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fomit-frame-pointer -momit-leaf-frame-pointer -fno-stack-protector" } */
|
||||
/* { dg-require-effective-target supports_stack_clash_protection } */
|
||||
|
||||
void g (volatile int *x) ;
|
||||
diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-17.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-17.c
|
||||
index f0ec1389771..1cf6fbbb085 100644
|
||||
--- a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-17.c
|
||||
+++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-17.c
|
||||
@@ -1,4 +1,4 @@
|
||||
-/* { dg-options "-O2 -fstack-clash-protection -fomit-frame-pointer --param stack-clash-protection-guard-size=12" } */
|
||||
+/* { dg-options "-O2 -fstack-clash-protection -fomit-frame-pointer --param stack-clash-protection-guard-size=12 -fno-stack-protector" } */
|
||||
/* { dg-final { check-function-bodies "**" "" } } */
|
||||
|
||||
void f(int, ...);
|
||||
diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-18.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-18.c
|
||||
index 6383bec5ebc..2e06346c158 100644
|
||||
--- a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-18.c
|
||||
+++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-18.c
|
||||
@@ -1,4 +1,4 @@
|
||||
-/* { dg-options "-O2 -fstack-clash-protection -fomit-frame-pointer --param stack-clash-protection-guard-size=12" } */
|
||||
+/* { dg-options "-O2 -fstack-clash-protection -fomit-frame-pointer --param stack-clash-protection-guard-size=12 -fno-stack-protector" } */
|
||||
/* { dg-final { check-function-bodies "**" "" } } */
|
||||
|
||||
void f(int, ...);
|
||||
diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-2.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-2.c
|
||||
index 61c52a251a7..b37f62cad27 100644
|
||||
--- a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-2.c
|
||||
+++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-2.c
|
||||
@@ -1,5 +1,5 @@
|
||||
/* { dg-do compile } */
|
||||
-/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16" } */
|
||||
+/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fno-stack-protector" } */
|
||||
/* { dg-require-effective-target supports_stack_clash_protection } */
|
||||
|
||||
#define SIZE 2 * 1024
|
||||
diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-5.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-5.c
|
||||
index 2ee16350127..34a438671d0 100644
|
||||
--- a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-5.c
|
||||
+++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-5.c
|
||||
@@ -1,5 +1,5 @@
|
||||
/* { dg-do compile } */
|
||||
-/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16" } */
|
||||
+/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fno-stack-protector" } */
|
||||
/* { dg-require-effective-target supports_stack_clash_protection } */
|
||||
|
||||
#define SIZE 64 * 1024
|
||||
diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-6.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-6.c
|
||||
index 3c9b606cbe0..a4e34e2fe6a 100644
|
||||
--- a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-6.c
|
||||
+++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-6.c
|
||||
@@ -1,5 +1,5 @@
|
||||
/* { dg-do compile } */
|
||||
-/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16" } */
|
||||
+/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fno-stack-protector" } */
|
||||
/* { dg-require-effective-target supports_stack_clash_protection } */
|
||||
|
||||
#define SIZE 65 * 1024
|
||||
diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-8.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-8.c
|
||||
index 333f5fcc360..277dce4c71e 100644
|
||||
--- a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-8.c
|
||||
+++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-8.c
|
||||
@@ -1,5 +1,5 @@
|
||||
/* { dg-do compile } */
|
||||
-/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16" } */
|
||||
+/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fno-stack-protector" } */
|
||||
/* { dg-require-effective-target supports_stack_clash_protection } */
|
||||
|
||||
#define SIZE 128 * 1024
|
||||
diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-9.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-9.c
|
||||
index a3ff89b5581..a21305541c1 100644
|
||||
--- a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-9.c
|
||||
+++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-9.c
|
||||
@@ -1,5 +1,5 @@
|
||||
/* { dg-do compile } */
|
||||
-/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16" } */
|
||||
+/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fno-stack-protector" } */
|
||||
/* { dg-require-effective-target supports_stack_clash_protection } */
|
||||
|
||||
#define SIZE 6 * 64 * 1024
|
||||
diff --git a/gcc/testsuite/gcc.target/aarch64/sve/struct_vect_24.c b/gcc/testsuite/gcc.target/aarch64/sve/struct_vect_24.c
|
||||
index 68a9d5e3d2e..19be6de0c2e 100644
|
||||
--- a/gcc/testsuite/gcc.target/aarch64/sve/struct_vect_24.c
|
||||
+++ b/gcc/testsuite/gcc.target/aarch64/sve/struct_vect_24.c
|
||||
@@ -1,6 +1,6 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-require-effective-target supports_stack_clash_protection } */
|
||||
-/* { dg-options "-O3 -fopenmp-simd -fstack-clash-protection --param stack-clash-protection-guard-size=16" } */
|
||||
+/* { dg-options "-O3 -fopenmp-simd -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fno-stack-protector" } */
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
diff --git a/gcc/testsuite/gcc.target/aarch64/test_frame_1.c b/gcc/testsuite/gcc.target/aarch64/test_frame_1.c
|
||||
index f906b073545..c9b8822b4b1 100644
|
||||
--- a/gcc/testsuite/gcc.target/aarch64/test_frame_1.c
|
||||
+++ b/gcc/testsuite/gcc.target/aarch64/test_frame_1.c
|
||||
@@ -6,7 +6,7 @@
|
||||
* optimized code should use "str !" for stack adjustment. */
|
||||
|
||||
/* { dg-do run } */
|
||||
-/* { dg-options "-O2 -fomit-frame-pointer --save-temps" } */
|
||||
+/* { dg-options "-O2 -fomit-frame-pointer --save-temps -fno-stack-protector" } */
|
||||
|
||||
#include "test_frame_common.h"
|
||||
|
||||
diff --git a/gcc/testsuite/gcc.target/aarch64/test_frame_10.c b/gcc/testsuite/gcc.target/aarch64/test_frame_10.c
|
||||
index c54ab2d0ccb..fe5cbd9ed05 100644
|
||||
--- a/gcc/testsuite/gcc.target/aarch64/test_frame_10.c
|
||||
+++ b/gcc/testsuite/gcc.target/aarch64/test_frame_10.c
|
||||
@@ -7,7 +7,7 @@
|
||||
* Use a single stack adjustment, no writeback. */
|
||||
|
||||
/* { dg-do run } */
|
||||
-/* { dg-options "-O2 -fomit-frame-pointer --save-temps" } */
|
||||
+/* { dg-options "-O2 -fomit-frame-pointer --save-temps -fno-stack-protector" } */
|
||||
|
||||
#include "test_frame_common.h"
|
||||
|
||||
diff --git a/gcc/testsuite/gcc.target/aarch64/test_frame_11.c b/gcc/testsuite/gcc.target/aarch64/test_frame_11.c
|
||||
index f162cc091e0..11cf471168d 100644
|
||||
--- a/gcc/testsuite/gcc.target/aarch64/test_frame_11.c
|
||||
+++ b/gcc/testsuite/gcc.target/aarch64/test_frame_11.c
|
||||
@@ -5,7 +5,7 @@
|
||||
* optimized code should use "stp !" for stack adjustment. */
|
||||
|
||||
/* { dg-do run } */
|
||||
-/* { dg-options "-O2 --save-temps" } */
|
||||
+/* { dg-options "-O2 --save-temps -fno-stack-protector" } */
|
||||
|
||||
#include "test_frame_common.h"
|
||||
|
||||
diff --git a/gcc/testsuite/gcc.target/aarch64/test_frame_13.c b/gcc/testsuite/gcc.target/aarch64/test_frame_13.c
|
||||
index 74b3370fa46..ec56963c038 100644
|
||||
--- a/gcc/testsuite/gcc.target/aarch64/test_frame_13.c
|
||||
+++ b/gcc/testsuite/gcc.target/aarch64/test_frame_13.c
|
||||
@@ -5,7 +5,7 @@
|
||||
* Use a single stack adjustment, no writeback. */
|
||||
|
||||
/* { dg-do run } */
|
||||
-/* { dg-options "-O2 --save-temps" } */
|
||||
+/* { dg-options "-O2 --save-temps -fno-stack-protector" } */
|
||||
|
||||
#include "test_frame_common.h"
|
||||
|
||||
diff --git a/gcc/testsuite/gcc.target/aarch64/test_frame_15.c b/gcc/testsuite/gcc.target/aarch64/test_frame_15.c
|
||||
index bed6714b4fe..4247008de8e 100644
|
||||
--- a/gcc/testsuite/gcc.target/aarch64/test_frame_15.c
|
||||
+++ b/gcc/testsuite/gcc.target/aarch64/test_frame_15.c
|
||||
@@ -6,7 +6,7 @@
|
||||
* Use a single stack adjustment, no writeback. */
|
||||
|
||||
/* { dg-do run } */
|
||||
-/* { dg-options "-O2 --save-temps" } */
|
||||
+/* { dg-options "-O2 --save-temps -fno-stack-protector" } */
|
||||
|
||||
#include "test_frame_common.h"
|
||||
|
||||
diff --git a/gcc/testsuite/gcc.target/aarch64/test_frame_2.c b/gcc/testsuite/gcc.target/aarch64/test_frame_2.c
|
||||
index 0d715314cb8..9c4243b6480 100644
|
||||
--- a/gcc/testsuite/gcc.target/aarch64/test_frame_2.c
|
||||
+++ b/gcc/testsuite/gcc.target/aarch64/test_frame_2.c
|
||||
@@ -6,7 +6,7 @@
|
||||
* optimized code should use "stp !" for stack adjustment. */
|
||||
|
||||
/* { dg-do run } */
|
||||
-/* { dg-options "-O2 -fomit-frame-pointer --save-temps" } */
|
||||
+/* { dg-options "-O2 -fomit-frame-pointer --save-temps -fno-stack-protector" } */
|
||||
|
||||
#include "test_frame_common.h"
|
||||
|
||||
diff --git a/gcc/testsuite/gcc.target/aarch64/test_frame_4.c b/gcc/testsuite/gcc.target/aarch64/test_frame_4.c
|
||||
index b41229c42f4..8d0bed93e44 100644
|
||||
--- a/gcc/testsuite/gcc.target/aarch64/test_frame_4.c
|
||||
+++ b/gcc/testsuite/gcc.target/aarch64/test_frame_4.c
|
||||
@@ -6,7 +6,7 @@
|
||||
* we can use "stp !" to optimize stack adjustment. */
|
||||
|
||||
/* { dg-do run } */
|
||||
-/* { dg-options "-O2 -fomit-frame-pointer --save-temps" } */
|
||||
+/* { dg-options "-O2 -fomit-frame-pointer --save-temps -fno-stack-protector" } */
|
||||
|
||||
#include "test_frame_common.h"
|
||||
|
||||
diff --git a/gcc/testsuite/gcc.target/aarch64/test_frame_6.c b/gcc/testsuite/gcc.target/aarch64/test_frame_6.c
|
||||
index 56259c945d2..2944a8bbe16 100644
|
||||
--- a/gcc/testsuite/gcc.target/aarch64/test_frame_6.c
|
||||
+++ b/gcc/testsuite/gcc.target/aarch64/test_frame_6.c
|
||||
@@ -6,7 +6,7 @@
|
||||
* use a single stack adjustment, no writeback. */
|
||||
|
||||
/* { dg-do run } */
|
||||
-/* { dg-options "-O2 -fomit-frame-pointer --save-temps" } */
|
||||
+/* { dg-options "-O2 -fomit-frame-pointer --save-temps -fno-stack-protector" } */
|
||||
|
||||
#include "test_frame_common.h"
|
||||
|
||||
diff --git a/gcc/testsuite/gcc.target/aarch64/test_frame_7.c b/gcc/testsuite/gcc.target/aarch64/test_frame_7.c
|
||||
index 5702656a5da..ca371632d81 100644
|
||||
--- a/gcc/testsuite/gcc.target/aarch64/test_frame_7.c
|
||||
+++ b/gcc/testsuite/gcc.target/aarch64/test_frame_7.c
|
||||
@@ -6,7 +6,7 @@
|
||||
* use a single stack adjustment, no writeback. */
|
||||
|
||||
/* { dg-do run } */
|
||||
-/* { dg-options "-O2 -fomit-frame-pointer --save-temps" } */
|
||||
+/* { dg-options "-O2 -fomit-frame-pointer --save-temps -fno-stack-protector" } */
|
||||
|
||||
#include "test_frame_common.h"
|
||||
|
||||
diff --git a/gcc/testsuite/gcc.target/aarch64/test_frame_8.c b/gcc/testsuite/gcc.target/aarch64/test_frame_8.c
|
||||
index 75a68b41e08..084e8fac373 100644
|
||||
--- a/gcc/testsuite/gcc.target/aarch64/test_frame_8.c
|
||||
+++ b/gcc/testsuite/gcc.target/aarch64/test_frame_8.c
|
||||
@@ -5,7 +5,7 @@
|
||||
* number of callee-saved reg == 1. */
|
||||
|
||||
/* { dg-do run } */
|
||||
-/* { dg-options "-O2 -fomit-frame-pointer --save-temps" } */
|
||||
+/* { dg-options "-O2 -fomit-frame-pointer --save-temps -fno-stack-protector" } */
|
||||
|
||||
#include "test_frame_common.h"
|
||||
|
||||
|
||||
base-commit: 1bd15d87031e8bf8fe9585fbc166b315303f676c
|
||||
--
|
||||
2.43.0
|
||||
|
@ -1,134 +0,0 @@
|
||||
commit 74833b3165865a9373506f447720cf20f29c20c8
|
||||
Author: Christophe Lyon <christophe.lyon@arm.com>
|
||||
Date: Tue Jan 17 13:10:10 2023 +0000
|
||||
|
||||
aarch64: add -fno-stack-protector to some tests [PR108411]
|
||||
|
||||
As discussed in the PR, these recently added tests fail when the
|
||||
testsuite is executed with -fstack-protector-strong. To avoid this,
|
||||
this patch adds -fno-stack-protector to dg-options.
|
||||
|
||||
PR target/108411
|
||||
gcc/testsuite
|
||||
* g++.target/aarch64/bitfield-abi-warning-align16-O2-extra.C: Add
|
||||
-fno-stack-protector.
|
||||
* g++.target/aarch64/bitfield-abi-warning-align16-O2.C: Likewise.
|
||||
* g++.target/aarch64/bitfield-abi-warning-align32-O2-extra.C: Likewise.
|
||||
* g++.target/aarch64/bitfield-abi-warning-align32-O2.C: Likewise.
|
||||
* g++.target/aarch64/bitfield-abi-warning-align8-O2.C: Likewise.
|
||||
* gcc.target/aarch64/bitfield-abi-warning-align16-O2-extra.c: Likewise.
|
||||
* gcc.target/aarch64/bitfield-abi-warning-align16-O2.c: Likewise.
|
||||
* gcc.target/aarch64/bitfield-abi-warning-align32-O2-extra.c: Likewise.
|
||||
* gcc.target/aarch64/bitfield-abi-warning-align32-O2.c: Likewise.
|
||||
* gcc.target/aarch64/bitfield-abi-warning-align8-O2.c: Likewise.
|
||||
|
||||
diff --git a/gcc/testsuite/g++.target/aarch64/bitfield-abi-warning-align16-O2-extra.C b/gcc/testsuite/g++.target/aarch64/bitfield-abi-warning-align16-O2-extra.C
|
||||
index 443cd458b4c..52f9cdd1ee9 100644
|
||||
--- a/gcc/testsuite/g++.target/aarch64/bitfield-abi-warning-align16-O2-extra.C
|
||||
+++ b/gcc/testsuite/g++.target/aarch64/bitfield-abi-warning-align16-O2-extra.C
|
||||
@@ -1,5 +1,5 @@
|
||||
/* { dg-do compile } */
|
||||
-/* { dg-options "-O2 -save-temps -Wno-narrowing" } */
|
||||
+/* { dg-options "-O2 -fno-stack-protector -save-temps -Wno-narrowing" } */
|
||||
|
||||
#define ALIGN 16
|
||||
//#define EXTRA
|
||||
diff --git a/gcc/testsuite/g++.target/aarch64/bitfield-abi-warning-align16-O2.C b/gcc/testsuite/g++.target/aarch64/bitfield-abi-warning-align16-O2.C
|
||||
index 76a7e3d0ad4..9ff4e46645b 100644
|
||||
--- a/gcc/testsuite/g++.target/aarch64/bitfield-abi-warning-align16-O2.C
|
||||
+++ b/gcc/testsuite/g++.target/aarch64/bitfield-abi-warning-align16-O2.C
|
||||
@@ -1,5 +1,5 @@
|
||||
/* { dg-do compile } */
|
||||
-/* { dg-options "-O2 -save-temps -Wno-narrowing" } */
|
||||
+/* { dg-options "-O2 -fno-stack-protector -save-temps -Wno-narrowing" } */
|
||||
|
||||
#define ALIGN 16
|
||||
#define EXTRA
|
||||
diff --git a/gcc/testsuite/g++.target/aarch64/bitfield-abi-warning-align32-O2-extra.C b/gcc/testsuite/g++.target/aarch64/bitfield-abi-warning-align32-O2-extra.C
|
||||
index 6f8f54f41ff..55dcbfe4b7c 100644
|
||||
--- a/gcc/testsuite/g++.target/aarch64/bitfield-abi-warning-align32-O2-extra.C
|
||||
+++ b/gcc/testsuite/g++.target/aarch64/bitfield-abi-warning-align32-O2-extra.C
|
||||
@@ -1,5 +1,5 @@
|
||||
/* { dg-do compile } */
|
||||
-/* { dg-options "-O2 -save-temps -Wno-narrowing" } */
|
||||
+/* { dg-options "-O2 -fno-stack-protector -save-temps -Wno-narrowing" } */
|
||||
|
||||
#define ALIGN 32
|
||||
//#define EXTRA
|
||||
diff --git a/gcc/testsuite/g++.target/aarch64/bitfield-abi-warning-align32-O2.C b/gcc/testsuite/g++.target/aarch64/bitfield-abi-warning-align32-O2.C
|
||||
index 6b8ad5fbea1..6bb8778ee90 100644
|
||||
--- a/gcc/testsuite/g++.target/aarch64/bitfield-abi-warning-align32-O2.C
|
||||
+++ b/gcc/testsuite/g++.target/aarch64/bitfield-abi-warning-align32-O2.C
|
||||
@@ -1,5 +1,5 @@
|
||||
/* { dg-do compile } */
|
||||
-/* { dg-options "-O2 -save-temps -Wno-narrowing" } */
|
||||
+/* { dg-options "-O2 -fno-stack-protector -save-temps -Wno-narrowing" } */
|
||||
|
||||
#define ALIGN 32
|
||||
#define EXTRA
|
||||
diff --git a/gcc/testsuite/g++.target/aarch64/bitfield-abi-warning-align8-O2.C b/gcc/testsuite/g++.target/aarch64/bitfield-abi-warning-align8-O2.C
|
||||
index b1764d97ea0..41bcc894a2b 100644
|
||||
--- a/gcc/testsuite/g++.target/aarch64/bitfield-abi-warning-align8-O2.C
|
||||
+++ b/gcc/testsuite/g++.target/aarch64/bitfield-abi-warning-align8-O2.C
|
||||
@@ -1,5 +1,5 @@
|
||||
/* { dg-do compile } */
|
||||
-/* { dg-options "-O2 -save-temps -Wno-narrowing" } */
|
||||
+/* { dg-options "-O2 -fno-stack-protector -save-temps -Wno-narrowing" } */
|
||||
|
||||
#define ALIGN 8
|
||||
#define EXTRA
|
||||
diff --git a/gcc/testsuite/gcc.target/aarch64/bitfield-abi-warning-align16-O2-extra.c b/gcc/testsuite/gcc.target/aarch64/bitfield-abi-warning-align16-O2-extra.c
|
||||
index f248a129509..3b2c932ac23 100644
|
||||
--- a/gcc/testsuite/gcc.target/aarch64/bitfield-abi-warning-align16-O2-extra.c
|
||||
+++ b/gcc/testsuite/gcc.target/aarch64/bitfield-abi-warning-align16-O2-extra.c
|
||||
@@ -1,5 +1,5 @@
|
||||
/* { dg-do compile } */
|
||||
-/* { dg-options "-O2 -save-temps" } */
|
||||
+/* { dg-options "-O2 -fno-stack-protector -save-temps" } */
|
||||
|
||||
#define ALIGN 16
|
||||
//#define EXTRA
|
||||
diff --git a/gcc/testsuite/gcc.target/aarch64/bitfield-abi-warning-align16-O2.c b/gcc/testsuite/gcc.target/aarch64/bitfield-abi-warning-align16-O2.c
|
||||
index 22ee5ec4c92..ee5d6faa428 100644
|
||||
--- a/gcc/testsuite/gcc.target/aarch64/bitfield-abi-warning-align16-O2.c
|
||||
+++ b/gcc/testsuite/gcc.target/aarch64/bitfield-abi-warning-align16-O2.c
|
||||
@@ -1,5 +1,5 @@
|
||||
/* { dg-do compile } */
|
||||
-/* { dg-options "-O2 -save-temps" } */
|
||||
+/* { dg-options "-O2 -fno-stack-protector -save-temps" } */
|
||||
|
||||
#define ALIGN 16
|
||||
#define EXTRA
|
||||
diff --git a/gcc/testsuite/gcc.target/aarch64/bitfield-abi-warning-align32-O2-extra.c b/gcc/testsuite/gcc.target/aarch64/bitfield-abi-warning-align32-O2-extra.c
|
||||
index a8a50b35e8e..6d4a883a96e 100644
|
||||
--- a/gcc/testsuite/gcc.target/aarch64/bitfield-abi-warning-align32-O2-extra.c
|
||||
+++ b/gcc/testsuite/gcc.target/aarch64/bitfield-abi-warning-align32-O2-extra.c
|
||||
@@ -1,5 +1,5 @@
|
||||
/* { dg-do compile } */
|
||||
-/* { dg-options "-O2 -save-temps" } */
|
||||
+/* { dg-options "-O2 -fno-stack-protector -save-temps" } */
|
||||
|
||||
#define ALIGN 32
|
||||
//#define EXTRA
|
||||
diff --git a/gcc/testsuite/gcc.target/aarch64/bitfield-abi-warning-align32-O2.c b/gcc/testsuite/gcc.target/aarch64/bitfield-abi-warning-align32-O2.c
|
||||
index e872de3dbe0..331daba354c 100644
|
||||
--- a/gcc/testsuite/gcc.target/aarch64/bitfield-abi-warning-align32-O2.c
|
||||
+++ b/gcc/testsuite/gcc.target/aarch64/bitfield-abi-warning-align32-O2.c
|
||||
@@ -1,5 +1,5 @@
|
||||
/* { dg-do compile } */
|
||||
-/* { dg-options "-O2 -save-temps" } */
|
||||
+/* { dg-options "-O2 -fno-stack-protector -save-temps" } */
|
||||
|
||||
#define ALIGN 32
|
||||
#define EXTRA
|
||||
diff --git a/gcc/testsuite/gcc.target/aarch64/bitfield-abi-warning-align8-O2.c b/gcc/testsuite/gcc.target/aarch64/bitfield-abi-warning-align8-O2.c
|
||||
index cb2a945a819..e6d45f5dd5c 100644
|
||||
--- a/gcc/testsuite/gcc.target/aarch64/bitfield-abi-warning-align8-O2.c
|
||||
+++ b/gcc/testsuite/gcc.target/aarch64/bitfield-abi-warning-align8-O2.c
|
||||
@@ -1,5 +1,5 @@
|
||||
/* { dg-do compile } */
|
||||
-/* { dg-options "-O2 -save-temps" } */
|
||||
+/* { dg-options "-O2 -fno-stack-protector -save-temps" } */
|
||||
|
||||
#define ALIGN 8
|
||||
#define EXTRA
|
@ -1,150 +0,0 @@
|
||||
commit f1b1d515aa5836844cdb45e8bb2b941784f78fd2
|
||||
Author: Jakub Jelinek <jakub@redhat.com>
|
||||
Date: Mon Apr 22 18:00:06 2024 +0200
|
||||
|
||||
libstdc++: Workaround kernel-headers on s390x-linux
|
||||
|
||||
We see
|
||||
FAIL: 17_intro/headers/c++1998/all_attributes.cc (test for excess errors)
|
||||
FAIL: 17_intro/headers/c++2011/all_attributes.cc (test for excess errors)
|
||||
FAIL: 17_intro/headers/c++2014/all_attributes.cc (test for excess errors)
|
||||
FAIL: 17_intro/headers/c++2017/all_attributes.cc (test for excess errors)
|
||||
FAIL: 17_intro/headers/c++2020/all_attributes.cc (test for excess errors)
|
||||
FAIL: 17_intro/names.cc -std=gnu++17 (test for excess errors)
|
||||
on s390x-linux.
|
||||
The first 5 are due to kernel-headers not using uglified attribute names,
|
||||
where <asm/types.h> contains
|
||||
__attribute__((packed, aligned(4)))
|
||||
I've filed a downstream bugreport for this in
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2276084
|
||||
(not really sure where to report kernel-headers issues upstream), while the
|
||||
last one is due to <sys/ucontext.h> from glibc containing:
|
||||
#ifdef __USE_MISC
|
||||
# define __ctx(fld) fld
|
||||
#else
|
||||
# define __ctx(fld) __ ## fld
|
||||
#endif
|
||||
...
|
||||
typedef union
|
||||
{
|
||||
double __ctx(d);
|
||||
float __ctx(f);
|
||||
} fpreg_t;
|
||||
and g++ predefining -D_GNU_SOURCE which implies define __USE_MISC.
|
||||
|
||||
The following patch adds a workaround for this on the libstdc++ testsuite
|
||||
side.
|
||||
|
||||
2024-04-22 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* testsuite/17_intro/names.cc (d, f): Undefine on s390*-linux*.
|
||||
* testsuite/17_intro/headers/c++1998/all_attributes.cc (packed): Don't
|
||||
define on s390.
|
||||
* testsuite/17_intro/headers/c++2011/all_attributes.cc (packed):
|
||||
Likewise.
|
||||
* testsuite/17_intro/headers/c++2014/all_attributes.cc (packed):
|
||||
Likewise.
|
||||
* testsuite/17_intro/headers/c++2017/all_attributes.cc (packed):
|
||||
Likewise.
|
||||
* testsuite/17_intro/headers/c++2020/all_attributes.cc (packed):
|
||||
Likewise.
|
||||
|
||||
(cherry picked from commit cf5f7791056b3ed993bc8024be767a86157514a9)
|
||||
|
||||
diff --git a/libstdc++-v3/testsuite/17_intro/headers/c++1998/all_attributes.cc b/libstdc++-v3/testsuite/17_intro/headers/c++1998/all_attributes.cc
|
||||
index 74268b6a482..658063bd0a4 100644
|
||||
--- a/libstdc++-v3/testsuite/17_intro/headers/c++1998/all_attributes.cc
|
||||
+++ b/libstdc++-v3/testsuite/17_intro/headers/c++1998/all_attributes.cc
|
||||
@@ -29,7 +29,11 @@
|
||||
# define noreturn 1
|
||||
# define visibility 1
|
||||
#endif
|
||||
+#ifndef __s390__
|
||||
+// kernel-headers <asm/types.h> uses __attribute__((packed,aligned(4))) on
|
||||
+// S390.
|
||||
#define packed 1
|
||||
+#endif
|
||||
#define pure 1
|
||||
// glibc's sysdeps/unix/sysv/linux/arm/sys/ucontext.h uses this on ARM.
|
||||
#ifndef __arm__
|
||||
diff --git a/libstdc++-v3/testsuite/17_intro/headers/c++2011/all_attributes.cc b/libstdc++-v3/testsuite/17_intro/headers/c++2011/all_attributes.cc
|
||||
index 5d0c5fe8177..f1bcc1fbbc8 100644
|
||||
--- a/libstdc++-v3/testsuite/17_intro/headers/c++2011/all_attributes.cc
|
||||
+++ b/libstdc++-v3/testsuite/17_intro/headers/c++2011/all_attributes.cc
|
||||
@@ -29,7 +29,11 @@
|
||||
# define visibility 1
|
||||
#endif
|
||||
#define no_unique_address 1
|
||||
+#ifndef __s390__
|
||||
+// kernel-headers <asm/types.h> uses __attribute__((packed,aligned(4))) on
|
||||
+// S390.
|
||||
#define packed 1
|
||||
+#endif
|
||||
#define pure 1
|
||||
// glibc's sysdeps/unix/sysv/linux/arm/sys/ucontext.h uses this on ARM.
|
||||
#ifndef __arm__
|
||||
diff --git a/libstdc++-v3/testsuite/17_intro/headers/c++2014/all_attributes.cc b/libstdc++-v3/testsuite/17_intro/headers/c++2014/all_attributes.cc
|
||||
index 3cac2190ec7..48e7ef64afb 100644
|
||||
--- a/libstdc++-v3/testsuite/17_intro/headers/c++2014/all_attributes.cc
|
||||
+++ b/libstdc++-v3/testsuite/17_intro/headers/c++2014/all_attributes.cc
|
||||
@@ -29,7 +29,11 @@
|
||||
# define visibility 1
|
||||
#endif
|
||||
#define no_unique_address 1
|
||||
+#ifndef __s390__
|
||||
+// kernel-headers <asm/types.h> uses __attribute__((packed,aligned(4))) on
|
||||
+// S390.
|
||||
#define packed 1
|
||||
+#endif
|
||||
#define pure 1
|
||||
// glibc's sysdeps/unix/sysv/linux/arm/sys/ucontext.h uses this on ARM.
|
||||
#ifndef __arm__
|
||||
diff --git a/libstdc++-v3/testsuite/17_intro/headers/c++2017/all_attributes.cc b/libstdc++-v3/testsuite/17_intro/headers/c++2017/all_attributes.cc
|
||||
index f607532aa90..03e4e23c686 100644
|
||||
--- a/libstdc++-v3/testsuite/17_intro/headers/c++2017/all_attributes.cc
|
||||
+++ b/libstdc++-v3/testsuite/17_intro/headers/c++2017/all_attributes.cc
|
||||
@@ -28,7 +28,11 @@
|
||||
# define visibility 1
|
||||
#endif
|
||||
#define no_unique_address 1
|
||||
+#ifndef __s390__
|
||||
+// kernel-headers <asm/types.h> uses __attribute__((packed,aligned(4))) on
|
||||
+// S390.
|
||||
#define packed 1
|
||||
+#endif
|
||||
#define pure 1
|
||||
// glibc's sysdeps/unix/sysv/linux/arm/sys/ucontext.h uses this on ARM.
|
||||
#ifndef __arm__
|
||||
diff --git a/libstdc++-v3/testsuite/17_intro/headers/c++2020/all_attributes.cc b/libstdc++-v3/testsuite/17_intro/headers/c++2020/all_attributes.cc
|
||||
index 5732633c7e4..7375dc88bb1 100644
|
||||
--- a/libstdc++-v3/testsuite/17_intro/headers/c++2020/all_attributes.cc
|
||||
+++ b/libstdc++-v3/testsuite/17_intro/headers/c++2020/all_attributes.cc
|
||||
@@ -27,7 +27,11 @@
|
||||
# define cold 1
|
||||
# define visibility 1
|
||||
#endif
|
||||
+#ifndef __s390__
|
||||
+// kernel-headers <asm/types.h> uses __attribute__((packed,aligned(4))) on
|
||||
+// S390.
|
||||
#define packed 1
|
||||
+#endif
|
||||
#define pure 1
|
||||
// glibc's sysdeps/unix/sysv/linux/arm/sys/ucontext.h uses this on ARM.
|
||||
#ifndef __arm__
|
||||
diff --git a/libstdc++-v3/testsuite/17_intro/names.cc b/libstdc++-v3/testsuite/17_intro/names.cc
|
||||
index eb4d064177c..864bc20f146 100644
|
||||
--- a/libstdc++-v3/testsuite/17_intro/names.cc
|
||||
+++ b/libstdc++-v3/testsuite/17_intro/names.cc
|
||||
@@ -267,6 +267,12 @@
|
||||
#undef u
|
||||
#endif
|
||||
|
||||
+#if defined (__linux__) && defined (__s390__)
|
||||
+// <sys/ucontext.h> defines fpreg_t::d and fpreg_t::f
|
||||
+#undef d
|
||||
+#undef f
|
||||
+#endif
|
||||
+
|
||||
#if defined (__linux__) && defined (__sparc__)
|
||||
#undef y
|
||||
#endif
|
@ -1,22 +0,0 @@
|
||||
diff --git a/libstdc++-v3/testsuite/26_numerics/gcd/gcd_neg.cc b/libstdc++-v3/testsuite/26_numerics/gcd/gcd_neg.cc
|
||||
index b0277b3f4d1..425daff317a 100644
|
||||
--- a/libstdc++-v3/testsuite/26_numerics/gcd/gcd_neg.cc
|
||||
+++ b/libstdc++-v3/testsuite/26_numerics/gcd/gcd_neg.cc
|
||||
@@ -53,3 +53,6 @@ test01()
|
||||
// { dg-prune-output "does not have integral type" }
|
||||
// { dg-prune-output "non-integral type" }
|
||||
// { dg-prune-output "invalid specialization" }
|
||||
+// These show up with -Wp,-D_GLIBCXX_ASSERTIONS.
|
||||
+// { dg-prune-output "invalid operands" }
|
||||
+// { dg-prune-output "wrong type argument" }
|
||||
diff --git a/libstdc++-v3/testsuite/26_numerics/lcm/lcm_neg.cc b/libstdc++-v3/testsuite/26_numerics/lcm/lcm_neg.cc
|
||||
index 8cabfe2ea2f..a14d373c461 100644
|
||||
--- a/libstdc++-v3/testsuite/26_numerics/lcm/lcm_neg.cc
|
||||
+++ b/libstdc++-v3/testsuite/26_numerics/lcm/lcm_neg.cc
|
||||
@@ -53,3 +53,6 @@ test01()
|
||||
// { dg-prune-output "does not have integral type" }
|
||||
// { dg-prune-output "non-integral type" }
|
||||
// { dg-prune-output "invalid specialization" }
|
||||
+// These show up with -Wp,-D_GLIBCXX_ASSERTIONS.
|
||||
+// { dg-prune-output "invalid operands" }
|
||||
+// { dg-prune-output "wrong type argument" }
|
Loading…
Reference in new issue