1af5b49e9SHarrison MutaiTF-A Memory Layout Tool 2af5b49e9SHarrison Mutai======================= 3af5b49e9SHarrison Mutai 4af5b49e9SHarrison MutaiTF-A's memory layout tool is a Python script for analyzing the virtual 5af5b49e9SHarrison Mutaimemory layout of TF-A builds. 6af5b49e9SHarrison Mutai 7af5b49e9SHarrison MutaiPrerequisites 8af5b49e9SHarrison Mutai~~~~~~~~~~~~~ 9af5b49e9SHarrison Mutai 10af5b49e9SHarrison Mutai#. Python (3.8 or later) 11af5b49e9SHarrison Mutai#. `Poetry`_ Python package manager 12af5b49e9SHarrison Mutai 13af5b49e9SHarrison MutaiGetting Started 14af5b49e9SHarrison Mutai~~~~~~~~~~~~~~~ 15af5b49e9SHarrison Mutai 16af5b49e9SHarrison Mutai#. Install Poetry 17af5b49e9SHarrison Mutai 18af5b49e9SHarrison Mutai .. code:: shell 19af5b49e9SHarrison Mutai 20af5b49e9SHarrison Mutai curl -sSL https://install.python-poetry.org | python3 - 21af5b49e9SHarrison Mutai 22af5b49e9SHarrison Mutai#. Install the required packages 23af5b49e9SHarrison Mutai 24af5b49e9SHarrison Mutai .. code:: shell 25af5b49e9SHarrison Mutai 26ed0c801fSChris Kay poetry install --no-root 27af5b49e9SHarrison Mutai 28af5b49e9SHarrison Mutai#. Verify that the tool runs in the installed virtual environment 29af5b49e9SHarrison Mutai 30af5b49e9SHarrison Mutai .. code:: shell 31af5b49e9SHarrison Mutai 32af5b49e9SHarrison Mutai poetry run memory --help 33af5b49e9SHarrison Mutai 34af5b49e9SHarrison MutaiSymbol Virtual Map 35af5b49e9SHarrison Mutai~~~~~~~~~~~~~~~~~~ 36af5b49e9SHarrison Mutai 37af5b49e9SHarrison MutaiThe tool can be used to generate a visualisation of the symbol table. By 38af5b49e9SHarrison Mutaidefault, it prints the symbols representing the start and end address of the 39af5b49e9SHarrison Mutaimain memory regions in an ELF file (i.e. text, bss, rodata) but can be modified 40af5b49e9SHarrison Mutaito print any set of symbols. 41af5b49e9SHarrison Mutai 42af5b49e9SHarrison Mutai.. code:: shell 43af5b49e9SHarrison Mutai 448daebefeSChris Kay $ poetry run memory symbols 45af5b49e9SHarrison Mutai build-path: build/fvp/release 46af5b49e9SHarrison Mutai Virtual Address Map: 47af5b49e9SHarrison Mutai +------------__BL1_RAM_END__------------+---------------------------------------+ 48af5b49e9SHarrison Mutai +---------__COHERENT_RAM_END__----------+ | 49af5b49e9SHarrison Mutai +--------__COHERENT_RAM_START__---------+ | 50af5b49e9SHarrison Mutai 0x0403b000 +----------__XLAT_TABLE_END__-----------+ | 51af5b49e9SHarrison Mutai 0x04036000 +---------__XLAT_TABLE_START__----------+ | 52af5b49e9SHarrison Mutai +--------__BASE_XLAT_TABLE_END__--------+ | 53af5b49e9SHarrison Mutai 0x04035600 +--------------__BSS_END__--------------+ | 54af5b49e9SHarrison Mutai +-------__BASE_XLAT_TABLE_START__-------+ | 55af5b49e9SHarrison Mutai +-----__PMF_PERCPU_TIMESTAMP_END__------+ | 56af5b49e9SHarrison Mutai +---------__PMF_TIMESTAMP_END__---------+ | 57af5b49e9SHarrison Mutai 0x04035400 +--------__PMF_TIMESTAMP_START__--------+ | 58af5b49e9SHarrison Mutai +-------------__BSS_START__-------------+ | 59af5b49e9SHarrison Mutai 0x04034a00 +------------__STACKS_END__-------------+ | 60af5b49e9SHarrison Mutai 0x04034500 +-----------__STACKS_START__------------+ | 61af5b49e9SHarrison Mutai 0x040344c5 +-----------__DATA_RAM_END__------------+ | 62af5b49e9SHarrison Mutai +-----------__BL1_RAM_START__-----------+ | 63af5b49e9SHarrison Mutai 0x04034000 +----------__DATA_RAM_START__-----------+ | 64af5b49e9SHarrison Mutai | +---------__COHERENT_RAM_END__----------+ 65af5b49e9SHarrison Mutai | +--------__COHERENT_RAM_START__---------+ 66af5b49e9SHarrison Mutai 0x0402e000 | +----------__XLAT_TABLE_END__-----------+ 67af5b49e9SHarrison Mutai 0x04029000 | +---------__XLAT_TABLE_START__----------+ 68af5b49e9SHarrison Mutai | +--------__BASE_XLAT_TABLE_END__--------+ 69af5b49e9SHarrison Mutai 0x04028800 | +--------------__BSS_END__--------------+ 70af5b49e9SHarrison Mutai | +-------__BASE_XLAT_TABLE_START__-------+ 71af5b49e9SHarrison Mutai | +-----__PMF_PERCPU_TIMESTAMP_END__------+ 72af5b49e9SHarrison Mutai | +---------__PMF_TIMESTAMP_END__---------+ 73af5b49e9SHarrison Mutai 0x04028580 | +--------__PMF_TIMESTAMP_START__--------+ 74af5b49e9SHarrison Mutai 0x04028000 | +-------------__BSS_START__-------------+ 75af5b49e9SHarrison Mutai 0x04027e40 | +------------__STACKS_END__-------------+ 76af5b49e9SHarrison Mutai 0x04027840 | +-----------__STACKS_START__------------+ 77af5b49e9SHarrison Mutai 0x04027000 | +------------__RODATA_END__-------------+ 78af5b49e9SHarrison Mutai | +------------__CPU_OPS_END__------------+ 79af5b49e9SHarrison Mutai | +-----------__CPU_OPS_START__-----------+ 80af5b49e9SHarrison Mutai | +--------__FCONF_POPULATOR_END__--------+ 81af5b49e9SHarrison Mutai | +--------------__GOT_END__--------------+ 82af5b49e9SHarrison Mutai | +-------------__GOT_START__-------------+ 83af5b49e9SHarrison Mutai | +---------__PMF_SVC_DESCS_END__---------+ 84af5b49e9SHarrison Mutai 0x04026c10 | +--------__PMF_SVC_DESCS_START__--------+ 85af5b49e9SHarrison Mutai 0x04026bf8 | +-------__FCONF_POPULATOR_START__-------+ 86af5b49e9SHarrison Mutai | +-----------__RODATA_START__------------+ 87af5b49e9SHarrison Mutai 0x04026000 | +-------------__TEXT_END__--------------+ 88af5b49e9SHarrison Mutai 0x04021000 | +------------__TEXT_START__-------------+ 89af5b49e9SHarrison Mutai 0x000062b5 +------------__BL1_ROM_END__------------+ | 90af5b49e9SHarrison Mutai 0x00005df0 +----------__DATA_ROM_START__-----------+ | 91af5b49e9SHarrison Mutai +------------__CPU_OPS_END__------------+ | 92af5b49e9SHarrison Mutai +--------------__GOT_END__--------------+ | 93af5b49e9SHarrison Mutai +-------------__GOT_START__-------------+ | 94af5b49e9SHarrison Mutai 0x00005de8 +------------__RODATA_END__-------------+ | 95af5b49e9SHarrison Mutai +-----------__CPU_OPS_START__-----------+ | 96af5b49e9SHarrison Mutai +--------__FCONF_POPULATOR_END__--------+ | 97af5b49e9SHarrison Mutai +---------__PMF_SVC_DESCS_END__---------+ | 98af5b49e9SHarrison Mutai 0x00005c98 +--------__PMF_SVC_DESCS_START__--------+ | 99af5b49e9SHarrison Mutai 0x00005c80 +-------__FCONF_POPULATOR_START__-------+ | 100af5b49e9SHarrison Mutai +-----------__RODATA_START__------------+ | 101af5b49e9SHarrison Mutai 0x00005000 +-------------__TEXT_END__--------------+ | 102af5b49e9SHarrison Mutai 0x00000000 +------------__TEXT_START__-------------+---------------------------------------+ 103af5b49e9SHarrison Mutai 104af5b49e9SHarrison MutaiAddresses are displayed in hexadecimal by default but can be printed in decimal 105af5b49e9SHarrison Mutaiinstead with the ``-d`` option. 106af5b49e9SHarrison Mutai 107af5b49e9SHarrison MutaiBecause of the length of many of the symbols, the tool defaults to a text width 108af5b49e9SHarrison Mutaiof 120 chars. This can be increased if needed with the ``-w`` option. 109af5b49e9SHarrison Mutai 110af5b49e9SHarrison MutaiFor more detailed help instructions, run: 111af5b49e9SHarrison Mutai 112af5b49e9SHarrison Mutai.. code:: shell 113af5b49e9SHarrison Mutai 114af5b49e9SHarrison Mutai poetry run memory --help 115af5b49e9SHarrison Mutai 116d9d5eb13SHarrison MutaiMemory Footprint 117d9d5eb13SHarrison Mutai~~~~~~~~~~~~~~~~ 118d9d5eb13SHarrison Mutai 1198daebefeSChris KayThe tool enables users to view static memory consumption. When the ``footprint`` 1208daebefeSChris Kaycommand is provided, the script analyses the ELF binaries in the build path to 1218daebefeSChris Kaygenerate a table (per memory type), showing memory allocation and usage. This is 1228daebefeSChris Kaythe default output generated by the tool. 123d9d5eb13SHarrison Mutai 124d9d5eb13SHarrison Mutai.. code:: shell 125d9d5eb13SHarrison Mutai 1268daebefeSChris Kay $ poetry run memory footprint 127d9d5eb13SHarrison Mutai build-path: build/fvp/release 128d9d5eb13SHarrison Mutai +----------------------------------------------------------------------------+ 129d9d5eb13SHarrison Mutai | Memory Usage (bytes) [RAM] | 130d9d5eb13SHarrison Mutai +-----------+------------+------------+------------+------------+------------+ 131d9d5eb13SHarrison Mutai | Component | Start | Limit | Size | Free | Total | 132d9d5eb13SHarrison Mutai +-----------+------------+------------+------------+------------+------------+ 133d9d5eb13SHarrison Mutai | BL1 | 4034000 | 4040000 | 7000 | 5000 | c000 | 134d9d5eb13SHarrison Mutai | BL2 | 4021000 | 4034000 | d000 | 6000 | 13000 | 135d9d5eb13SHarrison Mutai | BL2U | 4021000 | 4034000 | a000 | 9000 | 13000 | 136d9d5eb13SHarrison Mutai | BL31 | 4003000 | 4040000 | 1e000 | 1f000 | 3d000 | 137d9d5eb13SHarrison Mutai +-----------+------------+------------+------------+------------+------------+ 138d9d5eb13SHarrison Mutai 139d9d5eb13SHarrison Mutai +----------------------------------------------------------------------------+ 140d9d5eb13SHarrison Mutai | Memory Usage (bytes) [ROM] | 141d9d5eb13SHarrison Mutai +-----------+------------+------------+------------+------------+------------+ 142d9d5eb13SHarrison Mutai | Component | Start | Limit | Size | Free | Total | 143d9d5eb13SHarrison Mutai +-----------+------------+------------+------------+------------+------------+ 144d9d5eb13SHarrison Mutai | BL1 | 0 | 4000000 | 5df0 | 3ffa210 | 4000000 | 145d9d5eb13SHarrison Mutai +-----------+------------+------------+------------+------------+------------+ 146d9d5eb13SHarrison Mutai 147d9d5eb13SHarrison MutaiThe script relies on symbols in the symbol table to determine the start, end, 148d9d5eb13SHarrison Mutaiand limit addresses of each bootloader stage. 149d9d5eb13SHarrison Mutai 150cc60aba2SHarrison MutaiMemory Tree 151cc60aba2SHarrison Mutai~~~~~~~~~~~ 152cc60aba2SHarrison Mutai 1538daebefeSChris KayA hierarchical view of the memory layout can be produced by passing the ``tree`` 1548daebefeSChris Kaycommand to the tool. This gives the start, end, and size of each module, their 1558daebefeSChris KayELF segments as well as sections. 156cc60aba2SHarrison Mutai 157cc60aba2SHarrison Mutai.. code:: shell 158cc60aba2SHarrison Mutai 1598daebefeSChris Kay $ poetry run memory tree 160cc60aba2SHarrison Mutai build-path: build/fvp/release 161cc60aba2SHarrison Mutai name start end size 162cc60aba2SHarrison Mutai bl1 0 400c000 400c000 163cc60aba2SHarrison Mutai ├── 00 0 5de0 5de0 164cc60aba2SHarrison Mutai │ ├── .text 0 5000 5000 165cc60aba2SHarrison Mutai │ └── .rodata 5000 5de0 de0 166cc60aba2SHarrison Mutai ├── 01 4034000 40344c5 4c5 167cc60aba2SHarrison Mutai │ └── .data 4034000 40344c5 4c5 168cc60aba2SHarrison Mutai ├── 02 4034500 4034a00 500 169cc60aba2SHarrison Mutai │ └── .stacks 4034500 4034a00 500 170cc60aba2SHarrison Mutai ├── 04 4034a00 4035600 c00 171cc60aba2SHarrison Mutai │ └── .bss 4034a00 4035600 c00 172cc60aba2SHarrison Mutai └── 03 4036000 403b000 5000 173cc60aba2SHarrison Mutai └── .xlat_table 4036000 403b000 5000 174cc60aba2SHarrison Mutai bl2 4021000 4034000 13000 175cc60aba2SHarrison Mutai ├── 00 4021000 4027000 6000 176cc60aba2SHarrison Mutai │ ├── .text 4021000 4026000 5000 177cc60aba2SHarrison Mutai │ └── .rodata 4026000 4027000 1000 178cc60aba2SHarrison Mutai └── 01 4027000 402e000 7000 179cc60aba2SHarrison Mutai ├── .data 4027000 4027809 809 180cc60aba2SHarrison Mutai ├── .stacks 4027840 4027e40 600 181cc60aba2SHarrison Mutai ├── .bss 4028000 4028800 800 182cc60aba2SHarrison Mutai └── .xlat_table 4029000 402e000 5000 183cc60aba2SHarrison Mutai bl2u 4021000 4034000 13000 184cc60aba2SHarrison Mutai ├── 00 4021000 4025000 4000 185cc60aba2SHarrison Mutai │ ├── .text 4021000 4024000 3000 186cc60aba2SHarrison Mutai │ └── .rodata 4024000 4025000 1000 187cc60aba2SHarrison Mutai └── 01 4025000 402b000 6000 188cc60aba2SHarrison Mutai ├── .data 4025000 4025065 65 189cc60aba2SHarrison Mutai ├── .stacks 4025080 4025480 400 190cc60aba2SHarrison Mutai ├── .bss 4025600 4025c00 600 191cc60aba2SHarrison Mutai └── .xlat_table 4026000 402b000 5000 192cc60aba2SHarrison Mutai bl31 4003000 4040000 3d000 193cc60aba2SHarrison Mutai ├── 02 ffe00000 ffe03000 3000 194cc60aba2SHarrison Mutai │ └── .el3_tzc_dram ffe00000 ffe03000 3000 195cc60aba2SHarrison Mutai ├── 00 4003000 4010000 d000 196cc60aba2SHarrison Mutai │ └── .text 4003000 4010000 d000 197cc60aba2SHarrison Mutai └── 01 4010000 4021000 11000 198cc60aba2SHarrison Mutai ├── .rodata 4010000 4012000 2000 199cc60aba2SHarrison Mutai ├── .data 4012000 401219d 19d 200cc60aba2SHarrison Mutai ├── .stacks 40121c0 40161c0 4000 201cc60aba2SHarrison Mutai ├── .bss 4016200 4018c00 2a00 202cc60aba2SHarrison Mutai ├── .xlat_table 4019000 4020000 7000 203cc60aba2SHarrison Mutai └── .coherent_ram 4020000 4021000 1000 204cc60aba2SHarrison Mutai 205cc60aba2SHarrison Mutai 206cc60aba2SHarrison MutaiThe granularity of this view can be modified with the ``--depth`` option. For 207cc60aba2SHarrison Mutaiinstance, if you only require the tree up to the level showing segment data, 208cc60aba2SHarrison Mutaiyou can specify the depth with: 209cc60aba2SHarrison Mutai 210cc60aba2SHarrison Mutai.. code:: 211cc60aba2SHarrison Mutai 2128daebefeSChris Kay $ poetry run memory tree --depth 2 213cc60aba2SHarrison Mutai build-path: build/fvp/release 214cc60aba2SHarrison Mutai name start end size 215cc60aba2SHarrison Mutai bl1 0 400c000 400c000 216cc60aba2SHarrison Mutai ├── 00 0 5df0 5df0 217cc60aba2SHarrison Mutai ├── 01 4034000 40344c5 4c5 218cc60aba2SHarrison Mutai ├── 02 4034500 4034a00 500 219cc60aba2SHarrison Mutai ├── 04 4034a00 4035600 c00 220cc60aba2SHarrison Mutai └── 03 4036000 403b000 5000 221cc60aba2SHarrison Mutai bl2 4021000 4034000 13000 222cc60aba2SHarrison Mutai ├── 00 4021000 4027000 6000 223cc60aba2SHarrison Mutai └── 01 4027000 402e000 7000 224cc60aba2SHarrison Mutai bl2u 4021000 4034000 13000 225cc60aba2SHarrison Mutai ├── 00 4021000 4025000 4000 226cc60aba2SHarrison Mutai └── 01 4025000 402b000 6000 227cc60aba2SHarrison Mutai bl31 4003000 4040000 3d000 228cc60aba2SHarrison Mutai ├── 02 ffe00000 ffe03000 3000 229cc60aba2SHarrison Mutai ├── 00 4003000 4010000 d000 230cc60aba2SHarrison Mutai └── 01 4010000 4021000 11000 231cc60aba2SHarrison Mutai 232*a98d4661SJimmy BrissonMemory Summary 233*a98d4661SJimmy Brisson~~~~~~~~~~~~~~ 234*a98d4661SJimmy Brisson 235*a98d4661SJimmy BrissonThe tool provides a by-translation-unit summary of the sizes (``text``, ``bss``, 236*a98d4661SJimmy Brisson``data``) contributed by each translation unit or group of translation units. 237*a98d4661SJimmy BrissonFor example, to print a table of an FVP build, with a path depth of 3: 238*a98d4661SJimmy Brisson 239*a98d4661SJimmy Brisson.. code:: 240*a98d4661SJimmy Brisson 241*a98d4661SJimmy Brisson $ poetry run memory summary build/fvp/debug/bl1/bl1.map -d 3 242*a98d4661SJimmy Brisson | Module | .text | .data | .bss | 243*a98d4661SJimmy Brisson |----------------------------------------|---------------|-------------|---------------| 244*a98d4661SJimmy Brisson | [fill] | 3204(+3204) | 0(+0) | 97(+97) | 245*a98d4661SJimmy Brisson | bl1/aem_generic.o | 0(+0) | 0(+0) | 0(+0) | 246*a98d4661SJimmy Brisson | bl1/arm_bl1_fwu.o | 224(+224) | 80(+80) | 0(+0) | 247*a98d4661SJimmy Brisson | bl1/arm_bl1_setup.o | 608(+608) | 0(+0) | 17(+17) | 248*a98d4661SJimmy Brisson | bl1/arm_common.o | 116(+116) | 0(+0) | 0(+0) | 249*a98d4661SJimmy Brisson | bl1/arm_console.o | 116(+116) | 0(+0) | 40(+40) | 250*a98d4661SJimmy Brisson | bl1/arm_dev_rotpk.o | 0(+0) | 0(+0) | 0(+0) | 251*a98d4661SJimmy Brisson | bl1/arm_dyn_cfg.o | 276(+276) | 0(+0) | 7184(+7184) | 252*a98d4661SJimmy Brisson | bl1/arm_dyn_cfg_helpers.o | 364(+364) | 0(+0) | 0(+0) | 253*a98d4661SJimmy Brisson | bl1/arm_err.o | 12(+12) | 0(+0) | 0(+0) | 254*a98d4661SJimmy Brisson | bl1/arm_fconf_io.o | 0(+0) | 952(+952) | 0(+0) | 255*a98d4661SJimmy Brisson | bl1/arm_helpers.o | 44(+44) | 0(+0) | 0(+0) | 256*a98d4661SJimmy Brisson | bl1/arm_io_storage.o | 480(+480) | 0(+0) | 32(+32) | 257*a98d4661SJimmy Brisson | bl1/auth_mod.o | 1288(+1288) | 0(+0) | 0(+0) | 258*a98d4661SJimmy Brisson | bl1/backtrace.o | 444(+444) | 0(+0) | 0(+0) | 259*a98d4661SJimmy Brisson | bl1/bl1_arch_setup.o | 16(+16) | 0(+0) | 0(+0) | 260*a98d4661SJimmy Brisson | bl1/bl1_context_mgmt.o | 340(+340) | 0(+0) | 1392(+1392) | 261*a98d4661SJimmy Brisson | bl1/bl1_entrypoint.o | 236(+236) | 0(+0) | 0(+0) | 262*a98d4661SJimmy Brisson | bl1/bl1_exceptions.o | 2240(+2240) | 0(+0) | 0(+0) | 263*a98d4661SJimmy Brisson | bl1/bl1_fwu.o | 2188(+2188) | 44(+44) | 0(+0) | 264*a98d4661SJimmy Brisson | bl1/bl1_main.o | 620(+620) | 0(+0) | 0(+0) | 265*a98d4661SJimmy Brisson | bl1/bl_common.o | 772(+772) | 0(+0) | 4(+4) | 266*a98d4661SJimmy Brisson | bl1/board_arm_helpers.o | 44(+44) | 0(+0) | 0(+0) | 267*a98d4661SJimmy Brisson | bl1/board_arm_trusted_boot.o | 44(+44) | 16(+16) | 0(+0) | 268*a98d4661SJimmy Brisson | bl1/cache_helpers.o | 112(+112) | 0(+0) | 0(+0) | 269*a98d4661SJimmy Brisson | bl1/cci.o | 408(+408) | 0(+0) | 24(+24) | 270*a98d4661SJimmy Brisson | bl1/context.o | 348(+348) | 0(+0) | 0(+0) | 271*a98d4661SJimmy Brisson | bl1/context_mgmt.o | 1692(+1692) | 0(+0) | 48(+48) | 272*a98d4661SJimmy Brisson | bl1/cortex_a35.o | 96(+96) | 0(+0) | 0(+0) | 273*a98d4661SJimmy Brisson | bl1/cortex_a53.o | 248(+248) | 0(+0) | 0(+0) | 274*a98d4661SJimmy Brisson | bl1/cortex_a57.o | 384(+384) | 0(+0) | 0(+0) | 275*a98d4661SJimmy Brisson | bl1/cortex_a72.o | 356(+356) | 0(+0) | 0(+0) | 276*a98d4661SJimmy Brisson | bl1/cortex_a73.o | 304(+304) | 0(+0) | 0(+0) | 277*a98d4661SJimmy Brisson | bl1/cpu_helpers.o | 200(+200) | 0(+0) | 0(+0) | 278*a98d4661SJimmy Brisson | bl1/crypto_mod.o | 380(+380) | 0(+0) | 0(+0) | 279*a98d4661SJimmy Brisson | bl1/debug.o | 224(+224) | 0(+0) | 0(+0) | 280*a98d4661SJimmy Brisson | bl1/delay_timer.o | 64(+64) | 0(+0) | 8(+8) | 281*a98d4661SJimmy Brisson | bl1/enable_mmu.o | 112(+112) | 0(+0) | 0(+0) | 282*a98d4661SJimmy Brisson | bl1/errata_report.o | 564(+564) | 0(+0) | 0(+0) | 283*a98d4661SJimmy Brisson | bl1/fconf.o | 148(+148) | 0(+0) | 0(+0) | 284*a98d4661SJimmy Brisson | bl1/fconf_dyn_cfg_getter.o | 656(+656) | 32(+32) | 144(+144) | 285*a98d4661SJimmy Brisson | bl1/fconf_tbbr_getter.o | 332(+332) | 0(+0) | 24(+24) | 286*a98d4661SJimmy Brisson | bl1/fdt_wrappers.o | 452(+452) | 0(+0) | 0(+0) | 287*a98d4661SJimmy Brisson | bl1/fvp_bl1_setup.o | 168(+168) | 0(+0) | 0(+0) | 288*a98d4661SJimmy Brisson | bl1/fvp_common.o | 512(+512) | 0(+0) | 8(+8) | 289*a98d4661SJimmy Brisson | bl1/fvp_cpu_pwr.o | 136(+136) | 0(+0) | 0(+0) | 290*a98d4661SJimmy Brisson | bl1/fvp_err.o | 44(+44) | 0(+0) | 0(+0) | 291*a98d4661SJimmy Brisson | bl1/fvp_helpers.o | 148(+148) | 0(+0) | 0(+0) | 292*a98d4661SJimmy Brisson | bl1/fvp_io_storage.o | 228(+228) | 0(+0) | 16(+16) | 293*a98d4661SJimmy Brisson | bl1/fvp_trusted_boot.o | 292(+292) | 0(+0) | 0(+0) | 294*a98d4661SJimmy Brisson | bl1/generic_delay_timer.o | 136(+136) | 0(+0) | 16(+16) | 295*a98d4661SJimmy Brisson | bl1/img_parser_mod.o | 588(+588) | 0(+0) | 20(+20) | 296*a98d4661SJimmy Brisson | bl1/io_fip.o | 1332(+1332) | 0(+0) | 100(+100) | 297*a98d4661SJimmy Brisson | bl1/io_memmap.o | 736(+736) | 16(+16) | 32(+32) | 298*a98d4661SJimmy Brisson | bl1/io_semihosting.o | 648(+648) | 16(+16) | 0(+0) | 299*a98d4661SJimmy Brisson | bl1/io_storage.o | 1268(+1268) | 0(+0) | 104(+104) | 300*a98d4661SJimmy Brisson | bl1/mbedtls_common.o | 208(+208) | 0(+0) | 4(+4) | 301*a98d4661SJimmy Brisson | bl1/mbedtls_crypto.o | 636(+636) | 0(+0) | 0(+0) | 302*a98d4661SJimmy Brisson | bl1/mbedtls_x509_parser.o | 1588(+1588) | 0(+0) | 120(+120) | 303*a98d4661SJimmy Brisson | bl1/misc_helpers.o | 392(+392) | 0(+0) | 0(+0) | 304*a98d4661SJimmy Brisson | bl1/multi_console.o | 528(+528) | 1(+1) | 8(+8) | 305*a98d4661SJimmy Brisson | bl1/pl011_console.o | 308(+308) | 0(+0) | 0(+0) | 306*a98d4661SJimmy Brisson | bl1/plat_bl1_common.o | 208(+208) | 0(+0) | 0(+0) | 307*a98d4661SJimmy Brisson | bl1/plat_bl_common.o | 40(+40) | 0(+0) | 0(+0) | 308*a98d4661SJimmy Brisson | bl1/plat_common.o | 48(+48) | 0(+0) | 8(+8) | 309*a98d4661SJimmy Brisson | bl1/plat_log_common.o | 48(+48) | 0(+0) | 0(+0) | 310*a98d4661SJimmy Brisson | bl1/plat_tbbr.o | 128(+128) | 0(+0) | 0(+0) | 311*a98d4661SJimmy Brisson | bl1/platform_helpers.o | 12(+12) | 0(+0) | 0(+0) | 312*a98d4661SJimmy Brisson | bl1/platform_up_stack.o | 16(+16) | 0(+0) | 0(+0) | 313*a98d4661SJimmy Brisson | bl1/semihosting.o | 352(+352) | 0(+0) | 0(+0) | 314*a98d4661SJimmy Brisson | bl1/semihosting_call.o | 8(+8) | 0(+0) | 0(+0) | 315*a98d4661SJimmy Brisson | bl1/smmu_v3.o | 296(+296) | 0(+0) | 0(+0) | 316*a98d4661SJimmy Brisson | bl1/sp805.o | 64(+64) | 0(+0) | 0(+0) | 317*a98d4661SJimmy Brisson | bl1/tbbr_cot_bl1.o | 0(+0) | 48(+48) | 156(+156) | 318*a98d4661SJimmy Brisson | bl1/tbbr_cot_common.o | 0(+0) | 144(+144) | 306(+306) | 319*a98d4661SJimmy Brisson | bl1/tbbr_img_desc.o | 0(+0) | 768(+768) | 0(+0) | 320*a98d4661SJimmy Brisson | bl1/tf_log.o | 200(+200) | 4(+4) | 0(+0) | 321*a98d4661SJimmy Brisson | bl1/xlat_tables_arch.o | 736(+736) | 0(+0) | 0(+0) | 322*a98d4661SJimmy Brisson | bl1/xlat_tables_context.o | 192(+192) | 96(+96) | 1296(+1296) | 323*a98d4661SJimmy Brisson | bl1/xlat_tables_core.o | 2112(+2112) | 0(+0) | 0(+0) | 324*a98d4661SJimmy Brisson | bl1/xlat_tables_utils.o | 8(+8) | 0(+0) | 0(+0) | 325*a98d4661SJimmy Brisson | lib/libc.a/assert.o | 48(+48) | 0(+0) | 0(+0) | 326*a98d4661SJimmy Brisson | lib/libc.a/exit.o | 64(+64) | 0(+0) | 8(+8) | 327*a98d4661SJimmy Brisson | lib/libc.a/memchr.o | 44(+44) | 0(+0) | 0(+0) | 328*a98d4661SJimmy Brisson | lib/libc.a/memcmp.o | 52(+52) | 0(+0) | 0(+0) | 329*a98d4661SJimmy Brisson | lib/libc.a/memcpy.o | 32(+32) | 0(+0) | 0(+0) | 330*a98d4661SJimmy Brisson | lib/libc.a/memmove.o | 52(+52) | 0(+0) | 0(+0) | 331*a98d4661SJimmy Brisson | lib/libc.a/memset.o | 140(+140) | 0(+0) | 0(+0) | 332*a98d4661SJimmy Brisson | lib/libc.a/printf.o | 1532(+1532) | 0(+0) | 0(+0) | 333*a98d4661SJimmy Brisson | lib/libc.a/snprintf.o | 1748(+1748) | 0(+0) | 0(+0) | 334*a98d4661SJimmy Brisson | lib/libc.a/strcmp.o | 44(+44) | 0(+0) | 0(+0) | 335*a98d4661SJimmy Brisson | lib/libc.a/strlen.o | 28(+28) | 0(+0) | 0(+0) | 336*a98d4661SJimmy Brisson | lib/libfdt.a/fdt.o | 1460(+1460) | 0(+0) | 0(+0) | 337*a98d4661SJimmy Brisson | lib/libfdt.a/fdt_ro.o | 1392(+1392) | 0(+0) | 0(+0) | 338*a98d4661SJimmy Brisson | lib/libfdt.a/fdt_wip.o | 244(+244) | 0(+0) | 0(+0) | 339*a98d4661SJimmy Brisson | lib/libmbedtls.a/asn1parse.o | 956(+956) | 0(+0) | 0(+0) | 340*a98d4661SJimmy Brisson | lib/libmbedtls.a/bignum.o | 6796(+6796) | 0(+0) | 0(+0) | 341*a98d4661SJimmy Brisson | lib/libmbedtls.a/bignum_core.o | 3252(+3252) | 0(+0) | 0(+0) | 342*a98d4661SJimmy Brisson | lib/libmbedtls.a/constant_time.o | 280(+280) | 0(+0) | 8(+8) | 343*a98d4661SJimmy Brisson | lib/libmbedtls.a/md.o | 504(+504) | 0(+0) | 0(+0) | 344*a98d4661SJimmy Brisson | lib/libmbedtls.a/memory_buffer_alloc.o | 1264(+1264) | 0(+0) | 40(+40) | 345*a98d4661SJimmy Brisson | lib/libmbedtls.a/oid.o | 752(+752) | 0(+0) | 0(+0) | 346*a98d4661SJimmy Brisson | lib/libmbedtls.a/pk.o | 872(+872) | 0(+0) | 0(+0) | 347*a98d4661SJimmy Brisson | lib/libmbedtls.a/pk_wrap.o | 848(+848) | 0(+0) | 0(+0) | 348*a98d4661SJimmy Brisson | lib/libmbedtls.a/pkparse.o | 516(+516) | 0(+0) | 0(+0) | 349*a98d4661SJimmy Brisson | lib/libmbedtls.a/platform.o | 92(+92) | 24(+24) | 0(+0) | 350*a98d4661SJimmy Brisson | lib/libmbedtls.a/platform_util.o | 96(+96) | 0(+0) | 0(+0) | 351*a98d4661SJimmy Brisson | lib/libmbedtls.a/rsa.o | 6588(+6588) | 0(+0) | 0(+0) | 352*a98d4661SJimmy Brisson | lib/libmbedtls.a/rsa_alt_helpers.o | 2340(+2340) | 0(+0) | 0(+0) | 353*a98d4661SJimmy Brisson | lib/libmbedtls.a/sha256.o | 1448(+1448) | 0(+0) | 0(+0) | 354*a98d4661SJimmy Brisson | lib/libmbedtls.a/x509.o | 1028(+1028) | 0(+0) | 0(+0) | 355*a98d4661SJimmy Brisson | Subtotals | 69632(+69632) | 2241(+2241) | 11264(+11264) | 356*a98d4661SJimmy Brisson Total Static RAM memory (data + bss): 13505(+13505) bytes 357*a98d4661SJimmy Brisson Total Flash memory (text + data): 71873(+71873) bytes 358*a98d4661SJimmy Brisson 359*a98d4661SJimmy BrissonA delta between two images can be generated by passing the ``--old`` option with 360*a98d4661SJimmy Brissona path to the previous map file. 361*a98d4661SJimmy Brisson 362*a98d4661SJimmy BrissonFor example: 363*a98d4661SJimmy Brisson 364*a98d4661SJimmy Brisson.. code:: 365*a98d4661SJimmy Brisson 366*a98d4661SJimmy Brisson $ poetry run memory summary ../maps/fvp-tbb-mbedtls/bl1.map --old ../maps/fvp-tbb-mbedtls/bl1.map.old -d 1 367*a98d4661SJimmy Brisson | Module | .text | .data | .bss | 368*a98d4661SJimmy Brisson |-----------|---------------|----------|--------------| 369*a98d4661SJimmy Brisson | [fill] | 780(-2424) | 0(+0) | 321(+224) | 370*a98d4661SJimmy Brisson | bl1 | 32024(+108) | 2217(+0) | 11111(+0) | 371*a98d4661SJimmy Brisson | lib | 45020(+10508) | 24(+0) | 1880(+1824) | 372*a98d4661SJimmy Brisson | Subtotals | 77824(+8192) | 2241(+0) | 13312(+2048) | 373*a98d4661SJimmy Brisson Total Static RAM memory (data + bss): 15553(+2048) bytes 374*a98d4661SJimmy Brisson Total Flash memory (text + data): 80065(+8192) bytes 375*a98d4661SJimmy Brisson 376*a98d4661SJimmy BrissonNote that since the old map file includes the required suffix, specifying the 377*a98d4661SJimmy Brisson``--old`` argument is optional here. 378*a98d4661SJimmy Brisson 379*a98d4661SJimmy BrissonUnder some circumstances, some executables are padded to meet certain 380*a98d4661SJimmy Brissonalignments, such as a 4KB page boundary, and excluding that padding can provide 381*a98d4661SJimmy Brissonmore helpful diffs. Taking the last example, and adding the ``-e`` argument 382*a98d4661SJimmy Brissonyields such a summary: 383*a98d4661SJimmy Brisson 384*a98d4661SJimmy Brisson.. code:: 385*a98d4661SJimmy Brisson 386*a98d4661SJimmy Brisson $ poetry run memory summary ../maps/fvp-tbb-mbedtls/bl1.map --old ../maps/fvp-tbb-mbedtls/bl1.map.old -d 1 -e 387*a98d4661SJimmy Brisson | Module | .text | .data | .bss | 388*a98d4661SJimmy Brisson |-----------|---------------|----------|--------------| 389*a98d4661SJimmy Brisson | bl1 | 32024(+108) | 2217(+0) | 11111(+0) | 390*a98d4661SJimmy Brisson | lib | 45020(+10508) | 24(+0) | 1880(+1824) | 391*a98d4661SJimmy Brisson | Subtotals | 77044(+10616) | 2241(+0) | 12991(+1824) | 392*a98d4661SJimmy Brisson Total Static RAM memory (data + bss): 15232(+1824) bytes 393*a98d4661SJimmy Brisson Total Flash memory (text + data): 79285(+10616) bytes 394*a98d4661SJimmy Brisson 395af5b49e9SHarrison Mutai-------------- 396af5b49e9SHarrison Mutai 397ed0c801fSChris Kay*Copyright (c) 2023-2025, Arm Limited. All rights reserved.* 398af5b49e9SHarrison Mutai 399af5b49e9SHarrison Mutai.. _Poetry: https://python-poetry.org/docs/ 400