1# SPDX-License-Identifier: Apache-2.0 2# The contents of this file is based on include/zephyr/linker/common-rom.ld 3# and som of include/zephyr/linker/common-rom/*.ld 4# Please keep in sync 5 6zephyr_linker_section(NAME init KVMA RAM_REGION GROUP RODATA_REGION) 7zephyr_linker_section_obj_level(SECTION init LEVEL EARLY) 8zephyr_linker_section_obj_level(SECTION init LEVEL PRE_KERNEL_1) 9zephyr_linker_section_obj_level(SECTION init LEVEL PRE_KERNEL_2) 10zephyr_linker_section_obj_level(SECTION init LEVEL POST_KERNEL) 11zephyr_linker_section_obj_level(SECTION init LEVEL APPLICATION) 12zephyr_linker_section_obj_level(SECTION init LEVEL SMP) 13 14zephyr_iterable_section(NAME device NUMERIC KVMA RAM_REGION GROUP RODATA_REGION) 15 16if(CONFIG_GEN_SW_ISR_TABLE AND NOT CONFIG_SRAM_SW_ISR_TABLE) 17 # ld align has been changed to subalign to provide identical behavior scatter vs. ld. 18 zephyr_linker_section(NAME sw_isr_table KVMA FLASH GROUP RODATA_REGION SUBALIGN ${CONFIG_ARCH_SW_ISR_TABLE_ALIGN} NOINPUT) 19 zephyr_linker_section_configure( 20 SECTION sw_isr_table 21 INPUT ".gnu.linkonce.sw_isr_table*" 22 ) 23 if(CONFIG_SHARED_INTERRUPTS) 24 zephyr_linker_section_configure( 25 SECTION sw_isr_table 26 INPUT ".gnu.linkonce.shared_sw_isr_table*" 27 ) 28 endif() 29endif() 30 31zephyr_linker_section(NAME initlevel_error KVMA RAM_REGION GROUP RODATA_REGION NOINPUT) 32zephyr_linker_section_configure(SECTION initlevel_error INPUT ".z_init_*" KEEP SORT NAME) 33# How to do cross linker ? 34# ASSERT(SIZEOF(initlevel_error) == 0, "Undefined initialization levels used.") 35 36 37if(CONFIG_CPP) 38 zephyr_linker_section(NAME ctors KVMA RAM_REGION GROUP RODATA_REGION NOINPUT) 39 # 40 # The compiler fills the constructor pointers table below, 41 # hence symbol __CTOR_LIST__ must be aligned on word 42 # boundary. To align with the C++ standard, the first element 43 # of the array contains the number of actual constructors. The 44 # last element is NULL. 45 # 46# ToDo: Checkup on scatter loading. How to manage ? 47# https://www.keil.com/support/man/docs/armlink/armlink_pge1362066006368.htm 48# https://developer.arm.com/documentation/dui0378/g/The-ARM-C-and-C---Libraries 49# if(CONFIG_64BIT) 50# . = ALIGN(8); 51# __CTOR_LIST__ = .; 52# QUAD((__CTOR_END__ - __CTOR_LIST__) / 8 - 2) 53# KEEP(*(SORT_BY_NAME(".ctors*"))) 54# QUAD(0) 55# __CTOR_END__ = .; 56# else() 57# . = ALIGN(4); 58# __CTOR_LIST__ = .; 59# LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2) 60# KEEP(*(SORT_BY_NAME(".ctors*"))) 61# LONG(0) 62# __CTOR_END__ = .; 63# endif() 64# } GROUP_ROM_LINK_IN(RAMABLE_REGION, ROMABLE_REGION) 65# 66# SECTION_PROLOGUE(init_array,,) 67# { 68# . = ALIGN(4); 69# __init_array_start = .; 70# KEEP(*(SORT_BY_NAME(".init_array*"))) 71# __init_array_end = .; 72# } GROUP_ROM_LINK_IN(RAMABLE_REGION, ROMABLE_REGION) 73endif() 74 75if(CONFIG_USERSPACE) 76 # Build-time assignment of permissions to kernel objects to 77 # threads declared with K_THREAD_DEFINE() 78 zephyr_iterable_section(NAME k_object_assignment VMA FLASH) 79endif() 80 81zephyr_linker_section( 82 NAME app_shmem_regions 83 KVMA RAM_REGION GROUP RODATA_REGION NOINPUT ${XIP_ALIGN_WITH_INPUT} 84) 85zephyr_linker_section_configure( 86 SECTION app_shmem_regions 87 INPUT ".app_regions.*" 88 KEEP SORT NAME 89) 90 91if(CONFIG_NETWORKING) 92 zephyr_iterable_section(NAME net_l3_register KVMA RAM_REGION GROUP RODATA_REGION) 93endif() 94 95if(CONFIG_NET_SOCKETS) 96 zephyr_iterable_section(NAME net_socket_register KVMA RAM_REGION GROUP RODATA_REGION) 97endif() 98 99 100if(CONFIG_NET_L2_PPP) 101 zephyr_iterable_section(NAME ppp_protocol_handler KVMA RAM_REGION GROUP RODATA_REGION) 102endif() 103 104zephyr_iterable_section(NAME bt_l2cap_fixed_chan KVMA RAM_REGION GROUP RODATA_REGION) 105 106if(CONFIG_BT_CLASSIC) 107 zephyr_iterable_section(NAME bt_l2cap_br_fixed_chan KVMA RAM_REGION GROUP RODATA_REGION) 108endif() 109 110if(CONFIG_BT_CONN) 111 zephyr_iterable_section(NAME bt_conn_cb KVMA RAM_REGION GROUP RODATA_REGION) 112endif() 113 114zephyr_iterable_section(NAME bt_gatt_service_static KVMA RAM_REGION GROUP RODATA_REGION) 115 116if(CONFIG_BT_MESH) 117 zephyr_iterable_section(NAME bt_mesh_subnet_cb KVMA RAM_REGION GROUP RODATA_REGION) 118 zephyr_iterable_section(NAME bt_mesh_app_key_cb KVMA RAM_REGION GROUP RODATA_REGION) 119 120 zephyr_iterable_section(NAME bt_mesh_hb_cb KVMA RAM_REGION GROUP RODATA_REGION) 121endif() 122 123if(CONFIG_BT_MESH_FRIEND) 124 zephyr_iterable_section(NAME bt_mesh_friend_cb KVMA RAM_REGION GROUP RODATA_REGION) 125endif() 126 127if(CONFIG_BT_MESH_LOW_POWER) 128 zephyr_iterable_section(NAME bt_mesh_lpn_cb KVMA RAM_REGION GROUP RODATA_REGION) 129endif() 130 131if(CONFIG_BT_MESH_PROXY) 132 zephyr_iterable_section(NAME bt_mesh_proxy_cb KVMA RAM_REGION GROUP RODATA_REGION) 133endif() 134 135if(CONFIG_EC_HOST_CMD) 136 zephyr_iterable_section(NAME ec_host_cmd_handler KVMA RAM_REGION GROUP RODATA_REGION) 137endif() 138 139if(CONFIG_SETTINGS) 140 zephyr_iterable_section(NAME settings_handler_static KVMA RAM_REGION GROUP RODATA_REGION) 141endif() 142 143if(CONFIG_SENSING) 144 zephyr_iterable_section(NAME sensing_sensor_info KVMA RAM_REGION GROUP RODATA_REGION) 145endif() 146 147if(CONFIG_SENSOR_INFO) 148 zephyr_iterable_section(NAME sensor_info KVMA RAM_REGION GROUP RODATA_REGION) 149endif() 150 151if(CONFIG_SENSOR_ASYNC_API) 152 zephyr_iterable_section(NAME sensor_decoder_api KVMA RAM_REGION GROUP RODATA_REGION) 153endif() 154 155if(CONFIG_MCUMGR) 156 zephyr_iterable_section(NAME mcumgr_handler KVMA RAM_REGION GROUP RODATA_REGION) 157endif() 158 159zephyr_iterable_section(NAME k_p4wq_initparam KVMA RAM_REGION GROUP RODATA_REGION) 160 161if(CONFIG_EMUL) 162 zephyr_iterable_section(NAME emul KVMA RAM_REGION GROUP RODATA_REGION) 163endif() 164 165if(CONFIG_DNS_SD) 166 zephyr_iterable_section(NAME dns_sd_rec KVMA RAM_REGION GROUP RODATA_REGION) 167endif() 168 169if(CONFIG_PCIE) 170 zephyr_iterable_section(NAME irq_alloc KVMA RAM_REGION GROUP RODATA_REGION) 171endif() 172 173zephyr_iterable_section(NAME log_strings KVMA RAM_REGION GROUP RODATA_REGION) 174 175zephyr_iterable_section(NAME log_const KVMA RAM_REGION GROUP RODATA_REGION) 176 177zephyr_linker_section(NAME symbol_to_keep GROUP RODATA_REGION NOINPUT) 178zephyr_linker_section_configure(SECTION symbol_to_keep INPUT ".symbol_to_keep*" KEEP SORT NAME) 179 180zephyr_iterable_section(NAME shell KVMA RAM_REGION GROUP RODATA_REGION) 181 182zephyr_iterable_section(NAME shell_root_cmds KVMA RAM_REGION GROUP RODATA_REGION) 183 184zephyr_iterable_section(NAME shell_subcmds KVMA RAM_REGION GROUP RODATA_REGION) 185 186zephyr_iterable_section(NAME shell_dynamic_subcmds KVMA RAM_REGION GROUP RODATA_REGION) 187 188zephyr_iterable_section(NAME cfb_font KVMA RAM_REGION GROUP RODATA_REGION) 189 190zephyr_iterable_section(NAME tracing_backend KVMA RAM_REGION GROUP RODATA_REGION) 191 192zephyr_linker_section(NAME zephyr_dbg_info KVMA RAM_REGION GROUP RODATA_REGION NOINPUT ${XIP_ALIGN_WITH_INPUT}) 193zephyr_linker_section_configure(SECTION zephyr_dbg_info INPUT ".dbg_thread_info" KEEP) 194 195if(CONFIG_SYMTAB) 196 zephyr_linker_section(NAME symtab KVMA FLASH GROUP RODATA_REGION SUBALIGN 4 NOINPUT) 197 zephyr_linker_section_configure(SECTION symtab INPUT ".gnu.linkonce.symtab*") 198endif() 199 200if (CONFIG_DEVICE_DEPS) 201 zephyr_linker_section(NAME device_deps KVMA RAM_REGION GROUP RODATA_REGION NOINPUT ${XIP_ALIGN_WITH_INPUT} ENDALIGN 16) 202 zephyr_linker_section_configure(SECTION device_deps INPUT .__device_deps_pass1* KEEP SORT NAME PASS LINKER_DEVICE_DEPS_PASS1) 203 zephyr_linker_section_configure(SECTION device_deps INPUT .__device_deps_pass2* KEEP SORT NAME PASS NOT LINKER_DEVICE_DEPS_PASS1) 204endif() 205 206zephyr_iterable_section(NAME _static_thread_data KVMA RAM_REGION GROUP RODATA_REGION) 207 208if (CONFIG_BT_IAS) 209 zephyr_iterable_section(NAME bt_ias_cb KVMA RAM_REGION GROUP RODATA_REGION) 210endif() 211 212if (CONFIG_LOG) 213 zephyr_iterable_section(NAME log_link KVMA RAM_REGION GROUP RODATA_REGION) 214 zephyr_iterable_section(NAME log_backend KVMA RAM_REGION GROUP RODATA_REGION) 215endif() 216 217if (CONFIG_MULTI_LEVEL_INTERRUPTS) 218 zephyr_iterable_section(NAME intc_table KVMA RAM_REGION GROUP RODATA_REGION) 219endif() 220 221if (CONFIG_HTTP_SERVER) 222 zephyr_iterable_section(NAME http_service_desc KVMA RAM_REGION GROUP RODATA_REGION) 223endif() 224 225if (CONFIG_COAP_SERVER) 226 zephyr_iterable_section(NAME coap_service KVMA RAM_REGION GROUP RODATA_REGION) 227endif() 228 229if (CONFIG_NET_MGMT) 230 zephyr_iterable_section(NAME net_mgmt_event_static_handler KVMA RAM_REGION GROUP RODATA_REGION) 231endif() 232 233if(CONFIG_INPUT) 234 zephyr_iterable_section(NAME input_callback KVMA RAM_REGION GROUP RODATA_REGION) 235endif() 236 237if(CONFIG_USBD_MSC_CLASS) 238 zephyr_iterable_section(NAME usbd_msc_lun KVMA RAM_REGION GROUP RODATA_REGION) 239endif() 240 241if(CONFIG_ZTEST) 242 zephyr_iterable_section(NAME ztest_expected_result_entry KVMA RAM_REGION GROUP RODATA_REGION ${XIP_ALIGN_WITH_INPUT}) 243 zephyr_iterable_section(NAME ztest_suite_node KVMA RAM_REGION GROUP RODATA_REGION ${XIP_ALIGN_WITH_INPUT}) 244 zephyr_iterable_section(NAME ztest_unit_test KVMA RAM_REGION GROUP RODATA_REGION ${XIP_ALIGN_WITH_INPUT}) 245 zephyr_iterable_section(NAME ztest_test_rule KVMA RAM_REGION GROUP RODATA_REGION ${XIP_ALIGN_WITH_INPUT}) 246endif() 247 248if(CONFIG_ZBUS) 249 zephyr_iterable_section(NAME zbus_channel KVMA RAM_REGION GROUP RODATA_REGION) 250 zephyr_iterable_section(NAME zbus_observer KVMA RAM_REGION GROUP RODATA_REGION) 251 zephyr_iterable_section(NAME zbus_channel_observation KVMA RAM_REGION GROUP RODATA_REGION) 252endif() 253 254if(CONFIG_GNSS) 255 zephyr_iterable_section(NAME gnss_data_callback KVMA RAM_REGION GROUP RODATA_REGION) 256endif() 257 258if(CONFIG_GNSS_SATELLITES) 259 zephyr_iterable_section(NAME gnss_satellites_callback KVMA RAM_REGION GROUP RODATA_REGION) 260endif() 261 262if(CONFIG_GNSS_RTK) 263 zephyr_iterable_section(NAME gnss_rtk_data_callback KVMA RAM_REGION GROUP RODATA_REGION) 264endif() 265