/********************************************************************************************************************** * COPYRIGHT * ------------------------------------------------------------------------------------------------------------------- * \verbatim * Copyright (c) 2025 by Vector Informatik GmbH. All rights reserved. * * This software is copyright protected and proprietary to Vector Informatik GmbH. * Vector Informatik GmbH grants to you only those rights as set out in the license conditions. * All other rights remain with Vector Informatik GmbH. * \endverbatim * ------------------------------------------------------------------------------------------------------------------- * FILE DESCRIPTION * -----------------------------------------------------------------------------------------------------------------*/ /** \file File: Brs_MemMap.h * Project: Vector Basic Runtime System * Module: BrsMain * * \brief Description: Module specific MemMap Header to allow linking of specific parts of BRS into specific * memory sections. * * \attention Please note: * The demo and example programs only show special aspects of the software. With regard to the fact * that these programs are meant for demonstration purposes only, Vector Informatik liability shall be * expressly excluded in cases of ordinary negligence, to the extent admissible by law or statute. *********************************************************************************************************************/ /********************************************************************************************************************** * REVISION HISTORY * ------------------------------------------------------------------------------------------------------------------- * Refer to BrsMain.h. *********************************************************************************************************************/ #ifndef BRS_MEMMAP_ERROR #define BRS_MEMMAP_ERROR #endif #if defined (VVIRTUALTARGET) /* * VTT/CANoeEmu is supporting ANSI/GNU/CLANG as compiler values, but does not contain a Makefile which sets * BRS_COMP_ */ /* * The vVIRTUALtarget ANSI compiler options do not even support #warning: * fatal error C1021: invalid preprocessor command 'warning' * So no warnings show up for this compiler on this platform */ /* vVIRTUALtarget build settings: Windows x86/x64, Visual Studio */ # if defined (_MICROSOFT_C_VTT_) #define BRS_COMP_ANSI /* vVIRTUALtarget build settings: Windows x86, CMake / MinGW-w64 */ # elif defined (__MINGW32__) #define BRS_COMP_GCCGNU /* vVIRTUALtarget build settings: Linux, CMake / Clang */ # elif defined (__clang__) #define BRS_COMP_ARM6 # endif #endif /********************************************************************************************************************** * CONFIGURATION CHECK *********************************************************************************************************************/ #if defined (BRS_COMP_LLVMTEXASINSTRUMENTS) #else #error "Unknown compiler specified! Pragmas for mapping into specific sections not yet implemented for your compiler." #endif /********************************************************************************************************************** * CODE sections *********************************************************************************************************************/ /*****************************************************************************/ /* StartupCode part, located in BrsMain, which is only used by first execution * instance (e.g. Brs_PreMainStartup()) *****************************************************************************/ #ifdef BRS_START_SEC_STARTUP_CODE # if defined (BRS_COMP_LLVMTEXASINSTRUMENTS) #pragma clang section text = ".brsMainStartup" # endif #undef BRS_START_SEC_STARTUP_CODE #undef BRS_MEMMAP_ERROR #endif #ifdef BRS_STOP_SEC_STARTUP_CODE # if defined (BRS_COMP_LLVMTEXASINSTRUMENTS) #pragma clang section text = "" # endif #undef BRS_STOP_SEC_STARTUP_CODE #undef BRS_MEMMAP_ERROR #endif /*****************************************************************************/ /* Brs_ApplicationEntry section, located in BrsMainStartup, which is used by * every execution instance (Brs_ApplicationEntry()). This allows a fix * address of application entry, needed by some bootloader use-cases. *****************************************************************************/ #ifdef BRS_START_SEC_BRSAPPLENTRY_CODE # if defined (BRS_COMP_LLVMTEXASINSTRUMENTS) #pragma clang section text = ".brsApplicationEntry" # endif #undef BRS_START_SEC_BRSAPPLENTRY_CODE #undef BRS_MEMMAP_ERROR #endif #ifdef BRS_STOP_SEC_BRSAPPLENTRY_CODE # if defined (BRS_COMP_LLVMTEXASINSTRUMENTS) #pragma clang section text = "" # endif #undef BRS_STOP_SEC_BRSAPPLENTRY_CODE #undef BRS_MEMMAP_ERROR #endif /*****************************************************************************/ /* Code Exception table, configured during startup from first execution * instance (on platforms, where exception table is code) *****************************************************************************/ #ifdef BRS_START_SEC_EXCVECT_CODE # if defined (BRS_COMP_LLVMTEXASINSTRUMENTS) #pragma clang section text = ".brsExcVect" # endif #undef BRS_START_SEC_EXCVECT_CODE #undef BRS_MEMMAP_ERROR #endif #ifdef BRS_STOP_SEC_EXCVECT_CODE # if defined (BRS_COMP_LLVMTEXASINSTRUMENTS) #pragma clang section text = "" # endif #undef BRS_STOP_SEC_EXCVECT_CODE #undef BRS_MEMMAP_ERROR #endif /*****************************************************************************/ /* Code Exception table that is located in RAM, configured from FBL execution * instance (on platforms, where exception table is code) *****************************************************************************/ #ifdef BRS_START_SEC_EXCVECTRAM_CODE # if defined (BRS_COMP_LLVMTEXASINSTRUMENTS) #pragma clang section text = ".brsExcVectRam" # endif #undef BRS_START_SEC_EXCVECTRAM_CODE #undef BRS_MEMMAP_ERROR #endif #ifdef BRS_STOP_SEC_EXCVECTRAM_CODE # if defined (BRS_COMP_LLVMTEXASINSTRUMENTS) #pragma clang section text = "" # endif #undef BRS_STOP_SEC_EXCVECTRAM_CODE #undef BRS_MEMMAP_ERROR #endif /*****************************************************************************/ /* FBL/HSM_Updater specific section, to copy parts of BRS into RAM * (everything, that is needed during re-flashing) *****************************************************************************/ #ifdef BRS_START_SEC_RAM_CODE # if defined (BRS_COMP_LLVMTEXASINSTRUMENTS) #pragma clang section text = ".RamCodeSection" # endif #undef BRS_START_SEC_RAM_CODE #undef BRS_MEMMAP_ERROR #endif #ifdef BRS_STOP_SEC_RAM_CODE # if defined (BRS_COMP_LLVMTEXASINSTRUMENTS) #pragma clang section text = "" # endif #undef BRS_STOP_SEC_RAM_CODE #undef BRS_MEMMAP_ERROR #endif /********************************************************************************************************************** * CONST sections *********************************************************************************************************************/ /*****************************************************************************/ /* Constants, that are shared between several execution instances *****************************************************************************/ #ifdef BRS_START_SEC_SHARED_CONST # if defined (BRS_COMP_LLVMTEXASINSTRUMENTS) #pragma clang section rodata = ".brsSharedConst" # endif #undef BRS_START_SEC_SHARED_CONST #undef BRS_MEMMAP_ERROR #endif #ifdef BRS_STOP_SEC_SHARED_CONST # if defined (BRS_COMP_LLVMTEXASINSTRUMENTS) #pragma clang section rodata = "" # endif #undef BRS_STOP_SEC_SHARED_CONST #undef BRS_MEMMAP_ERROR #endif /*****************************************************************************/ /* Const Exception table, configured during startup from first execution * instance (on platforms, where exception table is const) *****************************************************************************/ #ifdef BRS_START_SEC_EXCVECT_CONST # if defined (BRS_COMP_LLVMTEXASINSTRUMENTS) #pragma clang section rodata = ".brsExcVectConst" # endif #undef BRS_START_SEC_EXCVECT_CONST #undef BRS_MEMMAP_ERROR #endif #ifdef BRS_STOP_SEC_EXCVECT_CONST # if defined (BRS_COMP_LLVMTEXASINSTRUMENTS) #pragma clang section rodata = "" # endif #undef BRS_STOP_SEC_EXCVECT_CONST #undef BRS_MEMMAP_ERROR #endif /*****************************************************************************/ /* Const Exception table that is located in RAM, configured from FBL execution * instance (on platforms, where exception table is const) *****************************************************************************/ #ifdef BRS_START_SEC_EXCVECTRAM_CONST # if defined (BRS_COMP_LLVMTEXASINSTRUMENTS) #pragma clang section rodata = ".brsExcVectRamConst" # endif #undef BRS_START_SEC_EXCVECTRAM_CONST #undef BRS_MEMMAP_ERROR #endif #ifdef BRS_STOP_SEC_EXCVECTRAM_CONST # if defined (BRS_COMP_LLVMTEXASINSTRUMENTS) #pragma clang section rodata = "" # endif #undef BRS_STOP_SEC_EXCVECTRAM_CONST #undef BRS_MEMMAP_ERROR #endif /*****************************************************************************/ /* FBL/HSM_Updater specific section, to copy parts of BRS into RAM * (everything, that is needed during re-flashing) *****************************************************************************/ #ifdef BRS_START_SEC_RAM_CONST # if defined (BRS_COMP_LLVMTEXASINSTRUMENTS) #pragma clang section rodata = ".RamConstSection" # endif #undef BRS_START_SEC_RAM_CONST #undef BRS_MEMMAP_ERROR #endif #ifdef BRS_STOP_SEC_RAM_CONST # if defined (BRS_COMP_LLVMTEXASINSTRUMENTS) #pragma clang section rodata = "" # endif #undef BRS_STOP_SEC_RAM_CONST #undef BRS_MEMMAP_ERROR #endif #if defined (BRS_ENABLE_FBL_SUPPORT) # if defined (BRS_FBL_INSTANCE_FBL) /*****************************************************************************/ /* FBL specific section to store the FBL instance presence pattern into a * dedicated section *****************************************************************************/ # ifdef BRS_START_SEC_FBL_PP_CONST # if defined (BRS_COMP_LLVMTEXASINSTRUMENTS) #pragma clang section rodata = ".FblPresencePatternSection" # endif #undef BRS_START_SEC_FBL_PP_CONST #undef BRS_MEMMAP_ERROR # endif # ifdef BRS_STOP_SEC_FBL_PP_CONST # if defined (BRS_COMP_LLVMTEXASINSTRUMENTS) #pragma clang section rodata = "" # endif #undef BRS_STOP_SEC_FBL_PP_CONST #undef BRS_MEMMAP_ERROR # endif # endif /* BRS_FBL_INSTANCE_FBL */ #endif /* BRS_ENABLE_FBL_SUPPORT */ /********************************************************************************************************************** * VAR sections *********************************************************************************************************************/ /*****************************************************************************/ /* Variables, that are shared between several execution instances * (e.g. brsMain_ResetReason) *****************************************************************************/ #ifdef BRS_START_SEC_SHARED_VAR # if defined (BRS_COMP_LLVMTEXASINSTRUMENTS) #pragma clang section bss = ".brsSharedVar" # endif #undef BRS_START_SEC_SHARED_VAR #undef BRS_MEMMAP_ERROR # endif #ifdef BRS_STOP_SEC_SHARED_VAR # if defined (BRS_COMP_LLVMTEXASINSTRUMENTS) #pragma clang section bss = "" # endif #undef BRS_STOP_SEC_SHARED_VAR #undef BRS_MEMMAP_ERROR #endif #if defined (BRS_MEMMAP_ERROR) #error "Error in Brs_MemMap.h: MemMap section is not included!" #endif