[patch] Check for -Wl,--gc-sections

Curtis Maloney cmaloney at cardgate.net
Mon Jun 18 16:27:50 PDT 2007

Havoc Pennington wrote:
> Richard Hughes wrote:
>> Havoc mentioned I should try using --gc-sections to reduce the size of
>> the setuid binary.
> I think you need a compiler flag to put each function in a separate 
> section also, at least to get maximum benefit.
> Though since this isn't the default I've always assumed there must be 
> some sort of downside, I can't tell you what it might be.

According to the GCC manual:

     Place each function or data item into its own section in the output file if 
the target supports arbitrary sections. The name of the function or the name of 
the data item determines the section's name in the output file.

     Use these options on systems where the linker can perform optimizations to 
improve locality of reference in the instruction space. Most systems using the 
ELF object format and SPARC processors running Solaris 2 have linkers with such 
optimizations. AIX may have these optimizations in the future.

     Only use these options when there are significant benefits from doing so. 
When you specify these options, the assembler and linker will create larger 
object and executable files and will also be slower. You will not be able to use 
gprof on all systems if you specify this option and you may have problems with 
debugging if you specify both this option and -g.

... so, the downsides are larger object files and slower builds, as well as 
possibly making debugging difficult.

However, with a modern linker (as Richard has shown) it can improve the final 
program size.  There's a couple of other related switches that might improve 
performance (function and block reordering to improve code locality), though 
from memory they're not very useful unless you're doing a profiled build.

Curtis Maloney
cmaloney at cardgate.net

More information about the dbus mailing list