Both _IRQ_VECTOR_TABLE_SECTION_NAME and _SW_ISR_TABLE_SECTION_NAME are defined with asterisk at the end in an attempt to include all related symbols in the linker script. However, these two macros are also being used in the source code to specify the destination sections for variables. Asterisks in the name results in older GCC (4.x) complaining about those asterisks. So create new macros for use in linker script, and keep the names asterisk free. Fixes #29936 Signed-off-by: Daniel Leung <daniel.leung@intel.com>
160 lines
4.8 KiB
Plaintext
160 lines
4.8 KiB
Plaintext
/* SPDX-License-Identifier: Apache-2.0 */
|
|
|
|
#if defined(CONFIG_GEN_SW_ISR_TABLE) && defined(CONFIG_DYNAMIC_INTERRUPTS)
|
|
SECTION_DATA_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_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
|
|
#endif
|
|
|
|
/*
|
|
* Space for storing per device init status and busy bitmap in case PM is
|
|
* enabled. Since we do not know beforehand the number of devices,
|
|
* we go through the below mechanism to allocate the required space.
|
|
* Both are made of 1 bit per-device instance, so we compute the size of
|
|
* of an entire bitfield, aligned on 32bits.
|
|
*/
|
|
#define DEVICE_COUNT \
|
|
((__device_end - __device_start) / _DEVICE_STRUCT_SIZEOF)
|
|
#define DEVICE_BITFIELD_SIZE (((DEVICE_COUNT + 31) / 32) * 4)
|
|
|
|
#define DEVICE_INIT_STATUS_BITFIELD() \
|
|
FILL(0x00); \
|
|
__device_init_status_start = .; \
|
|
. = . + DEVICE_BITFIELD_SIZE; \
|
|
__device_init_status_end = .;
|
|
|
|
#ifdef CONFIG_PM_DEVICE
|
|
#define DEVICE_BUSY_BITFIELD() \
|
|
FILL(0x00); \
|
|
__device_busy_start = .; \
|
|
. = . + DEVICE_BITFIELD_SIZE; \
|
|
__device_busy_end = .;
|
|
#else
|
|
#define DEVICE_BUSY_BITFIELD()
|
|
#endif
|
|
|
|
SECTION_DATA_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 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 = .;
|
|
DEVICE_INIT_STATUS_BITFIELD()
|
|
DEVICE_BUSY_BITFIELD()
|
|
} GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
|
|
|
|
SECTION_DATA_PROLOGUE(initshell,,)
|
|
{
|
|
/* link in shell initialization objects for all modules that
|
|
* use shell and their shell commands are automatically
|
|
* initialized by the kernel.
|
|
*/
|
|
__shell_module_start = .;
|
|
KEEP(*(".shell_module_*"));
|
|
__shell_module_end = .;
|
|
__shell_cmd_start = .;
|
|
KEEP(*(".shell_cmd_*"));
|
|
__shell_cmd_end = .;
|
|
} GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
|
|
|
|
SECTION_DATA_PROLOGUE(log_dynamic_sections,,)
|
|
{
|
|
__log_dynamic_start = .;
|
|
KEEP(*(SORT(.log_dynamic_*)));
|
|
__log_dynamic_end = .;
|
|
} GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
|
|
|
|
Z_ITERABLE_SECTION_RAM(_static_thread_data, 4)
|
|
|
|
#ifdef CONFIG_USERSPACE
|
|
/* All kernel objects within are assumed to be either completely
|
|
* initialized at build time, or initialized automatically at runtime
|
|
* via iteration before the POST_KERNEL phase.
|
|
*
|
|
* These two symbols only used by gen_kobject_list.py
|
|
*/
|
|
|
|
_static_kernel_objects_begin = .;
|
|
#endif /* CONFIG_USERSPACE */
|
|
|
|
Z_ITERABLE_SECTION_RAM_GC_ALLOWED(k_timer, 4)
|
|
Z_ITERABLE_SECTION_RAM_GC_ALLOWED(k_mem_slab, 4)
|
|
Z_ITERABLE_SECTION_RAM_GC_ALLOWED(k_mem_pool, 4)
|
|
Z_ITERABLE_SECTION_RAM_GC_ALLOWED(k_heap, 4)
|
|
Z_ITERABLE_SECTION_RAM_GC_ALLOWED(k_mutex, 4)
|
|
Z_ITERABLE_SECTION_RAM_GC_ALLOWED(k_stack, 4)
|
|
Z_ITERABLE_SECTION_RAM_GC_ALLOWED(k_msgq, 4)
|
|
Z_ITERABLE_SECTION_RAM_GC_ALLOWED(k_mbox, 4)
|
|
Z_ITERABLE_SECTION_RAM_GC_ALLOWED(k_pipe, 4)
|
|
Z_ITERABLE_SECTION_RAM_GC_ALLOWED(k_sem, 4)
|
|
Z_ITERABLE_SECTION_RAM_GC_ALLOWED(k_queue, 4)
|
|
Z_ITERABLE_SECTION_RAM_GC_ALLOWED(k_condvar, 4)
|
|
|
|
SECTION_DATA_PROLOGUE(_net_buf_pool_area,,SUBALIGN(4))
|
|
{
|
|
_net_buf_pool_list = .;
|
|
KEEP(*(SORT_BY_NAME("._net_buf_pool.static.*")))
|
|
} GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
|
|
|
|
#if defined(CONFIG_NETWORKING)
|
|
Z_ITERABLE_SECTION_RAM(net_if, 4)
|
|
Z_ITERABLE_SECTION_RAM(net_if_dev, 4)
|
|
Z_ITERABLE_SECTION_RAM(net_l2, 4)
|
|
#endif /* NETWORKING */
|
|
|
|
#if defined(CONFIG_UART_MUX)
|
|
SECTION_DATA_PROLOGUE(uart_mux,,SUBALIGN(4))
|
|
{
|
|
__uart_mux_start = .;
|
|
*(".uart_mux.*")
|
|
KEEP(*(SORT_BY_NAME(".uart_mux.*")))
|
|
__uart_mux_end = .;
|
|
} GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
|
|
#endif
|
|
|
|
#if defined(CONFIG_USB_DEVICE_STACK)
|
|
SECTION_DATA_PROLOGUE(usb_descriptor,,SUBALIGN(1))
|
|
{
|
|
__usb_descriptor_start = .;
|
|
*(".usb.descriptor")
|
|
KEEP(*(SORT_BY_NAME(".usb.descriptor*")))
|
|
__usb_descriptor_end = .;
|
|
} GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
|
|
|
|
SECTION_DATA_PROLOGUE(usb_data,,SUBALIGN(1))
|
|
{
|
|
__usb_data_start = .;
|
|
*(".usb.data")
|
|
KEEP(*(SORT_BY_NAME(".usb.data*")))
|
|
__usb_data_end = .;
|
|
} GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
|
|
#endif /* CONFIG_USB_DEVICE_STACK */
|
|
|
|
#if defined(CONFIG_USB_DEVICE_BOS)
|
|
SECTION_DATA_PROLOGUE(usb_bos_desc,,SUBALIGN(1))
|
|
{
|
|
__usb_bos_desc_start = .;
|
|
*(".usb.bos_desc")
|
|
KEEP(*(SORT_BY_NAME(".usb.bos_desc*")))
|
|
__usb_bos_desc_end = .;
|
|
} GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
|
|
#endif /* CONFIG_USB_DEVICE_BOS */
|
|
|
|
#ifdef CONFIG_USERSPACE
|
|
_static_kernel_objects_end = .;
|
|
#endif
|