#993644 Program search dirs contains many duplicated directories

Package:
gcc-11
Source:
gcc-11
Description:
GNU C compiler
Submitter:
Josh Triplett
Date:
2021-09-04 05:51:03 UTC
Severity:
normal
#993644#3
Date:
2021-09-04 05:48:14 UTC
From:
To:
The GCC program search dirs contain many duplicated directories. Every time GCC
has to search for a file, it's doing the same searches repeatedly, and
this adds up.

$ gcc-11 -print-search-dirs | grep '^programs:'
programs: =/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../x86_64-linux-gnu/bin/x86_64-linux-gnu/11/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../x86_64-linux-gnu/bin/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/11/../../../../x86_64-linux-gnu/bin/

The first five entries of this are:
/usr/lib/gcc/x86_64-linux-gnu/11/
/usr/lib/gcc/x86_64-linux-gnu/11/
/usr/lib/gcc/x86_64-linux-gnu/
/usr/lib/gcc/x86_64-linux-gnu/11/
/usr/lib/gcc/x86_64-linux-gnu/

Net result, as seen in strace from just one gcc invocation:
24060 stat("/usr/lib/gcc/x86_64-linux-gnu/11/x86_64-linux-gnu-as", 0x7ffe844509a0) = -1 ENOENT (No such file or directory)
24060 stat("/usr/lib/gcc/x86_64-linux-gnu/11/as", 0x7ffe844509f0) = -1 ENOENT (No such file or directory)
24060 stat("/usr/lib/gcc/x86_64-linux-gnu/11/x86_64-linux-gnu-as", 0x7ffe844509a0) = -1 ENOENT (No such file or directory)
24060 stat("/usr/lib/gcc/x86_64-linux-gnu/11/as", 0x7ffe844509f0) = -1 ENOENT (No such file or directory)
24060 stat("/usr/lib/gcc/x86_64-linux-gnu/x86_64-linux-gnu-as", 0x7ffe844509a0) = -1 ENOENT (No such file or directory)
24060 stat("/usr/lib/gcc/x86_64-linux-gnu/as", 0x7ffe844509f0) = -1 ENOENT (No such file or directory)
24060 stat("/usr/lib/gcc/x86_64-linux-gnu/11/x86_64-linux-gnu-as", 0x7ffe844509a0) = -1 ENOENT (No such file or directory)
24060 stat("/usr/lib/gcc/x86_64-linux-gnu/11/as", 0x7ffe844509f0) = -1 ENOENT (No such file or directory)
24060 stat("/usr/lib/gcc/x86_64-linux-gnu/x86_64-linux-gnu-as", 0x7ffe844509a0) = -1 ENOENT (No such file or directory)
24060 stat("/usr/lib/gcc/x86_64-linux-gnu/as", 0x7ffe844509f0) = -1 ENOENT (No such file or directory)
...
24063 stat("/usr/lib/gcc/x86_64-linux-gnu/11/real-ld", 0x7ffd16d67830) = -1 ENOENT (No such file or directory)
24063 stat("/usr/lib/gcc/x86_64-linux-gnu/11/real-ld", 0x7ffd16d67830) = -1 ENOENT (No such file or directory)
24063 stat("/usr/lib/gcc/x86_64-linux-gnu/real-ld", 0x7ffd16d67830) = -1 ENOENT (No such file or directory)
24063 stat("/usr/lib/gcc/x86_64-linux-gnu/11/real-ld", 0x7ffd16d67830) = -1 ENOENT (No such file or directory)
24063 stat("/usr/lib/gcc/x86_64-linux-gnu/real-ld", 0x7ffd16d67830) = -1 ENOENT (No such file or directory)
24063 stat("/usr/lib/gcc/x86_64-linux-gnu/11/collect-ld", 0x7ffd16d67830) = -1 ENOENT (No such file or directory)
24063 stat("/usr/lib/gcc/x86_64-linux-gnu/11/collect-ld", 0x7ffd16d67830) = -1 ENOENT (No such file or directory)
24063 stat("/usr/lib/gcc/x86_64-linux-gnu/collect-ld", 0x7ffd16d67830) = -1 ENOENT (No such file or directory)
24063 stat("/usr/lib/gcc/x86_64-linux-gnu/11/collect-ld", 0x7ffd16d67830) = -1 ENOENT (No such file or directory)
24063 stat("/usr/lib/gcc/x86_64-linux-gnu/collect-ld", 0x7ffd16d67830) = -1 ENOENT (No such file or directory)
24063 stat("/usr/lib/gcc/x86_64-linux-gnu/11/ld", 0x7ffd16d67830) = -1 ENOENT (No such file or directory)
24063 stat("/usr/lib/gcc/x86_64-linux-gnu/11/ld", 0x7ffd16d67830) = -1 ENOENT (No such file or directory)
24063 stat("/usr/lib/gcc/x86_64-linux-gnu/ld", 0x7ffd16d67830) = -1 ENOENT (No such file or directory)
24063 stat("/usr/lib/gcc/x86_64-linux-gnu/11/ld", 0x7ffd16d67830) = -1 ENOENT (No such file or directory)
24063 stat("/usr/lib/gcc/x86_64-linux-gnu/ld", 0x7ffd16d67830) = -1 ENOENT (No such file or directory)
...
24063 stat("/usr/lib/gcc/x86_64-linux-gnu/11/gnm", 0x7ffd16d67830) = -1 ENOENT (No such file or directory)
24063 stat("/usr/lib/gcc/x86_64-linux-gnu/11/gnm", 0x7ffd16d67830) = -1 ENOENT (No such file or directory)
24063 stat("/usr/lib/gcc/x86_64-linux-gnu/gnm", 0x7ffd16d67830) = -1 ENOENT (No such file or directory)
24063 stat("/usr/lib/gcc/x86_64-linux-gnu/11/gnm", 0x7ffd16d67830) = -1 ENOENT (No such file or directory)
24063 stat("/usr/lib/gcc/x86_64-linux-gnu/gnm", 0x7ffd16d67830) = -1 ENOENT (No such file or directory)
...
24063 stat("/usr/lib/gcc/x86_64-linux-gnu/11/nm", 0x7ffd16d67830) = -1 ENOENT (No such file or directory)
24063 stat("/usr/lib/gcc/x86_64-linux-gnu/11/nm", 0x7ffd16d67830) = -1 ENOENT (No such file or directory)
24063 stat("/usr/lib/gcc/x86_64-linux-gnu/nm", 0x7ffd16d67830) = -1 ENOENT (No such file or directory)
24063 stat("/usr/lib/gcc/x86_64-linux-gnu/11/nm", 0x7ffd16d67830) = -1 ENOENT (No such file or directory)
24063 stat("/usr/lib/gcc/x86_64-linux-gnu/nm", 0x7ffd16d67830) = -1 ENOENT (No such file or directory)
...
24063 stat("/usr/lib/gcc/x86_64-linux-gnu/11/gstrip", 0x7ffd16d67830) = -1 ENOENT (No such file or directory)
24063 stat("/usr/lib/gcc/x86_64-linux-gnu/11/gstrip", 0x7ffd16d67830) = -1 ENOENT (No such file or directory)
24063 stat("/usr/lib/gcc/x86_64-linux-gnu/gstrip", 0x7ffd16d67830) = -1 ENOENT (No such file or directory)
24063 stat("/usr/lib/gcc/x86_64-linux-gnu/11/gstrip", 0x7ffd16d67830) = -1 ENOENT (No such file or directory)
24063 stat("/usr/lib/gcc/x86_64-linux-gnu/gstrip", 0x7ffd16d67830) = -1 ENOENT (No such file or directory)
...
24063 stat("/usr/lib/gcc/x86_64-linux-gnu/11/strip", 0x7ffd16d67830) = -1 ENOENT (No such file or directory)
24063 stat("/usr/lib/gcc/x86_64-linux-gnu/11/strip", 0x7ffd16d67830) = -1 ENOENT (No such file or directory)
24063 stat("/usr/lib/gcc/x86_64-linux-gnu/strip", 0x7ffd16d67830) = -1 ENOENT (No such file or directory)
24063 stat("/usr/lib/gcc/x86_64-linux-gnu/11/strip", 0x7ffd16d67830) = -1 ENOENT (No such file or directory)
24063 stat("/usr/lib/gcc/x86_64-linux-gnu/strip", 0x7ffd16d67830) = -1 ENOENT (No such file or directory)


Removing the duplicate directories from the search path would eliminate
these duplicate searches, which add up over the course of a large build.