rs6000: Don't forget to initialize the TOC (PR77957)

The code generating traceback tables mistakenly does an early return
if !optional_tbtab, which causes it to miss the code generating the TOC
section.  This only matters if the TOC will be empty since otherwise
the section is created elsewhere.

This patch fixes it.


	PR target/77957
	* config/rs6000/rs6000.c (rs6000_output_function_epilogue): Don't
	return early if !optional_tbtab.

From-SVN: r242336
This commit is contained in:
Segher Boessenkool 2016-11-12 16:13:14 +01:00 committed by Segher Boessenkool
parent b93d8a3f16
commit c0d6cb1a6f
2 changed files with 45 additions and 38 deletions

View File

@ -1,3 +1,9 @@
2016-11-12 Segher Boessenkool <segher@kernel.crashing.org>
PR target/77957
* config/rs6000/rs6000.c (rs6000_output_function_epilogue): Don't
return early if !optional_tbtab.
2016-11-11 Eric Botcazou <ebotcazou@adacore.com> 2016-11-11 Eric Botcazou <ebotcazou@adacore.com>
PR rtl-optimization/59461 PR rtl-optimization/59461

View File

@ -30412,17 +30412,17 @@ rs6000_output_function_epilogue (FILE *file,
seems to set the bit when not optimizing. */ seems to set the bit when not optimizing. */
fprintf (file, "%d\n", ((float_parms << 1) | (! optimize))); fprintf (file, "%d\n", ((float_parms << 1) | (! optimize)));
if (! optional_tbtab) if (optional_tbtab)
return; {
/* Optional fields follow. Some are variable length. */ /* Optional fields follow. Some are variable length. */
/* Parameter types, left adjusted bit fields: 0 fixed, 10 single float, /* Parameter types, left adjusted bit fields: 0 fixed, 10 single
11 double float. */ float, 11 double float. */
/* There is an entry for each parameter in a register, in the order that /* There is an entry for each parameter in a register, in the order
they occur in the parameter list. Any intervening arguments on the that they occur in the parameter list. Any intervening arguments
stack are ignored. If the list overflows a long (max possible length on the stack are ignored. If the list overflows a long (max
34 bits) then completely leave off all elements that don't fit. */ possible length 34 bits) then completely leave off all elements
that don't fit. */
/* Only emit this long if there was at least one parameter. */ /* Only emit this long if there was at least one parameter. */
if (fixed_parms || float_parms) if (fixed_parms || float_parms)
fprintf (file, "\t.long %d\n", parm_info); fprintf (file, "\t.long %d\n", parm_info);
@ -30460,6 +30460,7 @@ rs6000_output_function_epilogue (FILE *file,
fputs ("\t.align 2\n", file); fputs ("\t.align 2\n", file);
} }
}
/* Arrange to define .LCTOC1 label, if not already done. */ /* Arrange to define .LCTOC1 label, if not already done. */
if (need_toc_init) if (need_toc_init)