aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJohn David Anglin <danglin@gcc.gnu.org>2018-07-29 15:50:13 +0000
committerJohn David Anglin <danglin@gcc.gnu.org>2018-07-29 15:50:13 +0000
commit3605ba0d1b9cb60e9c2e507bd66cf8b91f8d4f9f (patch)
tree77ba75683e4187906ad8053b90356d667b2ecec1 /gcc
parentd3d94f7a7a0d6c4efda34e3e19bc81ddd5087705 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/config/pa/pa.c2
-rw-r--r--gcc/config/pa/pa.h22
-rw-r--r--gcc/config/pa/pa32-linux.h9
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)