aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2020-04-29 09:49:56 -0700
committerJim Wilson <jimw@sifive.com>2020-05-12 16:12:10 -0700
commitadce62f53d8ad00e8110a6a2de7962d7a850de16 (patch)
treea9eef37c4d3549327b5424e3f6b84df349e562da /gcc
parentde6320a81695800de0f0f5fc3e4c6487a52cd430 (diff)
downloadgcc-adce62f53d8ad00e8110a6a2de7962d7a850de16.zip
gcc-adce62f53d8ad00e8110a6a2de7962d7a850de16.tar.gz
gcc-adce62f53d8ad00e8110a6a2de7962d7a850de16.tar.bz2
RISC-V: Make unique SECCAT_SRODATA names start with .srodata (not .sdata2)
default_unique_section uses ".sdata2" as a prefix for SECCAT_SRODATA unique sections, but RISC-V uses ".srodata" instead. Override the TARGET_ASM_UNIQUE_SECTION function to catch this case, allowing the default to be used for all other sections. Signed-off-by: Keith Packard <keithp@keithp.com> gcc/ * config/riscv/riscv.c (riscv_unique_section): New. (TARGET_ASM_UNIQUE_SECTION): New.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/riscv/riscv.c40
2 files changed, 45 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a360b5a..7627f94 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2020-05-12 Keith Packard <keith.packard@sifive.com>
+
+ * config/riscv/riscv.c (riscv_unique_section): New.
+ (TARGET_ASM_UNIQUE_SECTION): New.
+
2020-05-12 Craig Blackmore <craig.blackmore@embecosm.com>
* config.gcc: Add riscv-shorten-memrefs.o to extra_objs for riscv.
diff --git a/gcc/config/riscv/riscv.c b/gcc/config/riscv/riscv.c
index e4c08d7..1ad9799 100644
--- a/gcc/config/riscv/riscv.c
+++ b/gcc/config/riscv/riscv.c
@@ -3492,6 +3492,43 @@ riscv_select_section (tree decl, int reloc,
}
}
+/* Switch to the appropriate section for output of DECL. */
+
+static void
+riscv_unique_section (tree decl, int reloc)
+{
+ const char *prefix = NULL;
+ bool one_only = DECL_ONE_ONLY (decl) && !HAVE_COMDAT_GROUP;
+
+ switch (categorize_decl_for_section (decl, reloc))
+ {
+ case SECCAT_SRODATA:
+ prefix = one_only ? ".sr" : ".srodata";
+ break;
+
+ default:
+ break;
+ }
+ if (prefix)
+ {
+ const char *name, *linkonce;
+ char *string;
+
+ name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
+ name = targetm.strip_name_encoding (name);
+
+ /* If we're using one_only, then there needs to be a .gnu.linkonce
+ prefix to the section name. */
+ linkonce = one_only ? ".gnu.linkonce" : "";
+
+ string = ACONCAT ((linkonce, prefix, ".", name, NULL));
+
+ set_decl_section_name (decl, string);
+ return;
+ }
+ default_unique_section (decl, reloc);
+}
+
/* Return a section for X, handling small data. */
static section *
@@ -5254,6 +5291,9 @@ riscv_new_address_profitable_p (rtx memref, rtx_insn *insn, rtx new_addr)
#undef TARGET_ASM_SELECT_SECTION
#define TARGET_ASM_SELECT_SECTION riscv_select_section
+#undef TARGET_ASM_UNIQUE_SECTION
+#define TARGET_ASM_UNIQUE_SECTION riscv_unique_section
+
#undef TARGET_ASM_SELECT_RTX_SECTION
#define TARGET_ASM_SELECT_RTX_SECTION riscv_elf_select_rtx_section