+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
{
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);
#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
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)