2020-01-01 John David Anglin <danglin@gcc.gnu.org>
+ PR target/67834
+ * config/pa/pa.c (pa_elf_select_rtx_section): New. Put references to
+ COMDAT group function labels in .data.rel.ro.local section.
+ * config/pa/pa32-linux.h (TARGET_ASM_SELECT_RTX_SECTION): Define.
+
PR target/93111
* config/pa/pa.md (scc): Use ordered_comparison_operator instead of
comparison_operator in B and S integer comparisons. Likewise, use
static bool pa_modes_tieable_p (machine_mode, machine_mode);
static bool pa_can_change_mode_class (machine_mode, machine_mode, reg_class_t);
static HOST_WIDE_INT pa_starting_frame_offset (void);
+static section* pa_elf_select_rtx_section(machine_mode, rtx, unsigned HOST_WIDE_INT) ATTRIBUTE_UNUSED;
/* The following extra sections are only used for SOM. */
static GTY(()) section *som_readonly_data_section;
return data_section;
}
+/* Implement pa_elf_select_rtx_section. If X is a function label operand
+ and the function is in a COMDAT group, place the plabel reference in the
+ .data.rel.ro.local section. The linker ignores references to symbols in
+ discarded sections from this section. */
+
+static section *
+pa_elf_select_rtx_section (machine_mode mode, rtx x,
+ unsigned HOST_WIDE_INT align)
+{
+ if (function_label_operand (x, VOIDmode))
+ {
+ tree decl = SYMBOL_REF_DECL (x);
+
+ if (DECL_P (decl) && DECL_COMDAT_GROUP (decl))
+ return get_named_section (NULL, ".data.rel.ro.local", 1);
+ }
+
+ return default_elf_select_rtx_section (mode, x, align);
+}
+
/* Implement pa_reloc_rw_mask. */
static int
rodata when generating non-PIC code. */
#undef JUMP_TABLES_IN_TEXT_SECTION
#define JUMP_TABLES_IN_TEXT_SECTION (flag_pic)
+
+/* We need to override default selection to put references to functions
+ in COMDAT groups in .data.rel.ro.local. */
+#undef TARGET_ASM_SELECT_RTX_SECTION
+#define TARGET_ASM_SELECT_RTX_SECTION pa_elf_select_rtx_section