| /* 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_NAME) | 
 | 	} 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_DEVICE_POWER_MANAGEMENT | 
 | #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) | 
 |  | 
 | 	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 |