public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Bill Schmidt <wschmidt@linux.ibm.com>
To: gcc-patches@gcc.gnu.org
Cc: segher@kernel.crashing.org, dje.gcc@gmail.com, jakub@redhat.com,
	jlaw@tachyum.com
Subject: Re: [PATCH 02/57] Support scanning of build-time GC roots in gengtype
Date: Tue, 11 May 2021 11:01:22 -0500	[thread overview]
Message-ID: <c53d1e1f-ac85-b49c-624c-8b59a6a65ba3@linux.ibm.com> (raw)
In-Reply-To: <26d623c5117d22fbaea2ce1a445ba2d32df437ad.1619537141.git.wschmidt@linux.ibm.com>

Hi!  I'd like to ping this specific patch from the series, which is the 
only one remaining that affects common code.  I confess that I don't 
know whom to ask for a review for gengtype; I didn't get any good ideas 
from MAINTAINERS.  If you know of a good reviewer candidate, please CC them.

In any case, this is a reasonably straightforward patch.  It allows 
adding generated header files to be identified as "./header.h" and 
included in the files to be scanned by gengtype for GC roots.

Thank you!
Bill

On 4/27/21 10:32 AM, Bill Schmidt wrote:
> Currently gengtype supports scanning target-specific files for GC roots,
> but those files must exist in the source tree.  This patch extends the
> support to include header files generated into the build directory.  It
> also allows targets to specify build dependencies for s-gtype to ensure
> the built headers are up to date prior to running gengtype.
>
> 2021-04-02  Bill Schmidt  <wschmidt@linux.ibm.com>
>
> gcc/
> 	* Makefile.in (EXTRA_GTYPE_DEPS): New variable.
> 	(s-gtype): Depend on EXTRA_GTYPE_DEPS.
> 	* gengtype-state.c (state_writer::write_state_files_list): Add a
> 	parameter to the fileslist expression for the number of build
> 	headers to scan.
> 	(read_state_file_list): Detect build headers and strip the initial
> 	"./" from their names.
> 	* gengtype.c (build_headers): New global variable.
> 	(num_build_headers): Likewise.
> 	(open_base_files): Emit #include for each build header.
> 	(main): Detect and count build headers.
> 	* gengtype.h (build_headers): New extern variable.
> 	(num_build_headers): Likewise.
> ---
>   gcc/Makefile.in      |  5 +++--
>   gcc/gengtype-state.c | 29 +++++++++++++++++++++++------
>   gcc/gengtype.c       | 19 ++++++++++++++++---
>   gcc/gengtype.h       |  5 +++++
>   4 files changed, 47 insertions(+), 11 deletions(-)
>
> diff --git a/gcc/Makefile.in b/gcc/Makefile.in
> index 2fd94fc7dba..1a253256042 100644
> --- a/gcc/Makefile.in
> +++ b/gcc/Makefile.in
> @@ -561,6 +561,7 @@ out_object_file=@out_object_file@
>   OUT_FILE_DEPS=
>   common_out_file=$(srcdir)/common/config/@common_out_file@
>   common_out_object_file=@common_out_object_file@
> +EXTRA_GTYPE_DEPS=
>   md_file=$(srcdir)/common.md $(srcdir)/config/@md_file@
>   tm_file_list=@tm_file_list@
>   tm_include_list=@tm_include_list@
> @@ -2740,8 +2741,8 @@ s-gtyp-input: Makefile
>   	$(SHELL) $(srcdir)/../move-if-change tmp-gi.list gtyp-input.list
>   	$(STAMP) s-gtyp-input
>   
> -s-gtype: build/gengtype$(build_exeext) $(filter-out [%], $(GTFILES)) \
> -	 gtyp-input.list
> +s-gtype: $(EXTRA_GTYPE_DEPS) build/gengtype$(build_exeext) \
> +	$(filter-out [%], $(GTFILES)) gtyp-input.list
>   # First, parse all files and save a state file.
>   	$(RUN_GEN) build/gengtype$(build_exeext) $(GENGTYPE_FLAGS) \
>                       -S $(srcdir) -I gtyp-input.list -w tmp-gtype.state
> diff --git a/gcc/gengtype-state.c b/gcc/gengtype-state.c
> index 891f2e18a61..be3549dce33 100644
> --- a/gcc/gengtype-state.c
> +++ b/gcc/gengtype-state.c
> @@ -1269,7 +1269,7 @@ state_writer::write_state_files_list (void)
>     int i = 0;
>     /* Write the list of files with their lang_bitmap.  */
>     begin_s_expr ("fileslist");
> -  fprintf (state_file, "%d", (int) num_gt_files);
> +  fprintf (state_file, "%d %d", (int) num_gt_files, (int) num_build_headers);
>     for (i = 0; i < (int) num_gt_files; i++)
>       {
>         const char *cursrcrelpath = NULL;
> @@ -2456,16 +2456,20 @@ read_state_files_list (void)
>     struct state_token_st *t0 = peek_state_token (0);
>     struct state_token_st *t1 = peek_state_token (1);
>     struct state_token_st *t2 = peek_state_token (2);
> +  struct state_token_st *t3 = peek_state_token (3);
>   
>     if (state_token_kind (t0) == STOK_LEFTPAR
>         && state_token_is_name (t1, "!fileslist")
> -      && state_token_kind (t2) == STOK_INTEGER)
> +      && state_token_kind (t2) == STOK_INTEGER
> +      && state_token_kind (t3) == STOK_INTEGER)
>       {
> -      int i = 0;
> +      int i = 0, j = 0;
>         num_gt_files = t2->stok_un.stok_num;
> -      next_state_tokens (3);
> -      t0 = t1 = t2 = NULL;
> +      num_build_headers = t3->stok_un.stok_num;
> +      next_state_tokens (4);
> +      t0 = t1 = t2 = t3 = NULL;
>         gt_files = XCNEWVEC (const input_file *, num_gt_files);
> +      build_headers = XCNEWVEC (const char *, num_build_headers);
>         for (i = 0; i < (int) num_gt_files; i++)
>   	{
>   	  bool issrcfile = FALSE;
> @@ -2498,7 +2502,20 @@ read_state_files_list (void)
>   		      free (fullpath);
>   		    }
>   		  else
> -		    curgt = input_file_by_name (fnam);
> +		    {
> +		      curgt = input_file_by_name (fnam);
> +		      /* Look for a header file created during the build,
> +			 which looks like "./<filename>.h".  */
> +		      int len = strlen (fnam);
> +		      if (len >= 5 && fnam[0] == '.' && fnam[1] == '/'
> +			  && fnam[len-2] == '.' && fnam[len-1] == 'h')
> +			{
> +			  char *buf = (char *) xmalloc (len - 1);
> +			  /* Strip the leading "./" from the filename.  */
> +			  strcpy (buf, &fnam[2]);
> +			  build_headers[j++] = buf;
> +			}
> +		    }
>   		  set_lang_bitmap (curgt, bmap);
>   		  gt_files[i] = curgt;
>   		  next_state_tokens (2);
> diff --git a/gcc/gengtype.c b/gcc/gengtype.c
> index 98d4626f87e..57dc6e9fbe8 100644
> --- a/gcc/gengtype.c
> +++ b/gcc/gengtype.c
> @@ -143,6 +143,11 @@ get_ultimate_base_class (type_p s)
>   const input_file **gt_files;
>   size_t num_gt_files;
>   
> +/* Table of headers to be included in gtype-desc.c that are generated
> +   during the build.  These are identified as "./<filename>.h".  */
> +const char** build_headers;
> +size_t num_build_headers;
> +
>   /* A number of places use the name of this "gengtype.c" file for a
>      location for things that we can't rely on the source to define.
>      Make sure we can still use pointer comparison on filenames.  */
> @@ -1736,6 +1741,8 @@ open_base_files (void)
>       gtype_desc_c = create_file ("GCC", "gtype-desc.c");
>       for (ifp = ifiles; *ifp; ifp++)
>         oprintf (gtype_desc_c, "#include \"%s\"\n", *ifp);
> +    for (int j = 0; j < (int) num_build_headers; j++)
> +      oprintf (gtype_desc_c, "#include \"%s\"\n", build_headers[j]);
>   
>       /* Make sure we handle "cfun" specially.  */
>       oprintf (gtype_desc_c, "\n/* See definition in function.h.  */\n");
> @@ -5215,11 +5222,17 @@ main (int argc, char **argv)
>   			    &pos));
>   #undef POS_HERE
>         read_input_list (inputlist);
> +      num_build_headers = 0;
>         for (i = 0; i < num_gt_files; i++)
>   	{
> -	  parse_file (get_input_file_name (gt_files[i]));
> -	  DBGPRINTF ("parsed file #%d %s",
> -		     (int) i, get_input_file_name (gt_files[i]));
> +	  const char *fname = get_input_file_name (gt_files[i]);
> +	  parse_file (fname);
> +	  DBGPRINTF ("parsed file #%d %s", (int) i, fname);
> +	  /* Check if this is a header file generated during the build.  */
> +	  int len = strlen (fname);
> +	  if (len >= 5 && fname[0] == '.' && fname[1] == '/'
> +	      && fname[len-2] == '.' && fname[len-1] == 'h')
> +	    num_build_headers++;
>   	}
>         if (verbosity_level >= 1)
>   	printf ("%s parsed %d files with %d GTY types\n",
> diff --git a/gcc/gengtype.h b/gcc/gengtype.h
> index 4fe8f0f7232..ca348a3b4b1 100644
> --- a/gcc/gengtype.h
> +++ b/gcc/gengtype.h
> @@ -55,6 +55,11 @@ struct fileloc
>   extern const input_file** gt_files;
>   extern size_t num_gt_files;
>   
> +/* Table of headers to be included in gtype-desc.c that are generated
> +   during the build.  These are identified as "./<filename>.h".  */
> +extern const char** build_headers;
> +extern size_t num_build_headers;
> +
>   /* A number of places use the name of this "gengtype.c" file for a
>      location for things that we can't rely on the source to define.  We
>      also need to refer to the "system.h" file specifically.  These two

  reply	other threads:[~2021-05-11 16:01 UTC|newest]

Thread overview: 99+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-27 15:32 [PATCH 00/57] Replace the Power target-specific built-in machinery Bill Schmidt
2021-04-27 15:32 ` [PATCH 01/57] Allow targets to specify build dependencies for out_object_file Bill Schmidt
2021-04-27 15:57   ` Jakub Jelinek
2021-04-27 16:14     ` Bill Schmidt
2021-04-27 16:47       ` Jakub Jelinek
2021-04-27 17:44         ` Bill Schmidt
2021-04-27 15:32 ` [PATCH 02/57] Support scanning of build-time GC roots in gengtype Bill Schmidt
2021-05-11 16:01   ` Bill Schmidt [this message]
2021-05-20 22:24     ` Segher Boessenkool
2021-06-04 19:03       ` Bill Schmidt
2021-06-07 10:39         ` Richard Sandiford
2021-06-07 12:35           ` Bill Schmidt
2021-06-07 13:36             ` Richard Biener
2021-06-07 15:38               ` Bill Schmidt
2021-06-07 17:45                 ` Richard Biener
2021-06-07 17:48                   ` Bill Schmidt
2021-06-08 20:45                     ` Bill Schmidt
2021-06-09 10:53                       ` Richard Biener
2021-06-09 10:54                         ` Richard Biener
2021-06-09 12:53                           ` Bill Schmidt
2021-05-20 22:19   ` Segher Boessenkool
2021-04-27 15:32 ` [PATCH 03/57] rs6000: Initial create of rs6000-gen-builtins.c Bill Schmidt
2021-05-20 22:32   ` Segher Boessenkool
2021-04-27 15:32 ` [PATCH 04/57] rs6000: Add initial input files Bill Schmidt
2021-05-20 22:46   ` Segher Boessenkool
2021-05-21 12:58     ` Bill Schmidt
2021-04-27 15:32 ` [PATCH 05/57] rs6000: Add file support and functions for diagnostic support Bill Schmidt
2021-05-20 23:03   ` Segher Boessenkool
2021-05-21 13:06     ` Bill Schmidt
2021-04-27 15:32 ` [PATCH 06/57] rs6000: Add helper functions for parsing Bill Schmidt
2021-05-21 18:51   ` Segher Boessenkool
2021-05-21 20:56     ` Bill Schmidt
2021-05-21 23:43       ` Segher Boessenkool
2021-06-01 15:50         ` Bill Schmidt
2021-05-23 22:37       ` Bernhard Reutner-Fischer
2021-05-24 21:35         ` Segher Boessenkool
2021-04-27 15:32 ` [PATCH 07/57] rs6000: Add functions for matching types, part 1 of 3 Bill Schmidt
2021-05-21 20:50   ` Segher Boessenkool
2021-04-27 15:32 ` [PATCH 08/57] rs6000: Add functions for matching types, part 2 " Bill Schmidt
2021-05-21 21:36   ` Segher Boessenkool
2021-04-27 15:32 ` [PATCH 09/57] rs6000: Add functions for matching types, part 3 " Bill Schmidt
2021-05-21 21:46   ` Segher Boessenkool
2021-04-27 15:32 ` [PATCH 10/57] rs6000: Red-black tree implementation for balanced tree search Bill Schmidt
2021-05-21 22:29   ` Segher Boessenkool
2021-04-27 15:32 ` [PATCH 11/57] rs6000: Main function with stubs for parsing and output Bill Schmidt
2021-04-27 15:32 ` [PATCH 12/57] rs6000: Parsing built-in input file, part 1 of 3 Bill Schmidt
2021-04-27 15:32 ` [PATCH 13/57] rs6000: Parsing built-in input file, part 2 " Bill Schmidt
2021-04-27 15:32 ` [PATCH 14/57] rs6000: Parsing built-in input file, part 3 " Bill Schmidt
2021-04-27 15:32 ` [PATCH 15/57] rs6000: Parsing of overload input file Bill Schmidt
2021-04-27 15:32 ` [PATCH 16/57] rs6000: Build and store function type identifiers Bill Schmidt
2021-04-27 15:32 ` [PATCH 17/57] rs6000: Write output to the builtin definition include file Bill Schmidt
2021-04-27 15:32 ` [PATCH 18/57] rs6000: Write output to the builtins header file Bill Schmidt
2021-04-27 15:32 ` [PATCH 19/57] rs6000: Write output to the builtins init file, part 1 of 3 Bill Schmidt
2021-04-27 15:32 ` [PATCH 20/57] rs6000: Write output to the builtins init file, part 2 " Bill Schmidt
2021-04-27 15:32 ` [PATCH 21/57] rs6000: Write output to the builtins init file, part 3 " Bill Schmidt
2021-04-27 15:32 ` [PATCH 22/57] rs6000: Write static initializations for built-in table Bill Schmidt
2021-04-27 15:32 ` [PATCH 23/57] rs6000: Write static initializations for overload tables Bill Schmidt
2021-04-27 15:32 ` [PATCH 24/57] rs6000: Incorporate new builtins code into the build machinery Bill Schmidt
2021-04-27 15:33 ` [PATCH 25/57] rs6000: Add gengtype handling to " Bill Schmidt
2021-04-27 15:33 ` [PATCH 26/57] rs6000: Add the rest of the [altivec] stanza to the builtins file Bill Schmidt
2021-04-27 15:33 ` [PATCH 27/57] rs6000: Add VSX builtins Bill Schmidt
2021-04-27 15:33 ` [PATCH 28/57] rs6000: Add available-everywhere and ancient builtins Bill Schmidt
2021-04-27 15:33 ` [PATCH 29/57] rs6000: Add power7 and power7-64 builtins Bill Schmidt
2021-04-27 15:33 ` [PATCH 30/57] rs6000: Add power8-vector builtins Bill Schmidt
2021-04-27 15:33 ` [PATCH 31/57] rs6000: Add Power9 builtins Bill Schmidt
2021-04-27 15:33 ` [PATCH 32/57] rs6000: Add more type nodes to support builtin processing Bill Schmidt
2021-04-27 15:33 ` [PATCH 33/57] rs6000: Add Power10 builtins Bill Schmidt
2021-04-27 15:33 ` [PATCH 34/57] rs6000: Add MMA builtins Bill Schmidt
2021-04-27 15:33 ` [PATCH 35/57] rs6000: Add miscellaneous builtins Bill Schmidt
2021-04-27 15:33 ` [PATCH 36/57] rs6000: Add Cell builtins Bill Schmidt
2021-04-27 15:33 ` [PATCH 37/57] rs6000: Add remaining overloads Bill Schmidt
2021-04-27 15:33 ` [PATCH 38/57] rs6000: Execute the automatic built-in initialization code Bill Schmidt
2021-04-27 15:33 ` [PATCH 39/57] rs6000: Darwin builtin support Bill Schmidt
2021-04-30 20:05   ` Iain Sandoe
2021-04-27 15:33 ` [PATCH 40/57] rs6000: Add sanity to V2DI_type_node definitions Bill Schmidt
2021-04-27 15:33 ` [PATCH 41/57] rs6000: Always initialize vector_pair and vector_quad nodes Bill Schmidt
2021-04-27 15:33 ` [PATCH 42/57] rs6000: Handle overloads during program parsing Bill Schmidt
2021-04-27 15:33 ` [PATCH 43/57] rs6000: Handle gimple folding of target built-ins Bill Schmidt
2021-04-27 15:33 ` [PATCH 44/57] rs6000: Support for vectorizing built-in functions Bill Schmidt
2021-04-27 15:33 ` [PATCH 45/57] rs6000: Builtin expansion, part 1 Bill Schmidt
2021-04-27 15:33 ` [PATCH 46/57] rs6000: Builtin expansion, part 2 Bill Schmidt
2021-04-27 15:33 ` [PATCH 47/57] rs6000: Builtin expansion, part 3 Bill Schmidt
2021-04-27 15:33 ` [PATCH 48/57] rs6000: Builtin expansion, part 4 Bill Schmidt
2021-04-27 15:33 ` [PATCH 49/57] rs6000: Builtin expansion, part 5 Bill Schmidt
2021-04-27 15:33 ` [PATCH 50/57] rs6000: Builtin expansion, part 6 Bill Schmidt
2021-04-27 15:33 ` [PATCH 51/57] rs6000: Update rs6000_builtin_decl Bill Schmidt
2021-04-27 15:33 ` [PATCH 52/57] rs6000: Miscellaneous uses of rs6000_builtin_decls_x Bill Schmidt
2021-04-27 15:33 ` [PATCH 53/57] rs6000: Debug support Bill Schmidt
2021-04-27 15:33 ` [PATCH 54/57] rs6000: Update altivec.h for automated interfaces Bill Schmidt
2021-04-27 15:33 ` [PATCH 55/57] rs6000: Test case adjustments Bill Schmidt
2021-04-27 15:33 ` [PATCH 56/57] rs6000: Enable the new builtin support Bill Schmidt
2021-04-27 15:33 ` [PATCH 57/57] rs6000: Adjust to late-breaking change Bill Schmidt
2021-04-30 12:38 ` [PATCH "58/57"] rs6000: Avoid problems with undefined decimal float types Bill Schmidt
2021-04-30 12:42 ` [PATCH "59/57"] rs6000: Fix builtins that should have been available everywhere Bill Schmidt
2021-04-30 18:55 ` [PATCH "60/57"] rs6000: Fix AltiVec builtin marked as VSX Bill Schmidt
2021-05-11 15:57 ` [PATCH 00/57] Replace the Power target-specific built-in machinery Bill Schmidt
2021-05-11 23:20   ` Segher Boessenkool
2021-05-20 21:57 ` Segher Boessenkool
2021-05-21 12:53   ` Bill Schmidt

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=c53d1e1f-ac85-b49c-624c-8b59a6a65ba3@linux.ibm.com \
    --to=wschmidt@linux.ibm.com \
    --cc=dje.gcc@gmail.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=jakub@redhat.com \
    --cc=jlaw@tachyum.com \
    --cc=segher@kernel.crashing.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).