|  | /* SPDX-License-Identifier: Apache-2.0 */ | 
|  |  | 
|  | SECTION_PROLOGUE(initlevel,,) | 
|  | { | 
|  | /* | 
|  | * link in initialization objects for all objects that are | 
|  | * automatically initialized by the kernel; the objects are | 
|  | * sorted in the order they will be initialized (i.e. ordered | 
|  | * by level, sorted by priority within a level) | 
|  | */ | 
|  | __init_start = .; | 
|  | CREATE_OBJ_LEVEL(init, PRE_KERNEL_1) | 
|  | CREATE_OBJ_LEVEL(init, PRE_KERNEL_2) | 
|  | CREATE_OBJ_LEVEL(init, POST_KERNEL) | 
|  | CREATE_OBJ_LEVEL(init, APPLICATION) | 
|  | CREATE_OBJ_LEVEL(init, SMP) | 
|  | __init_end = .; | 
|  | } GROUP_ROM_LINK_IN(RAMABLE_REGION, ROMABLE_REGION) | 
|  |  | 
|  | SECTION_PROLOGUE(devices,,) | 
|  | { | 
|  | /* Link in devices objects, which are tied to the init ones; | 
|  | * the objects are thus sorted the same way as their init | 
|  | * object parent. See above and include/device.h. | 
|  | */ | 
|  | __device_start = .; | 
|  | CREATE_OBJ_LEVEL(device, PRE_KERNEL_1) | 
|  | CREATE_OBJ_LEVEL(device, PRE_KERNEL_2) | 
|  | CREATE_OBJ_LEVEL(device, POST_KERNEL) | 
|  | CREATE_OBJ_LEVEL(device, APPLICATION) | 
|  | CREATE_OBJ_LEVEL(device, SMP) | 
|  | __device_end = .; | 
|  | } GROUP_ROM_LINK_IN(RAMABLE_REGION, ROMABLE_REGION) | 
|  |  | 
|  | #if defined(CONFIG_GEN_SW_ISR_TABLE) && !defined(CONFIG_DYNAMIC_INTERRUPTS) | 
|  | SECTION_PROLOGUE(sw_isr_table,,) | 
|  | { | 
|  | /* | 
|  | * Some arch requires an entry to be aligned to arch | 
|  | * specific boundary for using double word load | 
|  | * instruction.  See include/sw_isr_table.h. | 
|  | */ | 
|  | . = ALIGN(CONFIG_ARCH_SW_ISR_TABLE_ALIGN); | 
|  | *(_SW_ISR_TABLE_SECTION_SYMS) | 
|  | } GROUP_ROM_LINK_IN(RAMABLE_REGION, ROMABLE_REGION) | 
|  | #endif | 
|  |  | 
|  | /* verify we don't have rogue .z_init_<something> initlevel sections */ | 
|  | SECTION_PROLOGUE(initlevel_error,,) | 
|  | { | 
|  | KEEP(*(SORT(.z_init_[_A-Z0-9]*))) | 
|  | } | 
|  | ASSERT(SIZEOF(initlevel_error) == 0, "Undefined initialization levels used.") | 
|  |  | 
|  | #ifdef CONFIG_CPP_STATIC_INIT_GNU | 
|  | SECTION_PROLOGUE(_CTOR_SECTION_NAME,,) | 
|  | { | 
|  | /* | 
|  | * The compiler fills the constructor pointers table below, | 
|  | * hence symbol __CTOR_LIST__ must be aligned on word | 
|  | * boundary.  To align with the C++ standard, the first elment | 
|  | * of the array contains the number of actual constructors. The | 
|  | * last element is NULL. | 
|  | */ | 
|  | #ifdef CONFIG_64BIT | 
|  | . = ALIGN(8); | 
|  | __CTOR_LIST__ = .; | 
|  | QUAD((__CTOR_END__ - __CTOR_LIST__) / 8 - 2) | 
|  | KEEP(*(SORT_BY_NAME(".ctors*"))) | 
|  | QUAD(0) | 
|  | __CTOR_END__ = .; | 
|  | #else | 
|  | . = ALIGN(4); | 
|  | __CTOR_LIST__ = .; | 
|  | LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2) | 
|  | KEEP(*(SORT_BY_NAME(".ctors*"))) | 
|  | LONG(0) | 
|  | __CTOR_END__ = .; | 
|  | #endif | 
|  | } GROUP_ROM_LINK_IN(RAMABLE_REGION, ROMABLE_REGION) | 
|  |  | 
|  | SECTION_PROLOGUE(init_array,,) | 
|  | { | 
|  | . = ALIGN(4); | 
|  | __init_array_start = .; | 
|  | KEEP(*(SORT_BY_NAME(".init_array*"))) | 
|  | __init_array_end = .; | 
|  | } GROUP_ROM_LINK_IN(RAMABLE_REGION, ROMABLE_REGION) | 
|  | #endif | 
|  | #ifdef CONFIG_USERSPACE | 
|  | /* Build-time assignment of permissions to kernel objects to | 
|  | * threads declared with K_THREAD_DEFINE() | 
|  | */ | 
|  | ITERABLE_SECTION_ROM(z_object_assignment, 4) | 
|  | #endif | 
|  |  | 
|  | SECTION_DATA_PROLOGUE(app_shmem_regions,,) | 
|  | { | 
|  | __app_shmem_regions_start = .; | 
|  | KEEP(*(SORT(.app_regions.*))); | 
|  | __app_shmem_regions_end = .; | 
|  | } GROUP_ROM_LINK_IN(RAMABLE_REGION, ROMABLE_REGION) | 
|  |  | 
|  | #if defined(CONFIG_NET_SOCKETS) | 
|  | ITERABLE_SECTION_ROM(net_socket_register, 4) | 
|  | #endif | 
|  |  | 
|  | #if defined(CONFIG_NET_L2_PPP) | 
|  | ITERABLE_SECTION_ROM(ppp_protocol_handler, 4) | 
|  | #endif | 
|  |  | 
|  | ITERABLE_SECTION_ROM(bt_l2cap_fixed_chan, 4) | 
|  |  | 
|  | #if defined(CONFIG_BT_BREDR) | 
|  | ITERABLE_SECTION_ROM(bt_l2cap_br_fixed_chan, 4) | 
|  | #endif | 
|  |  | 
|  | #if defined(CONFIG_BT_CONN) | 
|  | ITERABLE_SECTION_ROM(bt_conn_cb, 4) | 
|  | #endif | 
|  |  | 
|  | ITERABLE_SECTION_ROM(bt_gatt_service_static, 4) | 
|  |  | 
|  | #if defined(CONFIG_BT_MESH) | 
|  | ITERABLE_SECTION_ROM(bt_mesh_subnet_cb, 4) | 
|  | ITERABLE_SECTION_ROM(bt_mesh_app_key_cb, 4) | 
|  |  | 
|  | ITERABLE_SECTION_ROM(bt_mesh_hb_cb, 4) | 
|  | #endif | 
|  |  | 
|  | #if defined(CONFIG_BT_MESH_FRIEND) | 
|  | ITERABLE_SECTION_ROM(bt_mesh_friend_cb, 4) | 
|  | #endif | 
|  |  | 
|  | #if defined(CONFIG_BT_MESH_LOW_POWER) | 
|  | ITERABLE_SECTION_ROM(bt_mesh_lpn_cb, 4) | 
|  | #endif | 
|  |  | 
|  | #if defined(CONFIG_BT_MESH_GATT_PROXY) | 
|  | ITERABLE_SECTION_ROM(bt_mesh_proxy_cb, 4) | 
|  | #endif | 
|  |  | 
|  | #if defined(CONFIG_EC_HOST_CMD) | 
|  | ITERABLE_SECTION_ROM(ec_host_cmd_handler, 4) | 
|  | #endif | 
|  |  | 
|  | #if defined(CONFIG_SETTINGS) | 
|  | ITERABLE_SECTION_ROM(settings_handler_static, 4) | 
|  | #endif | 
|  |  | 
|  | ITERABLE_SECTION_ROM(k_p4wq_initparam, 4) | 
|  |  | 
|  | #if defined(CONFIG_EMUL) | 
|  | SECTION_DATA_PROLOGUE(emulators_section,,) | 
|  | { | 
|  | __emul_list_start = .; | 
|  | KEEP(*(SORT_BY_NAME(".emulators"))); | 
|  | __emul_list_end = .; | 
|  | } GROUP_LINK_IN(ROMABLE_REGION) | 
|  | #endif /* CONFIG_EMUL */ | 
|  |  | 
|  | #if defined(CONFIG_DNS_SD) | 
|  | ITERABLE_SECTION_ROM(dns_sd_rec, 4) | 
|  | #endif | 
|  |  | 
|  | #if defined(CONFIG_PCIE) | 
|  | SECTION_DATA_PROLOGUE(irq_alloc,,) | 
|  | { | 
|  | __irq_alloc_start = .; | 
|  | KEEP(*(SORT_BY_NAME("._irq_alloc*"))); | 
|  | __irq_alloc_end = .; | 
|  | } GROUP_LINK_IN(ROMABLE_REGION) | 
|  | #endif /* CONFIG_PCIE */ | 
|  |  | 
|  | SECTION_DATA_PROLOGUE(log_strings_sections,,) | 
|  | { | 
|  | __log_strings_start = .; | 
|  | KEEP(*(SORT(.log_strings*))); | 
|  | __log_strings_end = .; | 
|  | } GROUP_ROM_LINK_IN(RAMABLE_REGION, ROMABLE_REGION) | 
|  |  | 
|  | SECTION_DATA_PROLOGUE(log_const_sections,,) | 
|  | { | 
|  | __log_const_start = .; | 
|  | KEEP(*(SORT(.log_const_*))); | 
|  | __log_const_end = .; | 
|  | } GROUP_ROM_LINK_IN(RAMABLE_REGION, ROMABLE_REGION) | 
|  |  | 
|  | SECTION_DATA_PROLOGUE(log_backends_sections,,) | 
|  | { | 
|  | __log_backends_start = .; | 
|  | KEEP(*("._log_backend.*")); | 
|  | __log_backends_end = .; | 
|  | } GROUP_ROM_LINK_IN(RAMABLE_REGION, ROMABLE_REGION) | 
|  |  | 
|  | ITERABLE_SECTION_ROM(shell, 4) | 
|  |  | 
|  | SECTION_DATA_PROLOGUE(shell_root_cmds_sections,,) | 
|  | { | 
|  | __shell_root_cmds_start = .; | 
|  | KEEP(*(SORT(.shell_root_cmd_*))); | 
|  | __shell_root_cmds_end = .; | 
|  | } GROUP_ROM_LINK_IN(RAMABLE_REGION, ROMABLE_REGION) | 
|  |  | 
|  | SECTION_DATA_PROLOGUE(font_entry_sections,,) | 
|  | { | 
|  | __font_entry_start = .; | 
|  | KEEP(*(SORT_BY_NAME("._cfb_font.*"))) | 
|  | __font_entry_end = .; | 
|  | } GROUP_ROM_LINK_IN(RAMABLE_REGION, ROMABLE_REGION) | 
|  |  | 
|  | ITERABLE_SECTION_ROM(tracing_backend, 4) | 
|  |  | 
|  | SECTION_DATA_PROLOGUE(zephyr_dbg_info,,) | 
|  | { | 
|  | KEEP(*(".dbg_thread_info")); | 
|  | } GROUP_ROM_LINK_IN(RAMABLE_REGION, ROMABLE_REGION) | 
|  |  | 
|  | SECTION_DATA_PROLOGUE(device_handles,,) | 
|  | { | 
|  | __device_handles_start = .; | 
|  | #ifdef LINKER_ZEPHYR_FINAL | 
|  | KEEP(*(SORT(.__device_handles_pass2*))); | 
|  | #else /* LINKER_ZEPHYR_FINAL */ | 
|  | KEEP(*(SORT(.__device_handles_pass1*))); | 
|  | #endif /* LINKER_ZEPHYR_FINAL */ | 
|  | __device_handles_end = .; | 
|  | } GROUP_ROM_LINK_IN(RAMABLE_REGION, ROMABLE_REGION) |