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