aboutsummaryrefslogtreecommitdiff
path: root/gcc/varasm.c
diff options
context:
space:
mode:
authorRainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>2018-10-24 11:27:35 +0000
committerRainer Orth <ro@gcc.gnu.org>2018-10-24 11:27:35 +0000
commitdc6b6330c5d708ba319778b2befed0b7314271b8 (patch)
tree9ac6e997fc7dddbff9a6f78b9fd4c4e4b7715b61 /gcc/varasm.c
parent53b8a7107e6c6a774d5e69b8fd5ce46e94c35adb (diff)
downloadgcc-dc6b6330c5d708ba319778b2befed0b7314271b8.zip
gcc-dc6b6330c5d708ba319778b2befed0b7314271b8.tar.gz
gcc-dc6b6330c5d708ba319778b2befed0b7314271b8.tar.bz2
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
Diffstat (limited to 'gcc/varasm.c')
-rw-r--r--gcc/varasm.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/gcc/varasm.c b/gcc/varasm.c
index 91650ee..06f41d0 100644
--- a/gcc/varasm.c
+++ b/gcc/varasm.c
@@ -823,6 +823,9 @@ mergeable_string_section (tree decl ATTRIBUTE_UNUSED,
if (align < modesize)
align = modesize;
+ if (!HAVE_LD_ALIGNED_SHF_MERGE && align > 8)
+ return readonly_data_section;
+
str = TREE_STRING_POINTER (decl);
unit = GET_MODE_SIZE (mode);
@@ -861,7 +864,8 @@ mergeable_constant_section (machine_mode mode ATTRIBUTE_UNUSED,
&& known_le (GET_MODE_BITSIZE (mode), align)
&& align >= 8
&& 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 ();
char *name = (char *) alloca (strlen (prefix) + 30);