pa.c (pa_output_addr_vec): Align address table.
* config/pa/pa.c (pa_output_addr_vec): Align address table. * config/pa/pa.h (JUMP_TABLES_IN_TEXT_SECTION): Revise comment. * config/pa/pa32-linux.h (JUMP_TABLES_IN_TEXT_SECTION): Define. From-SVN: r263051
This commit is contained in:
parent
d3d94f7a7a
commit
3605ba0d1b
4 changed files with 29 additions and 10 deletions
|
@ -1,3 +1,9 @@
|
|||
2018-07-29 John David Anglin <danglin@gcc.gnu.org>
|
||||
|
||||
* config/pa/pa.c (pa_output_addr_vec): Align address table.
|
||||
* config/pa/pa.h (JUMP_TABLES_IN_TEXT_SECTION): Revise comment.
|
||||
* config/pa/pa32-linux.h (JUMP_TABLES_IN_TEXT_SECTION): Define.
|
||||
|
||||
2018-07-27 Michael Meissner <meissner@linux.ibm.com>
|
||||
|
||||
* config/rs6000/constraints.md (wG constraint): Delete, no longer
|
||||
|
|
|
@ -10680,6 +10680,8 @@ pa_output_addr_vec (rtx lab, rtx body)
|
|||
{
|
||||
int idx, vlen = XVECLEN (body, 0);
|
||||
|
||||
if (!TARGET_SOM)
|
||||
fputs ("\t.align 4\n", asm_out_file);
|
||||
targetm.asm_out.internal_label (asm_out_file, "L", CODE_LABEL_NUMBER (lab));
|
||||
if (TARGET_GAS)
|
||||
fputs ("\t.begin_brtab\n", asm_out_file);
|
||||
|
|
|
@ -1143,21 +1143,23 @@ do { \
|
|||
#define ASM_OUTPUT_ASCII(FILE, P, SIZE) \
|
||||
pa_output_ascii ((FILE), (P), (SIZE))
|
||||
|
||||
/* Jump tables are always placed in the text section. Technically, it
|
||||
is possible to put them in the readonly data section. This has the
|
||||
benefit of getting the table out of .text and reducing branch lengths
|
||||
as a result.
|
||||
/* Jump tables are always placed in the text section. We have to do
|
||||
this for the HP-UX SOM target as we can't switch sections in the
|
||||
middle of a function.
|
||||
|
||||
The downside is that an additional insn (addil) is needed to access
|
||||
On ELF targets, it is possible to put them in the readonly-data section.
|
||||
This would get the table out of .text and reduce branch lengths.
|
||||
|
||||
A downside is that an additional insn (addil) is needed to access
|
||||
the table when generating PIC code. The address difference table
|
||||
also has to use 32-bit pc-relative relocations. Currently, GAS does
|
||||
not support these relocations, although it is easily modified to do
|
||||
this operation.
|
||||
also has to use 32-bit pc-relative relocations.
|
||||
|
||||
The table entries need to look like "$L1+(.+8-$L0)-$PIC_pcrel$0"
|
||||
when using ELF GAS. A simple difference can be used when using
|
||||
SOM GAS or the HP assembler. The final downside is GDB complains
|
||||
about the nesting of the label for the table when debugging. */
|
||||
the HP assembler.
|
||||
|
||||
The final downside is GDB complains about the nesting of the label
|
||||
for the table. */
|
||||
|
||||
#define JUMP_TABLES_IN_TEXT_SECTION 1
|
||||
|
||||
|
|
|
@ -67,3 +67,12 @@ call_ ## FUNC (void) \
|
|||
layout compatibility with the original linux thread implementation. */
|
||||
#undef MALLOC_ABI_ALIGNMENT
|
||||
#define MALLOC_ABI_ALIGNMENT 128
|
||||
|
||||
/* Place jump tables in the text section except when generating non-PIC
|
||||
code. When generating non-PIC code, the relocations needed to load the
|
||||
address of the jump table result in a text label in the final executable
|
||||
if the jump table is placed in the text section. This breaks the unwind
|
||||
data for the function. Thus, the jump table needs to be placed in
|
||||
rodata when generating non-PIC code. */
|
||||
#undef JUMP_TABLES_IN_TEXT_SECTION
|
||||
#define JUMP_TABLES_IN_TEXT_SECTION (flag_pic)
|
||||
|
|
Loading…
Add table
Reference in a new issue