[PATCH, v2, rs6000] pr65479 Add -fasynchronous-unwind-tables when the -fsanitize...
authorBill Seurer <seurer@linux.vnet.ibm.com>
Wed, 21 Dec 2016 19:09:10 +0000 (19:09 +0000)
committerBill Seurer <seurer@gcc.gnu.org>
Wed, 21 Dec 2016 19:09:10 +0000 (19:09 +0000)
All feedback from the earlier version has been taken into account now.

This patch adds the -fasynchronous-unwind-tables option to compilations when
the -fsanitize=address option is seen but not if any
-fasynchronous-unwind-tables options were already specified.
-fasynchronous-unwind-tables causes a full strack trace to be produced when
the sanitizer detects an error.  Without the full trace several of the asan
test cases fail on powerpc.

See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65479 for more information.

Bootstrapped and tested on powerpc64le-unknown-linux-gnu,
powerpc64be-unknown-linux-gnu, and x86_64-pc-linux-gnu with no regressions.
Is this ok for trunk?

[gcc]

2016-12-21  Bill Seurer  <seurer@linux.vnet.ibm.com>

PR sanitizer/65479
* config/rs6000/rs6000.c (rs6000_option_override_internal): Add
-fasynchronous-unwind-tables option when -fsanitize=address is
specified.

From-SVN: r243863

gcc/ChangeLog
gcc/config/rs6000/rs6000.c

index 9065731661dffba39a219e43b95a4a97fcae94fc..0a7f34a8cd46570da86d701f56f8f951a21a9d3c 100644 (file)
@@ -1,3 +1,10 @@
+2016-12-21  Bill Seurer  <seurer@linux.vnet.ibm.com>
+
+       PR sanitizer/65479
+       * config/rs6000/rs6000.c (rs6000_option_override_internal): Add
+       -fasynchronous-unwind-tables option when -fsanitize=address is
+       specified.
+
 2016-12-21  Bernd Schmidt  <bschmidt@redhat.com>
 
        PR target/71321
index 93088a3a7e713d5c3891d6e0423bdb5f63a8cacc..a870d60ae7cbfc45f9f41be971c0ee161fb0eb6a 100644 (file)
@@ -3858,6 +3858,13 @@ rs6000_option_override_internal (bool global_init_p)
       && !global_options_set.x_flag_ira_loop_pressure)
     flag_ira_loop_pressure = 1;
 
+  /* -fsanitize=address needs to turn on -fasynchronous-unwind-tables in order
+     for tracebacks to be complete but not if any -fasynchronous-unwind-tables
+     options were already specified.  */
+  if (flag_sanitize & SANITIZE_USER_ADDRESS
+      && !global_options_set.x_flag_asynchronous_unwind_tables)
+    flag_asynchronous_unwind_tables = 1;
+
   /* Set the pointer size.  */
   if (TARGET_64BIT)
     {