Re: [PATCH] gcc-ar: Handle response files properly [PR77576]

2023-07-31 Thread Jeff Law via Gcc-patches




On 7/28/23 15:11, Joseph Myers wrote:

This patch is OK.
I fixed the whitespace errors in the patch as well as a couple minor 
ChangeLog entry items and pushed Costas's patch to the trunk.

jeff


Re: [PATCH] gcc-ar: Handle response files properly [PR77576]

2023-07-28 Thread Joseph Myers
This patch is OK.

-- 
Joseph S. Myers
jos...@codesourcery.com


Re: [PATCH] gcc-ar: Handle response files properly [PR77576]

2023-07-28 Thread Costas Argyris via Gcc-patches
ping

On Fri, 14 Jul 2023 at 09:05, Costas Argyris 
wrote:

> Pinging to try and get this bug in gcc-ar fixed.
>
> Note that the patch posted as an attachment in
>
> https://gcc.gnu.org/pipermail/gcc-patches/2023-July/623400.html
>
> is exactly the same as the patch embedded in
>
> https://gcc.gnu.org/pipermail/gcc-patches/2023-July/623855.html
>
> and the one posted in the PR itself
>
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77576
>
> On Fri, 7 Jul 2023 at 13:00, Costas Argyris 
> wrote:
>
>> Bootstrapped successfully on x86_64-pc-linux-gnu
>>
>> On Fri, 7 Jul 2023 at 11:33, Costas Argyris 
>> wrote:
>>
>>> Problem: gcc-ar fails when a @file is passed to it:
>>>
>>> $ cat rsp
>>> --version
>>> $ gcc-ar @rsp
>>> /usr/bin/ar: invalid option -- '@'
>>>
>>> This is because a dash '-' is prepended to the first
>>> argument if it doesn't start with one, resulting in
>>> the wrong call 'ar -@rsp'.
>>>
>>> Fix: Expand argv to get rid of any @files and if any
>>> expansions were made, pass everything through a
>>> temporary response file.
>>>
>>> $ gcc-ar @rsp
>>> GNU ar (GNU Binutils for Debian) 2.35.2
>>> ...
>>>
>>>
>>> PR gcc-ar/77576
>>> * gcc/gcc-ar.cc (main): Expand argv and use
>>> temporary response file to call ar if any
>>> expansions were made.
>>> ---
>>>  gcc/gcc-ar.cc | 47 +++
>>>  1 file changed, 47 insertions(+)
>>>
>>> diff --git a/gcc/gcc-ar.cc b/gcc/gcc-ar.cc
>>> index 4e4c525927d..417c4913793 100644
>>> --- a/gcc/gcc-ar.cc
>>> +++ b/gcc/gcc-ar.cc
>>> @@ -135,6 +135,10 @@ main (int ac, char **av)
>>>int k, status, err;
>>>const char *err_msg;
>>>const char **nargv;
>>> +  char **old_argv;
>>> +  const char *rsp_file = NULL;
>>> +  const char *rsp_arg = NULL;
>>> +  const char *rsp_argv[3];
>>>bool is_ar = !strcmp (PERSONALITY, "ar");
>>>int exit_code = FATAL_EXIT_CODE;
>>>int i;
>>> @@ -209,6 +213,13 @@ main (int ac, char **av)
>>>   }
>>>  }
>>>
>>> +  /* Expand any @files before modifying the command line
>>> + and use a temporary response file if there were any.  */
>>> +  old_argv = av;
>>> +  expandargv (, );
>>> +  if (av != old_argv)
>>> +rsp_file = make_temp_file ("");
>>> +
>>>/* Prepend - if necessary.  */
>>>if (is_ar && av[1] && av[1][0] != '-')
>>>  av[1] = concat ("-", av[1], NULL);
>>> @@ -225,6 +236,39 @@ main (int ac, char **av)
>>>  nargv[j + k] = av[k];
>>>nargv[j + k] = NULL;
>>>
>>> +  /* If @file was passed, put nargv into the temporary response
>>> + file and then change it to a single @FILE argument, where
>>> + FILE is the temporary filename.  */
>>> +  if (rsp_file)
>>> +{
>>> +  FILE *f;
>>> +  int status;
>>> +  f = fopen (rsp_file, "w");
>>> +  if (f == NULL)
>>> +{
>>> +  fprintf (stderr, "Cannot open temporary file %s\n", rsp_file);
>>> +  exit (1);
>>> +}
>>> +  status = writeargv (
>>> +  CONST_CAST2 (char * const *, const char **, nargv) + 1, f);
>>> +  if (status)
>>> +{
>>> +  fprintf (stderr, "Cannot write to temporary file %s\n",
>>> rsp_file);
>>> +  exit (1);
>>> +}
>>> +  status = fclose (f);
>>> +  if (EOF == status)
>>> +{
>>> +  fprintf (stderr, "Cannot close temporary file %s\n",
>>> rsp_file);
>>> +  exit (1);
>>> +}
>>> +  rsp_arg = concat ("@", rsp_file, NULL);
>>> +  rsp_argv[0] = nargv[0];
>>> +  rsp_argv[1] = rsp_arg;
>>> +  rsp_argv[2] = NULL;
>>> +  nargv = rsp_argv;
>>> +}
>>> +
>>>/* Run utility */
>>>/* ??? the const is misplaced in pex_one's argv? */
>>>err_msg = pex_one (PEX_LAST|PEX_SEARCH,
>>> @@ -249,5 +293,8 @@ main (int ac, char **av)
>>>else
>>>  exit_code = SUCCESS_EXIT_CODE;
>>>
>>> +  if (rsp_file)
>>> +unlink (rsp_file);
>>> +
>>>return exit_code;
>>>  }
>>> --
>>> 2.30.2
>>>
>>


Re: [PATCH] gcc-ar: Handle response files properly [PR77576]

2023-07-14 Thread Costas Argyris via Gcc-patches
Pinging to try and get this bug in gcc-ar fixed.

Note that the patch posted as an attachment in

https://gcc.gnu.org/pipermail/gcc-patches/2023-July/623400.html

is exactly the same as the patch embedded in

https://gcc.gnu.org/pipermail/gcc-patches/2023-July/623855.html

and the one posted in the PR itself

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77576

On Fri, 7 Jul 2023 at 13:00, Costas Argyris 
wrote:

> Bootstrapped successfully on x86_64-pc-linux-gnu
>
> On Fri, 7 Jul 2023 at 11:33, Costas Argyris 
> wrote:
>
>> Problem: gcc-ar fails when a @file is passed to it:
>>
>> $ cat rsp
>> --version
>> $ gcc-ar @rsp
>> /usr/bin/ar: invalid option -- '@'
>>
>> This is because a dash '-' is prepended to the first
>> argument if it doesn't start with one, resulting in
>> the wrong call 'ar -@rsp'.
>>
>> Fix: Expand argv to get rid of any @files and if any
>> expansions were made, pass everything through a
>> temporary response file.
>>
>> $ gcc-ar @rsp
>> GNU ar (GNU Binutils for Debian) 2.35.2
>> ...
>>
>>
>> PR gcc-ar/77576
>> * gcc/gcc-ar.cc (main): Expand argv and use
>> temporary response file to call ar if any
>> expansions were made.
>> ---
>>  gcc/gcc-ar.cc | 47 +++
>>  1 file changed, 47 insertions(+)
>>
>> diff --git a/gcc/gcc-ar.cc b/gcc/gcc-ar.cc
>> index 4e4c525927d..417c4913793 100644
>> --- a/gcc/gcc-ar.cc
>> +++ b/gcc/gcc-ar.cc
>> @@ -135,6 +135,10 @@ main (int ac, char **av)
>>int k, status, err;
>>const char *err_msg;
>>const char **nargv;
>> +  char **old_argv;
>> +  const char *rsp_file = NULL;
>> +  const char *rsp_arg = NULL;
>> +  const char *rsp_argv[3];
>>bool is_ar = !strcmp (PERSONALITY, "ar");
>>int exit_code = FATAL_EXIT_CODE;
>>int i;
>> @@ -209,6 +213,13 @@ main (int ac, char **av)
>>   }
>>  }
>>
>> +  /* Expand any @files before modifying the command line
>> + and use a temporary response file if there were any.  */
>> +  old_argv = av;
>> +  expandargv (, );
>> +  if (av != old_argv)
>> +rsp_file = make_temp_file ("");
>> +
>>/* Prepend - if necessary.  */
>>if (is_ar && av[1] && av[1][0] != '-')
>>  av[1] = concat ("-", av[1], NULL);
>> @@ -225,6 +236,39 @@ main (int ac, char **av)
>>  nargv[j + k] = av[k];
>>nargv[j + k] = NULL;
>>
>> +  /* If @file was passed, put nargv into the temporary response
>> + file and then change it to a single @FILE argument, where
>> + FILE is the temporary filename.  */
>> +  if (rsp_file)
>> +{
>> +  FILE *f;
>> +  int status;
>> +  f = fopen (rsp_file, "w");
>> +  if (f == NULL)
>> +{
>> +  fprintf (stderr, "Cannot open temporary file %s\n", rsp_file);
>> +  exit (1);
>> +}
>> +  status = writeargv (
>> +  CONST_CAST2 (char * const *, const char **, nargv) + 1, f);
>> +  if (status)
>> +{
>> +  fprintf (stderr, "Cannot write to temporary file %s\n",
>> rsp_file);
>> +  exit (1);
>> +}
>> +  status = fclose (f);
>> +  if (EOF == status)
>> +{
>> +  fprintf (stderr, "Cannot close temporary file %s\n", rsp_file);
>> +  exit (1);
>> +}
>> +  rsp_arg = concat ("@", rsp_file, NULL);
>> +  rsp_argv[0] = nargv[0];
>> +  rsp_argv[1] = rsp_arg;
>> +  rsp_argv[2] = NULL;
>> +  nargv = rsp_argv;
>> +}
>> +
>>/* Run utility */
>>/* ??? the const is misplaced in pex_one's argv? */
>>err_msg = pex_one (PEX_LAST|PEX_SEARCH,
>> @@ -249,5 +293,8 @@ main (int ac, char **av)
>>else
>>  exit_code = SUCCESS_EXIT_CODE;
>>
>> +  if (rsp_file)
>> +unlink (rsp_file);
>> +
>>return exit_code;
>>  }
>> --
>> 2.30.2
>>
>


Re: [PATCH] gcc-ar: Handle response files properly [PR77576]

2023-07-07 Thread Costas Argyris via Gcc-patches
Bootstrapped successfully on x86_64-pc-linux-gnu

On Fri, 7 Jul 2023 at 11:33, Costas Argyris 
wrote:

> Problem: gcc-ar fails when a @file is passed to it:
>
> $ cat rsp
> --version
> $ gcc-ar @rsp
> /usr/bin/ar: invalid option -- '@'
>
> This is because a dash '-' is prepended to the first
> argument if it doesn't start with one, resulting in
> the wrong call 'ar -@rsp'.
>
> Fix: Expand argv to get rid of any @files and if any
> expansions were made, pass everything through a
> temporary response file.
>
> $ gcc-ar @rsp
> GNU ar (GNU Binutils for Debian) 2.35.2
> ...
>
>
> PR gcc-ar/77576
> * gcc/gcc-ar.cc (main): Expand argv and use
> temporary response file to call ar if any
> expansions were made.
> ---
>  gcc/gcc-ar.cc | 47 +++
>  1 file changed, 47 insertions(+)
>
> diff --git a/gcc/gcc-ar.cc b/gcc/gcc-ar.cc
> index 4e4c525927d..417c4913793 100644
> --- a/gcc/gcc-ar.cc
> +++ b/gcc/gcc-ar.cc
> @@ -135,6 +135,10 @@ main (int ac, char **av)
>int k, status, err;
>const char *err_msg;
>const char **nargv;
> +  char **old_argv;
> +  const char *rsp_file = NULL;
> +  const char *rsp_arg = NULL;
> +  const char *rsp_argv[3];
>bool is_ar = !strcmp (PERSONALITY, "ar");
>int exit_code = FATAL_EXIT_CODE;
>int i;
> @@ -209,6 +213,13 @@ main (int ac, char **av)
>   }
>  }
>
> +  /* Expand any @files before modifying the command line
> + and use a temporary response file if there were any.  */
> +  old_argv = av;
> +  expandargv (, );
> +  if (av != old_argv)
> +rsp_file = make_temp_file ("");
> +
>/* Prepend - if necessary.  */
>if (is_ar && av[1] && av[1][0] != '-')
>  av[1] = concat ("-", av[1], NULL);
> @@ -225,6 +236,39 @@ main (int ac, char **av)
>  nargv[j + k] = av[k];
>nargv[j + k] = NULL;
>
> +  /* If @file was passed, put nargv into the temporary response
> + file and then change it to a single @FILE argument, where
> + FILE is the temporary filename.  */
> +  if (rsp_file)
> +{
> +  FILE *f;
> +  int status;
> +  f = fopen (rsp_file, "w");
> +  if (f == NULL)
> +{
> +  fprintf (stderr, "Cannot open temporary file %s\n", rsp_file);
> +  exit (1);
> +}
> +  status = writeargv (
> +  CONST_CAST2 (char * const *, const char **, nargv) + 1, f);
> +  if (status)
> +{
> +  fprintf (stderr, "Cannot write to temporary file %s\n",
> rsp_file);
> +  exit (1);
> +}
> +  status = fclose (f);
> +  if (EOF == status)
> +{
> +  fprintf (stderr, "Cannot close temporary file %s\n", rsp_file);
> +  exit (1);
> +}
> +  rsp_arg = concat ("@", rsp_file, NULL);
> +  rsp_argv[0] = nargv[0];
> +  rsp_argv[1] = rsp_arg;
> +  rsp_argv[2] = NULL;
> +  nargv = rsp_argv;
> +}
> +
>/* Run utility */
>/* ??? the const is misplaced in pex_one's argv? */
>err_msg = pex_one (PEX_LAST|PEX_SEARCH,
> @@ -249,5 +293,8 @@ main (int ac, char **av)
>else
>  exit_code = SUCCESS_EXIT_CODE;
>
> +  if (rsp_file)
> +unlink (rsp_file);
> +
>return exit_code;
>  }
> --
> 2.30.2
>


Re: [PATCH] gcc-ar: Handle response files properly [PR77576]

2023-07-07 Thread Costas Argyris via Gcc-patches
Problem: gcc-ar fails when a @file is passed to it:

$ cat rsp
--version
$ gcc-ar @rsp
/usr/bin/ar: invalid option -- '@'

This is because a dash '-' is prepended to the first
argument if it doesn't start with one, resulting in
the wrong call 'ar -@rsp'.

Fix: Expand argv to get rid of any @files and if any
expansions were made, pass everything through a
temporary response file.

$ gcc-ar @rsp
GNU ar (GNU Binutils for Debian) 2.35.2
...


PR gcc-ar/77576
* gcc/gcc-ar.cc (main): Expand argv and use
temporary response file to call ar if any
expansions were made.
---
 gcc/gcc-ar.cc | 47 +++
 1 file changed, 47 insertions(+)

diff --git a/gcc/gcc-ar.cc b/gcc/gcc-ar.cc
index 4e4c525927d..417c4913793 100644
--- a/gcc/gcc-ar.cc
+++ b/gcc/gcc-ar.cc
@@ -135,6 +135,10 @@ main (int ac, char **av)
   int k, status, err;
   const char *err_msg;
   const char **nargv;
+  char **old_argv;
+  const char *rsp_file = NULL;
+  const char *rsp_arg = NULL;
+  const char *rsp_argv[3];
   bool is_ar = !strcmp (PERSONALITY, "ar");
   int exit_code = FATAL_EXIT_CODE;
   int i;
@@ -209,6 +213,13 @@ main (int ac, char **av)
  }
 }

+  /* Expand any @files before modifying the command line
+ and use a temporary response file if there were any.  */
+  old_argv = av;
+  expandargv (, );
+  if (av != old_argv)
+rsp_file = make_temp_file ("");
+
   /* Prepend - if necessary.  */
   if (is_ar && av[1] && av[1][0] != '-')
 av[1] = concat ("-", av[1], NULL);
@@ -225,6 +236,39 @@ main (int ac, char **av)
 nargv[j + k] = av[k];
   nargv[j + k] = NULL;

+  /* If @file was passed, put nargv into the temporary response
+ file and then change it to a single @FILE argument, where
+ FILE is the temporary filename.  */
+  if (rsp_file)
+{
+  FILE *f;
+  int status;
+  f = fopen (rsp_file, "w");
+  if (f == NULL)
+{
+  fprintf (stderr, "Cannot open temporary file %s\n", rsp_file);
+  exit (1);
+}
+  status = writeargv (
+  CONST_CAST2 (char * const *, const char **, nargv) + 1, f);
+  if (status)
+{
+  fprintf (stderr, "Cannot write to temporary file %s\n",
rsp_file);
+  exit (1);
+}
+  status = fclose (f);
+  if (EOF == status)
+{
+  fprintf (stderr, "Cannot close temporary file %s\n", rsp_file);
+  exit (1);
+}
+  rsp_arg = concat ("@", rsp_file, NULL);
+  rsp_argv[0] = nargv[0];
+  rsp_argv[1] = rsp_arg;
+  rsp_argv[2] = NULL;
+  nargv = rsp_argv;
+}
+
   /* Run utility */
   /* ??? the const is misplaced in pex_one's argv? */
   err_msg = pex_one (PEX_LAST|PEX_SEARCH,
@@ -249,5 +293,8 @@ main (int ac, char **av)
   else
 exit_code = SUCCESS_EXIT_CODE;

+  if (rsp_file)
+unlink (rsp_file);
+
   return exit_code;
 }
-- 
2.30.2


Re: [PATCH] gcc-ar: Handle response files properly [PR77576]

2023-07-03 Thread Costas Argyris via Gcc-patches
I should also add that for a rsp file that contains just "--version":

gcc-ar @rsp

fails without the patch (current problem) and successfully prints
the version info with it.


On Sat, 1 Jul 2023 at 22:45, Costas Argyris 
wrote:

> Basically implementing what Andrew said in the PR:
>
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77576
>
> If @file has been passed to gcc-ar, do the following:
>
> 1) Expand it to get an argv without any @files.
> 2) Then apply the plugin modifications to argv.
> 3) Create temporary response file.
> 4) Put the modified argv in the temporary file.
> 5) Call ar with @tmp.
> 6) Delete the temporary response file.
>


[PATCH] gcc-ar: Handle response files properly [PR77576]

2023-07-01 Thread Costas Argyris via Gcc-patches
Basically implementing what Andrew said in the PR:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77576

If @file has been passed to gcc-ar, do the following:

1) Expand it to get an argv without any @files.
2) Then apply the plugin modifications to argv.
3) Create temporary response file.
4) Put the modified argv in the temporary file.
5) Call ar with @tmp.
6) Delete the temporary response file.


0001-gcc-ar-Handle-response-files-properly-PR77576.patch
Description: Binary data