123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510 |
- #ifndef ZEPHYR_INCLUDE_LINKER_LINKER_DEFS_H_
- #define ZEPHYR_INCLUDE_LINKER_LINKER_DEFS_H_
- #include <toolchain.h>
- #include <toolchain/common.h>
- #include <linker/sections.h>
- #include <sys/util.h>
- #include <offsets.h>
- #ifdef ZTEST_UNITTEST
- #define DT_NODE_HAS_STATUS(node, status) 0
- #else
- #include <linker/devicetree_reserved.h>
- #include <devicetree.h>
- #endif
- #ifdef _LINKER
- #define Z_LINK_ITERABLE(struct_type) \
- _CONCAT(_##struct_type, _list_start) = .; \
- KEEP(*(SORT_BY_NAME(._##struct_type.static.*))); \
- _CONCAT(_##struct_type, _list_end) = .
- #define Z_LINK_ITERABLE_ALIGNED(struct_type, align) \
- . = ALIGN(align); \
- Z_LINK_ITERABLE(struct_type);
- #define Z_LINK_ITERABLE_GC_ALLOWED(struct_type) \
- _CONCAT(_##struct_type, _list_start) = .; \
- *(SORT_BY_NAME(._##struct_type.static.*)); \
- _CONCAT(_##struct_type, _list_end) = .
- #define ITERABLE_SECTION_ROM(struct_type, subalign) \
- SECTION_PROLOGUE(struct_type##_area,,SUBALIGN(subalign)) \
- { \
- Z_LINK_ITERABLE(struct_type); \
- } GROUP_ROM_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
- #define Z_ITERABLE_SECTION_ROM(struct_type, subalign) \
- ITERABLE_SECTION_ROM(struct_type, subalign)
- #define ITERABLE_SECTION_ROM_GC_ALLOWED(struct_type, subalign) \
- SECTION_PROLOGUE(struct_type##_area,,SUBALIGN(subalign)) \
- { \
- Z_LINK_ITERABLE_GC_ALLOWED(struct_type); \
- } GROUP_LINK_IN(ROMABLE_REGION)
- #define Z_ITERABLE_SECTION_ROM_GC_ALLOWED(struct_type, subalign) \
- ITERABLE_SECTION_ROM_GC_ALLOWED(struct_type, subalign)
- #define ITERABLE_SECTION_RAM(struct_type, subalign) \
- SECTION_DATA_PROLOGUE(struct_type##_area,,SUBALIGN(subalign)) \
- { \
- Z_LINK_ITERABLE(struct_type); \
- } GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
- #define Z_ITERABLE_SECTION_RAM(struct_type, subalign) \
- ITERABLE_SECTION_RAM(struct_type, subalign)
- #define ITERABLE_SECTION_RAM_GC_ALLOWED(struct_type, subalign) \
- SECTION_DATA_PROLOGUE(struct_type##_area,,SUBALIGN(subalign)) \
- { \
- Z_LINK_ITERABLE_GC_ALLOWED(struct_type); \
- } GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
- #define Z_ITERABLE_SECTION_RAM_GC_ALLOWED(struct_type, subalign) \
- ITERABLE_SECTION_RAM_GC_ALLOWED(struct_type, subalign)
-
- #define CREATE_OBJ_LEVEL(object, level) \
- __##object##_##level##_start = .; \
- KEEP(*(SORT(.z_##object##_##level[0-9]_*))); \
- KEEP(*(SORT(.z_##object##_##level[1-9][0-9]_*)));
- #elif defined(_ASMLANGUAGE)
- GDATA(__bss_start)
- GDATA(__bss_num_words)
- #ifdef CONFIG_XIP
- GDATA(__data_region_load_start)
- GDATA(__data_region_start)
- GDATA(__data_region_num_words)
- #endif
- #else
- #include <zephyr/types.h>
- extern char _app_smem_start[];
- extern char _app_smem_end[];
- extern char _app_smem_size[];
- extern char _app_smem_rom_start[];
- extern char _app_smem_num_words[];
- #ifdef CONFIG_LINKER_USE_PINNED_SECTION
- extern char _app_smem_pinned_start[];
- extern char _app_smem_pinned_end[];
- extern char _app_smem_pinned_size[];
- extern char _app_smem_pinned_num_words[];
- #endif
- extern char __kernel_ram_start[];
- extern char __kernel_ram_end[];
- extern char __kernel_ram_size[];
- extern char __kernel_ram_save_end[];
- extern char __bss_start[];
- extern char __bss_end[];
- extern char __psram_bss_start[];
- extern char __psram_bss_end[];
- extern char __sram_bss_start[];
- extern char __sram_bss_end[];
- extern char __sensor_func_start[];
- extern char __sensor_func_end[];
- extern char __sensor_func_size[];
- extern char __sensor_func_load_start[];
- extern char __sensor_data_start[];
- extern char __sensor_data_end[];
- extern char __sensor_data_size[];
- extern char __sensor_data_load_start[];
- extern char __sensor_bss_start[];
- extern char __sensor_bss_end[];
- extern char __sensor_bss_size[];
- #ifdef CONFIG_XIP
- extern char __data_region_load_start[];
- extern char __data_region_start[];
- extern char __data_region_end[];
- #endif
- #ifdef CONFIG_MMU
- extern char z_mapped_start[];
- extern char z_mapped_end[];
- #endif
- extern char __rom_region_start[];
- extern char __rom_region_end[];
- extern char __rom_region_size[];
- extern char _flash_used[];
- extern char _image_ram_start[];
- extern char _image_ram_end[];
- extern char __text_region_start[];
- extern char __text_region_end[];
- extern char __text_region_size[];
- extern char __rodata_region_start[];
- extern char __rodata_region_end[];
- extern char __rodata_region_size[];
- extern char _vector_start[];
- extern char _vector_end[];
- extern char _sleep_shutdown_ram_start[];
- extern char _sleep_shutdown_ram_end[];
- extern char __ramdump_sram_start[];
- extern char __ramdump_sram_end[];
- extern char __ramdump_psram_start[];
- extern char __ramdump_psram_end[];
- #if DT_NODE_HAS_STATUS(_NODE_RESERVED, okay)
- LINKER_DT_RESERVED_MEM_SYMBOLS()
- #endif
- #ifdef CONFIG_SW_VECTOR_RELAY
- extern char __vector_relay_table[];
- #endif
- #ifdef CONFIG_COVERAGE_GCOV
- extern char __gcov_bss_start[];
- extern char __gcov_bss_end[];
- extern char __gcov_bss_size[];
- #endif
- extern char _end[];
- extern char _flash_used[];
- #if DT_NODE_HAS_STATUS(DT_CHOSEN(zephyr_ccm), okay)
- extern char __ccm_data_rom_start[];
- extern char __ccm_start[];
- extern char __ccm_data_start[];
- extern char __ccm_data_end[];
- extern char __ccm_bss_start[];
- extern char __ccm_bss_end[];
- extern char __ccm_noinit_start[];
- extern char __ccm_noinit_end[];
- extern char __ccm_end[];
- #endif
- #if DT_NODE_HAS_STATUS(DT_CHOSEN(zephyr_itcm), okay)
- extern char __itcm_start[];
- extern char __itcm_end[];
- extern char __itcm_size[];
- extern char __itcm_load_start[];
- #endif
- #if DT_NODE_HAS_STATUS(DT_CHOSEN(zephyr_dtcm), okay)
- extern char __dtcm_data_start[];
- extern char __dtcm_data_end[];
- extern char __dtcm_bss_start[];
- extern char __dtcm_bss_end[];
- extern char __dtcm_noinit_start[];
- extern char __dtcm_noinit_end[];
- extern char __dtcm_data_load_start[];
- extern char __dtcm_start[];
- extern char __dtcm_end[];
- #endif
- #ifdef CONFIG_ARM_FIRMWARE_HAS_SECURE_ENTRY_FUNCS
- extern char __sg_start[];
- extern char __sg_end[];
- extern char __sg_size[];
- #endif
- #ifdef CONFIG_NOCACHE_MEMORY
- extern char _nocache_ram_start[];
- extern char _nocache_ram_end[];
- extern char _nocache_ram_size[];
- #endif
- #ifdef CONFIG_ARCH_HAS_RAMFUNC_SUPPORT
- extern char __ramfunc_start[];
- extern char __ramfunc_end[];
- extern char __ramfunc_size[];
- extern char __ramfunc_load_start[];
- #endif
- #ifdef CONFIG_SLEEP_FUNC_IN_SRAM
- #define __sleepfunc __attribute__((noinline)) \
- __attribute__((long_call, section(".sleepfunc")))
- extern char _sram_data_start[];
- extern char _sram_data_end[];
- extern char _sram_data_ram_size[];
- extern char _sram_data_rom_start[];
- #else
- #define __sleepfunc __ramfunc
- #endif
- #define __de_func __attribute__((noinline)) \
- __attribute__((long_call, section(".defunc")))
- #define __lvgl_func __attribute__((noinline)) \
- __attribute__((long_call, section(".lvglfunc")))
- #ifdef CONFIG_SIM_FLASH_ACTS
- extern char __sim_flash_ram_start[];
- extern char __sim_flash_ram_end[];
- #endif
- #ifdef CONFIG_USERSPACE
- extern char z_priv_stacks_ram_start[];
- extern char z_priv_stacks_ram_end[];
- extern char z_user_stacks_start[];
- extern char z_user_stacks_end[];
- extern char z_kobject_data_begin[];
- #endif
- #ifdef CONFIG_THREAD_LOCAL_STORAGE
- extern char __tdata_start[];
- extern char __tdata_end[];
- extern char __tdata_size[];
- extern char __tdata_align[];
- extern char __tbss_start[];
- extern char __tbss_end[];
- extern char __tbss_size[];
- extern char __tbss_align[];
- extern char __tls_start[];
- extern char __tls_end[];
- extern char __tls_size[];
- #endif
- #ifdef CONFIG_LINKER_USE_BOOT_SECTION
- extern char lnkr_boot_start[];
- extern char lnkr_boot_end[];
- extern char lnkr_boot_text_start[];
- extern char lnkr_boot_text_end[];
- extern char lnkr_boot_text_size[];
- extern char lnkr_boot_data_start[];
- extern char lnkr_boot_data_end[];
- extern char lnkr_boot_data_size[];
- extern char lnkr_boot_rodata_start[];
- extern char lnkr_boot_rodata_end[];
- extern char lnkr_boot_rodata_size[];
- extern char lnkr_boot_bss_start[];
- extern char lnkr_boot_bss_end[];
- extern char lnkr_boot_bss_size[];
- extern char lnkr_boot_noinit_start[];
- extern char lnkr_boot_noinit_end[];
- extern char lnkr_boot_noinit_size[];
- #endif
- #ifdef CONFIG_LINKER_USE_PINNED_SECTION
- 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[];
- __pinned_func
- static inline bool lnkr_is_pinned(uint8_t *addr)
- {
- if ((addr >= (uint8_t *)lnkr_pinned_start) &&
- (addr < (uint8_t *)lnkr_pinned_end)) {
- return true;
- } else {
- return false;
- }
- }
- __pinned_func
- static inline bool lnkr_is_region_pinned(uint8_t *addr, size_t sz)
- {
- if ((addr >= (uint8_t *)lnkr_pinned_start) &&
- ((addr + sz) < (uint8_t *)lnkr_pinned_end)) {
- return true;
- } else {
- return false;
- }
- }
- #endif
- #endif
- #endif
|