Commit e13896a3 by John David Anglin

re PR target/90751 (-fpatchtable-function-entry broken on hppa-linux-gnu-gcc/hppa64-linux-gnu-gcc)

	PR target/90751
	* config/pa/pa-linux.h (ASM_DECLARE_FUNCTION_NAME): Update comment.
	Call pa_output_function_label>
	(TARGET_ASM_FUNCTION_PROLOGUE): define.
	* config/pa/pa-protos.h (pa_output_function_label): Declare.
	* config/pa/pa.c (pa_output_function_prologue): Add ATTRIBUTE_UNUSED
	to declaration.
	(pa_linux_output_function_prologue): Declare.
	(TARGET_ASM_FUNCTION_PROLOGUE): Delete define.
	(pa_output_function_label): New.
	(pa_output_function_prologue): Revise to use pa_output_function_label.
	(pa_linux_output_function_prologue): New.
	* config/pa/pa.h (TARGET_ASM_FUNCTION_PROLOGUE): Define.

From-SVN: r272059
parent 1ef8f50e
2019-06-07 John David Anglin <danglin@gcc.gnu.orig>
PR target/90751
* config/pa/pa-linux.h (ASM_DECLARE_FUNCTION_NAME): Update comment.
Call pa_output_function_label.
(TARGET_ASM_FUNCTION_PROLOGUE): define.
* config/pa/pa-protos.h (pa_output_function_label): Declare.
* config/pa/pa.c (pa_output_function_prologue): Add ATTRIBUTE_UNUSED
to declaration.
(pa_linux_output_function_prologue): Declare.
(TARGET_ASM_FUNCTION_PROLOGUE): Delete define.
(pa_output_function_label): New.
(pa_output_function_prologue): Revise to use pa_output_function_label.
(pa_linux_output_function_prologue): New.
* config/pa/pa.h (TARGET_ASM_FUNCTION_PROLOGUE): Define.
2019-06-07 Aldy Hernandez <aldyh@redhat.com> 2019-06-07 Aldy Hernandez <aldyh@redhat.com>
* tree-vrp.h (value_range_base::intersect): New. * tree-vrp.h (value_range_base::intersect): New.
......
...@@ -101,7 +101,7 @@ along with GCC; see the file COPYING3. If not see ...@@ -101,7 +101,7 @@ along with GCC; see the file COPYING3. If not see
/* FIXME: Hacked from the <elfos.h> one so that we avoid multiple /* FIXME: Hacked from the <elfos.h> one so that we avoid multiple
labels in a function declaration (since pa.c seems determined to do labels in a function declaration (since pa.c seems determined to do
it differently) */ it differently). */
#undef ASM_DECLARE_FUNCTION_NAME #undef ASM_DECLARE_FUNCTION_NAME
#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \ #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \
...@@ -109,9 +109,14 @@ along with GCC; see the file COPYING3. If not see ...@@ -109,9 +109,14 @@ along with GCC; see the file COPYING3. If not see
{ \ { \
ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "function"); \ ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "function"); \
ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL)); \ ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL)); \
pa_output_function_label (FILE); \
} \ } \
while (0) while (0)
/* Output function prologue for linux. */
#undef TARGET_ASM_FUNCTION_PROLOGUE
#define TARGET_ASM_FUNCTION_PROLOGUE pa_linux_output_function_prologue
/* As well as globalizing the label, we need to encode the label /* As well as globalizing the label, we need to encode the label
to ensure a plabel is generated in an indirect call. */ to ensure a plabel is generated in an indirect call. */
......
...@@ -108,6 +108,7 @@ extern void pa_asm_output_aligned_local (FILE *, const char *, ...@@ -108,6 +108,7 @@ extern void pa_asm_output_aligned_local (FILE *, const char *,
extern void pa_hpux_asm_output_external (FILE *, tree, const char *); extern void pa_hpux_asm_output_external (FILE *, tree, const char *);
extern HOST_WIDE_INT pa_initial_elimination_offset (int, int); extern HOST_WIDE_INT pa_initial_elimination_offset (int, int);
extern HOST_WIDE_INT pa_function_arg_size (machine_mode, const_tree); extern HOST_WIDE_INT pa_function_arg_size (machine_mode, const_tree);
extern void pa_output_function_label (FILE *);
extern const int pa_magic_milli[]; extern const int pa_magic_milli[];
......
...@@ -118,7 +118,8 @@ static void set_reg_plus_d (int, int, HOST_WIDE_INT, int); ...@@ -118,7 +118,8 @@ static void set_reg_plus_d (int, int, HOST_WIDE_INT, int);
static rtx pa_function_value (const_tree, const_tree, bool); static rtx pa_function_value (const_tree, const_tree, bool);
static rtx pa_libcall_value (machine_mode, const_rtx); static rtx pa_libcall_value (machine_mode, const_rtx);
static bool pa_function_value_regno_p (const unsigned int); static bool pa_function_value_regno_p (const unsigned int);
static void pa_output_function_prologue (FILE *); static void pa_output_function_prologue (FILE *) ATTRIBUTE_UNUSED;
static void pa_linux_output_function_prologue (FILE *) ATTRIBUTE_UNUSED;
static void update_total_code_bytes (unsigned int); static void update_total_code_bytes (unsigned int);
static void pa_output_function_epilogue (FILE *); static void pa_output_function_epilogue (FILE *);
static int pa_adjust_cost (rtx_insn *, int, rtx_insn *, int, unsigned int); static int pa_adjust_cost (rtx_insn *, int, rtx_insn *, int, unsigned int);
...@@ -262,8 +263,6 @@ static size_t n_deferred_plabels = 0; ...@@ -262,8 +263,6 @@ static size_t n_deferred_plabels = 0;
#undef TARGET_ASM_INTEGER #undef TARGET_ASM_INTEGER
#define TARGET_ASM_INTEGER pa_assemble_integer #define TARGET_ASM_INTEGER pa_assemble_integer
#undef TARGET_ASM_FUNCTION_PROLOGUE
#define TARGET_ASM_FUNCTION_PROLOGUE pa_output_function_prologue
#undef TARGET_ASM_FUNCTION_EPILOGUE #undef TARGET_ASM_FUNCTION_EPILOGUE
#define TARGET_ASM_FUNCTION_EPILOGUE pa_output_function_epilogue #define TARGET_ASM_FUNCTION_EPILOGUE pa_output_function_epilogue
...@@ -3842,16 +3841,10 @@ pa_compute_frame_size (poly_int64 size, int *fregs_live) ...@@ -3842,16 +3841,10 @@ pa_compute_frame_size (poly_int64 size, int *fregs_live)
& ~(PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT - 1)); & ~(PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT - 1));
} }
/* On HP-PA, move-double insns between fpu and cpu need an 8-byte block /* Output function label, and associated .PROC and .CALLINFO statements. */
of memory. If any fpu reg is used in the function, we allocate
such a block here, at the bottom of the frame, just in case it's needed.
If this function is a leaf procedure, then we may choose not void
to do a "save" insn. The decision about whether or not pa_output_function_label (FILE *file)
to do this is made in regclass.c. */
static void
pa_output_function_prologue (FILE *file)
{ {
/* The function's label and associated .PROC must never be /* The function's label and associated .PROC must never be
separated and must be output *after* any profiling declarations separated and must be output *after* any profiling declarations
...@@ -3897,7 +3890,22 @@ pa_output_function_prologue (FILE *file) ...@@ -3897,7 +3890,22 @@ pa_output_function_prologue (FILE *file)
fprintf (file, ",ENTRY_FR=%d", fr_saved + 11); fprintf (file, ",ENTRY_FR=%d", fr_saved + 11);
fputs ("\n\t.ENTRY\n", file); fputs ("\n\t.ENTRY\n", file);
}
/* Output function prologue. */
static void
pa_output_function_prologue (FILE *file)
{
pa_output_function_label (file);
remove_useless_addtr_insns (0);
}
/* The label is output by ASM_DECLARE_FUNCTION_NAME on linux. */
static void
pa_linux_output_function_prologue (FILE *file ATTRIBUTE_UNUSED)
{
remove_useless_addtr_insns (0); remove_useless_addtr_insns (0);
} }
......
...@@ -1305,3 +1305,6 @@ do { \ ...@@ -1305,3 +1305,6 @@ do { \
/* Target CPU versions for D. */ /* Target CPU versions for D. */
#define TARGET_D_CPU_VERSIONS pa_d_target_versions #define TARGET_D_CPU_VERSIONS pa_d_target_versions
/* Output default function prologue for hpux. */
#define TARGET_ASM_FUNCTION_PROLOGUE pa_output_function_prologue
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment