diff options
author | Vincent Palatin <vpalatin@chromium.org> | 2013-04-18 14:04:11 -0700 |
---|---|---|
committer | chrome-internal-fetch <chrome-internal-fetch@google.com> | 2014-03-11 05:53:53 +0000 |
commit | 2476ae11fce6cd549dcfe6c39aab7c126c23c234 (patch) | |
tree | 4468d98175a58d48a253148b170e605a2e100bda /core | |
parent | d63999a12b3bfc5d6a58b08a3bb01a75882324fd (diff) | |
download | chrome-ec-2476ae11fce6cd549dcfe6c39aab7c126c23c234.tar.gz |
discard unused functions at link time
Put each functions in a separate section by using -ffunction-sections,
then discard the non-referenced ones in the linker with -gc-sections.
Force keeping a few special symbols by using the KEEP() linker
directive.
This modification is not saving a lot of spaces per se, but will enable
larger code pruning with future optional features.
Signed-off-by: Vincent Palatin <vpalatin@chromium.org>
BRANCH=none
BUG=none
TEST=make buildall, manually check discarded symbols in the .map file
and run on Spring and Link.
The size delta is the following:
Link: total 85.7k -> 84.9k (.text 60.3k -> 59.5k)
Spring: total 59.2k -> 57.2k (.text 44.4k -> 42.5k)
Change-Id: Ib6eb0d3f2cc4fc172c9fc26acac2e486921690a3
Reviewed-on: https://chromium-review.googlesource.com/189224
Reviewed-by: Randall Spangler <rspangler@chromium.org>
Commit-Queue: Vincent Palatin <vpalatin@chromium.org>
Tested-by: Vincent Palatin <vpalatin@chromium.org>
Diffstat (limited to 'core')
-rw-r--r-- | core/cortex-m/ec.lds.S | 42 | ||||
-rw-r--r-- | core/cortex-m0/ec.lds.S | 42 | ||||
-rw-r--r-- | core/nds32/ec.lds.S | 42 |
3 files changed, 63 insertions, 63 deletions
diff --git a/core/cortex-m/ec.lds.S b/core/cortex-m/ec.lds.S index c0c87e1343..e345bc93ca 100644 --- a/core/cortex-m/ec.lds.S +++ b/core/cortex-m/ec.lds.S @@ -25,7 +25,7 @@ SECTIONS OUTDIR/core/CORE/init.o (.text.vecttable) . = ALIGN(4); __version_struct_offset = .; - *(.rodata.ver) + KEEP(*(.rodata.ver)) #ifdef SHIFT_CODE_FOR_TEST . = ALIGN(256); #else @@ -42,82 +42,82 @@ SECTIONS .rodata : { /* Symbols defined here are declared in link_defs.h */ __irqprio = .; - *(.rodata.irqprio) + KEEP(*(.rodata.irqprio)) __irqprio_end = .; . = ALIGN(4); __cmds = .; - *(SORT(.rodata.cmds*)) + KEEP(*(SORT(.rodata.cmds*))) __cmds_end = .; . = ALIGN(4); __hcmds = .; - *(.rodata.hcmds) + KEEP(*(.rodata.hcmds)) __hcmds_end = .; . = ALIGN(4); __hooks_init = .; - *(.rodata.HOOK_INIT) + KEEP(*(.rodata.HOOK_INIT)) __hooks_init_end = .; __hooks_pre_freq_change = .; - *(.rodata.HOOK_PRE_FREQ_CHANGE) + KEEP(*(.rodata.HOOK_PRE_FREQ_CHANGE)) __hooks_pre_freq_change_end = .; __hooks_freq_change = .; - *(.rodata.HOOK_FREQ_CHANGE) + KEEP(*(.rodata.HOOK_FREQ_CHANGE)) __hooks_freq_change_end = .; __hooks_sysjump = .; - *(.rodata.HOOK_SYSJUMP) + KEEP(*(.rodata.HOOK_SYSJUMP)) __hooks_sysjump_end = .; __hooks_chipset_pre_init = .; - *(.rodata.HOOK_CHIPSET_PRE_INIT) + KEEP(*(.rodata.HOOK_CHIPSET_PRE_INIT)) __hooks_chipset_pre_init_end = .; __hooks_chipset_startup = .; - *(.rodata.HOOK_CHIPSET_STARTUP) + KEEP(*(.rodata.HOOK_CHIPSET_STARTUP)) __hooks_chipset_startup_end = .; __hooks_chipset_resume = .; - *(.rodata.HOOK_CHIPSET_RESUME) + KEEP(*(.rodata.HOOK_CHIPSET_RESUME)) __hooks_chipset_resume_end = .; __hooks_chipset_suspend = .; - *(.rodata.HOOK_CHIPSET_SUSPEND) + KEEP(*(.rodata.HOOK_CHIPSET_SUSPEND)) __hooks_chipset_suspend_end = .; __hooks_chipset_shutdown = .; - *(.rodata.HOOK_CHIPSET_SHUTDOWN) + KEEP(*(.rodata.HOOK_CHIPSET_SHUTDOWN)) __hooks_chipset_shutdown_end = .; __hooks_ac_change = .; - *(.rodata.HOOK_AC_CHANGE) + KEEP(*(.rodata.HOOK_AC_CHANGE)) __hooks_ac_change_end = .; __hooks_lid_change = .; - *(.rodata.HOOK_LID_CHANGE) + KEEP(*(.rodata.HOOK_LID_CHANGE)) __hooks_lid_change_end = .; __hooks_pwrbtn_change = .; - *(.rodata.HOOK_POWER_BUTTON_CHANGE) + KEEP(*(.rodata.HOOK_POWER_BUTTON_CHANGE)) __hooks_pwrbtn_change_end = .; __hooks_charge_state_change = .; - *(.rodata.HOOK_CHARGE_STATE_CHANGE) + KEEP(*(.rodata.HOOK_CHARGE_STATE_CHANGE)) __hooks_charge_state_change_end = .; __hooks_tick = .; - *(.rodata.HOOK_TICK) + KEEP(*(.rodata.HOOK_TICK)) __hooks_tick_end = .; __hooks_second = .; - *(.rodata.HOOK_SECOND) + KEEP(*(.rodata.HOOK_SECOND)) __hooks_second_end = .; __deferred_funcs = .; - *(.rodata.deferred) + KEEP(*(.rodata.deferred)) __deferred_funcs_end = .; . = ALIGN(4); @@ -125,7 +125,7 @@ SECTIONS #if defined(SECTION_IS_RO) && defined(CONFIG_FLASH) . = ALIGN(64); - *(.google) + KEEP(*(.google)) #endif . = ALIGN(4); #ifdef COMPILE_FOR_RAM diff --git a/core/cortex-m0/ec.lds.S b/core/cortex-m0/ec.lds.S index ac05bbc333..28e52869f8 100644 --- a/core/cortex-m0/ec.lds.S +++ b/core/cortex-m0/ec.lds.S @@ -25,7 +25,7 @@ SECTIONS OUTDIR/core/CORE/init.o (.text.vecttable) . = ALIGN(4); __version_struct_offset = .; - *(.rodata.ver) + KEEP(*(.rodata.ver)) #ifdef SHIFT_CODE_FOR_TEST . = ALIGN(256); #else @@ -42,82 +42,82 @@ SECTIONS .rodata : { /* Symbols defined here are declared in link_defs.h */ __irqprio = .; - *(.rodata.irqprio) + KEEP(*(.rodata.irqprio)) __irqprio_end = .; . = ALIGN(4); __cmds = .; - *(SORT(.rodata.cmds*)) + KEEP(*(SORT(.rodata.cmds*))) __cmds_end = .; . = ALIGN(4); __hcmds = .; - *(.rodata.hcmds) + KEEP(*(.rodata.hcmds)) __hcmds_end = .; . = ALIGN(4); __hooks_init = .; - *(.rodata.HOOK_INIT) + KEEP(*(.rodata.HOOK_INIT)) __hooks_init_end = .; __hooks_pre_freq_change = .; - *(.rodata.HOOK_PRE_FREQ_CHANGE) + KEEP(*(.rodata.HOOK_PRE_FREQ_CHANGE)) __hooks_pre_freq_change_end = .; __hooks_freq_change = .; - *(.rodata.HOOK_FREQ_CHANGE) + KEEP(*(.rodata.HOOK_FREQ_CHANGE)) __hooks_freq_change_end = .; __hooks_sysjump = .; - *(.rodata.HOOK_SYSJUMP) + KEEP(*(.rodata.HOOK_SYSJUMP)) __hooks_sysjump_end = .; __hooks_chipset_pre_init = .; - *(.rodata.HOOK_CHIPSET_PRE_INIT) + KEEP(*(.rodata.HOOK_CHIPSET_PRE_INIT)) __hooks_chipset_pre_init_end = .; __hooks_chipset_startup = .; - *(.rodata.HOOK_CHIPSET_STARTUP) + KEEP(*(.rodata.HOOK_CHIPSET_STARTUP)) __hooks_chipset_startup_end = .; __hooks_chipset_resume = .; - *(.rodata.HOOK_CHIPSET_RESUME) + KEEP(*(.rodata.HOOK_CHIPSET_RESUME)) __hooks_chipset_resume_end = .; __hooks_chipset_suspend = .; - *(.rodata.HOOK_CHIPSET_SUSPEND) + KEEP(*(.rodata.HOOK_CHIPSET_SUSPEND)) __hooks_chipset_suspend_end = .; __hooks_chipset_shutdown = .; - *(.rodata.HOOK_CHIPSET_SHUTDOWN) + KEEP(*(.rodata.HOOK_CHIPSET_SHUTDOWN)) __hooks_chipset_shutdown_end = .; __hooks_ac_change = .; - *(.rodata.HOOK_AC_CHANGE) + KEEP(*(.rodata.HOOK_AC_CHANGE)) __hooks_ac_change_end = .; __hooks_lid_change = .; - *(.rodata.HOOK_LID_CHANGE) + KEEP(*(.rodata.HOOK_LID_CHANGE)) __hooks_lid_change_end = .; __hooks_pwrbtn_change = .; - *(.rodata.HOOK_POWER_BUTTON_CHANGE) + KEEP(*(.rodata.HOOK_POWER_BUTTON_CHANGE)) __hooks_pwrbtn_change_end = .; __hooks_charge_state_change = .; - *(.rodata.HOOK_CHARGE_STATE_CHANGE) + KEEP(*(.rodata.HOOK_CHARGE_STATE_CHANGE)) __hooks_charge_state_change_end = .; __hooks_tick = .; - *(.rodata.HOOK_TICK) + KEEP(*(.rodata.HOOK_TICK)) __hooks_tick_end = .; __hooks_second = .; - *(.rodata.HOOK_SECOND) + KEEP(*(.rodata.HOOK_SECOND)) __hooks_second_end = .; __deferred_funcs = .; - *(.rodata.deferred) + KEEP(*(.rodata.deferred)) __deferred_funcs_end = .; . = ALIGN(4); @@ -125,7 +125,7 @@ SECTIONS #if defined(SECTION_IS_RO) && defined(CONFIG_FLASH) . = ALIGN(64); - *(.google) + KEEP(*(.google)) #endif . = ALIGN(4); #ifdef COMPILE_FOR_RAM diff --git a/core/nds32/ec.lds.S b/core/nds32/ec.lds.S index f1d021c3b0..84e08d34bc 100644 --- a/core/nds32/ec.lds.S +++ b/core/nds32/ec.lds.S @@ -25,7 +25,7 @@ SECTIONS OUTDIR/core/CORE/init.o (.text.vecttable) . = ALIGN(4); __version_struct_offset = .; - *(.rodata.ver) + KEEP(*(.rodata.ver)) #ifdef SHIFT_CODE_FOR_TEST . = ALIGN(256); #else @@ -43,7 +43,7 @@ SECTIONS .rodata : { /* Symbols defined here are declared in link_defs.h */ __irqprio = .; - *(.rodata.irqprio) + KEEP(*(.rodata.irqprio)) __irqprio_end = .; . = ALIGN(4); @@ -52,77 +52,77 @@ SECTIONS . = ALIGN(4); __cmds = .; - *(SORT(.rodata.cmds*)) + KEEP(*(SORT(.rodata.cmds*))) __cmds_end = .; . = ALIGN(4); __hcmds = .; - *(.rodata.hcmds) + KEEP(*(.rodata.hcmds)) __hcmds_end = .; . = ALIGN(4); __hooks_init = .; - *(.rodata.HOOK_INIT) + KEEP(*(.rodata.HOOK_INIT)) __hooks_init_end = .; __hooks_pre_freq_change = .; - *(.rodata.HOOK_PRE_FREQ_CHANGE) + KEEP(*(.rodata.HOOK_PRE_FREQ_CHANGE)) __hooks_pre_freq_change_end = .; __hooks_freq_change = .; - *(.rodata.HOOK_FREQ_CHANGE) + KEEP(*(.rodata.HOOK_FREQ_CHANGE)) __hooks_freq_change_end = .; __hooks_sysjump = .; - *(.rodata.HOOK_SYSJUMP) + KEEP(*(.rodata.HOOK_SYSJUMP)) __hooks_sysjump_end = .; __hooks_chipset_pre_init = .; - *(.rodata.HOOK_CHIPSET_PRE_INIT) + KEEP(*(.rodata.HOOK_CHIPSET_PRE_INIT)) __hooks_chipset_pre_init_end = .; __hooks_chipset_startup = .; - *(.rodata.HOOK_CHIPSET_STARTUP) + KEEP(*(.rodata.HOOK_CHIPSET_STARTUP)) __hooks_chipset_startup_end = .; __hooks_chipset_resume = .; - *(.rodata.HOOK_CHIPSET_RESUME) + KEEP(*(.rodata.HOOK_CHIPSET_RESUME)) __hooks_chipset_resume_end = .; __hooks_chipset_suspend = .; - *(.rodata.HOOK_CHIPSET_SUSPEND) + KEEP(*(.rodata.HOOK_CHIPSET_SUSPEND)) __hooks_chipset_suspend_end = .; __hooks_chipset_shutdown = .; - *(.rodata.HOOK_CHIPSET_SHUTDOWN) + KEEP(*(.rodata.HOOK_CHIPSET_SHUTDOWN)) __hooks_chipset_shutdown_end = .; __hooks_ac_change = .; - *(.rodata.HOOK_AC_CHANGE) + KEEP(*(.rodata.HOOK_AC_CHANGE)) __hooks_ac_change_end = .; __hooks_lid_change = .; - *(.rodata.HOOK_LID_CHANGE) + KEEP(*(.rodata.HOOK_LID_CHANGE)) __hooks_lid_change_end = .; __hooks_pwrbtn_change = .; - *(.rodata.HOOK_POWER_BUTTON_CHANGE) + KEEP(*(.rodata.HOOK_POWER_BUTTON_CHANGE)) __hooks_pwrbtn_change_end = .; __hooks_charge_state_change = .; - *(.rodata.HOOK_CHARGE_STATE_CHANGE) + KEEP(*(.rodata.HOOK_CHARGE_STATE_CHANGE)) __hooks_charge_state_change_end = .; __hooks_tick = .; - *(.rodata.HOOK_TICK) + KEEP(*(.rodata.HOOK_TICK)) __hooks_tick_end = .; __hooks_second = .; - *(.rodata.HOOK_SECOND) + KEEP(*(.rodata.HOOK_SECOND)) __hooks_second_end = .; __deferred_funcs = .; - *(.rodata.deferred) + KEEP(*(.rodata.deferred)) __deferred_funcs_end = .; . = ALIGN(4); @@ -130,7 +130,7 @@ SECTIONS #if defined(SECTION_IS_RO) && defined(CONFIG_FLASH) . = ALIGN(64); - *(.google) + KEEP(*(.google)) #endif . = ALIGN(4); #ifdef COMPILE_FOR_RAM |