summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Thoelke <andrew.thoelke@arm.com>2014-03-18 07:13:52 +0000
committerAndrew Thoelke <andrew.thoelke@arm.com>2014-03-26 21:54:37 +0000
commitdccc537a7243d784e0b8b81ce1634e385c3b048b (patch)
treeffe79e5b2d764b904dd7253df1e9983da5e6b132
parent2eb01d341ff14c003d381cde97fbccdab4737afd (diff)
Use --gc-sections during link
All common functions are being built into all binary images, whether or not they are actually used. This change enables the use of -ffunction-sections, -fdata-sections and --gc-sections in the compiler and linker to remove unused code and data from the images. Change-Id: Ia9f78c01054ac4fa15d145af38b88a0d6fb7d409
-rw-r--r--Makefile2
-rw-r--r--bl1/bl1.ld.S8
-rw-r--r--bl2/bl2.ld.S8
-rw-r--r--bl31/bl31.ld.S12
-rw-r--r--bl32/tsp/tsp.ld.S8
5 files changed, 20 insertions, 18 deletions
diff --git a/Makefile b/Makefile
index 9d02141a..f4b74fee 100644
--- a/Makefile
+++ b/Makefile
@@ -150,8 +150,10 @@ ASFLAGS += -nostdinc -ffreestanding -Wa,--fatal-warnings \
CFLAGS := -nostdinc -pedantic -ffreestanding -Wall \
-Werror -mgeneral-regs-only -std=c99 -c -Os \
-DDEBUG=${DEBUG} ${INCLUDES} ${CFLAGS}
+CFLAGS += -ffunction-sections -fdata-sections
LDFLAGS += --fatal-warnings -O1
+LDFLAGS += --gc-sections
vpath %.ld.S bl1:bl2:bl31
diff --git a/bl1/bl1.ld.S b/bl1/bl1.ld.S
index 012ff582..81c54435 100644
--- a/bl1/bl1.ld.S
+++ b/bl1/bl1.ld.S
@@ -43,8 +43,8 @@ SECTIONS
{
ro : {
__RO_START__ = .;
- *bl1_entrypoint.o(.text)
- *(.text)
+ *bl1_entrypoint.o(.text*)
+ *(.text*)
*(.rodata*)
*(.vectors)
__RO_END__ = .;
@@ -57,7 +57,7 @@ SECTIONS
. = NEXT(16); /* Align LMA */
.data : ALIGN(16) { /* Align VMA */
__DATA_RAM_START__ = .;
- *(.data)
+ *(.data*)
__DATA_RAM_END__ = .;
} >RAM AT>ROM
@@ -73,7 +73,7 @@ SECTIONS
*/
.bss : ALIGN(16) {
__BSS_START__ = .;
- *(.bss)
+ *(.bss*)
*(COMMON)
__BSS_END__ = .;
} >RAM
diff --git a/bl2/bl2.ld.S b/bl2/bl2.ld.S
index 09dec758..edb676af 100644
--- a/bl2/bl2.ld.S
+++ b/bl2/bl2.ld.S
@@ -47,8 +47,8 @@ SECTIONS
ro . : {
__RO_START__ = .;
- *bl2_entrypoint.o(.text)
- *(.text)
+ *bl2_entrypoint.o(.text*)
+ *(.text*)
*(.rodata*)
*(.vectors)
__RO_END_UNALIGNED__ = .;
@@ -63,7 +63,7 @@ SECTIONS
.data . : {
__DATA_START__ = .;
- *(.data)
+ *(.data*)
__DATA_END__ = .;
} >RAM
@@ -79,7 +79,7 @@ SECTIONS
*/
.bss : ALIGN(16) {
__BSS_START__ = .;
- *(SORT_BY_ALIGNMENT(.bss))
+ *(SORT_BY_ALIGNMENT(.bss*))
*(COMMON)
__BSS_END__ = .;
} >RAM
diff --git a/bl31/bl31.ld.S b/bl31/bl31.ld.S
index 844f1696..1b818f5e 100644
--- a/bl31/bl31.ld.S
+++ b/bl31/bl31.ld.S
@@ -48,14 +48,14 @@ SECTIONS
ro . : {
__RO_START__ = .;
- *bl31_entrypoint.o(.text)
- *(.text)
+ *bl31_entrypoint.o(.text*)
+ *(.text*)
*(.rodata*)
- /* Ensure 8-byte alignment for descriptors */
+ /* Ensure 8-byte alignment for descriptors and ensure inclusion */
. = ALIGN(8);
__RT_SVC_DESCS_START__ = .;
- *(rt_svc_descs)
+ KEEP(*(rt_svc_descs))
__RT_SVC_DESCS_END__ = .;
*(.vectors)
@@ -71,7 +71,7 @@ SECTIONS
.data . : {
__DATA_START__ = .;
- *(.data)
+ *(.data*)
__DATA_END__ = .;
} >RAM
@@ -87,7 +87,7 @@ SECTIONS
*/
.bss : ALIGN(16) {
__BSS_START__ = .;
- *(.bss)
+ *(.bss*)
*(COMMON)
__BSS_END__ = .;
} >RAM
diff --git a/bl32/tsp/tsp.ld.S b/bl32/tsp/tsp.ld.S
index 74b03ad5..53bce7d5 100644
--- a/bl32/tsp/tsp.ld.S
+++ b/bl32/tsp/tsp.ld.S
@@ -48,8 +48,8 @@ SECTIONS
ro . : {
__RO_START__ = .;
- *tsp_entrypoint.o(.text)
- *(.text)
+ *tsp_entrypoint.o(.text*)
+ *(.text*)
*(.rodata*)
*(.vectors)
__RO_END_UNALIGNED__ = .;
@@ -64,7 +64,7 @@ SECTIONS
.data . : {
__DATA_START__ = .;
- *(.data)
+ *(.data*)
__DATA_END__ = .;
} >RAM
@@ -80,7 +80,7 @@ SECTIONS
*/
.bss : ALIGN(16) {
__BSS_START__ = .;
- *(SORT_BY_ALIGNMENT(.bss))
+ *(SORT_BY_ALIGNMENT(.bss*))
*(COMMON)
__BSS_END__ = .;
} >RAM