xref: /rk3399_ARM-atf/docs/tools/memory-layout-tool.rst (revision d8fdff38b544b79c4f0b757e3b3c82ce9c8a2f9e)
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