summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorDmitriy Korovkin <dmitriy.korovkin@windriver.com>2016-10-06 15:50:40 -0400
committerAnas Nashif <nashif@linux.intel.com>2016-10-22 01:27:01 +0000
commit3c90651fd87a76d2ace2f320cea7a503e64962a4 (patch)
tree3b6c7442f854c9a0b85a252880e81c44ef02c331 /include
parent909bfffda92bbe811177f9d9a052729611f1c913 (diff)
unified/arc: add memory pools support for ARC architecture
ARC does not align data structures by 4 bytes by default. Add necessary linker sections. Change-Id: I3bf7aa38b9bc8cba56f824469040c027968fa564 Signed-off-by: Dmitriy Korovkin <dmitriy.korovkin@windriver.com>
Diffstat (limited to 'include')
-rw-r--r--include/arch/arc/v2/linker.ld11
-rw-r--r--include/kernel.h2
2 files changed, 13 insertions, 0 deletions
diff --git a/include/arch/arc/v2/linker.ld b/include/arch/arc/v2/linker.ld
index 548e8a4eb..34d8d603c 100644
--- a/include/arch/arc/v2/linker.ld
+++ b/include/arch/arc/v2/linker.ld
@@ -221,6 +221,17 @@ SECTION_DATA_PROLOGUE (_k_task_list, (OPTIONAL),)
_k_event_list_end = .;
} GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
+ SECTION_PROLOGUE(_k_memory_pool, (OPTIONAL),)
+ {
+ *(._k_memory_pool.struct*)
+ KEEP(*(SORT_BY_NAME("._k_memory_pool.struct*")))
+
+ _k_mem_pool_start = .;
+ *(._k_memory_pool.*)
+ KEEP(*(SORT_BY_NAME("._k_memory_pool*")))
+ _k_mem_pool_end = .;
+ } GROUP_LINK_IN(RAMABLE_REGION)
+
__data_ram_end = .;
SECTION_PROLOGUE(_BSS_SECTION_NAME,(NOLOAD),) {
diff --git a/include/kernel.h b/include/kernel.h
index ff9d6c93c..b7221edb7 100644
--- a/include/kernel.h
+++ b/include/kernel.h
@@ -1665,6 +1665,7 @@ __asm__(".macro __do_recurse macro_name, name, n_max\n\t"
* __memory_pool_quad_block_size - sizeof(struct k_mem_pool_quad_block)
*/
__asm__(".macro _build_quad_blocks n_max, name\n\t"
+ ".balign 4\n\t"
"_mem_pool_quad_blocks_\\name\\()_\\n_max:\n\t"
".skip __memory_pool_quad_block_size * \\n_max >> 2\n\t"
".if \\n_max % 4\n\t\t"
@@ -1735,6 +1736,7 @@ __asm__(".macro _build_mem_pool name, min_size, max_size, n_max\n\t"
__asm__("__memory_pool_max_block_size = " STRINGIFY(max_size) "\n\t"); \
__asm__(".pushsection ._k_memory_pool.struct,\"aw\"," \
_SECTION_TYPE_SIGN "progbits\n\t"); \
+ __asm__(".balign 4\n\t"); \
__asm__("_mem_pool_block_sets_" STRINGIFY(name) ":\n\t"); \
__asm__("_build_block_set " STRINGIFY(n_max) " " \
STRINGIFY(name) "\n\t"); \