# 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);
	}
}
