From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) by sourceware.org (Postfix) with ESMTPS id 08DBF3896C27 for ; Tue, 11 May 2021 16:01:26 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 08DBF3896C27 Received: from pps.filterd (m0098409.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 14BFhuoH082807; Tue, 11 May 2021 12:01:26 -0400 Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com with ESMTP id 38fvts0hxa-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 11 May 2021 12:01:26 -0400 Received: from m0098409.ppops.net (m0098409.ppops.net [127.0.0.1]) by pps.reinject (8.16.0.43/8.16.0.43) with SMTP id 14BFiUjf086284; Tue, 11 May 2021 12:01:25 -0400 Received: from ppma04wdc.us.ibm.com (1a.90.2fa9.ip4.static.sl-reverse.com [169.47.144.26]) by mx0a-001b2d01.pphosted.com with ESMTP id 38fvts0hw8-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 11 May 2021 12:01:25 -0400 Received: from pps.filterd (ppma04wdc.us.ibm.com [127.0.0.1]) by ppma04wdc.us.ibm.com (8.16.0.43/8.16.0.43) with SMTP id 14BFwA1u019861; Tue, 11 May 2021 16:01:24 GMT Received: from b01cxnp22034.gho.pok.ibm.com (b01cxnp22034.gho.pok.ibm.com [9.57.198.24]) by ppma04wdc.us.ibm.com with ESMTP id 38dj996yu0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 11 May 2021 16:01:24 +0000 Received: from b01ledav004.gho.pok.ibm.com (b01ledav004.gho.pok.ibm.com [9.57.199.109]) by b01cxnp22034.gho.pok.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 14BG1NTI35717614 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 11 May 2021 16:01:24 GMT Received: from b01ledav004.gho.pok.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id E660E112065; Tue, 11 May 2021 16:01:23 +0000 (GMT) Received: from b01ledav004.gho.pok.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 4A1D3112061; Tue, 11 May 2021 16:01:23 +0000 (GMT) Received: from Bills-MacBook-Pro.local (unknown [9.211.137.77]) by b01ledav004.gho.pok.ibm.com (Postfix) with ESMTP; Tue, 11 May 2021 16:01:23 +0000 (GMT) Reply-To: wschmidt@linux.ibm.com Subject: Re: [PATCH 02/57] Support scanning of build-time GC roots in gengtype To: gcc-patches@gcc.gnu.org Cc: segher@kernel.crashing.org, dje.gcc@gmail.com, jakub@redhat.com, jlaw@tachyum.com References: <26d623c5117d22fbaea2ce1a445ba2d32df437ad.1619537141.git.wschmidt@linux.ibm.com> From: Bill Schmidt Message-ID: Date: Tue, 11 May 2021 11:01:22 -0500 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.10.1 MIME-Version: 1.0 In-Reply-To: <26d623c5117d22fbaea2ce1a445ba2d32df437ad.1619537141.git.wschmidt@linux.ibm.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-GB X-TM-AS-GCONF: 00 X-Proofpoint-GUID: YOcjtaYl25nwS9Qdd1SpN6ItpJ3p7e3b X-Proofpoint-ORIG-GUID: e4DOKuOGqsBUpjn-CWk-HZ2TNwJ7-k50 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.391, 18.0.761 definitions=2021-05-11_02:2021-05-11, 2021-05-11 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 adultscore=0 bulkscore=0 mlxlogscore=999 lowpriorityscore=0 clxscore=1015 spamscore=0 impostorscore=0 phishscore=0 malwarescore=0 mlxscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2104190000 definitions=main-2105110112 X-Spam-Status: No, score=-12.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_EF, GIT_PATCH_0, NICE_REPLY_A, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 May 2021 16:01:29 -0000 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 > > 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 "./.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 "./.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 "./.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