Commit 0359465c by Segher Boessenkool Committed by Segher Boessenkool

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
parent ccdfb975
2018-04-10 Segher Boessenkool <segher@kernel.crashing.org>
* common/config/rs6000/rs6000-common.c (rs6000_option_init_struct):
Enable -fasynchronous-unwind-tables by default if OBJECT_FORMAT_ELF.
2018-04-10 Segher Boessenkool <segher@kernel.crashing.org>
PR target/85321
* config/rs6000/rs6000.opt (mtraceback=): Show the allowed values in
the help text.
......
......@@ -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. */
......
2018-04-10 Segher Boessenkool <segher@kernel.crashing.org>
* 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.
2018-04-10 Kelvin Nilsen <kelvin@gcc.gnu.org>
* gcc.target/powerpc/vec-ldl-1.c: New test.
......
/* { dg-do assemble } */
/* { dg-options "-O2 -fno-align-functions -mtraceback=no -save-temps" } */
/* { dg-options "-O2 -fno-align-functions -fno-asynchronous-unwind-tables -mtraceback=no -save-temps" } */
void w1 (void *x, double y) { *(double *) (x + 32767) = y; }
void w2 (void *x, double y) { *(double *) (x + 32766) = y; }
......
/* { dg-do assemble } */
/* { dg-options "-O2 -fno-align-functions -mtraceback=no -save-temps" } */
/* { dg-options "-O2 -fno-align-functions -fno-asynchronous-unwind-tables -mtraceback=no -save-temps" } */
void w1 (void *x, long long y) { *(long long *) (x + 32767) = y; }
void w2 (void *x, long long y) { *(long long *) (x + 32766) = y; }
......
......@@ -2,7 +2,7 @@
/* { dg-skip-if "" { powerpc-ibm-aix* } } */
/* { dg-skip-if "no TFmode" { powerpc-*-eabi* } } */
/* { dg-require-effective-target longdouble128 } */
/* { dg-options "-O2 -fno-align-functions -mtraceback=no -save-temps" } */
/* { dg-options "-O2 -fno-align-functions -fno-asynchronous-unwind-tables -mtraceback=no -save-temps" } */
typedef float TFmode __attribute__ ((mode (TF)));
......
/* { dg-do assemble { target { lp64 } } } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power5" } } */
/* { dg-options "-O2 -fno-align-functions -mtraceback=no -save-temps -mcpu=power5" } */
/* { dg-options "-O2 -fno-align-functions -fno-asynchronous-unwind-tables -mtraceback=no -save-temps -mcpu=power5" } */
typedef int TImode __attribute__ ((mode (TI)));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment