| // Copyright Microsoft and CHERIoT Contributors. | |
| // SPDX-License-Identifier: MIT | |
| #include <assembly-helpers.h> | |
| #define IMAGE_HEADER_LOADER_CODE_START_OFFSET 0 | |
| #define IMAGE_HEADER_LOADER_CODE_SIZE_OFFSET 4 | |
| #define IMAGE_HEADER_LOADER_DATA_START_OFFSET 6 | |
| #define IMAGE_HEADER_LOADER_DATA_SIZE_OFFSET 10 | |
| #ifdef __cplusplus | |
| # include "types.h" | |
| # include "../scheduler/loaderinfo.h" | |
| namespace | |
| { | |
| /// The return type of the loader, to pass information to the scheduler. | |
| struct SchedulerEntryInfo | |
| { | |
| /// scheduler initial entry point for thread initialisation | |
| void *schedPCC; | |
| /// scheduler CGP for thread initialisation | |
| void *schedCGP; | |
| /// thread descriptors for all threads | |
| ThreadLoaderInfo threads[]; | |
| }; | |
| using namespace loader; | |
| static_assert(CheckSize<offsetof(ImgHdr, loader.code.startAddress), | |
| IMAGE_HEADER_LOADER_CODE_START_OFFSET>::value, | |
| "Offset of loader code start is incorrect"); | |
| static_assert(CheckSize<offsetof(ImgHdr, loader.code.smallSize), | |
| IMAGE_HEADER_LOADER_CODE_SIZE_OFFSET>::value, | |
| "Offset of loader code size is incorrect"); | |
| static_assert(CheckSize<offsetof(ImgHdr, loader.data.startAddress), | |
| IMAGE_HEADER_LOADER_DATA_START_OFFSET>::value, | |
| "Offset of loader data start is incorrect"); | |
| static_assert(CheckSize<offsetof(ImgHdr, loader.data.smallSize), | |
| IMAGE_HEADER_LOADER_DATA_SIZE_OFFSET>::value, | |
| "Offset of loader data size is incorrect"); | |
| } // namespace | |
| #endif | |
| EXPORT_ASSEMBLY_OFFSET(SchedulerEntryInfo, threads, 16); |