aboutsummaryrefslogtreecommitdiff
path: root/gcc/common
diff options
context:
space:
mode:
authorSegher Boessenkool <segher@kernel.crashing.org>2018-04-10 23:09:30 +0200
committerSegher Boessenkool <segher@gcc.gnu.org>2018-04-10 23:09:30 +0200
commit0359465c703ad3c214c52c772557ef1b3fe52183 (patch)
treee169812cbe8cf83c834a123cdeefd4ee0e8c7c15 /gcc/common
parentccdfb97546e2fed58cf7e1fc6cb579df968d5289 (diff)
downloadgcc-0359465c703ad3c214c52c772557ef1b3fe52183.zip
gcc-0359465c703ad3c214c52c772557ef1b3fe52183.tar.gz
gcc-0359465c703ad3c214c52c772557ef1b3fe52183.tar.bz2
rs6000: Enable -fasynchronous-unwind-tables by default
To find out where on-entry register values live at any point in a program, GDB currently tries to parse to parse the executable code. This does not work very well, for example it gets confused if some accesses to the stack use the frame pointer (r31) and some use the stack pointer (r1). A symptom is that backtraces can be cut short. This patch enables -fasynchronous-unwind-tables by default for rs6000, which causes us to emit DWARF unwind tables for all functions, solving these problems. This not do anything for sub-targets without DWARF, and only for ELF sub-targets for now. It increases executable size, but only modestly, and does not change memory use, only the disk image. * common/config/rs6000/rs6000-common.c (rs6000_option_init_struct): Enable -fasynchronous-unwind-tables by default if OBJECT_FORMAT_ELF. gcc/testsuite/ * gcc.target/powerpc/dfmode_off.c: Add -fno-asynchronous-unwind-tables. * gcc.target/powerpc/dimode_off.c: Ditto. * gcc.target/powerpc/tfmode_off.c: Ditto. * gcc.target/powerpc/timode_off.c: Ditto. From-SVN: r259298
Diffstat (limited to 'gcc/common')
-rw-r--r--gcc/common/config/rs6000/rs6000-common.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/gcc/common/config/rs6000/rs6000-common.c b/gcc/common/config/rs6000/rs6000-common.c
index 0ddadfd..ed348f5 100644
--- a/gcc/common/config/rs6000/rs6000-common.c
+++ b/gcc/common/config/rs6000/rs6000-common.c
@@ -49,6 +49,15 @@ rs6000_option_init_struct (struct gcc_options *opts)
/* Enable section anchors by default. */
if (!TARGET_MACHO)
opts->x_flag_section_anchors = 1;
+
+ /* By default, always emit DWARF-2 unwind info. This allows debugging
+ without maintaining a stack frame back-chain. It also allows the
+ debugger to find out where on-entry register values are stored at any
+ point in a function, without having to analyze the executable code (which
+ isn't even possible to do in the general case). */
+#ifdef OBJECT_FORMAT_ELF
+ opts->x_flag_asynchronous_unwind_tables = 1;
+#endif
}
/* Implement TARGET_OPTION_DEFAULT_PARAMS. */