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

Jeff Law jeffreyalaw@gmail.com
Tue Nov 23 16:12:45 GMT 2021



On 11/23/2021 2:31 AM, Xi Ruoyao wrote:
> 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.
It should.  Though in fairness, that checker is new relative to the 
overall live of the GCC project and obviously not 100% complete. Patches 
are always appreciated :-)



>
>>> +      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.
Good point.  With the formatting nit fixed, this is fine for the trunk.

Thanks,
jeff



More information about the Gcc-patches mailing list