From dddb7af4e7f76eed190876427902d99016ded180 Mon Sep 17 00:00:00 2001 From: Sam Tebbs Date: Fri, 14 Dec 2018 15:52:05 +0000 Subject: [PATCH] [PATCH 1/3][GCC] Add new target hook asm_post_cfi_startproc 2018-12-14 Sam Tebbs * doc/tm.texi (TARGET_ASM_POST_CFI_STARTPROC): Define. * doc/tm.texi.in (TARGET_ASM_POST_CFI_STARTPROC): Define. * dwarf2out.c (dwarf2out_do_cfi_startproc): Trigger the hook. * hooks.c (hook_void_FILEptr_tree): Define. * hooks.h (hook_void_FILEptr_tree): Define. * target.def (post_cfi_startproc): Define. From-SVN: r267135 --- gcc/ChangeLog | 9 +++++++++ gcc/doc/tm.texi | 9 +++++++++ gcc/doc/tm.texi.in | 2 ++ gcc/dwarf2out.c | 2 ++ gcc/hooks.c | 5 +++++ gcc/hooks.h | 1 + gcc/target.def | 11 +++++++++++ 7 files changed, 39 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index afbdf75c62c..6ce06582e0f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2018-12-14 Sam Tebbs + + * doc/tm.texi (TARGET_ASM_POST_CFI_STARTPROC): Define. + * doc/tm.texi.in (TARGET_ASM_POST_CFI_STARTPROC): Define. + * dwarf2out.c (dwarf2out_do_cfi_startproc): Trigger the hook. + * hooks.c (hook_void_FILEptr_tree): Define. + * hooks.h (hook_void_FILEptr_tree): Define. + * target.def (post_cfi_startproc): Define. + 2018-12-14 Tom de Vries * lto-cgraph.c (verify_node_partition): New function. diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi index e348f0a7da6..c9a85606f1b 100644 --- a/gcc/doc/tm.texi +++ b/gcc/doc/tm.texi @@ -9422,6 +9422,15 @@ If this macro is not defined, nothing special is output at the end of the jump-table. @end defmac +@deftypefn {Target Hook} void TARGET_ASM_POST_CFI_STARTPROC (FILE *@var{}, @var{tree}) +This target hook is used to emit assembly strings required by the target +after the .cfi_startproc directive. The first argument is the file stream to +write the strings to and the second argument is the function's declaration. The +expected use is to add more .cfi_* directives. + +The default is to not output any assembly strings. +@end deftypefn + @deftypefn {Target Hook} void TARGET_ASM_EMIT_UNWIND_LABEL (FILE *@var{stream}, tree @var{decl}, int @var{for_eh}, int @var{empty}) This target hook emits a label at the beginning of each FDE@. It should be defined on targets where FDEs need special labels, and it diff --git a/gcc/doc/tm.texi.in b/gcc/doc/tm.texi.in index f1ad80da467..2205e2df46b 100644 --- a/gcc/doc/tm.texi.in +++ b/gcc/doc/tm.texi.in @@ -6429,6 +6429,8 @@ If this macro is not defined, nothing special is output at the end of the jump-table. @end defmac +@hook TARGET_ASM_POST_CFI_STARTPROC + @hook TARGET_ASM_EMIT_UNWIND_LABEL @hook TARGET_ASM_EMIT_EXCEPT_TABLE_LABEL diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index cb5cc0129e1..b2381056991 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -969,6 +969,8 @@ dwarf2out_do_cfi_startproc (bool second) fprintf (asm_out_file, "\t.cfi_startproc\n"); + targetm.asm_out.post_cfi_startproc (asm_out_file, current_function_decl); + /* .cfi_personality and .cfi_lsda are only relevant to DWARF2 eh unwinders. */ if (targetm_common.except_unwind_info (&global_options) != UI_DWARF2) diff --git a/gcc/hooks.c b/gcc/hooks.c index 780cc1e0863..46bf2a8cee0 100644 --- a/gcc/hooks.c +++ b/gcc/hooks.c @@ -276,6 +276,11 @@ hook_void_tree (tree) { } +void +hook_void_FILEptr_tree (FILE *, tree) +{ +} + void hook_void_rtx_tree (rtx, tree) { diff --git a/gcc/hooks.h b/gcc/hooks.h index 0ed5b952b48..bcfc2312516 100644 --- a/gcc/hooks.h +++ b/gcc/hooks.h @@ -82,6 +82,7 @@ extern void hook_void_FILEptr_constcharptr_const_tree (FILE *, const char *, const_tree); extern bool hook_bool_FILEptr_rtx_false (FILE *, rtx); extern void hook_void_rtx_tree (rtx, tree); +extern void hook_void_FILEptr_tree (FILE *, tree); extern void hook_void_tree (tree); extern void hook_void_tree_treeptr (tree, tree *); extern void hook_void_int_int (int, int); diff --git a/gcc/target.def b/gcc/target.def index 96f37e0462b..c425341ac3a 100644 --- a/gcc/target.def +++ b/gcc/target.def @@ -93,6 +93,17 @@ when the relevant string is @code{NULL}.", bool, (rtx x, unsigned int size, int aligned_p), default_assemble_integer) +/* Assembly strings required after the .cfi_startproc label. */ +DEFHOOK +(post_cfi_startproc, + "This target hook is used to emit assembly strings required by the target\n\ +after the .cfi_startproc directive. The first argument is the file stream to\n\ +write the strings to and the second argument is the function\'s declaration.\n\ +\n\ +The default is to not output any assembly strings.", + void, (FILE *, tree), + hook_void_FILEptr_tree) + /* Notify the backend that we have completed emitting the data for a decl. */ DEFHOOK -- 2.30.2