diff options
author | John David Anglin <danglin@gcc.gnu.org> | 2018-07-29 15:50:13 +0000 |
---|---|---|
committer | John David Anglin <danglin@gcc.gnu.org> | 2018-07-29 15:50:13 +0000 |
commit | 3605ba0d1b9cb60e9c2e507bd66cf8b91f8d4f9f (patch) | |
tree | 77ba75683e4187906ad8053b90356d667b2ecec1 /gcc | |
parent | d3d94f7a7a0d6c4efda34e3e19bc81ddd5087705 (diff) | |
download | gcc-3605ba0d1b9cb60e9c2e507bd66cf8b91f8d4f9f.zip gcc-3605ba0d1b9cb60e9c2e507bd66cf8b91f8d4f9f.tar.gz gcc-3605ba0d1b9cb60e9c2e507bd66cf8b91f8d4f9f.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/pa/pa.c | 2 | ||||
-rw-r--r-- | gcc/config/pa/pa.h | 22 | ||||
-rw-r--r-- | gcc/config/pa/pa32-linux.h | 9 |
4 files changed, 29 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index cc27dbc..9d70b46 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c index a32921a..715700e 100644 --- a/gcc/config/pa/pa.c +++ b/gcc/config/pa/pa.c @@ -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); diff --git a/gcc/config/pa/pa.h b/gcc/config/pa/pa.h index 024e7b8..a121e20 100644 --- a/gcc/config/pa/pa.h +++ b/gcc/config/pa/pa.h @@ -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 diff --git a/gcc/config/pa/pa32-linux.h b/gcc/config/pa/pa32-linux.h index ffcd1c6..4b47044 100644 --- a/gcc/config/pa/pa32-linux.h +++ b/gcc/config/pa/pa32-linux.h @@ -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) |