# 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;
		# Space for the error handler.
		. = . + 4;
		# Array of compartment exports
		*(.compartment_exports);
	}
	# Lay out the compartment imports section.  This will end up on PCC.
	.compartment_import_table : ALIGN(8)
	{
		# Array of compartment imports.
		HIDDEN(__compartment_pcc_start = .);
		# 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 :
	{
		*(.rodata .rodata.*);
		*(.data.rel.ro .data.rel.ro.*);
	}
	# BSS remains in a separate section so that we can find it later.
	.bss :
	{
		*(.sbss .sbss.*);
		*(.bss .bss.*);
	}
	# Statically allocated sealed objects
	.sealed_objects :
	{
		*(.sealed_objects .sealed_objects.*);
	}
	# Throw some stuff away that we don't need.
	/DISCARD/ :
	{
		*(.comment);
		# Libraries may not have data sections.
		*(.data .data.*);
		*(.sdata .sdata.*);
	}
}
