[PATCH] fixincludes: don't abort() on access failure [PR103306]

Xi Ruoyao xry111@mengyan1223.wang
Tue Nov 23 09:31:18 GMT 2021


On Mon, 2021-11-22 at 17:37 -0700, Jeff Law wrote:
> 
> 
> On 11/18/2021 4:01 AM, Xi Ruoyao via Gcc-patches wrote:
> > Some distro may ship dangling symlinks in include directories,
> > triggers
> > the access failure.  Skip it and continue to next header instead of
> > being to panic.
> > 
> > Restore to old behavior before r12-5234 but without resurrecting the
> > problematic getcwd() call, by using the environment variable "INPUT"
> > exported by fixinc.sh.
> > 
> > Tested on x86_64-linux-gnu, with a dangling symlink in /usr/include.
> > 
> > fixincludes/
> > 
> >         PR bootstrap/103306
> >         * fixincl.c (process): Don't call abort().
> > ---
> >   fixincludes/fixincl.c | 15 ++++++++++++---
> >   1 file changed, 12 insertions(+), 3 deletions(-)
> > 
> > diff --git a/fixincludes/fixincl.c b/fixincludes/fixincl.c
> > index a17b65866c3..81939ee5ffa 100644
> > --- a/fixincludes/fixincl.c
> > +++ b/fixincludes/fixincl.c
> > @@ -1352,10 +1352,19 @@ process (void)
> >   
> >     if (access (pz_curr_file, R_OK) != 0)
> >       {
> > -      /* Some really strange error happened.  */
> > -      fprintf (stderr, "Cannot access %s: %s\n", pz_curr_file,
> > +      /* It may happens if for e. g. the distro ships some broken symlinks
> > +       * in /usr/include.  */
> > +
> > +      /* "INPUT" is exported in fixinc.sh, which is the pwd where fixincl
> > +       * runs.  It's used instead of getcwd to avoid allocating a buffer
> > +       * with unknown length.  */
> Formatting nits.  We don't use '*' at the start of comment lines. Drop
> the '*' like this
> 
>    /* blah blah blah
>       more text.  */

Strangely contrib/check_GNU_style.sh does not warn about this.

> 
> > +      const char *cwd = getenv ("INPUT");
> > +      if (!cwd)
> > +       cwd = "the working directory";
> > +
> > +      fprintf (stderr, "Cannot access %s from %s: %s\n", pz_curr_file, cwd,
> >                xstrerror (errno));
> > -      abort ();
> > +      return;
> >       }
> If INPUT is always exported, why not just print it? ie, would CWD after 
> actually be NULL?

INPUT is set by fixinc.sh.  During GCC building process fixincl is
always invoked by fixinc.sh.  However someone may run fixincl executable
directly for debugging.

-- 
Xi Ruoyao <xry111@mengyan1223.wang>
School of Aerospace Science and Technology, Xidian University


More information about the Gcc-patches mailing list