init: Add protection against incorrect levels or priorities

Initialization level can be one of five predefined.
Init priority is numeric from 1 to 99. If init level or priority
is defined wrong, linker prints out the message and stops.

Change-Id: I165a32ffb668cda983fd48eb2aa7b94998e31a18
Signed-off-by: Dmitriy Korovkin <dmitriy.korovkin@windriver.com>
This commit is contained in:
Dmitriy Korovkin 2015-10-26 15:40:46 -04:00 committed by Anas Nashif
commit fb6de2d486
4 changed files with 22 additions and 0 deletions

View file

@ -136,6 +136,11 @@ SECTIONS {
DEVICE_INIT_SECTIONS() DEVICE_INIT_SECTIONS()
} GROUP_LINK_IN(RAMABLE_REGION) } GROUP_LINK_IN(RAMABLE_REGION)
SECTION_PROLOGUE(initlevel_error, (OPTIONAL),)
{
DEVICE_INIT_UNDEFINED_SECTION()
}
ASSERT(SIZEOF(initlevel_error) == 0, "Undefined initialization levels used.")
__data_ram_end = .; __data_ram_end = .;

View file

@ -156,6 +156,12 @@ SECTIONS
DEVICE_INIT_SECTIONS() DEVICE_INIT_SECTIONS()
} GROUP_LINK_IN(RAMABLE_REGION) } GROUP_LINK_IN(RAMABLE_REGION)
SECTION_PROLOGUE(initlevel_error, (OPTIONAL),)
{
DEVICE_INIT_UNDEFINED_SECTION()
}
ASSERT(SIZEOF(initlevel_error) == 0, "Undefined initialization levels used.")
SECTION_PROLOGUE (_k_task_list, (OPTIONAL),) SECTION_PROLOGUE (_k_task_list, (OPTIONAL),)
{ {
_k_task_list_start = .; _k_task_list_start = .;

View file

@ -128,6 +128,12 @@ SECTIONS
KEXEC_PGALIGN_PAD(MMU_PAGE_SIZE) KEXEC_PGALIGN_PAD(MMU_PAGE_SIZE)
} GROUP_LINK_IN(RAM) } GROUP_LINK_IN(RAM)
SECTION_PROLOGUE(initlevel_error, (OPTIONAL),)
{
DEVICE_INIT_UNDEFINED_SECTION()
}
ASSERT(SIZEOF(initlevel_error) == 0, "Undefined initialization levels used.")
SECTION_PROLOGUE(_k_task_list, ALIGN(4), ALIGN(4)) SECTION_PROLOGUE(_k_task_list, ALIGN(4), ALIGN(4))
{ {
_k_task_list_start = .; _k_task_list_start = .;

View file

@ -71,6 +71,11 @@
DEVICE_INIT_LEVEL(APPLICATION) \ DEVICE_INIT_LEVEL(APPLICATION) \
__device_init_end = .; \ __device_init_end = .; \
/* define a section for undefined device initialization levels */
#define DEVICE_INIT_UNDEFINED_SECTION() \
KEEP(*(SORT(.init_[_A-Z0-9]*))) \
#ifdef CONFIG_X86 /* LINKER FILES: defines used by linker script */ #ifdef CONFIG_X86 /* LINKER FILES: defines used by linker script */
/* Should be moved to linker-common-defs.h */ /* Should be moved to linker-common-defs.h */
#if defined(CONFIG_XIP) #if defined(CONFIG_XIP)