dev builds
themes manual
device status forums
mailing lists
IRC bugs
dev guide

Rockbox mail archive

Subject: Re: Removing unused code via --gc-sections

Re: Removing unused code via --gc-sections

From: Rafaël Carré <>
Date: Sat, 17 Dec 2011 15:34:29 -0500

Le Sat, 17 Dec 2011 13:26:02 -0500,
Boris Gjenero <> a écrit :

> It seems there's interest in automatically removing unused code via
> --gc-sections. Theoretically, the requirements are easy:
> --gc-sections requires KEEP() in linker scripts around things that need
> to be kept but are not directly referenced. This only seems to affect
> vectors, because they're only accessed by the CPU.
> -ffunction-sections requires wildcards for .text, because it puts
> functions in sections like ".text.functionname".
> -fdata-sections similarly requires wildcards for .data, .rodata and
> .bss. I don't see a benefit from -fdata-sections due to very little
> removed data and added alignment padding. However, I think adding what's
> required to allow it to work is a good idea because it's simple.

I think jhMikeS already did that part in r31337 (wow, how come we
missed that revision?)

> Here's a patch which does all that:
> . I'm not
> certain that it's wise to touch linker scripts that aren't used for
> regular target and bootloader builds, but KEEP() shouldn't cause any
> harm. I only added wildcards to firmware/, because only that is
> required to make this work with normal builds.

Looks straightforward to me, I think you should just commit it

> When something is explicitly put into a particular section, it won't be
> automatically moved into a subsection. For example, this includes things
> put into .icode via ICODE_ATTR. Such things will only be removed if
> nothing else in the same section in the same object file is referenced.
> Wildcards for such sections aren't required unless something has been
> explicitly moved into a sub-section. Maybe it's a good idea to use
> something like ICODE_ATTR("functionname") in the future? I could add
> wildcards for that if desired.

Yep i think it sounds cool

> Builds using these switches shouldn't significantly increase load for
> the build infrastructure. However, when the switches are first enabled,
> all object files should be re-created to ensure they all use
> -ffunction-sections.
> I don't have a patch to add -ffunction-sections to GCCOPTS and
> -Wl,--gc-sections to GLOBAL_LDOPTS because I'm not sure how they should
> be added. My results at
> imply that it should work for all those targets. However, it may be
> better to be cautious and only enable it for selected tested targets.
> I think the linker scripts could use some cleanup and merging. I didn't
> get around to that, and I don't think making these changes will make
> future cleanup and merging harder.

Yeah I think they are separate changes but indeed a linker template
would be cool and avoid copy/pasted stuff

> Regards,
> Boris

Rafaël Carré
Received on 2011-12-17

Page was last modified "Jan 10 2012" The Rockbox Crew