Bug#993644: Program search dirs contains many duplicated directories
Package: gcc-11
Version: 11.2.0-4
Severity: normal
X-Debbugs-Cc: josh@joshtriplett.org
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.
-- System Information:
Debian Release: bookworm/sid
APT prefers unstable-debug
APT policy: (500, 'unstable-debug'), (500, 'unstable'), (500, 'testing'), (1, 'experimental-debug'), (1, 'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: arm64
Kernel: Linux 5.13.0-trunk-amd64 (SMP w/8 CPU threads)
Locale: LANG=C.UTF-8, LC_CTYPE=C.UTF-8 (charmap=UTF-8), LANGUAGE not set
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
Versions of packages gcc-11 depends on:
ii binutils 2.37-5
ii cpp-11 11.2.0-4
ii gcc-11-base 11.2.0-4
ii libc6 2.31-17
ii libcc1-0 11.2.0-4
ii libgcc-11-dev 11.2.0-4
ii libgcc-s1 11.2.0-4
ii libgmp10 2:6.2.1+dfsg-1
ii libisl23 0.23-1
ii libmpc3 1.2.0-1
ii libmpfr6 4.1.0-3
ii libstdc++6 11.2.0-4
ii libzstd1 1.4.8+dfsg-2.1
ii zlib1g 1:1.2.11.dfsg-2
Versions of packages gcc-11 recommends:
ii libc6-dev 2.31-17
Versions of packages gcc-11 suggests:
pn gcc-11-doc <none>
pn gcc-11-locales <none>
pn gcc-11-multilib <none>
-- no debconf information
Reply to: