Patchwork [U-Boot,6/7] POWERPC: enable --gc-sections and -ffunction-sections -fdata-sections

login
register
mail settings
Submitter Wolfgang Denk
Date Nov. 21, 2010, 9:03 p.m.
Message ID <1290373420-3053-7-git-send-email-wd@denx.de>
Download mbox | patch
Permalink /patch/72460/
State Superseded
Headers show

Comments

Wolfgang Denk - Nov. 21, 2010, 9:03 p.m.
The switch from archive libraries to partial linking has introduced a
number of problems, that are non-trivial to solve.  For example, it is
no longer possible to include individual object files in the linker
script as we did before for example in the case of boards with
embedded environment to fill up the gap caused by the need to align
the environment on flash erase block boundaries.

The best (but unfortunately not easiest) approach to address this
problem is to enable -ffunction-sections (and -ffunction-sections) so
we can again (and even in much finer granularity) place certain code
where we want it.  When doing this step, it seems only consequent to
also add --gc-sections which has the added benefit of reducing the
memory footprint of the U-Boot image (both in flash and in RAM).

Unfortunately, this requires changes to a lot of linker scripts.

Signed-off-by: Wolfgang Denk <wd@denx.de>
Cc: Stefan Roese <sr@denx.de>
---
 arch/powerpc/config.mk |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)
Peter Tyser - Nov. 21, 2010, 10:31 p.m.
Hi Wolfgang,

On Sun, 2010-11-21 at 22:03 +0100, Wolfgang Denk wrote:
> The switch from archive libraries to partial linking has introduced a
> number of problems, that are non-trivial to solve.  For example, it is
> no longer possible to include individual object files in the linker
> script as we did before for example in the case of boards with
> embedded environment to fill up the gap caused by the need to align
> the environment on flash erase block boundaries.
> 
> The best (but unfortunately not easiest) approach to address this
> problem is to enable -ffunction-sections (and -ffunction-sections) so

's/function-sections/data-sections/' in the 2nd location above.

<snip>

> --- a/arch/powerpc/config.mk
> +++ b/arch/powerpc/config.mk
> @@ -25,9 +25,9 @@ CROSS_COMPILE ?= ppc_8xx-
>  
>  STANDALONE_LOAD_ADDR = 0x40000
>  
> -PLATFORM_RELFLAGS += -mrelocatable
> +PLATFORM_RELFLAGS += -mrelocatable -ffunction-sections -fdata-sections
>  PLATFORM_CPPFLAGS += -DCONFIG_PPC -D__powerpc__
> -PLATFORM_LDFLAGS  += -n
> +PLATFORM_LDFLAGS  += -n --gc-sections

The above changes already exist in arch/powerpc/cpu/mpc85xx/config.mk
and arch/powerpc/cpu/mpc86xx/config.mk.  It'd be nice to remove those
references in this patch so they aren't duplicated.

Best,
Peter
Wolfgang Denk - Nov. 22, 2010, 7:11 a.m.
Dear Peter Tyser,

In message <1290378684.20072.125.camel@petert> you wrote:
> 
> > The best (but unfortunately not easiest) approach to address this
> > problem is to enable -ffunction-sections (and -ffunction-sections) so
> 
> 's/function-sections/data-sections/' in the 2nd location above.

Oops. Copy & paste ;-)

> The above changes already exist in arch/powerpc/cpu/mpc85xx/config.mk
> and arch/powerpc/cpu/mpc86xx/config.mk.  It'd be nice to remove those
> references in this patch so they aren't duplicated.

Right.  Thanks for pointing out.  v2 on the way.

Best regards,

Wolfgang Denk

Patch

diff --git a/arch/powerpc/config.mk b/arch/powerpc/config.mk
index 8cf2279..271409f 100644
--- a/arch/powerpc/config.mk
+++ b/arch/powerpc/config.mk
@@ -25,9 +25,9 @@  CROSS_COMPILE ?= ppc_8xx-
 
 STANDALONE_LOAD_ADDR = 0x40000
 
-PLATFORM_RELFLAGS += -mrelocatable
+PLATFORM_RELFLAGS += -mrelocatable -ffunction-sections -fdata-sections
 PLATFORM_CPPFLAGS += -DCONFIG_PPC -D__powerpc__
-PLATFORM_LDFLAGS  += -n
+PLATFORM_LDFLAGS  += -n --gc-sections
 
 ifdef CONFIG_SYS_LDSCRIPT
 # need to strip off double quotes