[systemd-devel] [PATCH] build-sys: remove --gc-sections to fix debugging
Peter Wu
peter at lekensteyn.nl
Thu Nov 27 09:35:13 PST 2014
On Thursday 27 November 2014 13:42:27 Gustavo Sverzut Barbieri wrote:
> I'm asking because from Peter Wu's email we're 26384 - 26380 = 4Kb
> heavier in the whole installed set of binaries. If this is correct I
> doubt the gc-sections is making any difference in the linkage of
> static libraries (src/shared). In this case my *assumption* (as I have
> no deep knowledge about the linker) is that it's selectively picking
> the symbols it uses and leaving the other stuff out of it.
>
> Peter, could you provide more in-depth information, for instance you
> could see:
> - what binaries are bigger;
> - what -Wl,--gc-sections -Wl,--print-gc-section says
OK, here is a description of the test setup such you can reproduce it.
Environment:
- Arch Linux x86_64 in a QEMU VM (live iso with systemd makedepends
installed).
- with systemd git in /tmp/systemd.
- master is at 9a20fcbcd1b010ad88bfbb8b7f0417bec7327fb4
- gcc 4.9.2
- binutils 2.24-8 (the broken one)
Commands to build two versions:
cd /tmp/systemd
# Currently at 9a20fcbcd1b010ad88bfbb8b7f0417bec7327fb4 + patch to
# remove --gc-sections and -f{data,function}-sections
git clean -xfd && ./autogen.sh && mkdir build && cd $_ &&
../configure && make -j6 && make install DESTDIR=$PWD/fs &&
(cd fs && find * -type f -printf '%h/%f\t%s\n') > /tmp/0.txt
# Now let's see what happens with --gc-sections
git checkout HEAD~ &&
git clean -xfd && ./autogen.sh && mkdir build && cd $_ &&
../configure && make -j6 && make install DESTDIR=$PWD/fs &&
(cd fs && find * -type f -printf '%h/%f\t%s\n') > /tmp/1.txt
Now build a table to compare the sizes:
join {0,1}.txt | awk '$2!=$3{print $2,$3,$2-$3,$2/$3,$1}' |
sort -k4n | column -t > results.txt
The columns explained:
1. Size of binaries built without --gc-sections and -f...
2. Size of binaries built with --gc-sections and -f...
3. Absolute "saved" bytes when built with --gc-sections.
4. Ratio between the sizes, numbers smaller than 1 indicate a saving,
numbers larger than 1 show that --gc-sections increase the sizes.
These results are strange, it suggests that --gc-sections make the
binaries larger overall! I have repeated it three times just to make
sure that I did not made a mistake.
Reran the --gc-section one again with --print-gc-sections and confirmed
that the installed files did not grow in size (in case there is another
bug...). Full configure, make and make install log (6.7 MiB):
https://lekensteyn.nl/junk/systemd-buildlog.txt
(the system time is one hour behind due to a misconfiguration.)
Hope it helps.
David, what toolchain and options are you using?
--
Kind regards,
Peter
https://lekensteyn.nl
More information about the systemd-devel
mailing list