cc2538: Sort link input sections by alignment to optimize size

Normally, the linker does not sort files and sections matched by wildcards, so
they are placed in the order in which they are seen during link. If numerous
objects with different alignments are mixed, or if objects with unusually large
alignments are present, this very likely leads to a lot of space being wasted
because of accumulated alignment gaps.

This commit forces input sections to be sorted by alignment (unless this is
overridden by the linker script), which decreases the number and the size of
alignment gaps, thus saving space.

For a typical Contiki project, this change saves nearly 1 kiB, mainly in .bss.

Note that this behavior is only enabled if the SMALL make variable is set to 1,
because this makes more sense for a size optimization.

Signed-off-by: Benoît Thébaudeau <benoit.thebaudeau@advansee.com>
This commit is contained in:
Benoît Thébaudeau 2013-12-19 21:11:04 +01:00
parent e1147ec787
commit ab4b955f17

View File

@ -21,7 +21,7 @@ OBJCOPY_FLAGS += -O binary --gap-fill 0xff
### Are we building with code size optimisations? ### Are we building with code size optimisations?
ifeq ($(SMALL),1) ifeq ($(SMALL),1)
CFLAGS += -ffunction-sections -fdata-sections CFLAGS += -ffunction-sections -fdata-sections
LDFLAGS += -Wl,--gc-sections LDFLAGS += -Wl,--gc-sections,--sort-section=alignment
endif endif
### If the user-specified a Node ID, pass a define ### If the user-specified a Node ID, pass a define