Harrison Mutai | e9bc488 | 2023-02-23 10:33:58 +0000 | [diff] [blame] | 1 | TF-A Memory Layout Tool |
| 2 | ======================= |
| 3 | |
| 4 | TF-A's memory layout tool is a Python script for analyzing the virtual |
| 5 | memory layout of TF-A builds. |
| 6 | |
| 7 | Prerequisites |
| 8 | ~~~~~~~~~~~~~ |
| 9 | |
| 10 | #. Python (3.8 or later) |
| 11 | #. `Poetry`_ Python package manager |
| 12 | |
| 13 | Getting Started |
| 14 | ~~~~~~~~~~~~~~~ |
| 15 | |
| 16 | #. Install Poetry |
| 17 | |
| 18 | .. code:: shell |
| 19 | |
| 20 | curl -sSL https://install.python-poetry.org | python3 - |
| 21 | |
| 22 | #. Install the required packages |
| 23 | |
| 24 | .. code:: shell |
| 25 | |
| 26 | poetry install --with memory |
| 27 | |
| 28 | #. Verify that the tool runs in the installed virtual environment |
| 29 | |
| 30 | .. code:: shell |
| 31 | |
| 32 | poetry run memory --help |
| 33 | |
| 34 | Symbol Virtual Map |
| 35 | ~~~~~~~~~~~~~~~~~~ |
| 36 | |
| 37 | The tool can be used to generate a visualisation of the symbol table. By |
| 38 | default, it prints the symbols representing the start and end address of the |
| 39 | main memory regions in an ELF file (i.e. text, bss, rodata) but can be modified |
| 40 | to print any set of symbols. |
| 41 | |
| 42 | .. code:: shell |
| 43 | |
| 44 | $ poetry run memory -s |
| 45 | build-path: build/fvp/release |
| 46 | Virtual Address Map: |
| 47 | +------------__BL1_RAM_END__------------+---------------------------------------+ |
| 48 | +---------__COHERENT_RAM_END__----------+ | |
| 49 | +--------__COHERENT_RAM_START__---------+ | |
| 50 | 0x0403b000 +----------__XLAT_TABLE_END__-----------+ | |
| 51 | 0x04036000 +---------__XLAT_TABLE_START__----------+ | |
| 52 | +--------__BASE_XLAT_TABLE_END__--------+ | |
| 53 | 0x04035600 +--------------__BSS_END__--------------+ | |
| 54 | +-------__BASE_XLAT_TABLE_START__-------+ | |
| 55 | +-----__PMF_PERCPU_TIMESTAMP_END__------+ | |
| 56 | +---------__PMF_TIMESTAMP_END__---------+ | |
| 57 | 0x04035400 +--------__PMF_TIMESTAMP_START__--------+ | |
| 58 | +-------------__BSS_START__-------------+ | |
| 59 | 0x04034a00 +------------__STACKS_END__-------------+ | |
| 60 | 0x04034500 +-----------__STACKS_START__------------+ | |
| 61 | 0x040344c5 +-----------__DATA_RAM_END__------------+ | |
| 62 | +-----------__BL1_RAM_START__-----------+ | |
| 63 | 0x04034000 +----------__DATA_RAM_START__-----------+ | |
| 64 | | +---------__COHERENT_RAM_END__----------+ |
| 65 | | +--------__COHERENT_RAM_START__---------+ |
| 66 | 0x0402e000 | +----------__XLAT_TABLE_END__-----------+ |
| 67 | 0x04029000 | +---------__XLAT_TABLE_START__----------+ |
| 68 | | +--------__BASE_XLAT_TABLE_END__--------+ |
| 69 | 0x04028800 | +--------------__BSS_END__--------------+ |
| 70 | | +-------__BASE_XLAT_TABLE_START__-------+ |
| 71 | | +-----__PMF_PERCPU_TIMESTAMP_END__------+ |
| 72 | | +---------__PMF_TIMESTAMP_END__---------+ |
| 73 | 0x04028580 | +--------__PMF_TIMESTAMP_START__--------+ |
| 74 | 0x04028000 | +-------------__BSS_START__-------------+ |
| 75 | 0x04027e40 | +------------__STACKS_END__-------------+ |
| 76 | 0x04027840 | +-----------__STACKS_START__------------+ |
| 77 | 0x04027000 | +------------__RODATA_END__-------------+ |
| 78 | | +------------__CPU_OPS_END__------------+ |
| 79 | | +-----------__CPU_OPS_START__-----------+ |
| 80 | | +--------__FCONF_POPULATOR_END__--------+ |
| 81 | | +--------------__GOT_END__--------------+ |
| 82 | | +-------------__GOT_START__-------------+ |
| 83 | | +---------__PMF_SVC_DESCS_END__---------+ |
| 84 | 0x04026c10 | +--------__PMF_SVC_DESCS_START__--------+ |
| 85 | 0x04026bf8 | +-------__FCONF_POPULATOR_START__-------+ |
| 86 | | +-----------__RODATA_START__------------+ |
| 87 | 0x04026000 | +-------------__TEXT_END__--------------+ |
| 88 | 0x04021000 | +------------__TEXT_START__-------------+ |
| 89 | 0x000062b5 +------------__BL1_ROM_END__------------+ | |
| 90 | 0x00005df0 +----------__DATA_ROM_START__-----------+ | |
| 91 | +------------__CPU_OPS_END__------------+ | |
| 92 | +--------------__GOT_END__--------------+ | |
| 93 | +-------------__GOT_START__-------------+ | |
| 94 | 0x00005de8 +------------__RODATA_END__-------------+ | |
| 95 | +-----------__CPU_OPS_START__-----------+ | |
| 96 | +--------__FCONF_POPULATOR_END__--------+ | |
| 97 | +---------__PMF_SVC_DESCS_END__---------+ | |
| 98 | 0x00005c98 +--------__PMF_SVC_DESCS_START__--------+ | |
| 99 | 0x00005c80 +-------__FCONF_POPULATOR_START__-------+ | |
| 100 | +-----------__RODATA_START__------------+ | |
| 101 | 0x00005000 +-------------__TEXT_END__--------------+ | |
| 102 | 0x00000000 +------------__TEXT_START__-------------+---------------------------------------+ |
| 103 | |
| 104 | Addresses are displayed in hexadecimal by default but can be printed in decimal |
| 105 | instead with the ``-d`` option. |
| 106 | |
| 107 | Because of the length of many of the symbols, the tool defaults to a text width |
| 108 | of 120 chars. This can be increased if needed with the ``-w`` option. |
| 109 | |
| 110 | For more detailed help instructions, run: |
| 111 | |
| 112 | .. code:: shell |
| 113 | |
| 114 | poetry run memory --help |
| 115 | |
| 116 | -------------- |
| 117 | |
| 118 | *Copyright (c) 2023, Arm Limited. All rights reserved.* |
| 119 | |
| 120 | .. _Poetry: https://python-poetry.org/docs/ |