From 9133232048f873f8b95b68ab5041acc95c03798c Mon Sep 17 00:00:00 2001 From: Mary Ruthven Date: Tue, 9 Nov 2021 11:23:27 -0600 Subject: core-m/m0: reformat linker script with spaces Temporarily use spaces instead of tabs so we can cleanly revert linker script cls. Reformat the linker script again after the reverts are done. BUG=b:200823466 TEST=make buildall -j Change-Id: Id0a21581b657e5efc8e00745ef9ce7f6b279e563 Signed-off-by: Mary Ruthven Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3273186 Reviewed-by: Vadim Sukhomlinov --- core/cortex-m/ec.lds.S | 858 ++++++++++++++++++++++++------------------------- 1 file changed, 429 insertions(+), 429 deletions(-) (limited to 'core') diff --git a/core/cortex-m/ec.lds.S b/core/cortex-m/ec.lds.S index 7249ddeb69..8b9e3796da 100644 --- a/core/cortex-m/ec.lds.S +++ b/core/cortex-m/ec.lds.S @@ -30,37 +30,37 @@ ENTRY(reset) MEMORY { #if !defined(CONFIG_FLASH_PHYSICAL) - IROM (rx) : ORIGIN = CONFIG_ROM_BASE, LENGTH = CONFIG_ROM_SIZE + IROM (rx) : ORIGIN = CONFIG_ROM_BASE, LENGTH = CONFIG_ROM_SIZE #else #if defined(SECTION_IS_RO) && defined(NPCX_RO_HEADER) - /* - * Header structure used by npcx booter in RO region. - * Please notice the location of header must be in front of FW - * which needs copy. But header itself won't be copied to code ram - * by booter. - */ - FLASH_HDR (rx) : ORIGIN = FW_OFF(RO_HDR), LENGTH = FW_SIZE(RO_HDR) - FLASH (rx) : ORIGIN = FW_OFF(SECTION) + FW_SIZE(RO_HDR), \ - LENGTH = FW_SIZE(SECTION) + /* + * Header structure used by npcx booter in RO region. + * Please notice the location of header must be in front of FW + * which needs copy. But header itself won't be copied to code ram + * by booter. + */ + FLASH_HDR (rx) : ORIGIN = FW_OFF(RO_HDR), LENGTH = FW_SIZE(RO_HDR) + FLASH (rx) : ORIGIN = FW_OFF(SECTION) + FW_SIZE(RO_HDR), \ + LENGTH = FW_SIZE(SECTION) #else - FLASH (rx) : ORIGIN = FW_OFF(SECTION), LENGTH = FW_SIZE(SECTION) + FLASH (rx) : ORIGIN = FW_OFF(SECTION), LENGTH = FW_SIZE(SECTION) #endif #ifdef CONFIG_SHAREDLIB - SHARED_LIB (rx) : ORIGIN = FW_OFF(SHAREDLIB), \ - LENGTH = FW_SIZE(SHAREDLIB) + SHARED_LIB (rx) : ORIGIN = FW_OFF(SHAREDLIB), \ + LENGTH = FW_SIZE(SHAREDLIB) #endif #endif /* !CONFIG_FLASH_PHYSICAL */ - IRAM (rw) : ORIGIN = CONFIG_RAM_BASE, LENGTH = CONFIG_RAM_SIZE + IRAM (rw) : ORIGIN = CONFIG_RAM_BASE, LENGTH = CONFIG_RAM_SIZE #ifdef CONFIG_EXTERNAL_STORAGE - CDRAM (rx) : \ - ORIGIN = CONFIG_PROGRAM_MEMORY_BASE + FW_MEM_OFF(SECTION), \ - LENGTH = FW_SIZE(SECTION) + CDRAM (rx) : \ + ORIGIN = CONFIG_PROGRAM_MEMORY_BASE + FW_MEM_OFF(SECTION), \ + LENGTH = FW_SIZE(SECTION) #endif /* CONFIG_EXTERNAL_STORAGE */ #ifdef CONFIG_CHIP_MEMORY_REGIONS #define REGION(name, attr, start, size) \ - name(attr) : ORIGIN = (start), LENGTH = (size) + name(attr) : ORIGIN = (start), LENGTH = (size) #define REGION_LOAD REGION #include "memory_regions.inc" #undef REGION @@ -68,420 +68,420 @@ MEMORY #endif /* CONFIG_MEMORY_REGIONS */ #ifdef CONFIG_DRAM_BASE - DRAM (rwx) : ORIGIN = CONFIG_DRAM_BASE, LENGTH = CONFIG_DRAM_SIZE + DRAM (rwx) : ORIGIN = CONFIG_DRAM_BASE, LENGTH = CONFIG_DRAM_SIZE #endif } SECTIONS { #if defined(SECTION_IS_RO) && defined(NPCX_RO_HEADER) - .header : { - KEEP(*(.header)) - } > FLASH_HDR + .header : { + KEEP(*(.header)) + } > FLASH_HDR #endif #ifdef CONFIG_SHAREDLIB - .roshared : { - KEEP(*(.roshared*)) - } > SHARED_LIB + .roshared : { + KEEP(*(.roshared*)) + } > SHARED_LIB #endif - .text : { + .text : { #ifdef SECTION_IS_RO - . = . + CONFIG_RO_HEAD_ROOM; + . = . + CONFIG_RO_HEAD_ROOM; #endif #ifdef SECTION_IS_RW - . = . + CONFIG_RW_HEAD_ROOM; + . = . + CONFIG_RW_HEAD_ROOM; #endif - *(.text.vecttable) - . = ALIGN(4); - __image_data_offset = .; - KEEP(*(.rodata.ver)) - - . = ALIGN(4); - KEEP(*(.rodata.pstate)) - /** - * Reserve a space for FIPS crypto module. - * We compute sha256 for this block to check integrity, but - * don't use position independent code, so placing block - * closer to start of code with as much constant address as - * possible to prevent sudden relocations from breaking - * integrity check. - */ - . = ALIGN(4); - __fips_module_start = .; - KEEP(*(.text.fips)) - KEEP(*(.rodata.fips)) - . = ALIGN(4); - __fips_module_end = .; - } > FLASH =0xFFFFFFFF - /* - * Put the FIPS checksum in its own section, so it's easier to inject it - * into the elf file. This section should be adjacent to last section of + *(.text.vecttable) + . = ALIGN(4); + __image_data_offset = .; + KEEP(*(.rodata.ver)) + + . = ALIGN(4); + KEEP(*(.rodata.pstate)) + /** + * Reserve a space for FIPS crypto module. + * We compute sha256 for this block to check integrity, but + * don't use position independent code, so placing block + * closer to start of code with as much constant address as + * possible to prevent sudden relocations from breaking + * integrity check. + */ + . = ALIGN(4); + __fips_module_start = .; + KEEP(*(.text.fips)) + KEEP(*(.rodata.fips)) + . = ALIGN(4); + __fips_module_end = .; + } > FLASH =0xFFFFFFFF + /* + * Put the FIPS checksum in its own section, so it's easier to inject it + * into the elf file. This section should be adjacent to last section of * FIPS module which is rodata.fips. - */ - .text.fips_checksum : { - __fips_module_checksum_start = .; - KEEP(*(.rodata.fips.checksum)) - __fips_module_checksum_end = .; - } > FLASH =0xFFFFFFFF - - /* The rest of .text sections. */ - .text.__main : { - . = ALIGN(4); - __ap_ro_root_key_hash_start = . ; - *(.rodata.root_key_hash) - __ap_ro_root_key_hash_end = . ; - . = ALIGN(4); - STRINGIFY(OUTDIR/core/CORE/init.o) (.text) + */ + .text.fips_checksum : { + __fips_module_checksum_start = .; + KEEP(*(.rodata.fips.checksum)) + __fips_module_checksum_end = .; + } > FLASH =0xFFFFFFFF + + /* The rest of .text sections. */ + .text.__main : { + . = ALIGN(4); + __ap_ro_root_key_hash_start = . ; + *(.rodata.root_key_hash) + __ap_ro_root_key_hash_end = . ; + . = ALIGN(4); + STRINGIFY(OUTDIR/core/CORE/init.o) (.text) #if defined(CHIP_FAMILY_NPCX7) && !defined(CONFIG_HIBERNATE_PSL) - /* Keep hibernate utility in last code ram block */ - . = ALIGN(4); - KEEP(*(.after_init)) - __after_init_end = .; + /* Keep hibernate utility in last code ram block */ + . = ALIGN(4); + KEEP(*(.after_init)) + __after_init_end = .; #endif - *(.text*) + *(.text*) #ifdef CONFIG_EXTERNAL_STORAGE - . = ALIGN(4); - __flash_lpfw_start = .; - /* Entering deep idle FW for better power consumption */ - KEEP(*(.lowpower_ram)) - . = ALIGN(4); - __flash_lpfw_end = .; - __flash_lplfw_start = .; - /* GDMA utilities for better FW download speed */ - KEEP(*(.lowpower_ram2)) - . = ALIGN(4); - __flash_lplfw_end = .; - } > CDRAM AT > FLASH + . = ALIGN(4); + __flash_lpfw_start = .; + /* Entering deep idle FW for better power consumption */ + KEEP(*(.lowpower_ram)) + . = ALIGN(4); + __flash_lpfw_end = .; + __flash_lplfw_start = .; + /* GDMA utilities for better FW download speed */ + KEEP(*(.lowpower_ram2)) + . = ALIGN(4); + __flash_lplfw_end = .; + } > CDRAM AT > FLASH #else -# if !defined(CONFIG_FLASH_PHYSICAL) - } > IROM -# else - } > FLASH -# endif /* !CONFIG_FLASH_PHYSICAL */ +#if !defined(CONFIG_FLASH_PHYSICAL) + } > IROM +#else + } > FLASH +#endif /* !CONFIG_FLASH_PHYSICAL */ #endif - . = ALIGN(4); - .rodata : { - /* Symbols defined here are declared in link_defs.h */ - __irqprio = .; - KEEP(*(.rodata.irqprio)) - __irqprio_end = .; - - . = ALIGN(4); - __cmds = .; - KEEP(*(SORT(.rodata.cmds*))) - __cmds_end = .; - - . = ALIGN(4); - __extension_cmds = .; - KEEP(*(.rodata.extensioncmds)) - __extension_cmds_end = .; - - . = ALIGN(4); - __hcmds = .; - KEEP(*(SORT(.rodata.hcmds*))) - __hcmds_end = .; - - . = ALIGN(4); - __mkbp_evt_srcs = .; - KEEP(*(.rodata.evtsrcs)) - __mkbp_evt_srcs_end = .; - - . = ALIGN(4); - __hooks_init = .; - KEEP(*(.rodata.HOOK_INIT)) - __hooks_init_end = .; - - __hooks_pre_freq_change = .; - KEEP(*(.rodata.HOOK_PRE_FREQ_CHANGE)) - __hooks_pre_freq_change_end = .; - - __hooks_freq_change = .; - KEEP(*(.rodata.HOOK_FREQ_CHANGE)) - __hooks_freq_change_end = .; - - __hooks_sysjump = .; - KEEP(*(.rodata.HOOK_SYSJUMP)) - __hooks_sysjump_end = .; - - __hooks_chipset_pre_init = .; - KEEP(*(.rodata.HOOK_CHIPSET_PRE_INIT)) - __hooks_chipset_pre_init_end = .; - - __hooks_chipset_startup = .; - KEEP(*(.rodata.HOOK_CHIPSET_STARTUP)) - __hooks_chipset_startup_end = .; - - __hooks_chipset_resume = .; - KEEP(*(.rodata.HOOK_CHIPSET_RESUME)) - __hooks_chipset_resume_end = .; - - __hooks_chipset_suspend = .; - KEEP(*(.rodata.HOOK_CHIPSET_SUSPEND)) - __hooks_chipset_suspend_end = .; - - __hooks_chipset_shutdown = .; - KEEP(*(.rodata.HOOK_CHIPSET_SHUTDOWN)) - __hooks_chipset_shutdown_end = .; - - __hooks_chipset_reset = .; - KEEP(*(.rodata.HOOK_CHIPSET_RESET)) - __hooks_chipset_reset_end = .; - - __hooks_ac_change = .; - KEEP(*(.rodata.HOOK_AC_CHANGE)) - __hooks_ac_change_end = .; - - __hooks_lid_change = .; - KEEP(*(.rodata.HOOK_LID_CHANGE)) - __hooks_lid_change_end = .; - - __hooks_tablet_mode_change = .; - KEEP(*(.rodata.HOOK_TABLET_MODE_CHANGE)) - __hooks_tablet_mode_change_end = .; - - __hooks_base_attached_change = .; - KEEP(*(.rodata.HOOK_BASE_ATTACHED_CHANGE)) - __hooks_base_attached_change_end = .; - - __hooks_pwrbtn_change = .; - KEEP(*(.rodata.HOOK_POWER_BUTTON_CHANGE)) - __hooks_pwrbtn_change_end = .; - - __hooks_battery_soc_change = .; - KEEP(*(.rodata.HOOK_BATTERY_SOC_CHANGE)) - __hooks_battery_soc_change_end = .; + . = ALIGN(4); + .rodata : { + /* Symbols defined here are declared in link_defs.h */ + __irqprio = .; + KEEP(*(.rodata.irqprio)) + __irqprio_end = .; + + . = ALIGN(4); + __cmds = .; + KEEP(*(SORT(.rodata.cmds*))) + __cmds_end = .; + + . = ALIGN(4); + __extension_cmds = .; + KEEP(*(.rodata.extensioncmds)) + __extension_cmds_end = .; + + . = ALIGN(4); + __hcmds = .; + KEEP(*(SORT(.rodata.hcmds*))) + __hcmds_end = .; + + . = ALIGN(4); + __mkbp_evt_srcs = .; + KEEP(*(.rodata.evtsrcs)) + __mkbp_evt_srcs_end = .; + + . = ALIGN(4); + __hooks_init = .; + KEEP(*(.rodata.HOOK_INIT)) + __hooks_init_end = .; + + __hooks_pre_freq_change = .; + KEEP(*(.rodata.HOOK_PRE_FREQ_CHANGE)) + __hooks_pre_freq_change_end = .; + + __hooks_freq_change = .; + KEEP(*(.rodata.HOOK_FREQ_CHANGE)) + __hooks_freq_change_end = .; + + __hooks_sysjump = .; + KEEP(*(.rodata.HOOK_SYSJUMP)) + __hooks_sysjump_end = .; + + __hooks_chipset_pre_init = .; + KEEP(*(.rodata.HOOK_CHIPSET_PRE_INIT)) + __hooks_chipset_pre_init_end = .; + + __hooks_chipset_startup = .; + KEEP(*(.rodata.HOOK_CHIPSET_STARTUP)) + __hooks_chipset_startup_end = .; + + __hooks_chipset_resume = .; + KEEP(*(.rodata.HOOK_CHIPSET_RESUME)) + __hooks_chipset_resume_end = .; + + __hooks_chipset_suspend = .; + KEEP(*(.rodata.HOOK_CHIPSET_SUSPEND)) + __hooks_chipset_suspend_end = .; + + __hooks_chipset_shutdown = .; + KEEP(*(.rodata.HOOK_CHIPSET_SHUTDOWN)) + __hooks_chipset_shutdown_end = .; + + __hooks_chipset_reset = .; + KEEP(*(.rodata.HOOK_CHIPSET_RESET)) + __hooks_chipset_reset_end = .; + + __hooks_ac_change = .; + KEEP(*(.rodata.HOOK_AC_CHANGE)) + __hooks_ac_change_end = .; + + __hooks_lid_change = .; + KEEP(*(.rodata.HOOK_LID_CHANGE)) + __hooks_lid_change_end = .; + + __hooks_tablet_mode_change = .; + KEEP(*(.rodata.HOOK_TABLET_MODE_CHANGE)) + __hooks_tablet_mode_change_end = .; + + __hooks_base_attached_change = .; + KEEP(*(.rodata.HOOK_BASE_ATTACHED_CHANGE)) + __hooks_base_attached_change_end = .; + + __hooks_pwrbtn_change = .; + KEEP(*(.rodata.HOOK_POWER_BUTTON_CHANGE)) + __hooks_pwrbtn_change_end = .; + + __hooks_battery_soc_change = .; + KEEP(*(.rodata.HOOK_BATTERY_SOC_CHANGE)) + __hooks_battery_soc_change_end = .; #ifdef CONFIG_CASE_CLOSED_DEBUG_V1 - __hooks_ccd_change = .; - KEEP(*(.rodata.HOOK_CCD_CHANGE)) - __hooks_ccd_change_end = .; + __hooks_ccd_change = .; + KEEP(*(.rodata.HOOK_CCD_CHANGE)) + __hooks_ccd_change_end = .; #endif #ifdef CONFIG_USB_SUSPEND - __hooks_usb_change = .; - KEEP(*(.rodata.HOOK_USB_PM_CHANGE)) - __hooks_usb_change_end = .; + __hooks_usb_change = .; + KEEP(*(.rodata.HOOK_USB_PM_CHANGE)) + __hooks_usb_change_end = .; #endif - __hooks_tick = .; - KEEP(*(.rodata.HOOK_TICK)) - __hooks_tick_end = .; + __hooks_tick = .; + KEEP(*(.rodata.HOOK_TICK)) + __hooks_tick_end = .; - __hooks_second = .; - KEEP(*(.rodata.HOOK_SECOND)) - __hooks_second_end = .; + __hooks_second = .; + KEEP(*(.rodata.HOOK_SECOND)) + __hooks_second_end = .; - __hooks_usb_pd_disconnect = .; - KEEP(*(.rodata.HOOK_USB_PD_DISCONNECT)) - __hooks_usb_pd_disconnect_end = .; + __hooks_usb_pd_disconnect = .; + KEEP(*(.rodata.HOOK_USB_PD_DISCONNECT)) + __hooks_usb_pd_disconnect_end = .; - __hooks_usb_pd_connect = .; - KEEP(*(.rodata.HOOK_USB_PD_CONNECT)) - __hooks_usb_pd_connect_end = .; + __hooks_usb_pd_connect = .; + KEEP(*(.rodata.HOOK_USB_PD_CONNECT)) + __hooks_usb_pd_connect_end = .; - __deferred_funcs = .; - KEEP(*(.rodata.deferred)) - __deferred_funcs_end = .; + __deferred_funcs = .; + KEEP(*(.rodata.deferred)) + __deferred_funcs_end = .; - __usb_desc = .; - KEEP(*(.rodata.usb_desc_conf)) - KEEP(*(SORT(.rodata.usb_desc*))) - __usb_desc_end = .; - . = ALIGN(4); - KEEP(*(.rodata.usb_ep)) - KEEP(*(.rodata.usb_ep.usb_ep_tx)) - KEEP(*(.rodata.usb_ep.usb_ep_rx)) - KEEP(*(.rodata.usb_ep.usb_ep_reset)) - KEEP(*(.rodata.usb_ep.usb_iface_request)) + __usb_desc = .; + KEEP(*(.rodata.usb_desc_conf)) + KEEP(*(SORT(.rodata.usb_desc*))) + __usb_desc_end = .; + . = ALIGN(4); + KEEP(*(.rodata.usb_ep)) + KEEP(*(.rodata.usb_ep.usb_ep_tx)) + KEEP(*(.rodata.usb_ep.usb_ep_rx)) + KEEP(*(.rodata.usb_ep.usb_ep_reset)) + KEEP(*(.rodata.usb_ep.usb_iface_request)) - . = ALIGN(4); - *(.rodata*) + . = ALIGN(4); + *(.rodata*) #if defined(SECTION_IS_RO) && defined(CONFIG_FLASH) - . = ALIGN(64); - KEEP(*(.google)) + . = ALIGN(64); + KEEP(*(.google)) #endif - . = ALIGN(4); + . = ALIGN(4); #if !defined(CONFIG_FLASH_PHYSICAL) - } > IROM + } > IROM #define DATA_LMA_MEM_REGION IROM #elif defined(CONFIG_EXTERNAL_STORAGE) - } > CDRAM AT > FLASH + } > CDRAM AT > FLASH #define DATA_LMA_MEM_REGION FLASH #else - } > FLASH + } > FLASH #define DATA_LMA_MEM_REGION FLASH #endif - __data_lma_start = .; + __data_lma_start = .; #ifdef CONFIG_PRESERVE_LOGS - .preserve_logs(NOLOAD) : { - . = ALIGN(8); - *(SORT(.preserved_logs.*)) - . = ALIGN(8); - __preserved_logs_end = .; - } > IRAM - - ASSERT((SIZEOF(.preserve_logs) + CONFIG_RAM_BASE) == - __preserved_logs_end, - "preserve_logs must be at CONFIG_RAM_BASE.") + .preserve_logs(NOLOAD) : { + . = ALIGN(8); + *(SORT(.preserved_logs.*)) + . = ALIGN(8); + __preserved_logs_end = .; + } > IRAM + + ASSERT((SIZEOF(.preserve_logs) + CONFIG_RAM_BASE) == + __preserved_logs_end, + "preserve_logs must be at CONFIG_RAM_BASE.") #endif - .bss : { - /* - * Align to 512 bytes. This is convenient when some memory block - * needs big alignment. This is the beginning of the RAM, - * so there is usually no penalty on aligning this. - */ - . = ALIGN(512); - __bss_start = .; - /** - * Reserve a space for data used by FIPS crypto module. - */ - KEEP(*(.bss.fips)) - - *(.bss.big_align) - /* Stacks must be 64-bit aligned */ - . = ALIGN(8); - *(.bss.system_stack) - /* Rest of .bss takes care of its own alignment */ - - /* Group libtpm2 data so it can be cleared on system reset */ - __bss_libtpm2_start = .; - /* TPM registers should be cleared at the same time */ - STRINGIFY(OUTDIR/common/tpm_registers.o*)(.bss) - *(.bss.Tpm2_common) - __bss_libtpm2_end = .; - - *(.bss) - - /* - * Reserve space for deferred function firing times. - * Each time is a uint64_t, each func is a 32-bit pointer, - * thus the scaling factor of two. The 8 byte alignment of - * uint64_t is required by the ARM ABI. - */ - . = ALIGN(8); - __deferred_until = .; - . += (__deferred_funcs_end - __deferred_funcs) * (8 / 4); - __deferred_until_end = .; - } > IRAM - - .bss.slow : { - /* Region of RAM reclaimed from the little firmware(LFW). */ - *(.bss.slow) - /* - * Not replacing the loader, so .bss.slow is part of .bss. - * It needs to be followed by __bss_end so that .bss.slow - * will be zeroed by init. - */ - . = ALIGN(4); - __bss_end = .; - } > IRAM - - .data : { - . = ALIGN(4); - __data_start = .; - *(.data.tasks) - - /* - * Group libtpm2 data so it can be reinitialized on - * system reset - */ - __data_libtpm2_start = .; - Tpm2_*(.data) - /* TPM registers should be reinitialized at the same time */ - STRINGIFY(OUTDIR/common/tpm_registers.o*)(.data) - __data_libtpm2_end = .; - - /* - * TPM reset currently only clears BSS for the TPM library. - * It does not reset any initialized variables in data. - * So, make sure there aren't any. - */ - ASSERT(__data_libtpm2_start == __data_libtpm2_end, - "libtpm2 .data section is nonzero"); - - *(.data*) + .bss : { + /* + * Align to 512 bytes. This is convenient when some memory block + * needs big alignment. This is the beginning of the RAM, + * so there is usually no penalty on aligning this. + */ + . = ALIGN(512); + __bss_start = .; + /** + * Reserve a space for data used by FIPS crypto module. + */ + KEEP(*(.bss.fips)) + + *(.bss.big_align) + /* Stacks must be 64-bit aligned */ + . = ALIGN(8); + *(.bss.system_stack) + /* Rest of .bss takes care of its own alignment */ + + /* Group libtpm2 data so it can be cleared on system reset */ + __bss_libtpm2_start = .; + /* TPM registers should be cleared at the same time */ + STRINGIFY(OUTDIR/common/tpm_registers.o*)(.bss) + *(.bss.Tpm2_common) + __bss_libtpm2_end = .; + + *(.bss) + + /* + * Reserve space for deferred function firing times. + * Each time is a uint64_t, each func is a 32-bit pointer, + * thus the scaling factor of two. The 8 byte alignment of + * uint64_t is required by the ARM ABI. + */ + . = ALIGN(8); + __deferred_until = .; + . += (__deferred_funcs_end - __deferred_funcs) * (8 / 4); + __deferred_until_end = .; + } > IRAM + + .bss.slow : { + /* Region of RAM reclaimed from the little firmware(LFW). */ + *(.bss.slow) + /* + * Not replacing the loader, so .bss.slow is part of .bss. + * It needs to be followed by __bss_end so that .bss.slow + * will be zeroed by init. + */ + . = ALIGN(4); + __bss_end = .; + } > IRAM + + .data : { + . = ALIGN(4); + __data_start = .; + *(.data.tasks) + + /* + * Group libtpm2 data so it can be reinitialized on + * system reset + */ + __data_libtpm2_start = .; + Tpm2_*(.data) + /* TPM registers should be reinitialized at the same time */ + STRINGIFY(OUTDIR/common/tpm_registers.o*)(.data) + __data_libtpm2_end = .; + + /* + * TPM reset currently only clears BSS for the TPM library. + * It does not reset any initialized variables in data. + * So, make sure there aren't any. + */ + ASSERT(__data_libtpm2_start == __data_libtpm2_end, + "libtpm2 .data section is nonzero"); + + *(.data*) #ifdef CONFIG_MPU - /* - * It has to be aligned by 32 bytes to be a valid - * MPU region. - */ - . = ALIGN(32); - __iram_text_start = .; + /* + * It has to be aligned by 32 bytes to be a valid + * MPU region. + */ + . = ALIGN(32); + __iram_text_start = .; #else - . = ALIGN(4); + . = ALIGN(4); #endif - *(.iram.text) + *(.iram.text) #ifdef CONFIG_MPU - . = ALIGN(32); - __iram_text_end = .; + . = ALIGN(32); + __iram_text_end = .; #else - . = ALIGN(4); + . = ALIGN(4); #endif - __data_end = .; - - /* - * Shared memory buffer must be at the end of preallocated - * RAM, so it can expand to use all the remaining RAM. - */ - __shared_mem_buf = .; - - /* NOTHING MAY GO AFTER THIS! */ - } > IRAM AT > DATA_LMA_MEM_REGION - - ASSERT((__shared_mem_buf + CONFIG_SHAREDMEM_MINIMUM_SIZE) <= - (CONFIG_RAM_BASE + CONFIG_RAM_SIZE), - "Not enough space for shared memory.") - - __ram_free = (CONFIG_RAM_BASE + CONFIG_RAM_SIZE) - - (__shared_mem_buf + CONFIG_SHAREDMEM_MINIMUM_SIZE); - - /* - * The linker won't notice if the .data section is too big to fit, - * apparently because we're sending it into IRAM, not FLASH. - * The following symbol isn't used by the code, but running - * "objdump -t *.elf | grep hey" will let us check how much - * flash space we're actually using. The explicit ASSERT afterwards - * will cause the linker to abort if we use too much. - */ - __hey_flash_used = LOADADDR(.data) + SIZEOF(.data) - FW_OFF(SECTION); + __data_end = .; + + /* + * Shared memory buffer must be at the end of preallocated + * RAM, so it can expand to use all the remaining RAM. + */ + __shared_mem_buf = .; + + /* NOTHING MAY GO AFTER THIS! */ + } > IRAM AT > DATA_LMA_MEM_REGION + + ASSERT((__shared_mem_buf + CONFIG_SHAREDMEM_MINIMUM_SIZE) <= + (CONFIG_RAM_BASE + CONFIG_RAM_SIZE), + "Not enough space for shared memory.") + + __ram_free = (CONFIG_RAM_BASE + CONFIG_RAM_SIZE) - + (__shared_mem_buf + CONFIG_SHAREDMEM_MINIMUM_SIZE); + + /* + * The linker won't notice if the .data section is too big to fit, + * apparently because we're sending it into IRAM, not FLASH. + * The following symbol isn't used by the code, but running + * "objdump -t *.elf | grep hey" will let us check how much + * flash space we're actually using. The explicit ASSERT afterwards + * will cause the linker to abort if we use too much. + */ + __hey_flash_used = LOADADDR(.data) + SIZEOF(.data) - FW_OFF(SECTION); #ifdef CONFIG_FLASH_PHYSICAL - ASSERT((FW_SIZE(SECTION) + ASSERT((FW_SIZE(SECTION) #if defined(CONFIG_RWSIG) && defined(SECTION_IS_RO) - - CONFIG_RO_PUBKEY_SIZE + - CONFIG_RO_PUBKEY_SIZE #endif #if defined(CONFIG_RWSIG) && defined(SECTION_IS_RW) - - CONFIG_RW_SIG_SIZE + - CONFIG_RW_SIG_SIZE #endif - ) >= (LOADADDR(.data) + SIZEOF(.data) - FW_OFF(SECTION)), - "No room left in the flash") + ) >= (LOADADDR(.data) + SIZEOF(.data) - FW_OFF(SECTION)), + "No room left in the flash") #endif /* CONFIG_FLASH_PHYSICAL */ #if defined(SECTION_IS_RO) && defined(NPCX_RO_HEADER) - __image_size = __hey_flash_used - FW_SIZE(RO_HDR); + __image_size = __hey_flash_used - FW_SIZE(RO_HDR); #else - __image_size = __hey_flash_used; + __image_size = __hey_flash_used; #endif #ifdef CONFIG_CHIP_MEMORY_REGIONS #define REGION(name, attr, start, size) \ - .name(NOLOAD) : { \ - __##name##_start = .; \ - KEEP(*(SORT(.name.keep.*))) \ - *(SORT(.name.*)) \ - } > name + .name(NOLOAD) : { \ + __##name##_start = .; \ + KEEP(*(SORT(.name.keep.*))) \ + *(SORT(.name.*)) \ + } > name #define REGION_LOAD(name, attr, start, size) \ - .name : { \ - __##name##_start = .; \ - KEEP(*(SORT(.name.keep.*))) \ - *(SORT(.name.*)) \ - } > name + .name : { \ + __##name##_start = .; \ + KEEP(*(SORT(.name.keep.*))) \ + *(SORT(.name.*)) \ + } > name #include "memory_regions.inc" #undef REGION #undef REGION_LOAD @@ -489,78 +489,78 @@ SECTIONS #ifdef CONFIG_DRAM_BASE - /* - * Sections in DRAM region are constructed as like in non-DRAM regions: - * .dram.data LMA is for preserving initialized data across resets. - * The only difference is that they are all in the DRAM region: - * .dram.text | LOAD - * .dram.rodata | LOAD - * .dram.data LMA | LOAD - * .dram.data VMA | - * .dram.bss | NOLOAD - * TODO(b:123269246): Enable MPU protectable DRAM section. This might - * introduce a RO-DRAM section for .dram.text, .dram.rodata and - * .dram.data LMA. - */ - - .dram.text : { - . = ALIGN(4); - KEEP(*(SORT(.dram.text.keep.*))) - *(SORT(.dram.text.*)) - . = ALIGN(4); - } > DRAM - - .dram.rodata : { - . = ALIGN(4); - KEEP(*(SORT(.dram.rodata.keep.*))) - *(SORT(.dram.rodata.*)) - . = ALIGN(4); - } > DRAM - - __dram_data_lma_start = ADDR(.dram.rodata) + SIZEOF(.dram.rodata); - - /* Place .dram.data LMA in between .dram.rodata and .dram.data VMA. */ + /* + * Sections in DRAM region are constructed as like in non-DRAM regions: + * .dram.data LMA is for preserving initialized data across resets. + * The only difference is that they are all in the DRAM region: + * .dram.text | LOAD + * .dram.rodata | LOAD + * .dram.data LMA | LOAD + * .dram.data VMA | + * .dram.bss | NOLOAD + * TODO(b:123269246): Enable MPU protectable DRAM section. This might + * introduce a RO-DRAM section for .dram.text, .dram.rodata and + * .dram.data LMA. + */ + + .dram.text : { + . = ALIGN(4); + KEEP(*(SORT(.dram.text.keep.*))) + *(SORT(.dram.text.*)) + . = ALIGN(4); + } > DRAM + + .dram.rodata : { + . = ALIGN(4); + KEEP(*(SORT(.dram.rodata.keep.*))) + *(SORT(.dram.rodata.*)) + . = ALIGN(4); + } > DRAM + + __dram_data_lma_start = ADDR(.dram.rodata) + SIZEOF(.dram.rodata); + + /* Place .dram.data LMA in between .dram.rodata and .dram.data VMA. */ #ifdef __clang__ - /* - * The evaluation timing for SIZEOF() and symbols are different in - * ld and lld. - */ - .dram.data __dram_data_lma_start + SIZEOF(.dram.data) : { + /* + * The evaluation timing for SIZEOF() and symbols are different in + * ld and lld. + */ + .dram.data __dram_data_lma_start + SIZEOF(.dram.data) : { #else - .dram.data __dram_data_lma_start + - (__dram_data_end - __dram_data_start) : { + .dram.data __dram_data_lma_start + + (__dram_data_end - __dram_data_start) : { #endif /* __clang__ */ - . = ALIGN(4); - __dram_data_start = .; - *(.dram.data*) - . = ALIGN(4); - __dram_data_end = .; - - /* - * Normally, '> DRAM AT > DRAM' should be the same as '> DRAM', - * and they will be at the same address. However, if the address - * of VMA specified, LMA and VMA might have different addresses: - * '> DRAM' places VMA at the address where section declaration - * specified. - * 'AT > DRAM' places LMA at the location counter's address. - */ - } > DRAM AT > DRAM - - /* - * ld assigns correct attribute for .bss, but not for other .*.bss, - * we need an explicltly NOLOAD. - */ - .dram.bss(NOLOAD) : { - . = ALIGN(4); - __dram_bss_start = .; - *(SORT(.dram.bss*)) - . = ALIGN(4); - __dram_bss_end = .; - } > DRAM + . = ALIGN(4); + __dram_data_start = .; + *(.dram.data*) + . = ALIGN(4); + __dram_data_end = .; + + /* + * Normally, '> DRAM AT > DRAM' should be the same as '> DRAM', + * and they will be at the same address. However, if the address + * of VMA specified, LMA and VMA might have different addresses: + * '> DRAM' places VMA at the address where section declaration + * specified. + * 'AT > DRAM' places LMA at the location counter's address. + */ + } > DRAM AT > DRAM + + /* + * ld assigns correct attribute for .bss, but not for other .*.bss, + * we need an explicltly NOLOAD. + */ + .dram.bss(NOLOAD) : { + . = ALIGN(4); + __dram_bss_start = .; + *(SORT(.dram.bss*)) + . = ALIGN(4); + __dram_bss_end = .; + } > DRAM #endif #if !(defined(SECTION_IS_RO) && defined(CONFIG_FLASH)) - /DISCARD/ : { *(.google) } + /DISCARD/ : { *(.google) } #endif - /DISCARD/ : { *(.ARM.*) } + /DISCARD/ : { *(.ARM.*) } } -- cgit v1.2.1