Hi The attached patch turns on support for function and data sections for all SPARC BSPs. In my testing,u it has reduced test sizes to about 55% of their original size on average.
If this patch is OK, I would like to commit it as "forward looking encouragement" so others can help implement and use this technique on other BSPs. -- Joel Sherrill, Ph.D. Director of Research & Development joel.sherr...@oarcorp.com On-Line Applications Research Ask me about RTEMS: a free RTOS Huntsville AL 35805 Support Available (256) 722-9985
>From 24a6943c66d64dd16f79eeeaf88e3af30ed6fb36 Mon Sep 17 00:00:00 2001 From: Joel Sherrill <joel.sherr...@oarcorp.com> Date: Thu, 24 Oct 2013 18:37:17 -0500 Subject: [PATCH] sparc all BSPs: Use function and data sections This reduces the size of the RTEMS tests on average about 45%. --- c/src/lib/libbsp/sparc/erc32/make/custom/erc32.cfg | 3 +++ c/src/lib/libbsp/sparc/leon2/make/custom/leon2.cfg | 3 +++ c/src/lib/libbsp/sparc/leon3/make/custom/leon3.cfg | 3 +++ .../lib/libbsp/sparc/shared/startup/linkcmds.base | 17 +++++++++-------- 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/c/src/lib/libbsp/sparc/erc32/make/custom/erc32.cfg b/c/src/lib/libbsp/sparc/erc32/make/custom/erc32.cfg index 3879d3d..2859372 100644 --- a/c/src/lib/libbsp/sparc/erc32/make/custom/erc32.cfg +++ b/c/src/lib/libbsp/sparc/erc32/make/custom/erc32.cfg @@ -13,3 +13,6 @@ CPU_CFLAGS = -mcpu=cypress # optimize flag: typically -O2 CFLAGS_OPTIMIZE_V = -O2 -g +CFLAGS_OPTIMIZE_V += -ffunction-sections -fdata-sections + +LDFLAGS = -Wl,--gc-sections diff --git a/c/src/lib/libbsp/sparc/leon2/make/custom/leon2.cfg b/c/src/lib/libbsp/sparc/leon2/make/custom/leon2.cfg index de5a826..af1cb1b 100644 --- a/c/src/lib/libbsp/sparc/leon2/make/custom/leon2.cfg +++ b/c/src/lib/libbsp/sparc/leon2/make/custom/leon2.cfg @@ -13,3 +13,6 @@ CPU_CFLAGS = -mcpu=cypress -msoft-float # optimize flag: typically -O2 CFLAGS_OPTIMIZE_V = -O2 -g +CFLAGS_OPTIMIZE_V += -ffunction-sections -fdata-sections + +LDFLAGS = -Wl,--gc-sections diff --git a/c/src/lib/libbsp/sparc/leon3/make/custom/leon3.cfg b/c/src/lib/libbsp/sparc/leon3/make/custom/leon3.cfg index ee053e0..58f2f07 100644 --- a/c/src/lib/libbsp/sparc/leon3/make/custom/leon3.cfg +++ b/c/src/lib/libbsp/sparc/leon3/make/custom/leon3.cfg @@ -13,3 +13,6 @@ CPU_CFLAGS = -mcpu=cypress -msoft-float # optimize flag: typically -O2 CFLAGS_OPTIMIZE_V = -O2 -g +CFLAGS_OPTIMIZE_V += -ffunction-sections -fdata-sections + +LDFLAGS = -Wl,--gc-sections diff --git a/c/src/lib/libbsp/sparc/shared/startup/linkcmds.base b/c/src/lib/libbsp/sparc/shared/startup/linkcmds.base index e61a554..fd91085 100644 --- a/c/src/lib/libbsp/sparc/shared/startup/linkcmds.base +++ b/c/src/lib/libbsp/sparc/shared/startup/linkcmds.base @@ -3,6 +3,7 @@ OUTPUT_ARCH(sparc) __DYNAMIC = 0; +ENTRY(start) /* * The memory map looks like this: @@ -101,8 +102,8 @@ SECTIONS etext = ALIGN(0x10); _etext = .; - *(.init) - *(.fini) + KEEP(*(.init)) + KEEP(*(.fini)) *(.lit) *(.shdata) . = ALIGN (16); @@ -110,22 +111,22 @@ SECTIONS .robsdsets : { /* for pre rtems-libbsd FreeBSD code */ __start_set_sysctl_set = .; - *(set_sysctl_*); + KEEP(*(set_sysctl_*)); __stop_set_sysctl_set = .; - *(set_domain_*); - *(set_pseudo_*); + KEEP(*(set_domain_*)); + KEEP(*(set_pseudo_*)); /* for rtems-libbsd FreeBSD code */ _bsd__start_set_modmetadata_set = .; - *(_bsd_set_modmetadata_set); + KEEP(*(_bsd_set_modmetadata_set)); _bsd__stop_set_modmetadata_set = .; _bsd__start_set_sysctl_set = .; - *(_bsd_set_sysctl_set); + KEEP(*(_bsd_set_sysctl_set)); _bsd__stop_set_sysctl_set = .; _bsd__start_set_sysinit_set = .; - *(_bsd_set_sysinit_*); + KEEP(*(_bsd_set_sysinit_*)); _bsd__stop_set_sysinit_set = .; . = ALIGN (16); -- 1.7.1
_______________________________________________ rtems-devel mailing list rtems-devel@rtems.org http://www.rtems.org/mailman/listinfo/rtems-devel