74 lines
3.1 KiB
Plaintext
74 lines
3.1 KiB
Plaintext
/*
|
|
* Copyright 2022 The Pigweed Authors
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
|
* use this file except in compliance with the License. You may obtain a copy of
|
|
* the License at
|
|
*
|
|
* https://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
* License for the specific language governing permissions and limitations under
|
|
* the License.
|
|
*/
|
|
|
|
/* Helper macros to define the symbols requires by pw_bloat to detect the
|
|
* utilization and memory regions of your program.
|
|
*
|
|
* Include this file into your pw_linker_script() as follows:
|
|
*
|
|
* pw_linker_script("my_linker_script") {
|
|
* includes = [ "$dir_pw_bloat/bloat_macros.ld" ]
|
|
* linker_script = "my_project_linker_script.ld"
|
|
* }
|
|
*/
|
|
|
|
/* Default alignment used when declaring new sections. In most cases the free
|
|
* space should be measured down to a multiple of 4 bytes, but this can be
|
|
* changed in needed. */
|
|
#ifndef PW_BLOAT_SECTION_ALIGN
|
|
#define PW_BLOAT_SECTION_ALIGN 4
|
|
#endif
|
|
|
|
/* Declares an unused_space section. Instantiate this macro from within the
|
|
* SECTIONS of your linker script, after every other section, for example:
|
|
* PW_BLOAT_UNUSED_SPACE_SECTION(FLASH)
|
|
* PW_BLOAT_UNUSED_SPACE_SECTION(RAM)
|
|
*/
|
|
#define PW_BLOAT_UNUSED_SPACE_SECTION(memory_region) \
|
|
.memory_region.unused_space(NOLOAD) : ALIGN(PW_BLOAT_SECTION_ALIGN) \
|
|
{ \
|
|
. = ABSOLUTE(ORIGIN(memory_region) + LENGTH(memory_region)); \
|
|
} > memory_region
|
|
|
|
/* Declares a memory region in pw_bloat mapped to the same name. Example:
|
|
* PW_BLOAT_MEMORY_REGION(FLASH)
|
|
*/
|
|
#define PW_BLOAT_MEMORY_REGION(memory_region) \
|
|
PW_BLOAT_MEMORY_REGION_MAP(memory_region, memory_region)
|
|
|
|
/* Declares a memory region in pw_bloat mapped to a different name. Can be used
|
|
* multiple times to map multiple aliased memory regions to the same name.
|
|
* PW_BLOAT_MEMORY_REGION_MAP(RAM, ITCM)
|
|
* PW_BLOAT_MEMORY_REGION_MAP(RAM, DTCM)
|
|
*/
|
|
#define PW_BLOAT_MEMORY_REGION_MAP(name, memory_region) \
|
|
PW_BLOAT_MEMORY_REGION_MAP_N(name, memory_region, __COUNTER__)
|
|
|
|
/* Alternative version of PW_BLOAT_MEMORY_REGION_MAP to also specify the index
|
|
* value. This index value is irrelevant for pw_bloat tools as long as it
|
|
* doesn't repeat for the same name. Use this macro if you need to specify the
|
|
* index value for other tools.
|
|
* Note: this uses two macros to expand __COUNTER__ in
|
|
* PW_BLOAT_MEMORY_REGION_MAP. */
|
|
#define PW_BLOAT_MEMORY_REGION_MAP_N(name, memory_region, index) \
|
|
_PW_BLOAT_MEMORY_REGION_MAP_N(name, memory_region, index)
|
|
|
|
#define _PW_BLOAT_MEMORY_REGION_MAP_N(name, memory_region, index) \
|
|
pw_bloat_config_memory_region_##name##_start_##index = \
|
|
ORIGIN(memory_region); \
|
|
pw_bloat_config_memory_region_##name##_end_##index = \
|
|
ORIGIN(memory_region) + LENGTH(memory_region);
|