From 689ae37cf0a5cfc6c1f6a6c8205a82505a8c10eb Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Jun 08 2021 18:05:45 +0000 Subject: import compat-sap-c++-10-10.2.1-11.el7_9 --- diff --git a/.compat-sap-c++-10.metadata b/.compat-sap-c++-10.metadata new file mode 100644 index 0000000..15785f3 --- /dev/null +++ b/.compat-sap-c++-10.metadata @@ -0,0 +1 @@ +e979e18ac6aa7ea338d442e4ab01db4051dd1d0f SOURCES/gcc-10.2.1-20210130.tar.xz diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..016ec52 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/gcc-10.2.1-20210130.tar.xz diff --git a/SOURCES/gcc10-SIZE_MAX.patch b/SOURCES/gcc10-SIZE_MAX.patch new file mode 100644 index 0000000..67be908 --- /dev/null +++ b/SOURCES/gcc10-SIZE_MAX.patch @@ -0,0 +1,25 @@ +commit b051aa35005b1089ab0ceba93568f388b9132b92 +Author: Eric Botcazou +Date: Sun Jan 31 23:23:31 2021 +0100 + + Add missing definition of SIZE_MAX + + If the stdint.h system file follows the ISO C99 specification, it might + not define SIZE_MAX in C++ by default, so provide a local fallback. + + gcc/ + * system.h (SIZE_MAX): Define if not already defined. + +--- gcc/system.h ++++ gcc/system.h +@@ -528,6 +528,10 @@ extern void *realloc (void *, size_t); + #include + #endif + ++#ifndef SIZE_MAX ++# define SIZE_MAX INTTYPE_MAXIMUM (size_t) ++#endif ++ + #ifdef __cplusplus + extern "C" { + #endif diff --git a/SOURCES/gcc10-Wno-format-security.patch b/SOURCES/gcc10-Wno-format-security.patch new file mode 100644 index 0000000..974ea44 --- /dev/null +++ b/SOURCES/gcc10-Wno-format-security.patch @@ -0,0 +1,27 @@ +2017-02-25 Jakub Jelinek + + * configure.ac: When adding -Wno-format, also add -Wno-format-security. + * configure: Regenerated. + +--- gcc/configure.ac.jj 2017-02-13 12:20:53.000000000 +0100 ++++ gcc/configure.ac 2017-02-25 12:42:32.859175403 +0100 +@@ -480,7 +480,7 @@ AC_ARG_ENABLE(build-format-warnings, + AS_HELP_STRING([--disable-build-format-warnings],[don't use -Wformat while building GCC]), + [],[enable_build_format_warnings=yes]) + AS_IF([test $enable_build_format_warnings = no], +- [wf_opt=-Wno-format],[wf_opt=]) ++ [wf_opt="-Wno-format -Wno-format-security"],[wf_opt=]) + ACX_PROG_CXX_WARNING_OPTS( + m4_quote(m4_do([-W -Wall -Wno-narrowing -Wwrite-strings ], + [-Wcast-qual -Wno-error=format-diag $wf_opt])), +--- gcc/configure.jj 2017-02-13 12:20:52.000000000 +0100 ++++ gcc/configure 2017-02-25 12:42:50.041946391 +0100 +@@ -6647,7 +6647,7 @@ else + fi + + if test $enable_build_format_warnings = no; then : +- wf_opt=-Wno-format ++ wf_opt="-Wno-format -Wno-format-security" + else + wf_opt= + fi diff --git a/SOURCES/gcc10-d-shared-libphobos.patch b/SOURCES/gcc10-d-shared-libphobos.patch new file mode 100644 index 0000000..6384bbb --- /dev/null +++ b/SOURCES/gcc10-d-shared-libphobos.patch @@ -0,0 +1,20 @@ +2019-01-17 Jakub Jelinek + + * d-spec.cc (lang_specific_driver): Make -shared-libphobos + the default rather than -static-libphobos. + +--- gcc/d/d-spec.cc.jj 2019-01-01 12:37:49.502444257 +0100 ++++ gcc/d/d-spec.cc 2019-01-17 17:09:45.364949246 +0100 +@@ -408,9 +408,9 @@ lang_specific_driver (cl_decoded_option + /* Add `-lgphobos' if we haven't already done so. */ + if (phobos_library != PHOBOS_NOLINK) + { +- /* Default to static linking. */ +- if (phobos_library != PHOBOS_DYNAMIC) +- phobos_library = PHOBOS_STATIC; ++ /* Default to shared linking. */ ++ if (phobos_library != PHOBOS_STATIC) ++ phobos_library = PHOBOS_DYNAMIC; + + #ifdef HAVE_LD_STATIC_DYNAMIC + if (phobos_library == PHOBOS_STATIC && !static_link) diff --git a/SOURCES/gcc10-foffload-default.patch b/SOURCES/gcc10-foffload-default.patch new file mode 100644 index 0000000..4a87e9f --- /dev/null +++ b/SOURCES/gcc10-foffload-default.patch @@ -0,0 +1,122 @@ +2019-01-17 Jakub Jelinek + + * gcc.c (offload_targets_default): New variable. + (process_command): Set it if -foffload is defaulted. + (driver::maybe_putenv_OFFLOAD_TARGETS): Add OFFLOAD_TARGET_DEFAULT=1 + into environment if -foffload has been defaulted. + * lto-wrapper.c (OFFLOAD_TARGET_DEFAULT_ENV): Define. + (compile_offload_image): If OFFLOAD_TARGET_DEFAULT + is in the environment, don't fail if corresponding mkoffload + can't be found. + (compile_images_for_offload_targets): Likewise. Free and clear + offload_names if no valid offload is found. +libgomp/ + * target.c (gomp_load_plugin_for_device): If a plugin can't be + dlopened, assume it has no devices silently. + +--- gcc/gcc.c.jj 2017-01-17 10:28:40.000000000 +0100 ++++ gcc/gcc.c 2017-01-20 16:26:29.649962902 +0100 +@@ -290,6 +290,10 @@ static const char *spec_host_machine = D + + static char *offload_targets = NULL; + ++/* Set to true if -foffload has not been used and offload_targets ++ is set to the configured in default. */ ++static bool offload_targets_default; ++ + /* Nonzero if cross-compiling. + When -b is used, the value comes from the `specs' file. */ + +@@ -4457,7 +4461,10 @@ process_command (unsigned int decoded_op + /* If the user didn't specify any, default to all configured offload + targets. */ + if (ENABLE_OFFLOADING && offload_targets == NULL) +- handle_foffload_option (OFFLOAD_TARGETS); ++ { ++ handle_foffload_option (OFFLOAD_TARGETS); ++ offload_targets_default = true; ++ } + + if (output_file + && strcmp (output_file, "-") != 0 +@@ -7693,6 +7700,8 @@ driver::maybe_putenv_OFFLOAD_TARGETS () + obstack_grow (&collect_obstack, offload_targets, + strlen (offload_targets) + 1); + xputenv (XOBFINISH (&collect_obstack, char *)); ++ if (offload_targets_default) ++ xputenv ("OFFLOAD_TARGET_DEFAULT=1"); + } + + free (offload_targets); +--- gcc/lto-wrapper.c.jj 2017-01-01 12:45:34.000000000 +0100 ++++ gcc/lto-wrapper.c 2017-01-20 16:34:18.294016997 +0100 +@@ -52,6 +52,7 @@ along with GCC; see the file COPYING3. + /* Environment variable, used for passing the names of offload targets from GCC + driver to lto-wrapper. */ + #define OFFLOAD_TARGET_NAMES_ENV "OFFLOAD_TARGET_NAMES" ++#define OFFLOAD_TARGET_DEFAULT_ENV "OFFLOAD_TARGET_DEFAULT" + + enum lto_mode_d { + LTO_MODE_NONE, /* Not doing LTO. */ +@@ -822,6 +823,12 @@ compile_offload_image (const char *targe + break; + } + ++ if (!compiler && getenv (OFFLOAD_TARGET_DEFAULT_ENV)) ++ { ++ free_array_of_ptrs ((void **) paths, n_paths); ++ return NULL; ++ } ++ + if (!compiler) + fatal_error (input_location, + "could not find %s in %s (consider using %<-B%>)", +@@ -885,6 +892,7 @@ compile_images_for_offload_targets (unsi + unsigned num_targets = parse_env_var (target_names, &names, NULL); + + int next_name_entry = 0; ++ bool hsa_seen = false; + const char *compiler_path = getenv ("COMPILER_PATH"); + if (!compiler_path) + goto out; +@@ -897,18 +905,26 @@ compile_images_for_offload_targets (unsi + /* HSA does not use LTO-like streaming and a different compiler, skip + it. */ + if (strcmp (names[i], "hsa") == 0) +- continue; ++ { ++ hsa_seen = true; ++ continue; ++ } + + offload_names[next_name_entry] + = compile_offload_image (names[i], compiler_path, in_argc, in_argv, + compiler_opts, compiler_opt_count, + linker_opts, linker_opt_count); + if (!offload_names[next_name_entry]) +- fatal_error (input_location, +- "problem with building target image for %s", names[i]); ++ continue; + next_name_entry++; + } + ++ if (next_name_entry == 0 && !hsa_seen) ++ { ++ free (offload_names); ++ offload_names = NULL; ++ } ++ + out: + free_array_of_ptrs ((void **) names, num_targets); + } +--- libgomp/target.c.jj 2017-01-01 12:45:52.000000000 +0100 ++++ libgomp/target.c 2017-01-20 20:12:13.756710875 +0100 +@@ -2356,7 +2356,7 @@ gomp_load_plugin_for_device (struct gomp + + void *plugin_handle = dlopen (plugin_name, RTLD_LAZY); + if (!plugin_handle) +- goto dl_fail; ++ return 0; + + /* Check if all required functions are available in the plugin and store + their handlers. None of the symbols can legitimately be NULL, diff --git a/SOURCES/gcc10-hack.patch b/SOURCES/gcc10-hack.patch new file mode 100644 index 0000000..ba80c24 --- /dev/null +++ b/SOURCES/gcc10-hack.patch @@ -0,0 +1,126 @@ +--- libada/Makefile.in.jj 2019-01-09 13:01:18.015608205 +0100 ++++ libada/Makefile.in 2019-01-11 18:16:23.441726931 +0100 +@@ -71,18 +71,40 @@ version := $(shell @get_gcc_base_ver@ $( + libsubdir := $(libdir)/gcc/$(target_noncanonical)/$(version)$(MULTISUBDIR) + ADA_RTS_DIR=$(GCC_DIR)/ada/rts$(subst /,_,$(MULTISUBDIR)) + ++DEFAULTMULTIFLAGS := ++ifeq ($(MULTISUBDIR),) ++targ:=$(subst -, ,$(target)) ++arch:=$(word 1,$(targ)) ++ifeq ($(words $(targ)),2) ++osys:=$(word 2,$(targ)) ++else ++osys:=$(word 3,$(targ)) ++endif ++ifeq ($(strip $(filter-out i%86 x86_64 powerpc% ppc% s390% sparc% linux%, $(arch) $(osys))),) ++ifeq ($(shell $(CC) $(CFLAGS) -print-multi-os-directory),../lib64) ++DEFAULTMULTIFLAGS := -m64 ++else ++ifeq ($(strip $(filter-out s390%, $(arch))),) ++DEFAULTMULTIFLAGS := -m31 ++else ++DEFAULTMULTIFLAGS := -m32 ++endif ++endif ++endif ++endif ++ + # exeext should not be used because it's the *host* exeext. We're building + # a *target* library, aren't we?!? Likewise for CC. Still, provide bogus + # definitions just in case something slips through the safety net provided + # by recursive make invocations in gcc/ada/Makefile.in + LIBADA_FLAGS_TO_PASS = \ + "MAKEOVERRIDES=" \ +- "LDFLAGS=$(LDFLAGS)" \ ++ "LDFLAGS=$(LDFLAGS) $(DEFAULTMULTIFLAGS)" \ + "LN_S=$(LN_S)" \ + "SHELL=$(SHELL)" \ +- "GNATLIBFLAGS=$(GNATLIBFLAGS) $(MULTIFLAGS)" \ +- "GNATLIBCFLAGS=$(GNATLIBCFLAGS) $(MULTIFLAGS)" \ +- "GNATLIBCFLAGS_FOR_C=$(GNATLIBCFLAGS_FOR_C) $(MULTIFLAGS)" \ ++ "GNATLIBFLAGS=$(GNATLIBFLAGS) $(MULTIFLAGS) $(DEFAULTMULTIFLAGS)" \ ++ "GNATLIBCFLAGS=$(GNATLIBCFLAGS) $(MULTIFLAGS) $(DEFAULTMULTIFLAGS)" \ ++ "GNATLIBCFLAGS_FOR_C=$(GNATLIBCFLAGS_FOR_C) $(MULTIFLAGS) $(DEFAULTMULTIFLAGS)" \ + "PICFLAG_FOR_TARGET=$(PICFLAG)" \ + "THREAD_KIND=$(THREAD_KIND)" \ + "TRACE=$(TRACE)" \ +@@ -93,7 +115,7 @@ LIBADA_FLAGS_TO_PASS = \ + "exeext=.exeext.should.not.be.used " \ + 'CC=the.host.compiler.should.not.be.needed' \ + "GCC_FOR_TARGET=$(CC)" \ +- "CFLAGS=$(CFLAGS)" ++ "CFLAGS=$(CFLAGS) $(DEFAULTMULTIFLAGS)" + + .PHONY: libada gnatlib gnatlib-shared gnatlib-sjlj gnatlib-zcx osconstool + +--- config-ml.in.jj 2019-01-09 12:50:16.646501448 +0100 ++++ config-ml.in 2019-01-11 18:16:23.442726914 +0100 +@@ -511,6 +511,8 @@ multi-do: + ADAFLAGS="$(ADAFLAGS) $${flags}" \ + prefix="$(prefix)" \ + exec_prefix="$(exec_prefix)" \ ++ mandir="$(mandir)" \ ++ infodir="$(infodir)" \ + GOCFLAGS="$(GOCFLAGS) $${flags}" \ + GDCFLAGS="$(GDCFLAGS) $${flags}" \ + CXXFLAGS="$(CXXFLAGS) $${flags}" \ +--- libcpp/macro.c.jj 2019-01-09 13:01:21.420552123 +0100 ++++ libcpp/macro.c 2019-01-11 18:18:17.736876285 +0100 +@@ -3256,8 +3256,6 @@ static cpp_macro * + create_iso_definition (cpp_reader *pfile) + { + bool following_paste_op = false; +- const char *paste_op_error_msg = +- N_("'##' cannot appear at either end of a macro expansion"); + unsigned int num_extra_tokens = 0; + unsigned nparms = 0; + cpp_hashnode **params = NULL; +@@ -3382,7 +3380,9 @@ create_iso_definition (cpp_reader *pfile + function-like macros, but not at the end. */ + if (following_paste_op) + { +- cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg); ++ cpp_error (pfile, CPP_DL_ERROR, ++ "'##' cannot appear at either end of a macro " ++ "expansion"); + goto out; + } + if (!vaopt_tracker.completed ()) +@@ -3397,7 +3397,9 @@ create_iso_definition (cpp_reader *pfile + function-like macros, but not at the beginning. */ + if (macro->count == 1) + { +- cpp_error (pfile, CPP_DL_ERROR, paste_op_error_msg); ++ cpp_error (pfile, CPP_DL_ERROR, ++ "'##' cannot appear at either end of a macro " ++ "expansion"); + goto out; + } + +--- libcpp/expr.c.jj 2019-01-09 13:01:22.415535734 +0100 ++++ libcpp/expr.c 2019-01-11 18:16:23.444726882 +0100 +@@ -788,16 +788,17 @@ cpp_classify_number (cpp_reader *pfile, + if ((result & CPP_N_WIDTH) == CPP_N_LARGE + && CPP_OPTION (pfile, cpp_warn_long_long)) + { +- const char *message = CPP_OPTION (pfile, cplusplus) +- ? N_("use of C++11 long long integer constant") +- : N_("use of C99 long long integer constant"); +- + if (CPP_OPTION (pfile, c99)) + cpp_warning_with_line (pfile, CPP_W_LONG_LONG, virtual_location, +- 0, message); ++ 0, CPP_OPTION (pfile, cplusplus) ++ ? N_("use of C++11 long long integer constant") ++ : N_("use of C99 long long integer constant")); + else + cpp_pedwarning_with_line (pfile, CPP_W_LONG_LONG, +- virtual_location, 0, message); ++ virtual_location, 0, ++ CPP_OPTION (pfile, cplusplus) ++ ? N_("use of C++11 long long integer constant") ++ : N_("use of C99 long long integer constant")); + } + + result |= CPP_N_INTEGER; diff --git a/SOURCES/gcc10-i386-libgomp.patch b/SOURCES/gcc10-i386-libgomp.patch new file mode 100644 index 0000000..520561e --- /dev/null +++ b/SOURCES/gcc10-i386-libgomp.patch @@ -0,0 +1,11 @@ +--- libgomp/configure.tgt.jj 2008-01-10 20:53:48.000000000 +0100 ++++ libgomp/configure.tgt 2008-03-27 12:44:51.000000000 +0100 +@@ -67,7 +67,7 @@ if test $enable_linux_futex = yes; then + ;; + *) + if test -z "$with_arch"; then +- XCFLAGS="${XCFLAGS} -march=i486 -mtune=${target_cpu}" ++ XCFLAGS="${XCFLAGS} -march=i486 -mtune=generic" + fi + esac + ;; diff --git a/SOURCES/gcc10-libgomp-omp_h-multilib.patch b/SOURCES/gcc10-libgomp-omp_h-multilib.patch new file mode 100644 index 0000000..d0e98d1 --- /dev/null +++ b/SOURCES/gcc10-libgomp-omp_h-multilib.patch @@ -0,0 +1,17 @@ +2008-06-09 Jakub Jelinek + + * omp.h.in (omp_nest_lock_t): Fix up for Linux multilibs. + +--- libgomp/omp.h.in.jj 2008-06-09 13:34:05.000000000 +0200 ++++ libgomp/omp.h.in 2008-06-09 13:34:48.000000000 +0200 +@@ -42,8 +42,8 @@ typedef struct + + typedef struct + { +- unsigned char _x[@OMP_NEST_LOCK_SIZE@] +- __attribute__((__aligned__(@OMP_NEST_LOCK_ALIGN@))); ++ unsigned char _x[8 + sizeof (void *)] ++ __attribute__((__aligned__(sizeof (void *)))); + } omp_nest_lock_t; + #endif + diff --git a/SOURCES/gcc10-libtool-no-rpath.patch b/SOURCES/gcc10-libtool-no-rpath.patch new file mode 100644 index 0000000..466c661 --- /dev/null +++ b/SOURCES/gcc10-libtool-no-rpath.patch @@ -0,0 +1,27 @@ +libtool sucks. +--- ltmain.sh.jj 2007-12-07 14:53:21.000000000 +0100 ++++ ltmain.sh 2008-09-05 21:51:48.000000000 +0200 +@@ -5394,6 +5394,7 @@ EOF + rpath="$finalize_rpath" + test "$mode" != relink && rpath="$compile_rpath$rpath" + for libdir in $rpath; do ++ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64) continue;; esac + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then +@@ -6071,6 +6072,7 @@ EOF + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do ++ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64) continue;; esac + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then +@@ -6120,6 +6122,7 @@ EOF + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do ++ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64) continue;; esac + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then diff --git a/SOURCES/gcc10-no-add-needed.patch b/SOURCES/gcc10-no-add-needed.patch new file mode 100644 index 0000000..5817299 --- /dev/null +++ b/SOURCES/gcc10-no-add-needed.patch @@ -0,0 +1,37 @@ +2010-02-08 Roland McGrath + + * config/gnu-user.h (LINK_EH_SPEC): Pass --no-add-needed to the linker. + * config/alpha/elf.h (LINK_EH_SPEC): Likewise. + * config/ia64/linux.h (LINK_EH_SPEC): Likewise. + +--- gcc/config/alpha/elf.h.jj 2011-01-03 12:52:31.118056764 +0100 ++++ gcc/config/alpha/elf.h 2011-01-04 18:14:10.931874160 +0100 +@@ -168,5 +168,5 @@ extern int alpha_this_gpdisp_sequence_nu + I imagine that other systems will catch up. In the meantime, it + doesn't harm to make sure that the data exists to be used later. */ + #if defined(HAVE_LD_EH_FRAME_HDR) +-#define LINK_EH_SPEC "%{!static|static-pie:--eh-frame-hdr} " ++#define LINK_EH_SPEC "--no-add-needed %{!static|static-pie:--eh-frame-hdr} " + #endif +--- gcc/config/ia64/linux.h.jj 2011-01-03 13:02:11.462994522 +0100 ++++ gcc/config/ia64/linux.h 2011-01-04 18:14:10.931874160 +0100 +@@ -76,7 +76,7 @@ do { \ + Signalize that because we have fde-glibc, we don't need all C shared libs + linked against -lgcc_s. */ + #undef LINK_EH_SPEC +-#define LINK_EH_SPEC "" ++#define LINK_EH_SPEC "--no-add-needed " + + #undef TARGET_INIT_LIBFUNCS + #define TARGET_INIT_LIBFUNCS ia64_soft_fp_init_libfuncs +--- gcc/config/gnu-user.h.jj 2011-01-03 12:53:03.739057299 +0100 ++++ gcc/config/gnu-user.h 2011-01-04 18:14:10.932814884 +0100 +@@ -106,7 +106,7 @@ see the files COPYING3 and COPYING.RUNTI + #define LIB_SPEC GNU_USER_TARGET_LIB_SPEC + + #if defined(HAVE_LD_EH_FRAME_HDR) +-#define LINK_EH_SPEC "%{!static|static-pie:--eh-frame-hdr} " ++#define LINK_EH_SPEC "--no-add-needed %{!static|static-pie:--eh-frame-hdr} " + #endif + + #define GNU_USER_TARGET_LINK_GCC_C_SEQUENCE_SPEC \ diff --git a/SOURCES/gcc10-pr94540.patch b/SOURCES/gcc10-pr94540.patch new file mode 100644 index 0000000..346a00f --- /dev/null +++ b/SOURCES/gcc10-pr94540.patch @@ -0,0 +1,324 @@ +commit 632183ddcc8f3aead8b4fc63c4ab59a42ef9ad00 +Author: Jonathan Wakely +Date: Wed Jun 17 22:49:06 2020 +0100 + + libstdc++: Avoid stack overflow in std::vector (PR 94540) + + The std::__uninitialized_default_n algorithm used by std::vector creates + an initial object as a local variable then copies that into the + destination range. If the object is too large for the stack this + crashes. We should create the first object directly into the + destination and then copy it from there. + + This doesn't fix the bug for C++98, because in that case the initial + value is created as a default argument of the vector constructor i.e. in + the user's code, not inside libstdc++. We can't prevent that. + + PR libstdc++/94540 + * include/bits/stl_uninitialized.h (__uninitialized_default_1): + Construct the first value at *__first instead of on the stack. + (__uninitialized_default_n_1): Likewise. + Improve comments on several of the non-standard algorithms. + * testsuite/20_util/specialized_algorithms/uninitialized_default/94540.cc: + New test. + * testsuite/20_util/specialized_algorithms/uninitialized_default_n/94540.cc: + New test. + * testsuite/20_util/specialized_algorithms/uninitialized_value_construct/94540.cc: + New test. + * testsuite/20_util/specialized_algorithms/uninitialized_value_construct_n/94540.cc: + New test. + * testsuite/23_containers/vector/cons/94540.cc: New test. + +--- libstdc++-v3/include/bits/stl_uninitialized.h ++++ libstdc++-v3/include/bits/stl_uninitialized.h +@@ -556,7 +556,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION + typedef typename iterator_traits<_ForwardIterator>::value_type + _ValueType; + +- std::fill(__first, __last, _ValueType()); ++ if (__first == __last) ++ return; ++ ++ typename iterator_traits<_ForwardIterator>::value_type* __val ++ = std::__addressof(*__first); ++ std::_Construct(__val); ++ if (++__first != __last) ++ std::fill(__first, __last, *__val); + } + }; + +@@ -589,16 +596,20 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION + static _ForwardIterator + __uninit_default_n(_ForwardIterator __first, _Size __n) + { +- typedef typename iterator_traits<_ForwardIterator>::value_type +- _ValueType; +- +- return std::fill_n(__first, __n, _ValueType()); ++ if (__n > 0) ++ { ++ typename iterator_traits<_ForwardIterator>::value_type* __val ++ = std::__addressof(*__first); ++ std::_Construct(__val); ++ ++__first; ++ __first = std::fill_n(__first, __n - 1, *__val); ++ } ++ return __first; + } + }; + + // __uninitialized_default +- // Fills [first, last) with std::distance(first, last) default +- // constructed value_types(s). ++ // Fills [first, last) with value-initialized value_types. + template + inline void + __uninitialized_default(_ForwardIterator __first, +@@ -615,7 +626,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION + } + + // __uninitialized_default_n +- // Fills [first, first + n) with n default constructed value_type(s). ++ // Fills [first, first + n) with value-initialized value_types. + template + inline _ForwardIterator + __uninitialized_default_n(_ForwardIterator __first, _Size __n) +@@ -633,8 +644,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION + + + // __uninitialized_default_a +- // Fills [first, last) with std::distance(first, last) default +- // constructed value_types(s), constructed with the allocator alloc. ++ // Fills [first, last) with value_types constructed by the allocator ++ // alloc, with no arguments passed to the construct call. + template + void + __uninitialized_default_a(_ForwardIterator __first, +@@ -664,8 +675,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION + + + // __uninitialized_default_n_a +- // Fills [first, first + n) with n default constructed value_types(s), +- // constructed with the allocator alloc. ++ // Fills [first, first + n) with value_types constructed by the allocator ++ // alloc, with no arguments passed to the construct call. + template + _ForwardIterator + __uninitialized_default_n_a(_ForwardIterator __first, _Size __n, +@@ -686,6 +697,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION + } + } + ++ // __uninitialized_default_n_a specialization for std::allocator, ++ // which ignores the allocator and value-initializes the elements. + template + inline _ForwardIterator + __uninitialized_default_n_a(_ForwardIterator __first, _Size __n, +@@ -757,8 +770,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION + }; + + // __uninitialized_default_novalue +- // Fills [first, last) with std::distance(first, last) default-initialized +- // value_types(s). ++ // Fills [first, last) with default-initialized value_types. + template + inline void + __uninitialized_default_novalue(_ForwardIterator __first, +@@ -772,8 +784,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION + __uninit_default_novalue(__first, __last); + } + +- // __uninitialized_default_n +- // Fills [first, first + n) with n default-initialized value_type(s). ++ // __uninitialized_default_novalue_n ++ // Fills [first, first + n) with default-initialized value_types. + template + inline _ForwardIterator + __uninitialized_default_novalue_n(_ForwardIterator __first, _Size __n) +--- /dev/null ++++ libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_default/94540.cc +@@ -0,0 +1,34 @@ ++// Copyright (C) 2020 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 ++// . ++ ++// { dg-do run { target { c++11 && { ! simulator } } } } ++ ++#include ++#include ++ ++// Assume that 9MB is larger than the stack limit. ++struct X { char data[9*1024*1024]; }; ++ ++static_assert( std::is_trivial::value, "" ); ++ ++int main() ++{ ++ auto mem = new char[sizeof(X) * 2]; ++ auto p = reinterpret_cast(mem); ++ std::__uninitialized_default(p, p + 2); ++ delete[] mem; ++} +--- /dev/null ++++ libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_default_n/94540.cc +@@ -0,0 +1,34 @@ ++// Copyright (C) 2020 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 ++// . ++ ++// { dg-do run { target { c++11 && { ! simulator } } } } ++ ++#include ++#include ++ ++// Assume that 9MB is larger than the stack limit. ++struct X { char data[9*1024*1024]; }; ++ ++static_assert( std::is_trivial::value, "" ); ++ ++int main() ++{ ++ auto mem = new char[sizeof(X) * 2]; ++ auto p = reinterpret_cast(mem); ++ std::__uninitialized_default_n(p, 2); ++ delete[] mem; ++} +--- /dev/null ++++ libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_value_construct/94540.cc +@@ -0,0 +1,35 @@ ++// Copyright (C) 2020 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 ++// . ++ ++// { dg-options "-std=gnu++17" } ++// { dg-do run { target { c++17 && { ! simulator } } } } ++ ++#include ++#include ++ ++// Assume that 9MB is larger than the stack limit. ++struct X { char data[9*1024*1024]; }; ++ ++static_assert( std::is_trivial_v ); ++ ++int main() ++{ ++ auto mem = new char[sizeof(X) * 2]; ++ auto p = reinterpret_cast(mem); ++ std::uninitialized_value_construct(p, p + 2); ++ delete[] mem; ++} +--- /dev/null ++++ libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_value_construct_n/94540.cc +@@ -0,0 +1,34 @@ ++// Copyright (C) 2020 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 ++// . ++ ++// { dg-options "-std=gnu++17" } ++// { dg-do run { target { c++17 && { ! simulator } } } } ++ ++#include ++#include ++ ++// Assume that 9MB is larger than the stack limit. ++struct X { char data[9*1024*1024]; }; ++ ++static_assert( std::is_trivial_v ); ++ ++int main() ++{ ++ auto mem = new char[sizeof(X) * 2]; ++ std::uninitialized_value_construct_n(reinterpret_cast(mem), 2); ++ delete[] mem; ++} +--- /dev/null ++++ libstdc++-v3/testsuite/23_containers/vector/cons/94540.cc +@@ -0,0 +1,35 @@ ++// Copyright (C) 2020 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 ++// . ++ ++// { dg-do run { target { c++11 && { ! simulator } } } } ++ ++#include ++#include ++ ++// Assume that 9MB is larger than the stack limit. ++struct X { char data[9*1024*1024]; }; ++ ++static_assert( std::is_trivial::value, "" ); ++ ++int main() ++{ ++ std::vector v(1); ++ VERIFY( v.size() == 1 ); ++ v.clear(); ++ v.resize(2); ++ VERIFY( v.size() == 2 ); ++} diff --git a/SOURCES/gcc10-pr96383.patch b/SOURCES/gcc10-pr96383.patch new file mode 100644 index 0000000..950a2f4 --- /dev/null +++ b/SOURCES/gcc10-pr96383.patch @@ -0,0 +1,236 @@ +2020-07-30 Richard Biener + + PR debug/96383 + * langhooks-def.h (lhd_finalize_early_debug): Declare. + (LANG_HOOKS_FINALIZE_EARLY_DEBUG): Define. + (LANG_HOOKS_INITIALIZER): Amend. + * langhooks.c: Include cgraph.h and debug.h. + (lhd_finalize_early_debug): Default implementation from + former code in finalize_compilation_unit. + * langhooks.h (lang_hooks::finalize_early_debug): Add. + * cgraphunit.c (symbol_table::finalize_compilation_unit): + Call the finalize_early_debug langhook. + +gcc/c-family/ + * c-common.h (c_common_finalize_early_debug): Declare. + * c-common.c: Include debug.h. + (c_common_finalize_early_debug): finalize_early_debug langhook + implementation generating debug for extern declarations. + +gcc/c/ + * c-objc-common.h (LANG_HOOKS_FINALIZE_EARLY_DEBUG): + Define to c_common_finalize_early_debug. + +gcc/cp/ + * cp-objcp-common.h (LANG_HOOKS_FINALIZE_EARLY_DEBUG): + Define to c_common_finalize_early_debug. + +gcc/testsuite/ + * gcc.dg/debug/dwarf2/pr96383-1.c: New testcase. + * gcc.dg/debug/dwarf2/pr96383-2.c: Likewise. + +libstdc++-v3/ + * testsuite/20_util/assume_aligned/3.cc: Use -g0. + +--- gcc/c-family/c-common.c ++++ gcc/c-family/c-common.c +@@ -50,6 +50,7 @@ along with GCC; see the file COPYING3. If not see + #include "spellcheck.h" + #include "c-spellcheck.h" + #include "selftest.h" ++#include "debug.h" + + cpp_reader *parse_in; /* Declared in c-pragma.h. */ + +@@ -9086,4 +9087,20 @@ braced_lists_to_strings (tree type, tree ctor) + return braced_lists_to_strings (type, ctor, false); + } + ++ ++/* Emit debug for functions before finalizing early debug. */ ++ ++void ++c_common_finalize_early_debug (void) ++{ ++ /* Emit early debug for reachable functions, and by consequence, ++ locally scoped symbols. Also emit debug for extern declared ++ functions that are still reachable at this point. */ ++ struct cgraph_node *cnode; ++ FOR_EACH_FUNCTION (cnode) ++ if (!cnode->alias && !cnode->thunk.thunk_p ++ && (cnode->has_gimple_body_p () || !DECL_IS_BUILTIN (cnode->decl))) ++ (*debug_hooks->early_global_decl) (cnode->decl); ++} ++ + #include "gt-c-family-c-common.h" +--- gcc/c-family/c-common.h ++++ gcc/c-family/c-common.h +@@ -885,6 +885,8 @@ extern bool bool_promoted_to_int_p (tree); + extern tree fold_for_warn (tree); + extern tree c_common_get_narrower (tree, int *); + extern bool get_attribute_operand (tree, unsigned HOST_WIDE_INT *); ++extern void c_common_finalize_early_debug (void); ++ + + #define c_sizeof(LOC, T) c_sizeof_or_alignof_type (LOC, T, true, false, 1) + #define c_alignof(LOC, T) c_sizeof_or_alignof_type (LOC, T, false, false, 1) +--- gcc/c/c-objc-common.h ++++ gcc/c/c-objc-common.h +@@ -65,6 +65,8 @@ along with GCC; see the file COPYING3. If not see + c_simulate_builtin_function_decl + #undef LANG_HOOKS_EMITS_BEGIN_STMT + #define LANG_HOOKS_EMITS_BEGIN_STMT true ++#undef LANG_HOOKS_FINALIZE_EARLY_DEBUG ++#define LANG_HOOKS_FINALIZE_EARLY_DEBUG c_common_finalize_early_debug + + /* Attribute hooks. */ + #undef LANG_HOOKS_COMMON_ATTRIBUTE_TABLE +--- gcc/cgraphunit.c ++++ gcc/cgraphunit.c +@@ -2998,11 +2998,9 @@ symbol_table::finalize_compilation_unit (void) + + if (!seen_error ()) + { +- /* Emit early debug for reachable functions, and by consequence, +- locally scoped symbols. */ +- struct cgraph_node *cnode; +- FOR_EACH_FUNCTION_WITH_GIMPLE_BODY (cnode) +- (*debug_hooks->early_global_decl) (cnode->decl); ++ /* Give the frontends the chance to emit early debug based on ++ what is still reachable in the TU. */ ++ (*lang_hooks.finalize_early_debug) (); + + /* Clean up anything that needs cleaning up after initial debug + generation. */ +--- gcc/cp/cp-objcp-common.h ++++ gcc/cp/cp-objcp-common.h +@@ -115,6 +115,8 @@ extern tree cxx_simulate_enum_decl (location_t, const char *, + #define LANG_HOOKS_BLOCK_MAY_FALLTHRU cxx_block_may_fallthru + #undef LANG_HOOKS_EMITS_BEGIN_STMT + #define LANG_HOOKS_EMITS_BEGIN_STMT true ++#undef LANG_HOOKS_FINALIZE_EARLY_DEBUG ++#define LANG_HOOKS_FINALIZE_EARLY_DEBUG c_common_finalize_early_debug + + /* Attribute hooks. */ + #undef LANG_HOOKS_COMMON_ATTRIBUTE_TABLE +--- gcc/langhooks-def.h ++++ gcc/langhooks-def.h +@@ -92,6 +92,7 @@ extern const char *lhd_get_substring_location (const substring_loc &, + location_t *out_loc); + extern int lhd_decl_dwarf_attribute (const_tree, int); + extern int lhd_type_dwarf_attribute (const_tree, int); ++extern void lhd_finalize_early_debug (void); + + #define LANG_HOOKS_NAME "GNU unknown" + #define LANG_HOOKS_IDENTIFIER_SIZE sizeof (struct lang_identifier) +@@ -139,6 +140,7 @@ extern int lhd_type_dwarf_attribute (const_tree, int); + #define LANG_HOOKS_EMITS_BEGIN_STMT false + #define LANG_HOOKS_RUN_LANG_SELFTESTS lhd_do_nothing + #define LANG_HOOKS_GET_SUBSTRING_LOCATION lhd_get_substring_location ++#define LANG_HOOKS_FINALIZE_EARLY_DEBUG lhd_finalize_early_debug + + /* Attribute hooks. */ + #define LANG_HOOKS_ATTRIBUTE_TABLE NULL +@@ -364,7 +366,8 @@ extern void lhd_end_section (void); + LANG_HOOKS_CUSTOM_FUNCTION_DESCRIPTORS, \ + LANG_HOOKS_EMITS_BEGIN_STMT, \ + LANG_HOOKS_RUN_LANG_SELFTESTS, \ +- LANG_HOOKS_GET_SUBSTRING_LOCATION \ ++ LANG_HOOKS_GET_SUBSTRING_LOCATION, \ ++ LANG_HOOKS_FINALIZE_EARLY_DEBUG \ + } + + #endif /* GCC_LANG_HOOKS_DEF_H */ +--- gcc/langhooks.c ++++ gcc/langhooks.c +@@ -36,6 +36,8 @@ along with GCC; see the file COPYING3. If not see + #include "output.h" + #include "timevar.h" + #include "stor-layout.h" ++#include "cgraph.h" ++#include "debug.h" + + /* Do nothing; in many cases the default hook. */ + +@@ -866,6 +868,18 @@ lhd_unit_size_without_reusable_padding (tree t) + return TYPE_SIZE_UNIT (t); + } + ++/* Default implementation for the finalize_early_debug hook. */ ++ ++void ++lhd_finalize_early_debug (void) ++{ ++ /* Emit early debug for reachable functions, and by consequence, ++ locally scoped symbols. */ ++ struct cgraph_node *cnode; ++ FOR_EACH_FUNCTION_WITH_GIMPLE_BODY (cnode) ++ (*debug_hooks->early_global_decl) (cnode->decl); ++} ++ + /* Returns true if the current lang_hooks represents the GNU C frontend. */ + + bool +--- gcc/langhooks.h ++++ gcc/langhooks.h +@@ -580,6 +580,9 @@ struct lang_hooks + const char *(*get_substring_location) (const substring_loc &, + location_t *out_loc); + ++ /* Invoked before the early_finish debug hook is invoked. */ ++ void (*finalize_early_debug) (void); ++ + /* Whenever you add entries here, make sure you adjust langhooks-def.h + and langhooks.c accordingly. */ + }; +--- gcc/testsuite/gcc.dg/debug/dwarf2/pr96383-1.c ++++ gcc/testsuite/gcc.dg/debug/dwarf2/pr96383-1.c +@@ -0,0 +1,17 @@ ++/* { dg-do compile } */ ++/* { dg-options "-g -gdwarf -dA" } */ ++ ++extern void foo (int); ++extern void unusedbar (int); ++ ++int main() ++{ ++ foo (1); ++} ++ ++/* We want subprogram DIEs for both foo and main and a DIE for ++ the formal parameter of foo. We do not want a DIE for ++ unusedbar. */ ++/* { dg-final { scan-assembler-times "DW_TAG_subprogram" 4 } } */ ++/* { dg-final { scan-assembler-times "DW_TAG_formal_parameter" 2 } } */ ++/* { dg-final { scan-assembler-not "unusedbar" } } */ +--- gcc/testsuite/gcc.dg/debug/dwarf2/pr96383-2.c ++++ gcc/testsuite/gcc.dg/debug/dwarf2/pr96383-2.c +@@ -0,0 +1,17 @@ ++/* { dg-do compile } */ ++/* { dg-options "-g -O2 -gdwarf -dA" } */ ++ ++extern void foo (int); ++extern void unusedbar (int); ++ ++int main() ++{ ++ foo (1); ++} ++ ++/* We want subprogram DIEs for both foo and main and a DIE for ++ the formal parameter of foo. We do not want a DIE for ++ unusedbar. */ ++/* { dg-final { scan-assembler-times "DW_TAG_subprogram" 4 } } */ ++/* { dg-final { scan-assembler-times "DW_TAG_formal_parameter" 2 } } */ ++/* { dg-final { scan-assembler-not "unusedbar" } } */ +--- libstdc++-v3/testsuite/20_util/assume_aligned/3.cc ++++ libstdc++-v3/testsuite/20_util/assume_aligned/3.cc +@@ -15,7 +15,7 @@ + // with this library; see the file COPYING3. If not see + // . + +-// { dg-options "-std=gnu++2a -O2" } ++// { dg-options "-std=gnu++2a -O2 -g0" } + // { dg-do compile { target c++2a } } + // { dg-final { scan-assembler-not "undefined" } } + diff --git a/SOURCES/gcc10-pr97524.patch b/SOURCES/gcc10-pr97524.patch new file mode 100644 index 0000000..7321899 --- /dev/null +++ b/SOURCES/gcc10-pr97524.patch @@ -0,0 +1,53 @@ +commit 6fade5a6044b7102758f4ca66c8715ebc12a6306 +Author: Martin Liska +Date: Thu Oct 22 14:07:29 2020 +0200 + + LTO: check that make command works + + gcc/ChangeLog: + + PR lto/97524 + * lto-wrapper.c (make_exists): New function. + (run_gcc): Use it to check that make is present and working + for parallel execution. + +--- gcc/lto-wrapper.c ++++ gcc/lto-wrapper.c +@@ -1321,6 +1321,26 @@ jobserver_active_p (void) + && is_valid_fd (wfd)); + } + ++/* Test that a make command is present and working, return true if so. */ ++ ++static bool ++make_exists (void) ++{ ++ const char *make = "make"; ++ char **make_argv = buildargv (getenv ("MAKE")); ++ if (make_argv) ++ make = make_argv[0]; ++ const char *make_args[] = {make, "--version", NULL}; ++ ++ int exit_status = 0; ++ int err = 0; ++ const char *errmsg ++ = pex_one (PEX_SEARCH, make_args[0], CONST_CAST (char **, make_args), ++ "make", NULL, NULL, &exit_status, &err); ++ freeargv (make_argv); ++ return errmsg == NULL && exit_status == 0 && err == 0; ++} ++ + /* Execute gcc. ARGC is the number of arguments. ARGV contains the arguments. */ + + static void +@@ -1541,6 +1561,10 @@ run_gcc (unsigned argc, char *argv[]) + jobserver = 1; + } + ++ /* We need make working for a parallel execution. */ ++ if (parallel && !make_exists ()) ++ parallel = 0; ++ + if (linker_output) + { + char *output_dir, *base, *name; diff --git a/SOURCES/gcc10-rh1574936.patch b/SOURCES/gcc10-rh1574936.patch new file mode 100644 index 0000000..bc1df51 --- /dev/null +++ b/SOURCES/gcc10-rh1574936.patch @@ -0,0 +1,31 @@ +crt files and statically linked libgcc objects cause false positives +in annobin coverage, so we add the assembler flag to generate notes +for them. + +The patch also adds notes to libgcc_s.so, but this is harmless because +these notes only confer that there is no other annobin markup. + +2018-07-25 Florian Weimer + + * Makefile.in (LIBGCC2_CFLAGS, CRTSTUFF_CFLAGS): Add + -Wa,--generate-missing-build-notes=yes. + +--- libgcc/Makefile.in 2018-01-13 13:05:41.000000000 +0100 ++++ libgcc/Makefile.in 2018-07-25 13:15:02.036226940 +0200 +@@ -247,6 +247,7 @@ + LIBGCC2_CFLAGS = -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) $(HOST_LIBGCC2_CFLAGS) \ + $(LIBGCC2_DEBUG_CFLAGS) -DIN_LIBGCC2 \ + -fbuilding-libgcc -fno-stack-protector \ ++ -Wa,--generate-missing-build-notes=yes \ + $(INHIBIT_LIBC_CFLAGS) + + # Additional options to use when compiling libgcc2.a. +@@ -302,6 +303,7 @@ + $(NO_PIE_CFLAGS) -finhibit-size-directive -fno-inline -fno-exceptions \ + -fno-zero-initialized-in-bss -fno-toplevel-reorder -fno-tree-vectorize \ + -fbuilding-libgcc -fno-stack-protector $(FORCE_EXPLICIT_EH_REGISTRY) \ ++ -Wa,--generate-missing-build-notes=yes \ + $(INHIBIT_LIBC_CFLAGS) $(USE_TM_CLONE_REGISTRY) + + # Extra flags to use when compiling crt{begin,end}.o. + diff --git a/SOURCES/gcc10-sparc-config-detection.patch b/SOURCES/gcc10-sparc-config-detection.patch new file mode 100644 index 0000000..bb06b35 --- /dev/null +++ b/SOURCES/gcc10-sparc-config-detection.patch @@ -0,0 +1,40 @@ +--- gcc/config.gcc.jj 2008-04-24 15:42:46.000000000 -0500 ++++ gcc/config.gcc 2008-04-24 15:44:51.000000000 -0500 +@@ -2790,7 +2790,7 @@ sparc-*-rtems*) + tm_file="${tm_file} dbxelf.h elfos.h sparc/sysv4.h sparc/sp-elf.h sparc/rtemself.h rtems.h newlib-stdint.h" + tmake_file="${tmake_file} sparc/t-sparc sparc/t-rtems" + ;; +-sparc-*-linux*) ++sparc-*-linux* | sparcv9-*-linux*) + tm_file="${tm_file} dbxelf.h elfos.h sparc/sysv4.h gnu-user.h linux.h glibc-stdint.h sparc/tso.h" + extra_options="${extra_options} sparc/long-double-switch.opt" + case ${target} in +@@ -2844,7 +2844,7 @@ sparc64-*-rtems*) + extra_options="${extra_options}" + tmake_file="${tmake_file} sparc/t-sparc sparc/t-rtems-64" + ;; +-sparc64-*-linux*) ++sparc64*-*-linux*) + tm_file="sparc/biarch64.h ${tm_file} dbxelf.h elfos.h sparc/sysv4.h gnu-user.h linux.h glibc-stdint.h sparc/default64.h sparc/linux64.h sparc/tso.h" + extra_options="${extra_options} sparc/long-double-switch.opt" + tmake_file="${tmake_file} sparc/t-sparc sparc/t-linux64" +--- libgcc/config.host.jj 2008-04-24 15:46:19.000000000 -0500 ++++ libgcc/config.host 2008-04-24 15:46:49.000000000 -0500 +@@ -1002,7 +1002,7 @@ sparc-*-elf*) + tmake_file="${tmake_file} t-fdpbit t-crtfm" + extra_parts="$extra_parts crti.o crtn.o crtfastmath.o" + ;; +-sparc-*-linux*) # SPARC's running GNU/Linux, libc6 ++sparc-*-linux* | sparcv9-*-linux*) # SPARC's running GNU/Linux, libc6 + tmake_file="${tmake_file} t-crtfm" + if test "${host_address}" = 64; then + tmake_file="$tmake_file sparc/t-linux64" +@@ -1050,7 +1050,7 @@ sparc64-*-freebsd*|ultrasparc-*-freebsd* + tmake_file="$tmake_file t-crtfm" + extra_parts="$extra_parts crtfastmath.o" + ;; +-sparc64-*-linux*) # 64-bit SPARC's running GNU/Linux ++sparc64*-*-linux*) # 64-bit SPARC's running GNU/Linux + extra_parts="$extra_parts crtfastmath.o" + tmake_file="${tmake_file} t-crtfm sparc/t-linux" + if test "${host_address}" = 64; then diff --git a/SPECS/compat-sap-c++-10.spec b/SPECS/compat-sap-c++-10.spec new file mode 100644 index 0000000..974b165 --- /dev/null +++ b/SPECS/compat-sap-c++-10.spec @@ -0,0 +1,425 @@ +%global __python /usr/bin/python3 +%global scl 1 +%global scl_prefix compat-sap- +%global _root_prefix /opt/rh/SAP +%global _root_infodir %{_root_prefix}/%{_infodir} +%global _root_mandir %{_root_prefix}/%{_mandir} +%{?scl:%global __strip strip} +%{?scl:%global __objdump objdump} +%global DATE 20210130 +%global gitrev 966e4575ccd8b618811b4871e44c31bb2d11a82a +%global gcc_version 10.2.1 +%global gcc_major 10 +# 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 11 +%global _unpackaged_files_terminate_build 0 +%undefine _annotated_build +%global multilib_64_archs sparc64 ppc64 s390x x86_64 +%ifarch %{ix86} x86_64 ppc ppc64 ppc64le ppc64p7 s390 s390x %{arm} aarch64 +%global attr_ifunc 1 +%else +%global attr_ifunc 0 +%endif +%ifarch x86_64 +%global multilib_32_arch i686 +%endif +Summary: C++ compatibility runtime library for SAP applications +Name: %{?scl_prefix}c++-10 +ExclusiveArch: x86_64 ppc64le +Version: %{gcc_version} +Release: %{gcc_release}%{?dist} +# libgcc, libgfortran, libgomp, libstdc++ and crtstuff have +# GCC Runtime Exception. +License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions and LGPLv2+ and BSD +# The source for this package was pulled from upstream's vcs. Use the +# following commands to generate the tarball: +# git clone --depth 1 git://gcc.gnu.org/git/gcc.git gcc-dir.tmp +# git --git-dir=gcc-dir.tmp/.git fetch --depth 1 origin %%{gitrev} +# git --git-dir=gcc-dir.tmp/.git archive --prefix=%%{name}-%%{version}-%%{DATE}/ %%{gitrev} | xz -9e > %%{name}-%%{version}-%%{DATE}.tar.xz +# rm -rf gcc-dir.tmp +Source0: gcc-%{version}-%{DATE}.tar.xz +URL: http://gcc.gnu.org +# Need binutils with -pie support >= 2.14.90.0.4-4 +# Need binutils which can omit dot symbols and overlap .opd on ppc64 >= 2.15.91.0.2-4 +# Need binutils which handle -msecure-plt on ppc >= 2.16.91.0.2-2 +# Need binutils which support .weakref >= 2.16.91.0.3-1 +# Need binutils which support --hash-style=gnu >= 2.17.50.0.2-7 +# Need binutils which support mffgpr and mftgpr >= 2.17.50.0.2-8 +# Need binutils which support --build-id >= 2.17.50.0.17-3 +# Need binutils which support %%gnu_unique_object >= 2.19.51.0.14 +# Need binutils which support .cfi_sections >= 2.19.51.0.14-33 +# Need binutils which support --no-add-needed >= 2.20.51.0.2-12 +# Need binutils which support -plugin +# Need binutils which support .loc view >= 2.30 +# Need binutils which support --generate-missing-build-notes=yes >= 2.31 +BuildRequires: binutils >= 2.19.51.0.14-33 +# While gcc doesn't include statically linked binaries, during testing +# -static is used several times. +BuildRequires: glibc-static +BuildRequires: gcc, gcc-c++, make +BuildRequires: zlib-devel, gettext, dejagnu, bison, flex, texinfo, sharutils, gcc-gfortran +BuildRequires: /usr/bin/pod2man +# For VTA guality testing +BuildRequires: gdb +# Make sure pthread.h doesn't contain __thread tokens +# Make sure glibc supports stack protector +# Make sure glibc supports DT_GNU_HASH +BuildRequires: glibc-devel >= 2.4.90-13 +BuildRequires: elfutils-devel >= 0.147 +BuildRequires: elfutils-libelf-devel >= 0.147 +%if 0%{?rhel} >= 8 +BuildRequires: libzstd-devel +%endif +%ifarch ppc ppc64 ppc64le ppc64p7 s390 s390x sparc sparcv9 alpha +# Make sure glibc supports TFmode long double +BuildRequires: glibc >= 2.3.90-35 +%endif +%ifarch %{multilib_64_archs} sparcv9 ppc +# Ensure glibc{,-devel} is installed for both multilib arches +BuildRequires: /lib/libc.so.6 /usr/lib/libc.so /lib64/libc.so.6 /usr/lib64/libc.so +%endif +%ifarch ia64 +BuildRequires: libunwind >= 0.98 +%endif +# Need .eh_frame ld optimizations +# Need proper visibility support +# Need -pie support +# Need --as-needed/--no-as-needed support +# On ppc64, need omit dot symbols support and --non-overlapping-opd +# Need binutils that owns /usr/bin/c++filt +# Need binutils that support .weakref +# Need binutils that supports --hash-style=gnu +# Need binutils that support mffgpr/mftgpr +# Need binutils that support --build-id +# Need binutils that support %%gnu_unique_object +# Need binutils that support .cfi_sections +# Need binutils that support --no-add-needed +# Need binutils that support -plugin +# Need binutils that support .loc view >= 2.30 +# Need binutils which support --generate-missing-build-notes=yes >= 2.31 +# Don't require this for compat-sap-c++ (#1491573). +#Requires: binutils >= 2.19.51.0.14-33 +# Make sure gdb will understand DW_FORM_strp +Conflicts: gdb < 5.1-2 +# Don't require this for compat-sap-c++ (#1491573). +#Requires: glibc-devel >= 2.2.90-12 +%ifarch ppc ppc64 ppc64le ppc64p7 s390 s390x sparc sparcv9 alpha +# Make sure glibc supports TFmode long double +Requires: glibc >= 2.3.90-35 +%endif +Requires: libgcc >= 4.1.2-43 +# Keep this for now. +Requires: libgomp >= 4.4.4-13 +BuildRequires: gmp-devel >= 4.1.2-8 +BuildRequires: mpfr-devel >= 3.1.0 +%if 0%{?rhel} >= 7 +BuildRequires: libmpc-devel >= 0.8.1 +%endif +AutoReq: true +AutoProv: false +# Don't provide this for compat-sap-c++ (#1491573). +#%ifarch sparc64 ppc64 ppc64le s390x x86_64 ia64 +#Provides: liblto_plugin.so.0()(64bit) +#%else +#Provides: liblto_plugin.so.0 +#%endif +%global oformat %{nil} +%global oformat2 %{nil} +%ifarch %{ix86} +%global oformat OUTPUT_FORMAT(elf32-i386) +%endif +%ifarch x86_64 +%global oformat OUTPUT_FORMAT(elf64-x86-64) +%global oformat2 OUTPUT_FORMAT(elf32-i386) +%endif +%ifarch ppc +%global oformat OUTPUT_FORMAT(elf32-powerpc) +%global oformat2 OUTPUT_FORMAT(elf64-powerpc) +%endif +%ifarch ppc64 +%global oformat OUTPUT_FORMAT(elf64-powerpc) +%global oformat2 OUTPUT_FORMAT(elf32-powerpc) +%endif +%ifarch s390 +%global oformat OUTPUT_FORMAT(elf32-s390) +%endif +%ifarch s390x +%global oformat OUTPUT_FORMAT(elf64-s390) +%global oformat2 OUTPUT_FORMAT(elf32-s390) +%endif +%ifarch ia64 +%global oformat OUTPUT_FORMAT(elf64-ia64-little) +%endif +%ifarch ppc64le +%global oformat OUTPUT_FORMAT(elf64-powerpcle) +%endif +%ifarch aarch64 +%global oformat OUTPUT_FORMAT(elf64-littleaarch64) +%endif + +Patch0: gcc10-hack.patch +Patch1: gcc10-i386-libgomp.patch +Patch2: gcc10-sparc-config-detection.patch +Patch3: gcc10-libgomp-omp_h-multilib.patch +Patch4: gcc10-libtool-no-rpath.patch +Patch7: gcc10-no-add-needed.patch +Patch8: gcc10-foffload-default.patch +Patch9: gcc10-Wno-format-security.patch +Patch10: gcc10-rh1574936.patch +Patch11: gcc10-d-shared-libphobos.patch +Patch12: gcc10-pr94540.patch +Patch13: gcc10-pr96383.patch +Patch14: gcc10-pr97524.patch +Patch15: gcc10-SIZE_MAX.patch + +%if 0%{?rhel} > 7 +%global nonsharedver 80 +%else +%if 0%{?rhel} == 7 +%global nonsharedver 48 +%else +%global nonsharedver 44 +%endif +%endif + +%if 0%{?scl:1} +%global _gnu %{nil} +%else +%global _gnu -gnueabi +%endif +%ifarch sparcv9 +%global gcc_target_platform sparc64-%{_vendor}-%{_target_os} +%endif +%ifarch ppc ppc64p7 +%global gcc_target_platform ppc64-%{_vendor}-%{_target_os} +%endif +%ifnarch sparcv9 ppc ppc64p7 +%global gcc_target_platform %{_target_platform} +%endif + +%description +This package provides runtime compatibility libraries for use by SAP +application binaries only. + +%prep +%setup -q -n gcc-%{version}-%{DATE} +%patch0 -p0 -b .hack~ +%patch1 -p0 -b .i386-libgomp~ +%patch2 -p0 -b .sparc-config-detection~ +%patch3 -p0 -b .libgomp-omp_h-multilib~ +%patch4 -p0 -b .libtool-no-rpath~ +%patch7 -p0 -b .no-add-needed~ +%patch8 -p0 -b .foffload-default~ +%patch9 -p0 -b .Wno-format-security~ +%if 0%{?fedora} >= 29 || 0%{?rhel} > 7 +%patch10 -p0 -b .rh1574936~ +%endif +%patch11 -p0 -b .d-shared-libphobos~ +%patch12 -p0 -b .pr94540~ +%patch13 -p0 -b .pr96383~ +%patch14 -p0 -b .pr97524~ +%patch15 -p0 -b .SIZE_MAX~ + +echo 'Red Hat %{version}-%{gcc_release}' > gcc/DEV-PHASE + +cp -a libstdc++-v3/config/cpu/i{4,3}86/atomicity.h +cp -a libstdc++-v3/config/cpu/i{4,3}86/opt +echo 'TM_H += $(srcdir)/config/rs6000/rs6000-modes.h' >> gcc/config/rs6000/t-rs6000 + +./contrib/gcc_update --touch + +LC_ALL=C sed -i -e 's/\xa0/ /' gcc/doc/options.texi + +sed -i -e 's/Common Driver Var(flag_report_bug)/& Init(1)/' gcc/common.opt + +%ifarch ppc +if [ -d libstdc++-v3/config/abi/post/powerpc64-linux-gnu ]; then + mkdir -p libstdc++-v3/config/abi/post/powerpc64-linux-gnu/64 + mv libstdc++-v3/config/abi/post/powerpc64-linux-gnu/{,64/}baseline_symbols.txt + mv libstdc++-v3/config/abi/post/powerpc64-linux-gnu/{32/,}baseline_symbols.txt + rm -rf libstdc++-v3/config/abi/post/powerpc64-linux-gnu/32 +fi +%endif +%ifarch sparc +if [ -d libstdc++-v3/config/abi/post/sparc64-linux-gnu ]; then + mkdir -p libstdc++-v3/config/abi/post/sparc64-linux-gnu/64 + mv libstdc++-v3/config/abi/post/sparc64-linux-gnu/{,64/}baseline_symbols.txt + mv libstdc++-v3/config/abi/post/sparc64-linux-gnu/{32/,}baseline_symbols.txt + rm -rf libstdc++-v3/config/abi/post/sparc64-linux-gnu/32 +fi +%endif + +%build + +# Undo the broken autoconf change in recent Fedora versions +export CONFIG_SITE=NONE + +rm -rf obj-%{gcc_target_platform} +mkdir obj-%{gcc_target_platform} +cd obj-%{gcc_target_platform} + +%{?scl:PATH=%{_bindir}${PATH:+:${PATH}}} + +CC=gcc +CXX=g++ +OPT_FLAGS=`echo %{optflags}|sed -e 's/\(-Wp,\)\?-D_FORTIFY_SOURCE=[12]//g'` +OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/-flto=auto//g;s/-flto//g;s/-ffat-lto-objects//g'` +OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/-m64//g;s/-m32//g;s/-m31//g'` +OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/-mfpmath=sse/-mfpmath=sse -msse2/g'` +OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/ -pipe / /g'` +OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/-Werror=format-security/-Wformat-security/g'` +%ifarch sparc +OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/-mcpu=ultrasparc/-mtune=ultrasparc/g;s/-mcpu=v[78]//g'` +%endif +%ifarch %{ix86} +OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/-march=i.86//g'` +%endif +OPT_FLAGS=`echo "$OPT_FLAGS" | sed -e 's/[[:blank:]]\+/ /g'` +CONFIGURE_OPTS="\ + --prefix=%{_prefix} --mandir=%{_mandir} --infodir=%{_infodir} \ + --with-bugurl=http://bugzilla.redhat.com/bugzilla \ + --enable-shared --enable-threads=posix --enable-checking=release \ +%ifarch ppc64le + --enable-targets=powerpcle-linux --disable-multilib \ +%else + --enable-multilib \ +%endif + --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions \ + --enable-gnu-unique-object \ + --enable-linker-build-id --with-gcc-major-version-only \ + --enable-plugin --with-linker-hash-style=gnu \ + --enable-initfini-array \ + --disable-libquadmath \ + --disable-libsanitizer \ + --disable-libvtv \ + --disable-libgomp \ + --disable-libitm \ + --disable-libssp \ + --disable-libatomic \ + --disable-libcilkrts \ + --without-isl \ + --disable-libmpx \ +%if 0%{?fedora} >= 21 || 0%{?rhel} >= 7 +%if %{attr_ifunc} + --enable-gnu-indirect-function \ +%endif +%endif +%ifarch ppc ppc64 ppc64le ppc64p7 + --enable-secureplt \ +%endif +%ifarch ppc ppc64 ppc64p7 +%if 0%{?rhel} >= 7 + --with-cpu-32=power7 --with-tune-32=power7 --with-cpu-64=power7 --with-tune-64=power7 \ +%else + --with-cpu-32=power4 --with-tune-32=power6 --with-cpu-64=power4 --with-tune-64=power6 \ +%endif +%endif +%ifarch ppc64le + --with-cpu-32=power8 --with-tune-32=power8 --with-cpu-64=power8 --with-tune-64=power8 \ +%endif +%ifarch ppc + --build=%{gcc_target_platform} --target=%{gcc_target_platform} --with-cpu=default32 +%endif +%ifarch %{ix86} x86_64 + --with-tune=generic \ +%endif +%if 0%{?rhel} >= 7 +%ifarch %{ix86} + --with-arch=x86-64 \ +%endif +%ifarch x86_64 + --with-arch_32=x86-64 \ +%endif +%else +%ifarch %{ix86} + --with-arch=i686 \ +%endif +%ifarch x86_64 + --with-arch_32=i686 \ +%endif +%endif + --build=%{gcc_target_platform} \ + " + +CC="$CC" CXX="$CXX" CFLAGS="$OPT_FLAGS" \ + CXXFLAGS="`echo " $OPT_FLAGS " | sed 's/ -Wall / /g;s/ -fexceptions / /g' \ + | sed 's/ -Wformat-security / -Wformat -Wformat-security /'`" \ + XCFLAGS="$OPT_FLAGS" TCFLAGS="$OPT_FLAGS" \ + ../configure --enable-bootstrap \ + --enable-languages=c,c++,lto \ + $CONFIGURE_OPTS + + +make %{?_smp_mflags} BOOT_CFLAGS="$OPT_FLAGS" + +%install +rm -fr %{buildroot} + +%{?scl:PATH=%{_bindir}${PATH:+:${PATH}}} +mkdir -p %{buildroot}%{_root_prefix}/%{_lib} +cd obj-%{gcc_target_platform} +./gcc/xgcc -v 2> %{buildroot}%{_root_prefix}/%{_lib}/README%{gcc_major} + +cp %{gcc_target_platform}/libstdc++-v3/src/.libs/libstdc++.so.6.0.* %{buildroot}%{_root_prefix}/%{_lib}/compat-sap-c++-%{gcc_version}.so +cd %{buildroot}%{_root_prefix}/%{_lib}/ +ln -sf compat-sap-c++-%{gcc_version}.so %{buildroot}%{_root_prefix}/%{_lib}/compat-sap-c++-%{gcc_major}.so + +%check +cd obj-%{gcc_target_platform} + +%{?scl:PATH=%{_bindir}${PATH:+:${PATH}}} + +# run the tests. +make %{?_smp_mflags} -k check RUNTESTFLAGS="--target_board=unix/'{,-fstack-protector}'" || : +( LC_ALL=C ../contrib/test_summary -t || : ) 2>&1 | sed -n '/^cat.*EOF/,/^EOF/{/^cat.*EOF/d;/^EOF/d;/^LAST_UPDATED:/d;p;}' > testresults +rm -rf gcc/testsuite.prev +mv gcc/testsuite{,.prev} +rm -f gcc/site.exp +make %{?_smp_mflags} -C gcc -k check-gcc check-g++ ALT_CC_UNDER_TEST=gcc ALT_CXX_UNDER_TEST=g++ RUNTESTFLAGS="--target_board=unix/'{,-fstack-protector}' compat.exp struct-layout-1.exp" || : +mv gcc/testsuite/gcc/gcc.sum{,.sent} +mv gcc/testsuite/g++/g++.sum{,.sent} +( LC_ALL=C ../contrib/test_summary -o -t || : ) 2>&1 | sed -n '/^cat.*EOF/,/^EOF/{/^cat.*EOF/d;/^EOF/d;/^LAST_UPDATED:/d;p;}' > testresults2 +rm -rf gcc/testsuite.compat +mv gcc/testsuite{,.compat} +mv gcc/testsuite{.prev,} +echo ====================TESTING========================= +cat testresults +echo ===`gcc --version | head -1` compatibility tests==== +cat testresults2 +echo ====================TESTING END===================== +mkdir testlogs-%{_target_platform}-%{version}-%{release} +for i in `find . -name \*.log | grep -F testsuite/ | grep -v 'config.log\|acats.*/tests/'`; do + ln $i testlogs-%{_target_platform}-%{version}-%{release}/ || : +done +for i in `find gcc/testsuite.compat -name \*.log | grep -v 'config.log\|acats.*/tests/'`; do + ln $i testlogs-%{_target_platform}-%{version}-%{release}/`basename $i`.compat || : +done +tar cf - testlogs-%{_target_platform}-%{version}-%{release} | bzip2 -9c \ + | uuencode testlogs-%{_target_platform}.tar.bz2 || : +rm -rf testlogs-%{_target_platform}-%{version}-%{release} + +%clean +rm -rf %{buildroot} + +%files +%defattr(-,root,root,-) +%dir %{_root_prefix} +%dir %{_root_prefix}/%{_lib} +%{_root_prefix}/%{_lib}/compat-sap-c++-%{gcc_version}.so +%{_root_prefix}/%{_lib}/compat-sap-c++-%{gcc_major}.so +%{_root_prefix}/%{_lib}/README%{gcc_major} + +%changelog +* Wed May 19 2021 Marek Polacek 10.2.1-11 +- update from Fedora gcc 10.2.1-11 (#1933097) +- apply gcc10-SIZE_MAX.patch + +* Wed Jul 29 2020 Marek Polacek 10.2.1-1 +- GCC 10.2 release +- disable -flto in %%{optflags}, lto bootstrap will be enabled the GCC way + later +- require MPFR Library version 3.1.0 (or later) + +* Thu Jun 4 2020 Marek Polacek 10.1.1-1 +- new package