| # Copyright Microsoft and CHERIoT Contributors. | 
 | # SPDX-License-Identifier: MIT | 
 |  | 
 | SECTIONS | 
 | { | 
 | 	. = 0; | 
 | 	.compartment_export_table : ALIGN(8) | 
 | 	{ | 
 | 		# Space for the compartment's PCC and GDC | 
 | 		. = . + 16; | 
 | 		# The compartment error handler, if it is defined. | 
 | 		# The linker will process this relocation now, so we need to make it a | 
 | 		# delta.  The final layout will be the compartment import table | 
 | 		# followed by the text segment.  There won't be any padding, because | 
 | 		# the compartment import table is more strongly aligned than text. | 
 | 		LONG(DEFINED(compartment_error_handler) ? compartment_error_handler - __compartment_code_start + SIZEOF(.compartment_import_table) : -1); | 
 | 		# Array of compartment exports | 
 | 		*(.compartment_exports .compartment_exports.*); | 
 | 	} | 
 | 	# Reserve space at the start for privileged compartments that need special sealing keys. | 
 | 	.compartment_sealing_keys : ALIGN(8) | 
 | 	{ | 
 | 		# Start of the compartment's PCC region | 
 | 		HIDDEN(__compartment_pcc_start = .); | 
 | 		# The sealing keys for this compartment is before the import table, if they exist | 
 | 		*(.sealing_key1*) | 
 | 		*(.sealing_key2*) | 
 | 		*(.sealing_key3*) | 
 | 	} | 
 | 	# Lay out the compartment imports section.  This will end up on PCC. | 
 | 	.compartment_import_table : ALIGN(8) | 
 | 	{ | 
 | 		# Array of compartment imports  | 
 | 		# The first import table entry is the compartment switcher. | 
 | 		HIDDEN(.compartment_switcher = .); | 
 | 		. = . + 8; | 
 | 		*(.compartment_imports .compartment_imports.*); | 
 | 	} | 
 | 	# Lay out the code | 
 | 	.text : | 
 | 	{ | 
 | 		# HIDDEN(__compartment_code_start = .); | 
 | 		*(.text .text.*); | 
 | 	} | 
 | 	# Read-only data that will end up in the compartment's PCC. | 
 | 	.rodata : | 
 | 	{ | 
 | 		*(.data.rel.ro .data.rel.ro.*); | 
 | 		*(.rodata .rodata.*); | 
 | 	} | 
 | 	# Lay out all of the globals. | 
 | 	.data : | 
 | 	{ | 
 | 		*(.data .data.*); | 
 | 		*(.sdata .sdata.*); | 
 | 	} | 
 | 	# BSS remains in a separate section so that we can find it later. | 
 | 	.bss : | 
 | 	{ | 
 | 		*(.bss .bss.*); | 
 | 		*(.sbss .sbss.*); | 
 | 	} | 
 | 	.sealed_objects : | 
 | 	{ | 
 | 		*(.sealed_objects .sealed_objects.*); | 
 | 	} | 
 | 	# Throw some stuff away that we don't need. | 
 | 	/DISCARD/ : | 
 | 	{ | 
 | 		*(.comment); | 
 | 	} | 
 | } |