aboutsummaryrefslogtreecommitdiff
path: root/gcc/except.c
diff options
context:
space:
mode:
authorPaul Brook <paul@codesourcery.com>2012-08-07 16:08:49 +0000
committerSandra Loosemore <sandra@codesourcery.com>2012-08-07 16:08:49 +0000
commit40380fe7f298ad6ed9557738ccfd30ebb7c63419 (patch)
treeac5f1054288e8389349f643548ad266bf0455668 /gcc/except.c
parent55d425f42c8b66aaf439d3d126e1faf98e5033eb (diff)
2012-08-07 Paul Brook <paul@codesourcery.com>
Sandra Loosemore <sandra@codesourcery.com> gcc/ * except.c (switch_to_exception_section): Place tables for DECL_ONE_ONLY functions in comdat groups. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@190206 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/except.c')
-rw-r--r--gcc/except.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/gcc/except.c b/gcc/except.c
index 10fc26e1d7c..605d8d7b829 100644
--- a/gcc/except.c
+++ b/gcc/except.c
@@ -2777,11 +2777,16 @@ switch_to_exception_section (const char * ARG_UNUSED (fnname))
flags = SECTION_WRITE;
#ifdef HAVE_LD_EH_GC_SECTIONS
- if (flag_function_sections)
+ if (flag_function_sections
+ || (DECL_ONE_ONLY (current_function_decl) && HAVE_COMDAT_GROUP))
{
char *section_name = XNEWVEC (char, strlen (fnname) + 32);
+ /* The EH table must match the code section, so only mark
+ it linkonce if we have COMDAT groups to tie them together. */
+ if (DECL_ONE_ONLY (current_function_decl) && HAVE_COMDAT_GROUP)
+ flags |= SECTION_LINKONCE;
sprintf (section_name, ".gcc_except_table.%s", fnname);
- s = get_section (section_name, flags, NULL);
+ s = get_section (section_name, flags, current_function_decl);
free (section_name);
}
else