aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2006-11-02 18:40:54 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2006-11-02 18:40:54 +0000
commit55fc9e87b216e43ae8cc1f2b97c799c41e3f8f09 (patch)
treef42d8ac2181f6aa81b4776a59939e9acada4e38e /gcc
parent4cb1c1c3965ebfe93001af017164066506454ebd (diff)
downloadgcc-55fc9e87b216e43ae8cc1f2b97c799c41e3f8f09.zip
gcc-55fc9e87b216e43ae8cc1f2b97c799c41e3f8f09.tar.gz
gcc-55fc9e87b216e43ae8cc1f2b97c799c41e3f8f09.tar.bz2
re PR other/29639 (ext/bitmap_allocator/check_allocate_max_size.cc execution test)
PR other/29639 * except.c (switch_to_exception_section): Do not cache the section if named sections are supported and HAVE_LD_EH_GC_SECTIONS is defined and flag_function_sections is set. From-SVN: r118422
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/except.c20
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/g++.dg/eh/gcsec1.C45
4 files changed, 71 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 74b905f..92b9048 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2006-11-02 Eric Botcazou <ebotcazou@adacore.com>
+
+ PR other/29639
+ * except.c (switch_to_exception_section): Do not cache the section
+ if named sections are supported and HAVE_LD_EH_GC_SECTIONS is defined
+ and flag_function_sections is set.
+
2006-11-01 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
PR middle-end/29335
diff --git a/gcc/except.c b/gcc/except.c
index 3069169..39827c9 100644
--- a/gcc/except.c
+++ b/gcc/except.c
@@ -3522,8 +3522,14 @@ sjlj_output_call_site_table (void)
static void
switch_to_exception_section (const char * ARG_UNUSED (fnname))
{
- if (exception_section == 0)
+ section *s;
+
+ if (exception_section)
+ s = exception_section;
+ else
{
+ /* Compute the section and cache it into exception_section,
+ unless it depends on the function name. */
if (targetm.have_named_sections)
{
int flags;
@@ -3539,22 +3545,26 @@ switch_to_exception_section (const char * ARG_UNUSED (fnname))
}
else
flags = SECTION_WRITE;
+
#ifdef HAVE_LD_EH_GC_SECTIONS
if (flag_function_sections)
{
char *section_name = xmalloc (strlen (fnname) + 32);
sprintf (section_name, ".gcc_except_table.%s", fnname);
- exception_section = get_section (section_name, flags, NULL);
+ s = get_section (section_name, flags, NULL);
free (section_name);
}
else
#endif
- exception_section = get_section (".gcc_except_table", flags, NULL);
+ exception_section
+ = s = get_section (".gcc_except_table", flags, NULL);
}
else
- exception_section = flag_pic ? data_section : readonly_data_section;
+ exception_section
+ = s = flag_pic ? data_section : readonly_data_section;
}
- switch_to_section (exception_section);
+
+ switch_to_section (s);
}
#endif
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 3c332b7..59e9832 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2006-11-02 Eric Botcazou <ebotcazou@adacore.com>
+
+ * g++.dg/eh/gcsec1.C: New test.
+
2006-11-01 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* gcc.dg/torture/builtin-math-3.c: Fix semicolons.
diff --git a/gcc/testsuite/g++.dg/eh/gcsec1.C b/gcc/testsuite/g++.dg/eh/gcsec1.C
new file mode 100644
index 0000000..5dfe02a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/eh/gcsec1.C
@@ -0,0 +1,45 @@
+/* PR other/29639 */
+/* AIX gld supports garbage collection. But AIX gcc does not support
+ -ffunction-sections or -fdata-sections. */
+/* { dg-do run { xfail rs6000-*-aix* powerpc*-*-aix* } } */
+/* { dg-require-gc-sections "" } */
+/* { dg-options "-ffunction-sections -Wl,--gc-sections" } */
+
+extern "C" void abort (void);
+
+int g = 0;
+
+void raise_exception()
+{
+ throw 1;
+}
+
+void used()
+{
+ try {
+ raise_exception ();
+ }
+ catch (int) {
+ g = 1;
+ }
+}
+
+void unused()
+{
+ try {
+ raise_exception ();
+ }
+ catch (int) {
+ g = 1;
+ }
+}
+
+int main()
+{
+ used ();
+
+ if (g != 1)
+ abort ();
+
+ return 0;
+}