. = @code_start@;
_start = .;

.loader_start :
{
    *(.loader_start);
}

.compartment_export_tables : ALIGN(8)
{
    # The scheduler and allocator's export tables are at the start.
    .scheduler_export_table = .;
    *.scheduler.compartment(.compartment_export_table);
    .scheduler_export_table_end = .;

    .allocator_export_table = ALIGN(8);
    */cheriot.allocator.compartment(.compartment_export_table);
    .allocator_export_table_end = .;

    @compartment_exports@
}


__compart_pccs = .;

compartment_switcher_code : CAPALIGN
{
    .compartment_switcher_start = .;
    */switcher/entry.S.o(.text);
}
.compartment_switcher_end = .;

scheduler_code : CAPALIGN
{
    .scheduler_start = .;
    *.scheduler.compartment(.compartment_sealing_keys);
    .scheduler_import_start = .;
    *.scheduler.compartment(.compartment_import_table);
    .scheduler_import_end = .;
    *.scheduler.compartment(.text .text.* .rodata .rodata.* .data.rel.ro);
}
.scheduler_end = .;

allocator_code : CAPALIGN
{
    .allocator_start = .;
    */cheriot.allocator.compartment(.compartment_sealing_keys);
    .allocator_import_start = .;
    */cheriot.allocator.compartment(.compartment_import_table);
    .allocator_import_end = .;
    allocator.compartment(.text .text.* .rodata .rodata.* .data.rel.ro);
    */cheriot.allocator.compartment(.text .text.* .rodata .rodata.* .data.rel.ro);
}
.allocator_end = .;


token_library_code : CAPALIGN
{
    .token_library_start = .;
    */cheriot.token_library.library(.compartment_sealing_keys);
    .token_library_import_start = .;
    */cheriot.token_library.library(.compartment_import_table);
    .token_library_import_end = .;
    token_library.library(.text .text.* .rodata .rodata.* .data.rel.ro);
    */cheriot.token_library.library(.text .text.* .rodata .rodata.* .data.rel.ro);
}
.token_library_end = .;


@software_revoker_code@

@pcc_ld@
__compart_pccs_end = .;
