From: John David Anglin Date: Fri, 7 Jun 2019 23:13:08 +0000 (+0000) Subject: re PR target/90751 (-fpatchtable-function-entry broken on hppa-linux-gnu-gcc/hppa64... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=e13896a3a90f990596fa37be2abbfba01923624e;p=gcc.git 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7e84da73316..3721c87caeb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,19 @@ +2019-06-07 John David Anglin + + 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 * tree-vrp.h (value_range_base::intersect): New. diff --git a/gcc/config/pa/pa-linux.h b/gcc/config/pa/pa-linux.h index 0d02ebc7fb2..23812e4aded 100644 --- a/gcc/config/pa/pa-linux.h +++ b/gcc/config/pa/pa-linux.h @@ -101,7 +101,7 @@ along with GCC; see the file COPYING3. If not see /* FIXME: Hacked from the one so that we avoid multiple labels in a function declaration (since pa.c seems determined to do - it differently) */ + it differently). */ #undef ASM_DECLARE_FUNCTION_NAME #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \ @@ -109,9 +109,14 @@ along with GCC; see the file COPYING3. If not see { \ ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "function"); \ ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL)); \ + pa_output_function_label (FILE); \ } \ 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 to ensure a plabel is generated in an indirect call. */ diff --git a/gcc/config/pa/pa-protos.h b/gcc/config/pa/pa-protos.h index 2504ac8daf3..a62eeb732dc 100644 --- a/gcc/config/pa/pa-protos.h +++ b/gcc/config/pa/pa-protos.h @@ -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 HOST_WIDE_INT pa_initial_elimination_offset (int, int); 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[]; diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c index 51c879d5a0a..deb2d439b09 100644 --- a/gcc/config/pa/pa.c +++ b/gcc/config/pa/pa.c @@ -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_libcall_value (machine_mode, const_rtx); 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 pa_output_function_epilogue (FILE *); static int pa_adjust_cost (rtx_insn *, int, rtx_insn *, int, unsigned int); @@ -262,8 +263,6 @@ static size_t n_deferred_plabels = 0; #undef TARGET_ASM_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 #define TARGET_ASM_FUNCTION_EPILOGUE pa_output_function_epilogue @@ -3842,16 +3841,10 @@ pa_compute_frame_size (poly_int64 size, int *fregs_live) & ~(PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT - 1)); } -/* On HP-PA, move-double insns between fpu and cpu need an 8-byte block - 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. +/* Output function label, and associated .PROC and .CALLINFO statements. */ - If this function is a leaf procedure, then we may choose not - to do a "save" insn. The decision about whether or not - to do this is made in regclass.c. */ - -static void -pa_output_function_prologue (FILE *file) +void +pa_output_function_label (FILE *file) { /* The function's label and associated .PROC must never be separated and must be output *after* any profiling declarations @@ -3897,7 +3890,22 @@ pa_output_function_prologue (FILE *file) fprintf (file, ",ENTRY_FR=%d", fr_saved + 11); 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); } diff --git a/gcc/config/pa/pa.h b/gcc/config/pa/pa.h index 146ffa2a1e2..561efa51882 100644 --- a/gcc/config/pa/pa.h +++ b/gcc/config/pa/pa.h @@ -1305,3 +1305,6 @@ do { \ /* Target CPU versions for D. */ #define TARGET_D_CPU_VERSIONS pa_d_target_versions + +/* Output default function prologue for hpux. */ +#define TARGET_ASM_FUNCTION_PROLOGUE pa_output_function_prologue