On 5/6/20 2:52 PM, Richard Biener wrote:
On Wed, May 6, 2020 at 2:08 PM Martin Liška <mli...@suse.cz> wrote:
Hi.
The patch splits arguments in getenv ("MAKE") so that one can use:
$ MAKE="make -s" gcc main.o -flto=16
Right now it fails due to:
[pid 6004] execve("/home/marxin/Programming/script-misc/make -s", ["make -s", "-f",
"/tmp/ccNpRBlZ.mk", "-j16", "all"], 0x4b69b0 /* 82 vars */) = -1 ENOENT (No such file or directory)
I've tested the patch for lto.exp and now I'm doing a proper bootstrap.
Ready after tests?
+ const char *make = getenv ("MAKE");
+ unsigned argc = 0;
+ struct obstack make_argv_obstack;
+ obstack_init (&make_argv_obstack);
+
+ if (make)
+ {
+ argv = buildargv (make);
you are overwriting the argv parameter here, I suggest to use a new
local variable here.
Oh.
buildargv can fail in which case it returns NULL so I suggest
to fall back to "make" in that case.
+ for (; argv[argc]; argc++)
+ obstack_ptr_grow (&make_argv_obstack, argv[argc]);
argc is only used in this scope so declare it in the for() loop?
btw, I suggest to simply re-use argv_obstack here.
Done.
+ const char **argv = XOBFINISH (&make_argv_obstack, const char **);
you are shadowing argv here, what's wrong with using new_argv?
The shadowing in the function is really bad, it's a long function.
+
+ pex = collect_execute (argv[0], CONST_CAST (char **, argv),
NULL, NULL, PEX_SEARCH, false);
- do_wait (new_argv[0], pex);
+ do_wait (argv[0], pex);
+ obstack_free (&make_argv_obstack, NULL);
after pex is finished the argv allocated via buildargv should be freed
with freeargv
Done.
I hope it's better now?
Martin
Richard.
+ }
Thanks,
Martin
gcc/ChangeLog:
2020-05-06 Martin Liska <mli...@suse.cz>
* lto-wrapper.c: Split arguments of MAKE environment
variable.
---
gcc/lto-wrapper.c | 35 ++++++++++++++++++++++++-----------
1 file changed, 24 insertions(+), 11 deletions(-)
>From d2ded95342f543c800215e4e9e2d66332183bf8b Mon Sep 17 00:00:00 2001
From: Martin Liska <mli...@suse.cz>
Date: Wed, 6 May 2020 13:59:23 +0200
Subject: [PATCH] lto-wrapper: split arguments of getenv ("MAKE").
gcc/ChangeLog:
2020-05-06 Martin Liska <mli...@suse.cz>
* lto-wrapper.c: Split arguments of MAKE environment
variable.
---
gcc/lto-wrapper.c | 27 ++++++++++++++++++---------
1 file changed, 18 insertions(+), 9 deletions(-)
diff --git a/gcc/lto-wrapper.c b/gcc/lto-wrapper.c
index 19d0c224dad..e34b6979d1f 100644
--- a/gcc/lto-wrapper.c
+++ b/gcc/lto-wrapper.c
@@ -1894,23 +1894,32 @@ cont:
putenv (xstrdup ("MAKEFLAGS="));
putenv (xstrdup ("MFLAGS="));
}
- new_argv[0] = getenv ("MAKE");
- if (!new_argv[0])
- new_argv[0] = "make";
- new_argv[1] = "-f";
- new_argv[2] = makefile;
- i = 3;
+
+ char **make_argv = buildargv (getenv ("MAKE"));
+ if (make_argv)
+ {
+ for (unsigned argc = 0; make_argv[argc]; argc++)
+ obstack_ptr_grow (&argv_obstack, make_argv[argc]);
+ }
+ else
+ obstack_ptr_grow (&argv_obstack, "make");
+
+ obstack_ptr_grow (&argv_obstack, "-f");
+ obstack_ptr_grow (&argv_obstack, makefile);
if (!jobserver)
{
snprintf (jobs, 31, "-j%ld",
auto_parallel ? nthreads_var : parallel);
- new_argv[i++] = jobs;
+ obstack_ptr_grow (&argv_obstack, jobs);
}
- new_argv[i++] = "all";
- new_argv[i++] = NULL;
+ obstack_ptr_grow (&argv_obstack, "all");
+ obstack_ptr_grow (&argv_obstack, NULL);
+ new_argv = XOBFINISH (&argv_obstack, const char **);
+
pex = collect_execute (new_argv[0], CONST_CAST (char **, new_argv),
NULL, NULL, PEX_SEARCH, false);
do_wait (new_argv[0], pex);
+ freeargv (make_argv);
maybe_unlink (makefile);
makefile = NULL;
for (i = 0; i < nr; ++i)
--
2.26.2