diff options
author | Anton Staaf <robotboy@chromium.org> | 2016-03-29 11:27:53 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2016-04-19 12:23:52 -0700 |
commit | 95858f385c35fbe6a95f0bad72ade9290b2a2d41 (patch) | |
tree | 1b856056c3eca8180839383c863f6ea6b55f7b4c /core/cortex-m/ec.lds.S | |
parent | 69668a04436700071bc2a26400f5f52f0e499020 (diff) | |
download | chrome-ec-95858f385c35fbe6a95f0bad72ade9290b2a2d41.tar.gz |
Deferred: Remove hard coded number of deferreds
Previously the maximum number of deferred routines was specified by the
the default maximum number of deferred routines you had to override
this, and if you wanted fewer, you still payed the price of having the
defer_until array statically allocated to be the maximum size.
This change removes that define and instead creates the RAM state of
the deferred routine (the time to wait until to call the deferred) when
the deferred is declared.
Signed-off-by: Anton Staaf <robotboy@chromium.org>
BRANCH=None
BUG=None
TEST=make buildall -j
manually test on discovery-stm32f072
Change-Id: Id3db84ee1795226b7818c57f68c1f637567831dc
Reviewed-on: https://chromium-review.googlesource.com/335597
Commit-Ready: Anton Staaf <robotboy@chromium.org>
Tested-by: Anton Staaf <robotboy@chromium.org>
Reviewed-by: Aseda Aboagye <aaboagye@chromium.org>
Diffstat (limited to 'core/cortex-m/ec.lds.S')
-rw-r--r-- | core/cortex-m/ec.lds.S | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/core/cortex-m/ec.lds.S b/core/cortex-m/ec.lds.S index 24f3030354..6beb007dba 100644 --- a/core/cortex-m/ec.lds.S +++ b/core/cortex-m/ec.lds.S @@ -225,11 +225,6 @@ SECTIONS #endif __ro_end = . ; - __deferred_funcs_count = - (__deferred_funcs_end - __deferred_funcs) / 4; - ASSERT(__deferred_funcs_count <= DEFERRABLE_MAX_COUNT, - "Increase DEFERRABLE_MAX_COUNT") - .bss : { /* * Align to 512 bytes. This is convenient when some memory block @@ -244,6 +239,17 @@ SECTIONS *(.bss.system_stack) /* Rest of .bss takes care of its own alignment */ *(.bss) + + /* + * Reserve space for deferred function firing times. Each time is a + * uint64_t, each func is a 32-bit pointer, thus the scaling factor of + * two. The 8 byte alignment of uint64_t is required by the ARM ABI. + */ + . = ALIGN(8); + __deferred_until = .; + . += (__deferred_funcs_end - __deferred_funcs) * (8 / 4); + __deferred_until_end = .; + #ifdef CONFIG_REPLACE_LOADER_WITH_BSS_SLOW . = ALIGN(4); __bss_end = .; |