linker: add bits for pinned regions
This adds the necessary bits for linker scripts and source code to specify which symbols need to be pinned in memory. This is needed for demand paging as some functions and data must reside in memory all the time and cannot be paged out (e.g. paging, scheduler, and interrupt routines for functionality). This is up to the arch/SoC/board to define the sections in their linker scripts as the pinned section may need special alignment which cannot be done in common script snippets. Signed-off-by: Daniel Leung <daniel.leung@intel.com>
This commit is contained in:
parent
d812728ec4
commit
1310ad6b0e
8 changed files with 164 additions and 0 deletions
|
@ -341,6 +341,32 @@ extern char lnkr_boot_noinit_end[];
|
|||
extern char lnkr_boot_noinit_size[];
|
||||
#endif /* CONFIG_LINKER_USE_BOOT_SECTION */
|
||||
|
||||
#ifdef CONFIG_LINKER_USE_PINNED_SECTION
|
||||
/* lnkr_pinned_start[] and lnkr_pinned_end[] must encapsulate
|
||||
* all the pinned sections as these are used by
|
||||
* the MMU code to mark the physical page frames with
|
||||
* Z_PAGE_FRAME_PINNED.
|
||||
*/
|
||||
extern char lnkr_pinned_start[];
|
||||
extern char lnkr_pinned_end[];
|
||||
|
||||
extern char lnkr_pinned_text_start[];
|
||||
extern char lnkr_pinned_text_end[];
|
||||
extern char lnkr_pinned_text_size[];
|
||||
extern char lnkr_pinned_data_start[];
|
||||
extern char lnkr_pinned_data_end[];
|
||||
extern char lnkr_pinned_data_size[];
|
||||
extern char lnkr_pinned_rodata_start[];
|
||||
extern char lnkr_pinned_rodata_end[];
|
||||
extern char lnkr_pinned_rodata_size[];
|
||||
extern char lnkr_pinned_bss_start[];
|
||||
extern char lnkr_pinned_bss_end[];
|
||||
extern char lnkr_pinned_bss_size[];
|
||||
extern char lnkr_pinned_noinit_start[];
|
||||
extern char lnkr_pinned_noinit_end[];
|
||||
extern char lnkr_pinned_noinit_size[];
|
||||
#endif /* CONFIG_LINKER_USE_PINNED_SECTION */
|
||||
|
||||
#endif /* ! _ASMLANGUAGE */
|
||||
|
||||
#endif /* ZEPHYR_INCLUDE_LINKER_LINKER_DEFS_H_ */
|
||||
|
|
|
@ -66,6 +66,20 @@
|
|||
#define __boot_noinit __noinit
|
||||
#endif /* CONFIG_LINKER_USE_BOOT_SECTION */
|
||||
|
||||
#if defined(CONFIG_LINKER_USE_PINNED_SECTION)
|
||||
#define __pinned_func Z_GENERIC_DOT_SECTION(PINNED_TEXT_SECTION_NAME)
|
||||
#define __pinned_data Z_GENERIC_DOT_SECTION(PINNED_DATA_SECTION_NAME)
|
||||
#define __pinned_rodata Z_GENERIC_DOT_SECTION(PINNED_RODATA_SECTION_NAME)
|
||||
#define __pinned_bss Z_GENERIC_DOT_SECTION(PINNED_BSS_SECTION_NAME)
|
||||
#define __pinned_noinit Z_GENERIC_DOT_SECTION(PINNED_NOINIT_SECTION_NAME)
|
||||
#else
|
||||
#define __pinned_func
|
||||
#define __pinned_data
|
||||
#define __pinned_rodata
|
||||
#define __pinned_bss
|
||||
#define __pinned_noinit __noinit
|
||||
#endif /* CONFIG_LINKER_USE_PINNED_SECTION */
|
||||
|
||||
#endif /* !_ASMLANGUAGE */
|
||||
|
||||
#endif /* ZEPHYR_INCLUDE_LINKER_SECTION_TAGS_H_ */
|
||||
|
|
|
@ -75,6 +75,14 @@
|
|||
#define BOOT_NOINIT_SECTION_NAME boot_noinit
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_LINKER_USE_PINNED_SECTION)
|
||||
#define PINNED_TEXT_SECTION_NAME pinned_text
|
||||
#define PINNED_BSS_SECTION_NAME pinned_bss
|
||||
#define PINNED_RODATA_SECTION_NAME pinned_rodata
|
||||
#define PINNED_DATA_SECTION_NAME pinned_data
|
||||
#define PINNED_NOINIT_SECTION_NAME pinned_noinit
|
||||
#endif
|
||||
|
||||
/* Short section references for use in ASM files */
|
||||
#if defined(_ASMLANGUAGE)
|
||||
/* Various text section names */
|
||||
|
@ -100,6 +108,20 @@
|
|||
#define BOOT_NOINIT NOINIT
|
||||
#endif /* CONFIG_LINKER_USE_BOOT_SECTION */
|
||||
|
||||
#if defined(CONFIG_LINKER_USE_PINNED_SECTION)
|
||||
#define PINNED_TEXT PINNED_TEXT_SECTION_NAME
|
||||
#define PINNED_BSS PINNED_BSS_SECTION_NAME
|
||||
#define PINNED_RODATA PINNED_RODATA_SECTION_NAME
|
||||
#define PINNED_DATA PINNED_DATA_SECTION_NAME
|
||||
#define PINNED_NOINIT PINNED_NOINIT_SECTION_NAME
|
||||
#else
|
||||
#define PINNED_TEXT TEXT
|
||||
#define PINNED_BSS BSS
|
||||
#define PINNED_RODATA RODATA
|
||||
#define PINNED_DATA DATA
|
||||
#define PINNED_NOINIT NOINIT
|
||||
#endif /* CONFIG_LINKER_USE_PINNED_SECTION */
|
||||
|
||||
#endif /* _ASMLANGUAGE */
|
||||
|
||||
#include <linker/section_tags.h>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue