S/390: Use proper read-only data section for literals.
authorMarcin Kościelnicki <koriakin@0x04.net>
Thu, 21 Jan 2016 09:45:42 +0000 (09:45 +0000)
committerAndreas Krebbel <krebbel@gcc.gnu.org>
Thu, 21 Jan 2016 09:45:42 +0000 (09:45 +0000)
Previously, .rodata was hardcoded.  For C++ vague linkage functions,
this resulted in needlessly duplicated literals.  With the new split
stack support, this resulted in link errors, due to .rodata containing
relocations to the discarded text sections.

gcc/ChangeLog:

* config/s390/s390.md (pool_section_start): Use switch_to_section
to select proper read-only data section instead of hardcoding .rodata.
(pool_section_end): Use switch_to_section to match the above.

From-SVN: r232667

gcc/ChangeLog
gcc/config/s390/s390.md

index dae468c7930b127a924b3b2d1a1298a343952365..2ea6938f4d6ab58f100e66f993beab18ea46cd40 100644 (file)
@@ -1,3 +1,10 @@
+2016-01-21  Marcin Kościelnicki  <koriakin@0x04.net>
+
+       * config/s390/s390.md (pool_section_start): Use switch_to_section
+       to select proper read-only data section instead of hardcoding
+       .rodata.
+       (pool_section_end): Use switch_to_section to match the above.
+
 2016-01-21  Richard Biener  <rguenther@suse.de>
 
         PR tree-optimization/69378
index 3e340c350305e0437cea8ecc461525a3b28455dc..9b869d566a3b8cbb920da14d657a8d7637603f31 100644 (file)
 (define_insn "pool_section_start"
   [(unspec_volatile [(const_int 1)] UNSPECV_POOL_SECTION)]
   ""
-  ".section\t.rodata"
+{
+  switch_to_section (targetm.asm_out.function_rodata_section
+                (current_function_decl));
+  return "";
+}
   [(set_attr "length" "0")])
 
 (define_insn "pool_section_end"
   [(unspec_volatile [(const_int 0)] UNSPECV_POOL_SECTION)]
   ""
-  ".previous"
+{
+  switch_to_section (current_function_section ());
+  return "";
+}
   [(set_attr "length" "0")])
 
 (define_insn "main_base_31_small"