mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-14 22:41:09 +08:00
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
This commit is contained in:
parent
53b8a7107e
commit
dc6b6330c5
@ -1,3 +1,12 @@
|
|||||||
|
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 @@
|
|||||||
#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 @@
|
|||||||
#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 @@
|
|||||||
#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
|
||||||
|
24
gcc/configure
vendored
24
gcc/configure
vendored
@ -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,
|
|||||||
[`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,
|
|||||||
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,
|
|||||||
&& 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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user