Add srodata section support to riscv port.
authorAndrew Waterman <andrew@sifive.com>
Fri, 8 Dec 2017 00:44:13 +0000 (00:44 +0000)
committerJim Wilson <wilson@gcc.gnu.org>
Fri, 8 Dec 2017 00:44:13 +0000 (16:44 -0800)
2017-12-07  Andrew Waterman  <andrew@sifive.com>
gcc/
* config/riscv/riscv.c (TARGET_ASM_SELECT_SECTION): New define.
(TARGET_HAVE_SRODATA_SECTION): New define.
(riscv_select_section): New function.

From-SVN: r255491

gcc/ChangeLog
gcc/config/riscv/riscv.c

index 58081c1..b9d7ed7 100644 (file)
@@ -1,3 +1,9 @@
+2017-12-07  Andrew Waterman  <andrew@sifive.com>
+
+       * config/riscv/riscv.c (TARGET_ASM_SELECT_SECTION): New define.
+       (TARGET_HAVE_SRODATA_SECTION): New define.
+       (riscv_select_section): New function.
+
 2017-12-08  Joseph Myers  <joseph@codesourcery.com>
            Alexander Monakov  <amonakov@ispras.ru>
            Jakub Jelinek  <jakub@redhat.com>
index c7283d0..cfab2e7 100644 (file)
@@ -3042,6 +3042,22 @@ riscv_in_small_data_p (const_tree x)
   return riscv_size_ok_for_small_data_p (int_size_in_bytes (TREE_TYPE (x)));
 }
 
+/* Switch to the appropriate section for output of DECL.  */
+
+static section *
+riscv_select_section (tree decl, int reloc,
+                     unsigned HOST_WIDE_INT align)
+{
+  switch (categorize_decl_for_section (decl, reloc))
+    {
+    case SECCAT_SRODATA:
+      return get_named_section (decl, ".srodata", reloc);
+
+    default:
+      return default_elf_select_section (decl, reloc, align);
+    }
+}
+
 /* Return a section for X, handling small data. */
 
 static section *
@@ -4320,6 +4336,12 @@ riscv_constant_alignment (const_tree exp, HOST_WIDE_INT align)
 #undef TARGET_IN_SMALL_DATA_P
 #define TARGET_IN_SMALL_DATA_P riscv_in_small_data_p
 
+#undef TARGET_HAVE_SRODATA_SECTION
+#define TARGET_HAVE_SRODATA_SECTION true
+
+#undef TARGET_ASM_SELECT_SECTION
+#define TARGET_ASM_SELECT_SECTION riscv_select_section
+
 #undef TARGET_ASM_SELECT_RTX_SECTION
 #define TARGET_ASM_SELECT_RTX_SECTION  riscv_elf_select_rtx_section