blob: 4a60daab9abcda05d44824213b10a639b8e7bffd [file] [log] [blame]
Torsten Rasmussen38040292021-05-06 11:49:35 +02001# originates from common-rom.ld
2
3zephyr_linker_section(NAME init KVMA RAM_REGION GROUP RODATA_REGION)
4zephyr_linker_section_obj_level(SECTION init LEVEL PRE_KERNEL_1)
5zephyr_linker_section_obj_level(SECTION init LEVEL PRE_KERNEL_2)
6zephyr_linker_section_obj_level(SECTION init LEVEL POST_KERNEL)
7zephyr_linker_section_obj_level(SECTION init LEVEL APPLICATION)
8zephyr_linker_section_obj_level(SECTION init LEVEL SMP)
9
10zephyr_linker_section(NAME device KVMA RAM_REGION GROUP RODATA_REGION)
11zephyr_linker_section_obj_level(SECTION device LEVEL PRE_KERNEL_1)
12zephyr_linker_section_obj_level(SECTION device LEVEL PRE_KERNEL_2)
13zephyr_linker_section_obj_level(SECTION device LEVEL POST_KERNEL)
14zephyr_linker_section_obj_level(SECTION device LEVEL APPLICATION)
15zephyr_linker_section_obj_level(SECTION device LEVEL SMP)
16
17if(CONFIG_GEN_SW_ISR_TABLE AND NOT CONFIG_DYNAMIC_INTERRUPTS)
18 # ld align has been changed to subalign to provide identical behavior scatter vs. ld.
19 zephyr_linker_section(NAME sw_isr_table KVMA FLASH GROUP RODATA_REGION SUBALIGN ${CONFIG_ARCH_SW_ISR_TABLE_ALIGN} NOINPUT)
20 zephyr_linker_section_configure(
21 SECTION sw_isr_table
22 INPUT ".gnu.linkonce.sw_isr_table*"
23 )
24endif()
25
26zephyr_linker_section(NAME initlevel_error KVMA RAM_REGION GROUP RODATA_REGION NOINPUT)
27zephyr_linker_section_configure(SECTION initlevel_error INPUT ".z_init_[_A-Z0-9]*" KEEP SORT NAME)
28# How to do cross linker ?
29# ASSERT(SIZEOF(initlevel_error) == 0, "Undefined initialization levels used.")
30
31
32if(CONFIG_CPLUSPLUS)
33 zephyr_linker_section(NAME ctors KVMA RAM_REGION GROUP RODATA_REGION NOINPUT)
34 #
35 # The compiler fills the constructor pointers table below,
36 # hence symbol __CTOR_LIST__ must be aligned on word
Nazar Kazakov9713f0d2022-02-24 12:00:55 +000037 # boundary. To align with the C++ standard, the first element
Torsten Rasmussen38040292021-05-06 11:49:35 +020038 # of the array contains the number of actual constructors. The
39 # last element is NULL.
40 #
41# ToDo: Checkup on scatter loading. How to manage ?
42# https://www.keil.com/support/man/docs/armlink/armlink_pge1362066006368.htm
43# https://developer.arm.com/documentation/dui0378/g/The-ARM-C-and-C---Libraries
44# if(CONFIG_64BIT)
45# . = ALIGN(8);
46# __CTOR_LIST__ = .;
47# QUAD((__CTOR_END__ - __CTOR_LIST__) / 8 - 2)
48# KEEP(*(SORT_BY_NAME(".ctors*")))
49# QUAD(0)
50# __CTOR_END__ = .;
51# else()
52# . = ALIGN(4);
53# __CTOR_LIST__ = .;
54# LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)
55# KEEP(*(SORT_BY_NAME(".ctors*")))
56# LONG(0)
57# __CTOR_END__ = .;
58# endif()
59# } GROUP_ROM_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
60#
61# SECTION_PROLOGUE(init_array,,)
62# {
63# . = ALIGN(4);
64# __init_array_start = .;
65# KEEP(*(SORT_BY_NAME(".init_array*")))
66# __init_array_end = .;
67# } GROUP_ROM_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
68endif()
69
70if(CONFIG_USERSPACE)
71 # Build-time assignment of permissions to kernel objects to
72 # threads declared with K_THREAD_DEFINE()
73 zephyr_linker_section(
74 NAME z_object_assignment_area
75 VMA FLASH NOINPUT
76 SUBALIGN 4
77 )
78 zephyr_linker_section_configure(
79 SECTION z_object_assignment
80 INPUT ".z_object_assignment.static.*"
81 KEEP SORT NAME
82 )
83endif()
84
85zephyr_linker_section(
86 NAME app_shmem_regions
87 KVMA RAM_REGION GROUP RODATA_REGION NOINPUT ${XIP_ALIGN_WITH_INPUT}
88)
89zephyr_linker_section_configure(
90 SECTION app_shmem_regions
91 INPUT ".app_regions.*"
92 KEEP SORT NAME
93)
94
95if(CONFIG_NET_SOCKETS)
96 zephyr_iterable_section(NAME net_socket_register KVMA RAM_REGION GROUP RODATA_REGION SUBALIGN 4)
97endif()
98
99
100if(CONFIG_NET_L2_PPP)
101 zephyr_iterable_section(NAME ppp_protocol_handler KVMA RAM_REGION GROUP RODATA_REGION SUBALIGN 4)
102endif()
103
104zephyr_iterable_section(NAME bt_l2cap_fixed_chan KVMA RAM_REGION GROUP RODATA_REGION SUBALIGN 4)
105
106if(CONFIG_BT_BREDR)
107 zephyr_iterable_section(NAME bt_l2cap_br_fixed_chan KVMA RAM_REGION GROUP RODATA_REGION SUBALIGN 4)
108endif()
109
110if(CONFIG_BT_CONN)
111 zephyr_iterable_section(NAME bt_conn_cb KVMA RAM_REGION GROUP RODATA_REGION SUBALIGN 4)
112endif()
113
114zephyr_iterable_section(NAME bt_gatt_service_static KVMA RAM_REGION GROUP RODATA_REGION SUBALIGN 4)
115
116if(CONFIG_BT_MESH)
117 zephyr_iterable_section(NAME bt_mesh_subnet_cb KVMA RAM_REGION GROUP RODATA_REGION SUBALIGN 4)
118 zephyr_iterable_section(NAME bt_mesh_app_key_cb KVMA RAM_REGION GROUP RODATA_REGION SUBALIGN 4)
119
120 zephyr_iterable_section(NAME bt_mesh_hb_cb KVMA RAM_REGION GROUP RODATA_REGION SUBALIGN 4)
121endif()
122
123if(CONFIG_BT_MESH_FRIEND)
124 zephyr_iterable_section(NAME bt_mesh_friend_cb KVMA RAM_REGION GROUP RODATA_REGION SUBALIGN 4)
125endif()
126
127if(CONFIG_BT_MESH_LOW_POWER)
128 zephyr_iterable_section(NAME bt_mesh_lpn_cb KVMA RAM_REGION GROUP RODATA_REGION SUBALIGN 4)
129endif()
130
131if(CONFIG_BT_MESH_PROXY)
132 zephyr_iterable_section(NAME bt_mesh_proxy_cb KVMA RAM_REGION GROUP RODATA_REGION SUBALIGN 4)
133endif()
134
135if(CONFIG_EC_HOST_CMD)
136 zephyr_iterable_section(NAME ec_host_cmd_handler KVMA RAM_REGION GROUP RODATA_REGION SUBALIGN 4)
137endif()
138
139if(CONFIG_SETTINGS)
140 zephyr_iterable_section(NAME settings_handler_static KVMA RAM_REGION GROUP RODATA_REGION SUBALIGN 4)
141endif()
142
143zephyr_iterable_section(NAME k_p4wq_initparam KVMA RAM_REGION GROUP RODATA_REGION SUBALIGN 4)
144
145if(CONFIG_EMUL)
146 zephyr_linker_section(NAME emulators_section GROUP RODATA_REGION)
147 zephyr_linker_section_configure(SECTION emulators_section INPUT ".emulators" KEEP SORT NAME ${XIP_ALIGN_WITH_INPUT})
148endif()
149
150if(CONFIG_DNS_SD)
151 zephyr_iterable_section(NAME dns_sd_rec KVMA RAM_REGION GROUP RODATA_REGION SUBALIGN 4)
152endif()
153
154if(CONFIG_PCIE)
155 zephyr_linker_section(NAME irq_alloc GROUP RODATA_REGION NOINPUT ${XIP_ALIGN_WITH_INPUT})
156 zephyr_linker_section_configure(SECTION irq_alloc INPUT ".irq_alloc*" KEEP SORT NAME)
157endif()
158
159zephyr_linker_section(NAME log_strings KVMA RAM_REGION GROUP RODATA_REGION NOINPUT ${XIP_ALIGN_WITH_INPUT})
160zephyr_linker_section_configure(SECTION log_strings INPUT ".log_strings*" KEEP SORT NAME)
161
162zephyr_linker_section(NAME log_const KVMA RAM_REGION GROUP RODATA_REGION NOINPUT ${XIP_ALIGN_WITH_INPUT})
163zephyr_linker_section_configure(SECTION log_const INPUT ".log_const_*" KEEP SORT NAME)
164
165zephyr_linker_section(NAME log_backends KVMA RAM_REGION GROUP RODATA_REGION NOINPUT ${XIP_ALIGN_WITH_INPUT})
166zephyr_linker_section_configure(SECTION log_backends INPUT ".log_backends.*" KEEP)
167
168zephyr_iterable_section(NAME shell KVMA RAM_REGION GROUP RODATA_REGION SUBALIGN 4)
169
170zephyr_linker_section(NAME shell_root_cmds KVMA RAM_REGION GROUP RODATA_REGION NOINPUT ${XIP_ALIGN_WITH_INPUT})
171zephyr_linker_section_configure(SECTION shell_root_cmds INPUT ".shell_root_cmd_*" KEEP SORT NAME)
172
173zephyr_linker_section(NAME font_entry KVMA RAM_REGION GROUP RODATA_REGION NOINPUT ${XIP_ALIGN_WITH_INPUT})
174zephyr_linker_section_configure(SECTION font_entry INPUT "._cfb_font.*" KEEP SORT NAME)
175
176zephyr_iterable_section(NAME tracing_backend KVMA RAM_REGION GROUP RODATA_REGION SUBALIGN 4)
177
178zephyr_linker_section(NAME zephyr_dbg_info KVMA RAM_REGION GROUP RODATA_REGION NOINPUT ${XIP_ALIGN_WITH_INPUT})
179zephyr_linker_section_configure(SECTION zephyr_dbg_info INPUT ".zephyr_dbg_info" KEEP)
180
181zephyr_linker_section(NAME device_handles KVMA RAM_REGION GROUP RODATA_REGION NOINPUT ${XIP_ALIGN_WITH_INPUT} ENDALIGN 16)
Jordan Yates28b2e552021-10-20 20:19:28 +1000182zephyr_linker_section_configure(SECTION device_handles INPUT .__device_handles_pass1* KEEP SORT NAME PASS LINKER_DEVICE_HANDLES_PASS1)
183zephyr_linker_section_configure(SECTION device_handles INPUT .__device_handles_pass2* KEEP SORT NAME PASS NOT LINKER_DEVICE_HANDLES_PASS1)