|  | // 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); |