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 26af5b49e9SHarrison Mutai poetry install --with memory 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 44af5b49e9SHarrison Mutai $ poetry run memory -s 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 119d9d5eb13SHarrison MutaiThe tool enables users to view static memory consumption. When the options 120d9d5eb13SHarrison Mutai``-f``, or ``--footprint`` are provided, the script analyses the ELF binaries in 121d9d5eb13SHarrison Mutaithe build path to generate a table (per memory type), showing memory allocation 122d9d5eb13SHarrison Mutaiand usage. This is the default output generated by the tool. 123d9d5eb13SHarrison Mutai 124d9d5eb13SHarrison Mutai.. code:: shell 125d9d5eb13SHarrison Mutai 126d9d5eb13SHarrison Mutai $ poetry run memory -f 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 150*cc60aba2SHarrison MutaiMemory Tree 151*cc60aba2SHarrison Mutai~~~~~~~~~~~ 152*cc60aba2SHarrison Mutai 153*cc60aba2SHarrison MutaiA hierarchical view of the memory layout can be produced by passing the option 154*cc60aba2SHarrison Mutai``-t`` or ``--tree`` to the tool. This gives the start, end, and size of each 155*cc60aba2SHarrison Mutaimodule, their ELF segments as well as sections. 156*cc60aba2SHarrison Mutai 157*cc60aba2SHarrison Mutai.. code:: shell 158*cc60aba2SHarrison Mutai 159*cc60aba2SHarrison Mutai $ poetry run memory -t 160*cc60aba2SHarrison Mutai build-path: build/fvp/release 161*cc60aba2SHarrison Mutai name start end size 162*cc60aba2SHarrison Mutai bl1 0 400c000 400c000 163*cc60aba2SHarrison Mutai ├── 00 0 5de0 5de0 164*cc60aba2SHarrison Mutai │ ├── .text 0 5000 5000 165*cc60aba2SHarrison Mutai │ └── .rodata 5000 5de0 de0 166*cc60aba2SHarrison Mutai ├── 01 4034000 40344c5 4c5 167*cc60aba2SHarrison Mutai │ └── .data 4034000 40344c5 4c5 168*cc60aba2SHarrison Mutai ├── 02 4034500 4034a00 500 169*cc60aba2SHarrison Mutai │ └── .stacks 4034500 4034a00 500 170*cc60aba2SHarrison Mutai ├── 04 4034a00 4035600 c00 171*cc60aba2SHarrison Mutai │ └── .bss 4034a00 4035600 c00 172*cc60aba2SHarrison Mutai └── 03 4036000 403b000 5000 173*cc60aba2SHarrison Mutai └── .xlat_table 4036000 403b000 5000 174*cc60aba2SHarrison Mutai bl2 4021000 4034000 13000 175*cc60aba2SHarrison Mutai ├── 00 4021000 4027000 6000 176*cc60aba2SHarrison Mutai │ ├── .text 4021000 4026000 5000 177*cc60aba2SHarrison Mutai │ └── .rodata 4026000 4027000 1000 178*cc60aba2SHarrison Mutai └── 01 4027000 402e000 7000 179*cc60aba2SHarrison Mutai ├── .data 4027000 4027809 809 180*cc60aba2SHarrison Mutai ├── .stacks 4027840 4027e40 600 181*cc60aba2SHarrison Mutai ├── .bss 4028000 4028800 800 182*cc60aba2SHarrison Mutai └── .xlat_table 4029000 402e000 5000 183*cc60aba2SHarrison Mutai bl2u 4021000 4034000 13000 184*cc60aba2SHarrison Mutai ├── 00 4021000 4025000 4000 185*cc60aba2SHarrison Mutai │ ├── .text 4021000 4024000 3000 186*cc60aba2SHarrison Mutai │ └── .rodata 4024000 4025000 1000 187*cc60aba2SHarrison Mutai └── 01 4025000 402b000 6000 188*cc60aba2SHarrison Mutai ├── .data 4025000 4025065 65 189*cc60aba2SHarrison Mutai ├── .stacks 4025080 4025480 400 190*cc60aba2SHarrison Mutai ├── .bss 4025600 4025c00 600 191*cc60aba2SHarrison Mutai └── .xlat_table 4026000 402b000 5000 192*cc60aba2SHarrison Mutai bl31 4003000 4040000 3d000 193*cc60aba2SHarrison Mutai ├── 02 ffe00000 ffe03000 3000 194*cc60aba2SHarrison Mutai │ └── .el3_tzc_dram ffe00000 ffe03000 3000 195*cc60aba2SHarrison Mutai ├── 00 4003000 4010000 d000 196*cc60aba2SHarrison Mutai │ └── .text 4003000 4010000 d000 197*cc60aba2SHarrison Mutai └── 01 4010000 4021000 11000 198*cc60aba2SHarrison Mutai ├── .rodata 4010000 4012000 2000 199*cc60aba2SHarrison Mutai ├── .data 4012000 401219d 19d 200*cc60aba2SHarrison Mutai ├── .stacks 40121c0 40161c0 4000 201*cc60aba2SHarrison Mutai ├── .bss 4016200 4018c00 2a00 202*cc60aba2SHarrison Mutai ├── .xlat_table 4019000 4020000 7000 203*cc60aba2SHarrison Mutai └── .coherent_ram 4020000 4021000 1000 204*cc60aba2SHarrison Mutai 205*cc60aba2SHarrison Mutai 206*cc60aba2SHarrison MutaiThe granularity of this view can be modified with the ``--depth`` option. For 207*cc60aba2SHarrison Mutaiinstance, if you only require the tree up to the level showing segment data, 208*cc60aba2SHarrison Mutaiyou can specify the depth with: 209*cc60aba2SHarrison Mutai 210*cc60aba2SHarrison Mutai.. code:: 211*cc60aba2SHarrison Mutai 212*cc60aba2SHarrison Mutai $ poetry run memory -t --depth 2 213*cc60aba2SHarrison Mutai build-path: build/fvp/release 214*cc60aba2SHarrison Mutai name start end size 215*cc60aba2SHarrison Mutai bl1 0 400c000 400c000 216*cc60aba2SHarrison Mutai ├── 00 0 5df0 5df0 217*cc60aba2SHarrison Mutai ├── 01 4034000 40344c5 4c5 218*cc60aba2SHarrison Mutai ├── 02 4034500 4034a00 500 219*cc60aba2SHarrison Mutai ├── 04 4034a00 4035600 c00 220*cc60aba2SHarrison Mutai └── 03 4036000 403b000 5000 221*cc60aba2SHarrison Mutai bl2 4021000 4034000 13000 222*cc60aba2SHarrison Mutai ├── 00 4021000 4027000 6000 223*cc60aba2SHarrison Mutai └── 01 4027000 402e000 7000 224*cc60aba2SHarrison Mutai bl2u 4021000 4034000 13000 225*cc60aba2SHarrison Mutai ├── 00 4021000 4025000 4000 226*cc60aba2SHarrison Mutai └── 01 4025000 402b000 6000 227*cc60aba2SHarrison Mutai bl31 4003000 4040000 3d000 228*cc60aba2SHarrison Mutai ├── 02 ffe00000 ffe03000 3000 229*cc60aba2SHarrison Mutai ├── 00 4003000 4010000 d000 230*cc60aba2SHarrison Mutai └── 01 4010000 4021000 11000 231*cc60aba2SHarrison Mutai 232af5b49e9SHarrison Mutai-------------- 233af5b49e9SHarrison Mutai 234af5b49e9SHarrison Mutai*Copyright (c) 2023, Arm Limited. All rights reserved.* 235af5b49e9SHarrison Mutai 236af5b49e9SHarrison Mutai.. _Poetry: https://python-poetry.org/docs/ 237