Unused functions not being removed

Alan Modra amodra@gmail.com
Thu Aug 1 03:10:00 GMT 2013


On Wed, Jul 31, 2013 at 10:33:54PM -0400, Asm Twiddler wrote:
> Hello all,
> 
> I have recently noticed that some of the unused functions in my code
> aren't being removed.
> It appears that the problem occurs due to ld, but only when building
> for the avr.
> 
> My code is compiled using -fdata-sections and -ffunction-sections to
> create object files.
> Then, per each source directory, different object files are combined
> into one object via "ld -r".
> Finally, those objects are compiled together using gcc --gc-sections.
> This should remove any unused functions, as it does under x86, but fails on avr.
> After running objdump on the various objects, it appears that gcc is
> correctly creating the sections, but "ld -r" is removing the separate
> sections.
> 
> Is this supposed to happen and is there a way to disable this?

ld -r is supposed to merge sections of the same name.  If ld -r is
doing more than that, eg. putting .text.foo and .text.bar into .text,
then that would be a ld -r bug on avr.  From the look of
ld/scripttempl/avr.sc I'd guess exactly that is happening.

*(.text.*) there ought to be ${RELOCATING+*(.text.*)} and a whole lot
of other lines similarly.

-- 
Alan Modra
Australia Development Lab, IBM



More information about the Binutils mailing list