On 8/2/19 9:44 AM, Jakub Jelinek wrote: > On Fri, Aug 02, 2019 at 08:30:47AM +0200, Martin Liška wrote: >> On 8/1/19 4:41 PM, Jakub Jelinek wrote: >>> On Thu, Aug 01, 2019 at 04:34:09PM +0200, Martin Liška wrote: >>>> Ok, after deeper discussion with Honza, I would like to suggest the >>>> original >>>> patch that was about proper detection of jobserver. >>>> >>>> Can you please Jakub test the patch in your environment? >>> >>> Isn't this done too late (as in, doesn't the driver at that moment already >>> have some files newly openend, like e.g. the @ option files? >> >> You are right, I've reworked that. Good observation. > > I was actually wrong, because while expandargv fopens new file descriptors > when processing the options, it fcloses them too before it returns. > > Sorry for that.
Ah ok. > > Can you strace if other fds are opened and not closed in the spot you had it > before? Advantage of doing it there is that it will not be done for all the > -E/-S/-c compilations when the linker is not spawned. I've used the same trick which you used and I'm attaching the output. I believe it's fine, I can't see any opened fd by GCC. Martin > >>> >>>> + = ((sscanf (n, "--jobserver-auth=%d,%d", &rfd, &wfd) == 2) >>> >>> No need to wrap sscanf (...) == 2 into ()s. Also, you've already done >>> a strstr, what is the point in verifying it once again that it starts with >>> --jobserver-auth= string? >>> And in the lto-writer.c code there is no space between sscanf and (. >> >> Yep, I simplified that. > > Thanks. Note, your patch from yesterday also passed testing. > > Jakub >
dropping MAKEFLAGS in kw -j2 --jobserver-auth=3,4 -- total 0 lrwx------ 1 marxin users 64 Aug 2 10:33 0 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 1 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 2 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 3 -> /dev/pts/2 dropping MAKEFLAGS in kw -j2 --jobserver-auth=3,4 -- total 0 lrwx------ 1 marxin users 64 Aug 2 10:33 0 -> /dev/pts/5 lrwx------ 1 marxin users 64 Aug 2 10:33 1 -> /dev/pts/5 lrwx------ 1 marxin users 64 Aug 2 10:33 2 -> /dev/pts/5 lrwx------ 1 marxin users 64 Aug 2 10:33 3 -> /dev/pts/2 dropping MAKEFLAGS in kw -j2 --jobserver-auth=3,4 -- total 0 lrwx------ 1 marxin users 64 Aug 2 10:33 0 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 1 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 2 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 3 -> /dev/pts/2 dropping MAKEFLAGS in kw -j2 --jobserver-auth=3,4 -- total 0 lrwx------ 1 marxin users 64 Aug 2 10:33 0 -> /dev/pts/5 lrwx------ 1 marxin users 64 Aug 2 10:33 1 -> /dev/pts/5 lrwx------ 1 marxin users 64 Aug 2 10:33 2 -> /dev/pts/5 lrwx------ 1 marxin users 64 Aug 2 10:33 3 -> /dev/pts/2 dropping MAKEFLAGS in w -j16 --jobserver-auth=4,5 total 0 lrwx------ 1 marxin users 64 Aug 2 10:33 0 -> /dev/pts/5 l-wx------ 1 marxin users 64 Aug 2 10:33 1 -> /tmp/ccdu6rwA lr-x------ 1 marxin users 64 Aug 2 10:33 14 -> /dev/shm/objdir/gcc/libgcc_s.so lr-x------ 1 marxin users 64 Aug 2 10:33 17 -> /usr/lib64/libc.so l-wx------ 1 marxin users 64 Aug 2 10:33 2 -> /tmp/cc9oWLNw.le lr-x------ 1 marxin users 64 Aug 2 10:33 22 -> /dev/shm/objdir/gcc/libgcc_s.so lrwx------ 1 marxin users 64 Aug 2 10:33 3 -> /dev/pts/2 lr-x------ 1 marxin users 64 Aug 2 10:33 9 -> /usr/lib64/libm.so dropping MAKEFLAGS in w -j16 --jobserver-auth=4,5 total 0 lrwx------ 1 marxin users 64 Aug 2 10:33 0 -> /dev/pts/4 l-wx------ 1 marxin users 64 Aug 2 10:33 1 -> /tmp/ccKEFRGz lr-x------ 1 marxin users 64 Aug 2 10:33 10 -> /usr/lib64/libm.so lr-x------ 1 marxin users 64 Aug 2 10:33 14 -> /dev/shm/objdir/gcc/libgcc_s.so lr-x------ 1 marxin users 64 Aug 2 10:33 18 -> /usr/lib64/libc.so l-wx------ 1 marxin users 64 Aug 2 10:33 2 -> /tmp/ccv4FRky.le lr-x------ 1 marxin users 64 Aug 2 10:33 22 -> /dev/shm/objdir/gcc/libgcc_s.so lrwx------ 1 marxin users 64 Aug 2 10:33 3 -> /dev/pts/2 dropping MAKEFLAGS in kw -j2 --jobserver-auth=3,4 -- total 0 lrwx------ 1 marxin users 64 Aug 2 10:33 0 -> /dev/pts/5 lrwx------ 1 marxin users 64 Aug 2 10:33 1 -> /dev/pts/5 lrwx------ 1 marxin users 64 Aug 2 10:33 2 -> /dev/pts/5 lrwx------ 1 marxin users 64 Aug 2 10:33 3 -> /dev/pts/2 dropping MAKEFLAGS in kw -j2 --jobserver-auth=3,4 -- total 0 lrwx------ 1 marxin users 64 Aug 2 10:33 0 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 1 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 2 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 3 -> /dev/pts/2 dropping MAKEFLAGS in w -j16 --jobserver-auth=4,5 total 0 lrwx------ 1 marxin users 64 Aug 2 10:33 0 -> /dev/pts/5 l-wx------ 1 marxin users 64 Aug 2 10:33 1 -> /tmp/ccrRRAfS lr-x------ 1 marxin users 64 Aug 2 10:33 10 -> /dev/shm/objdir/gcc/libgcc_s.so lr-x------ 1 marxin users 64 Aug 2 10:33 13 -> /usr/lib64/libc.so lr-x------ 1 marxin users 64 Aug 2 10:33 18 -> /dev/shm/objdir/gcc/libgcc_s.so l-wx------ 1 marxin users 64 Aug 2 10:33 2 -> /tmp/ccWJ65uO.le lrwx------ 1 marxin users 64 Aug 2 10:33 3 -> /dev/pts/2 dropping MAKEFLAGS in kw -j2 --jobserver-auth=3,4 -- total 0 lrwx------ 1 marxin users 64 Aug 2 10:33 0 -> /dev/pts/5 lrwx------ 1 marxin users 64 Aug 2 10:33 1 -> /dev/pts/5 lrwx------ 1 marxin users 64 Aug 2 10:33 2 -> /dev/pts/5 lrwx------ 1 marxin users 64 Aug 2 10:33 3 -> /dev/pts/2 dropping MAKEFLAGS in w -j16 --jobserver-auth=4,5 total 0 lrwx------ 1 marxin users 64 Aug 2 10:33 0 -> /dev/pts/4 l-wx------ 1 marxin users 64 Aug 2 10:33 1 -> /tmp/ccXIkUlY lr-x------ 1 marxin users 64 Aug 2 10:33 10 -> /usr/lib64/libm.so lr-x------ 1 marxin users 64 Aug 2 10:33 14 -> /dev/shm/objdir/gcc/libgcc_s.so lr-x------ 1 marxin users 64 Aug 2 10:33 18 -> /usr/lib64/libc.so l-wx------ 1 marxin users 64 Aug 2 10:33 2 -> /tmp/ccvNMFyU.le lr-x------ 1 marxin users 64 Aug 2 10:33 22 -> /dev/shm/objdir/gcc/libgcc_s.so lrwx------ 1 marxin users 64 Aug 2 10:33 3 -> /dev/pts/2 dropping MAKEFLAGS in kw -j2 --jobserver-auth=3,4 -- total 0 lrwx------ 1 marxin users 64 Aug 2 10:33 0 -> /dev/pts/5 lrwx------ 1 marxin users 64 Aug 2 10:33 1 -> /dev/pts/5 lrwx------ 1 marxin users 64 Aug 2 10:33 2 -> /dev/pts/5 lrwx------ 1 marxin users 64 Aug 2 10:33 3 -> /dev/pts/2 dropping MAKEFLAGS in kw -j2 --jobserver-auth=3,4 -- total 0 lrwx------ 1 marxin users 64 Aug 2 10:33 0 -> /dev/pts/5 lrwx------ 1 marxin users 64 Aug 2 10:33 1 -> /dev/pts/5 lrwx------ 1 marxin users 64 Aug 2 10:33 2 -> /dev/pts/5 lrwx------ 1 marxin users 64 Aug 2 10:33 3 -> /dev/pts/2 dropping MAKEFLAGS in kw -j2 --jobserver-auth=3,4 -- total 0 lrwx------ 1 marxin users 64 Aug 2 10:33 0 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 1 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 2 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 3 -> /dev/pts/2 dropping MAKEFLAGS in kw -j2 --jobserver-auth=3,4 -- total 0 lrwx------ 1 marxin users 64 Aug 2 10:33 0 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 1 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 2 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 3 -> /dev/pts/2 dropping MAKEFLAGS in kw -j2 --jobserver-auth=3,4 -- total 0 lrwx------ 1 marxin users 64 Aug 2 10:33 0 -> /dev/pts/5 lrwx------ 1 marxin users 64 Aug 2 10:33 1 -> /dev/pts/5 lrwx------ 1 marxin users 64 Aug 2 10:33 2 -> /dev/pts/5 lrwx------ 1 marxin users 64 Aug 2 10:33 3 -> /dev/pts/2 dropping MAKEFLAGS in kw -j2 --jobserver-auth=3,4 -- total 0 lrwx------ 1 marxin users 64 Aug 2 10:33 0 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 1 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 2 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 3 -> /dev/pts/2 dropping MAKEFLAGS in kw -j2 --jobserver-auth=3,4 -- total 0 lrwx------ 1 marxin users 64 Aug 2 10:33 0 -> /dev/pts/5 lrwx------ 1 marxin users 64 Aug 2 10:33 1 -> /dev/pts/5 lrwx------ 1 marxin users 64 Aug 2 10:33 2 -> /dev/pts/5 lrwx------ 1 marxin users 64 Aug 2 10:33 3 -> /dev/pts/2 dropping MAKEFLAGS in kw -j2 --jobserver-auth=3,4 -- total 0 lrwx------ 1 marxin users 64 Aug 2 10:33 0 -> /dev/pts/5 lrwx------ 1 marxin users 64 Aug 2 10:33 1 -> /dev/pts/5 lrwx------ 1 marxin users 64 Aug 2 10:33 2 -> /dev/pts/5 lrwx------ 1 marxin users 64 Aug 2 10:33 3 -> /dev/pts/2 dropping MAKEFLAGS in kw -j2 --jobserver-auth=3,4 -- total 0 lrwx------ 1 marxin users 64 Aug 2 10:33 0 -> /dev/pts/5 lrwx------ 1 marxin users 64 Aug 2 10:33 1 -> /dev/pts/5 lrwx------ 1 marxin users 64 Aug 2 10:33 2 -> /dev/pts/5 lrwx------ 1 marxin users 64 Aug 2 10:33 3 -> /dev/pts/2 dropping MAKEFLAGS in kw -j2 --jobserver-auth=3,4 -- total 0 lrwx------ 1 marxin users 64 Aug 2 10:33 0 -> /dev/pts/5 lrwx------ 1 marxin users 64 Aug 2 10:33 1 -> /dev/pts/5 lrwx------ 1 marxin users 64 Aug 2 10:33 2 -> /dev/pts/5 lrwx------ 1 marxin users 64 Aug 2 10:33 3 -> /dev/pts/2 dropping MAKEFLAGS in kw -j2 --jobserver-auth=3,4 -- total 0 lrwx------ 1 marxin users 64 Aug 2 10:33 0 -> /dev/pts/5 lrwx------ 1 marxin users 64 Aug 2 10:33 1 -> /dev/pts/5 lrwx------ 1 marxin users 64 Aug 2 10:33 2 -> /dev/pts/5 lrwx------ 1 marxin users 64 Aug 2 10:33 3 -> /dev/pts/2 dropping MAKEFLAGS in w -j16 --jobserver-auth=4,5 total 0 lr-x------ 1 marxin users 64 Aug 2 10:33 0 -> pipe:[579323352] l-wx------ 1 marxin users 64 Aug 2 10:33 1 -> /tmp/ccozzUjb lr-x------ 1 marxin users 64 Aug 2 10:33 10 -> /usr/lib64/libm.so lr-x------ 1 marxin users 64 Aug 2 10:33 14 -> /dev/shm/objdir/gcc/libgcc_s.so lr-x------ 1 marxin users 64 Aug 2 10:33 18 -> /usr/lib64/libc.so l-wx------ 1 marxin users 64 Aug 2 10:33 2 -> /tmp/ccacysX9.le lr-x------ 1 marxin users 64 Aug 2 10:33 22 -> /dev/shm/objdir/gcc/libgcc_s.so lrwx------ 1 marxin users 64 Aug 2 10:33 3 -> /dev/pts/2 dropping MAKEFLAGS in w -j16 --jobserver-auth=4,5 total 0 lrwx------ 1 marxin users 64 Aug 2 10:33 0 -> /dev/pts/4 l-wx------ 1 marxin users 64 Aug 2 10:33 1 -> /tmp/ccozzUjb lr-x------ 1 marxin users 64 Aug 2 10:33 10 -> /usr/lib64/libm.so lr-x------ 1 marxin users 64 Aug 2 10:33 14 -> /dev/shm/objdir/gcc/libgcc_s.so lr-x------ 1 marxin users 64 Aug 2 10:33 18 -> /usr/lib64/libc.so l-wx------ 1 marxin users 64 Aug 2 10:33 2 -> /tmp/ccacysX9.le lr-x------ 1 marxin users 64 Aug 2 10:33 22 -> /dev/shm/objdir/gcc/libgcc_s.so lrwx------ 1 marxin users 64 Aug 2 10:33 3 -> /dev/pts/2 dropping MAKEFLAGS in w -j16 --jobserver-auth=11,12 dropping MAKEFLAGS in w -j16 --jobserver-auth=11,12 total 0 lr-x------ 1 marxin users 64 Aug 2 10:33 0 -> pipe:[579328123] l-wx------ 1 marxin users 64 Aug 2 10:33 1 -> /tmp/ccDCgNyq lr-x------ 1 marxin users 64 Aug 2 10:33 10 -> /usr/lib64/crtn.o lrwx------ 1 marxin users 64 Aug 2 10:33 2 -> /dev/pts/5 lrwx------ 1 marxin users 64 Aug 2 10:33 3 -> /dev/pts/2 lr-x------ 1 marxin users 64 Aug 2 10:33 4 -> /usr/lib64/crt1.o lr-x------ 1 marxin users 64 Aug 2 10:33 5 -> /usr/lib64/crti.o lr-x------ 1 marxin users 64 Aug 2 10:33 6 -> /dev/shm/objdir/gcc/crtbegin.o lr-x------ 1 marxin users 64 Aug 2 10:33 7 -> /dev/shm/objdir/gcc/testsuite/gcc/c_lto_20081125_0.o lr-x------ 1 marxin users 64 Aug 2 10:33 8 -> /dev/shm/objdir/gcc/testsuite/gcc/c_lto_20081125_1.o lr-x------ 1 marxin users 64 Aug 2 10:33 9 -> /dev/shm/objdir/gcc/crtend.o total 0 lrwx------ 1 marxin users 64 Aug 2 10:33 0 -> /dev/pts/5 l-wx------ 1 marxin users 64 Aug 2 10:33 1 -> /tmp/ccDCgNyq lr-x------ 1 marxin users 64 Aug 2 10:33 10 -> /usr/lib64/crtn.o lrwx------ 1 marxin users 64 Aug 2 10:33 2 -> /dev/pts/5 lrwx------ 1 marxin users 64 Aug 2 10:33 3 -> /dev/pts/2 lr-x------ 1 marxin users 64 Aug 2 10:33 4 -> /usr/lib64/crt1.o lr-x------ 1 marxin users 64 Aug 2 10:33 5 -> /usr/lib64/crti.o lr-x------ 1 marxin users 64 Aug 2 10:33 6 -> /dev/shm/objdir/gcc/crtbegin.o lr-x------ 1 marxin users 64 Aug 2 10:33 7 -> /dev/shm/objdir/gcc/testsuite/gcc/c_lto_20081125_0.o lr-x------ 1 marxin users 64 Aug 2 10:33 8 -> /dev/shm/objdir/gcc/testsuite/gcc/c_lto_20081125_1.o lr-x------ 1 marxin users 64 Aug 2 10:33 9 -> /dev/shm/objdir/gcc/crtend.o dropping MAKEFLAGS in kw -j2 --jobserver-auth=3,4 -- total 0 lrwx------ 1 marxin users 64 Aug 2 10:33 0 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 1 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 2 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 3 -> /dev/pts/2 dropping MAKEFLAGS in kw -j2 --jobserver-auth=3,4 -- total 0 lrwx------ 1 marxin users 64 Aug 2 10:33 0 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 1 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 2 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 3 -> /dev/pts/2 dropping MAKEFLAGS in kw -j2 --jobserver-auth=3,4 -- total 0 lrwx------ 1 marxin users 64 Aug 2 10:33 0 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 1 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 2 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 3 -> /dev/pts/2 dropping MAKEFLAGS in w -j16 --jobserver-auth=11,12 dropping MAKEFLAGS in w -j16 --jobserver-auth=11,12 total 0 lrwx------ 1 marxin users 64 Aug 2 10:33 0 -> /dev/pts/4 l-wx------ 1 marxin users 64 Aug 2 10:33 1 -> /tmp/ccG4DfIN lr-x------ 1 marxin users 64 Aug 2 10:33 10 -> /usr/lib64/crtn.o lrwx------ 1 marxin users 64 Aug 2 10:33 2 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 3 -> /dev/pts/2 lr-x------ 1 marxin users 64 Aug 2 10:33 4 -> /usr/lib64/crt1.o lr-x------ 1 marxin users 64 Aug 2 10:33 5 -> /usr/lib64/crti.o lr-x------ 1 marxin users 64 Aug 2 10:33 6 -> /dev/shm/objdir/gcc/crtbegin.o lr-x------ 1 marxin users 64 Aug 2 10:33 7 -> /dev/shm/objdir/gcc/testsuite/gcc/c_lto_20081125_0.o lr-x------ 1 marxin users 64 Aug 2 10:33 8 -> /dev/shm/objdir/gcc/testsuite/gcc/c_lto_20081125_1.o lr-x------ 1 marxin users 64 Aug 2 10:33 9 -> /dev/shm/objdir/gcc/crtend.o total 0 lr-x------ 1 marxin users 64 Aug 2 10:33 0 -> pipe:[579322564] l-wx------ 1 marxin users 64 Aug 2 10:33 1 -> /tmp/ccG4DfIN lr-x------ 1 marxin users 64 Aug 2 10:33 10 -> /usr/lib64/crtn.o lrwx------ 1 marxin users 64 Aug 2 10:33 2 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 3 -> /dev/pts/2 lr-x------ 1 marxin users 64 Aug 2 10:33 4 -> /usr/lib64/crt1.o lr-x------ 1 marxin users 64 Aug 2 10:33 5 -> /usr/lib64/crti.o lr-x------ 1 marxin users 64 Aug 2 10:33 6 -> /dev/shm/objdir/gcc/crtbegin.o lr-x------ 1 marxin users 64 Aug 2 10:33 7 -> /dev/shm/objdir/gcc/testsuite/gcc/c_lto_20081125_0.o lr-x------ 1 marxin users 64 Aug 2 10:33 8 -> /dev/shm/objdir/gcc/testsuite/gcc/c_lto_20081125_1.o lr-x------ 1 marxin users 64 Aug 2 10:33 9 -> /dev/shm/objdir/gcc/crtend.o dropping MAKEFLAGS in kw -j2 --jobserver-auth=3,4 -- total 0 lrwx------ 1 marxin users 64 Aug 2 10:33 0 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 1 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 2 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 3 -> /dev/pts/2 dropping MAKEFLAGS in kw -j2 --jobserver-auth=3,4 -- total 0 lrwx------ 1 marxin users 64 Aug 2 10:33 0 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 1 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 2 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 3 -> /dev/pts/2 dropping MAKEFLAGS in kw -j2 --jobserver-auth=3,4 -- total 0 lrwx------ 1 marxin users 64 Aug 2 10:33 0 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 1 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 2 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 3 -> /dev/pts/2 dropping MAKEFLAGS in w -j16 --jobserver-auth=4,5 total 0 lrwx------ 1 marxin users 64 Aug 2 10:33 0 -> /dev/pts/4 l-wx------ 1 marxin users 64 Aug 2 10:33 1 -> /tmp/cc6xSPub lr-x------ 1 marxin users 64 Aug 2 10:33 10 -> /dev/shm/objdir/gcc/libgcc_s.so lr-x------ 1 marxin users 64 Aug 2 10:33 13 -> /usr/lib64/libc.so lr-x------ 1 marxin users 64 Aug 2 10:33 18 -> /dev/shm/objdir/gcc/libgcc_s.so l-wx------ 1 marxin users 64 Aug 2 10:33 2 -> /tmp/ccEeSLA7.le lrwx------ 1 marxin users 64 Aug 2 10:33 3 -> /dev/pts/2 dropping MAKEFLAGS in kw -j2 --jobserver-auth=3,4 -- total 0 lrwx------ 1 marxin users 64 Aug 2 10:33 0 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 1 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 2 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 3 -> /dev/pts/2 dropping MAKEFLAGS in kw -j2 --jobserver-auth=3,4 -- total 0 lrwx------ 1 marxin users 64 Aug 2 10:33 0 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 1 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 2 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 3 -> /dev/pts/2 dropping MAKEFLAGS in kw -j2 --jobserver-auth=3,4 -- total 0 lrwx------ 1 marxin users 64 Aug 2 10:33 0 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 1 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 2 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 3 -> /dev/pts/2 dropping MAKEFLAGS in w -j16 --jobserver-auth=4,5 total 0 lrwx------ 1 marxin users 64 Aug 2 10:33 0 -> /dev/pts/4 l-wx------ 1 marxin users 64 Aug 2 10:33 1 -> /tmp/cc91ZMov lr-x------ 1 marxin users 64 Aug 2 10:33 10 -> /dev/shm/objdir/gcc/libgcc_s.so lr-x------ 1 marxin users 64 Aug 2 10:33 13 -> /usr/lib64/libc.so lr-x------ 1 marxin users 64 Aug 2 10:33 18 -> /dev/shm/objdir/gcc/libgcc_s.so l-wx------ 1 marxin users 64 Aug 2 10:33 2 -> /tmp/ccXWaZKr.le lrwx------ 1 marxin users 64 Aug 2 10:33 3 -> /dev/pts/2 dropping MAKEFLAGS in kw -j2 --jobserver-auth=3,4 -- total 0 lrwx------ 1 marxin users 64 Aug 2 10:33 0 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 1 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 2 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 3 -> /dev/pts/2 dropping MAKEFLAGS in kw -j2 --jobserver-auth=3,4 -- total 0 lrwx------ 1 marxin users 64 Aug 2 10:33 0 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 1 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 2 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 3 -> /dev/pts/2 dropping MAKEFLAGS in w -j16 --jobserver-auth=4,5 total 0 lrwx------ 1 marxin users 64 Aug 2 10:33 0 -> /dev/pts/4 l-wx------ 1 marxin users 64 Aug 2 10:33 1 -> /tmp/ccK5b4bR lr-x------ 1 marxin users 64 Aug 2 10:33 10 -> /usr/lib64/libm.so lr-x------ 1 marxin users 64 Aug 2 10:33 15 -> /usr/lib64/libm.so lr-x------ 1 marxin users 64 Aug 2 10:33 19 -> /dev/shm/objdir/gcc/libgcc_s.so l-wx------ 1 marxin users 64 Aug 2 10:33 2 -> /tmp/cc5885XO.le lr-x------ 1 marxin users 64 Aug 2 10:33 24 -> /usr/lib64/libm.so lr-x------ 1 marxin users 64 Aug 2 10:33 28 -> /dev/shm/objdir/gcc/libgcc_s.so lrwx------ 1 marxin users 64 Aug 2 10:33 3 -> /dev/pts/2 lr-x------ 1 marxin users 64 Aug 2 10:33 32 -> /usr/lib64/libc.so lr-x------ 1 marxin users 64 Aug 2 10:33 36 -> /dev/shm/objdir/gcc/libgcc_s.so dropping MAKEFLAGS in kw -j2 --jobserver-auth=3,4 -- total 0 lrwx------ 1 marxin users 64 Aug 2 10:33 0 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 1 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 2 -> /dev/pts/4 lrwx------ 1 marxin users 64 Aug 2 10:33 3 -> /dev/pts/2 dropping MAKEFLAGS in w -j16 --jobserver-auth=4,5 total 0 lrwx------ 1 marxin users 64 Aug 2 10:33 0 -> /dev/pts/4 l-wx------ 1 marxin users 64 Aug 2 10:33 1 -> /tmp/ccgExLq7 lr-x------ 1 marxin users 64 Aug 2 10:33 10 -> /usr/lib64/libm.so lr-x------ 1 marxin users 64 Aug 2 10:33 14 -> /dev/shm/objdir/gcc/libgcc_s.so lr-x------ 1 marxin users 64 Aug 2 10:33 19 -> /usr/lib64/libm.so l-wx------ 1 marxin users 64 Aug 2 10:33 2 -> /tmp/ccq6akH8.le lr-x------ 1 marxin users 64 Aug 2 10:33 23 -> /dev/shm/objdir/gcc/libgcc_s.so lr-x------ 1 marxin users 64 Aug 2 10:33 27 -> /usr/lib64/libc.so lrwx------ 1 marxin users 64 Aug 2 10:33 3 -> /dev/pts/2 lr-x------ 1 marxin users 64 Aug 2 10:33 31 -> /dev/shm/objdir/gcc/libgcc_s.so
>From 295e6aeae929d33fb904439a0fda3b840ab6c980 Mon Sep 17 00:00:00 2001 From: Martin Liska <mli...@suse.cz> Date: Thu, 1 Aug 2019 16:30:01 +0200 Subject: [PATCH] Properly detect working jobserver in gcc driver. gcc/ChangeLog: 2019-08-02 Martin Liska <mli...@suse.cz> * gcc.c (driver::maybe_run_linker): Call detect_jobserver to detect working job server. (driver::detect_jobserver): Test whether jobserver is active from GCC driver. That will prevent situation where GCC is invoked from a LD plugin and the linker already uses file descriptors suggested by make. That leads to a wrong detection. * gcc.h (driver): Add detect_jobserver. * lto-wrapper.c (jobserver_active_p): Simplify sscanf by not scanning for --jobserver-auth prefix. --- gcc/gcc.c | 42 ++++++++++++++++++++++++++++++++++++++++++ gcc/gcc.h | 1 + gcc/lto-wrapper.c | 2 +- 3 files changed, 44 insertions(+), 1 deletion(-) diff --git a/gcc/gcc.c b/gcc/gcc.c index a4323eb146e..18a07426290 100644 --- a/gcc/gcc.c +++ b/gcc/gcc.c @@ -8268,6 +8268,8 @@ driver::maybe_run_linker (const char *argv0) const { int tmp = execution_count; + detect_jobserver (); + if (! have_c) { #if HAVE_LTO_PLUGIN > 0 @@ -8357,6 +8359,46 @@ driver::final_actions () const } } +/* Detect whether jobserver is active and working. If not drop + --jobserver-auth from MAKEFLAGS. */ + +void +driver::detect_jobserver () const +{ + /* Detect jobserver and drop it if it's not working. */ + const char *makeflags = env.get ("MAKEFLAGS"); + if (makeflags != NULL) + { + const char *needle = "--jobserver-auth="; + const char *n = strstr (makeflags, needle); + if (n != NULL) + { + int rfd = -1; + int wfd = -1; + + bool jobserver + = (sscanf (n + strlen (needle), "%d,%d", &rfd, &wfd) == 2 + && rfd > 0 + && wfd > 0 + && fcntl (rfd, F_GETFD) >= 0 + && fcntl (wfd, F_GETFD) >= 0); + + /* Drop the jobserver if it's not working now. */ + if (!jobserver) + { + unsigned offset = n - makeflags; + char *dup = xstrdup (makeflags); + dup[offset] = '\0'; + + const char *space = strchr (makeflags + offset, ' '); + if (space != NULL) + strcpy (dup + offset, space); + xputenv (concat ("MAKEFLAGS=", dup, NULL)); + } + } + } +} + /* Determine what the exit code of the driver should be. */ int diff --git a/gcc/gcc.h b/gcc/gcc.h index a0a1d94c6e6..dc77dba67fb 100644 --- a/gcc/gcc.h +++ b/gcc/gcc.h @@ -51,6 +51,7 @@ class driver void do_spec_on_infiles () const; void maybe_run_linker (const char *argv0) const; void final_actions () const; + void detect_jobserver () const; int get_exit_code () const; private: diff --git a/gcc/lto-wrapper.c b/gcc/lto-wrapper.c index 353187c6043..3414adedd26 100644 --- a/gcc/lto-wrapper.c +++ b/gcc/lto-wrapper.c @@ -1234,7 +1234,7 @@ jobserver_active_p (void) int rfd = -1; int wfd = -1; - return ((sscanf(n, "--jobserver-auth=%d,%d", &rfd, &wfd) == 2) + return (sscanf (n + strlen (needle), "%d,%d", &rfd, &wfd) == 2 && rfd > 0 && wfd > 0 && fcntl (rfd, F_GETFD) >= 0 -- 2.22.0