Commit dc6b6330 by Rainer Orth Committed by Rainer Orth

Disable string merging with alignment > 1 before Solaris 11.4/SPARC

	* configure.ac (gcc_cv_ld_aligned_shf_merge): New test.
	* configure: Regenerate.
	* config.in: Regenerate.
	* varasm.c (mergeable_string_section): Use readonly_data_section
	if linker doesn't support SHF_MERGE with alignment > 8.
	(mergeable_constant_section): Likewise.

From-SVN: r265456
parent 53b8a710
2018-10-24 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* configure.ac (gcc_cv_ld_aligned_shf_merge): New test.
* configure: Regenerate.
* config.in: Regenerate.
* varasm.c (mergeable_string_section): Use readonly_data_section
if linker doesn't support SHF_MERGE with alignment > 8.
(mergeable_constant_section): Likewise.
2018-10-24 Richard Biener <rguenther@suse.de> 2018-10-24 Richard Biener <rguenther@suse.de>
PR tree-optimization/84013 PR tree-optimization/84013
...@@ -55,8 +55,7 @@ ...@@ -55,8 +55,7 @@
#endif #endif
/* Define to larger than zero set to the default stack clash protector size as /* Define to larger than zero set the default stack clash protector size. */
a power of two in bytes. */
#ifndef USED_FOR_TARGET #ifndef USED_FOR_TARGET
#undef DEFAULT_STK_CLASH_GUARD_SIZE #undef DEFAULT_STK_CLASH_GUARD_SIZE
#endif #endif
...@@ -1430,6 +1429,13 @@ ...@@ -1430,6 +1429,13 @@
#endif #endif
/* Define 0/1 if your linker supports the SHF_MERGE flag with section
alignment > 1. */
#ifndef USED_FOR_TARGET
#undef HAVE_LD_ALIGNED_SHF_MERGE
#endif
/* Define if your linker supports --as-needed/--no-as-needed or equivalent /* Define if your linker supports --as-needed/--no-as-needed or equivalent
options. */ options. */
#ifndef USED_FOR_TARGET #ifndef USED_FOR_TARGET
...@@ -1993,13 +1999,7 @@ ...@@ -1993,13 +1999,7 @@
#endif #endif
/* Define if we should link with --large-address-aware by default */ /* Define if we should link mingw executables with --large-address-aware */
#ifndef USED_FOR_TARGET
#undef MINGW_DEFAULT_LARGE_ADDR_AWARE
#endif
/* Define if we should link with --large-address-aware by default */
#ifndef USED_FOR_TARGET #ifndef USED_FOR_TARGET
#undef MINGW_DEFAULT_LARGE_ADDR_AWARE #undef MINGW_DEFAULT_LARGE_ADDR_AWARE
#endif #endif
......
...@@ -23739,6 +23739,30 @@ cat >>confdefs.h <<_ACEOF ...@@ -23739,6 +23739,30 @@ cat >>confdefs.h <<_ACEOF
_ACEOF _ACEOF
gcc_cv_ld_aligned_shf_merge=yes
case "$target" in
# While Solaris 10/SPARC ld isn't affected, disable to avoid problems
# relinking on Solaris 11 < 11.4.
sparc*-*-solaris2.10*)
if test x"$gnu_ld" = xno; then
gcc_cv_ld_aligned_shf_merge=no
fi
;;
# SHF_MERGE support is broken in Solaris ld up to Solaris 11.3/SPARC for
# alignment > 1.
sparc*-*-solaris2.11*)
if test x"$gnu_ld" = xno \
&& test "$ld_vers_major" -lt 2 && test "$ld_vers_minor" -lt 3159; then
gcc_cv_ld_aligned_shf_merge=no
fi
;;
esac
cat >>confdefs.h <<_ACEOF
#define HAVE_LD_ALIGNED_SHF_MERGE `if test $gcc_cv_ld_aligned_shf_merge = yes; then echo 1; else echo 0; fi`
_ACEOF
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for stabs directive" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for stabs directive" >&5
$as_echo_n "checking assembler for stabs directive... " >&6; } $as_echo_n "checking assembler for stabs directive... " >&6; }
if test "${gcc_cv_as_stabs_directive+set}" = set; then : if test "${gcc_cv_as_stabs_directive+set}" = set; then :
......
...@@ -3039,6 +3039,28 @@ AC_DEFINE_UNQUOTED(HAVE_GAS_SHF_MERGE, ...@@ -3039,6 +3039,28 @@ AC_DEFINE_UNQUOTED(HAVE_GAS_SHF_MERGE,
[`if test $gcc_cv_as_shf_merge = yes; then echo 1; else echo 0; fi`], [`if test $gcc_cv_as_shf_merge = yes; then echo 1; else echo 0; fi`],
[Define 0/1 if your assembler supports marking sections with SHF_MERGE flag.]) [Define 0/1 if your assembler supports marking sections with SHF_MERGE flag.])
gcc_cv_ld_aligned_shf_merge=yes
case "$target" in
# While Solaris 10/SPARC ld isn't affected, disable to avoid problems
# relinking on Solaris 11 < 11.4.
sparc*-*-solaris2.10*)
if test x"$gnu_ld" = xno; then
gcc_cv_ld_aligned_shf_merge=no
fi
;;
# SHF_MERGE support is broken in Solaris ld up to Solaris 11.3/SPARC for
# alignment > 1.
sparc*-*-solaris2.11*)
if test x"$gnu_ld" = xno \
&& test "$ld_vers_major" -lt 2 && test "$ld_vers_minor" -lt 3159; then
gcc_cv_ld_aligned_shf_merge=no
fi
;;
esac
AC_DEFINE_UNQUOTED(HAVE_LD_ALIGNED_SHF_MERGE,
[`if test $gcc_cv_ld_aligned_shf_merge = yes; then echo 1; else echo 0; fi`],
[Define 0/1 if your linker supports the SHF_MERGE flag with section alignment > 1.])
gcc_GAS_CHECK_FEATURE([stabs directive], gcc_cv_as_stabs_directive, ,, gcc_GAS_CHECK_FEATURE([stabs directive], gcc_cv_as_stabs_directive, ,,
[.stabs "gcc2_compiled.",60,0,0,0],, [.stabs "gcc2_compiled.",60,0,0,0],,
[AC_DEFINE(HAVE_AS_STABS_DIRECTIVE, 1, [AC_DEFINE(HAVE_AS_STABS_DIRECTIVE, 1,
......
...@@ -823,6 +823,9 @@ mergeable_string_section (tree decl ATTRIBUTE_UNUSED, ...@@ -823,6 +823,9 @@ mergeable_string_section (tree decl ATTRIBUTE_UNUSED,
if (align < modesize) if (align < modesize)
align = modesize; align = modesize;
if (!HAVE_LD_ALIGNED_SHF_MERGE && align > 8)
return readonly_data_section;
str = TREE_STRING_POINTER (decl); str = TREE_STRING_POINTER (decl);
unit = GET_MODE_SIZE (mode); unit = GET_MODE_SIZE (mode);
...@@ -861,7 +864,8 @@ mergeable_constant_section (machine_mode mode ATTRIBUTE_UNUSED, ...@@ -861,7 +864,8 @@ mergeable_constant_section (machine_mode mode ATTRIBUTE_UNUSED,
&& known_le (GET_MODE_BITSIZE (mode), align) && known_le (GET_MODE_BITSIZE (mode), align)
&& align >= 8 && align >= 8
&& align <= 256 && align <= 256
&& (align & (align - 1)) == 0) && (align & (align - 1)) == 0
&& (HAVE_LD_ALIGNED_SHF_MERGE ? 1 : align == 8))
{ {
const char *prefix = function_mergeable_rodata_prefix (); const char *prefix = function_mergeable_rodata_prefix ();
char *name = (char *) alloca (strlen (prefix) + 30); char *name = (char *) alloca (strlen (prefix) + 30);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment