summaryrefslogtreecommitdiffstats
path: root/shell/memory_commands.rst
diff options
context:
space:
mode:
Diffstat (limited to 'shell/memory_commands.rst')
-rw-r--r--shell/memory_commands.rst613
1 files changed, 613 insertions, 0 deletions
diff --git a/shell/memory_commands.rst b/shell/memory_commands.rst
new file mode 100644
index 0000000..0c80574
--- /dev/null
+++ b/shell/memory_commands.rst
@@ -0,0 +1,613 @@
+Memory Commands
+###############
+
+Introduction
+============
+
+The RTEMS shell has the following memory commands:
+
+- ``mdump`` - Display contents of memory
+
+- ``wdump`` - Display contents of memory (word)
+
+- ``ldump`` - Display contents of memory (longword)
+
+- ``medit`` - Modify contents of memory
+
+- ``mfill`` - File memory with pattern
+
+- ``mmove`` - Move contents of memory
+
+- ``malloc`` - Obtain information on C Program Heap
+
+Commands
+========
+
+This section details the Memory Commands available. A
+subsection is dedicated to each of the commands and
+describes the behavior and configuration of that
+command as well as providing an example usage.
+
+mdump - display contents of memory
+----------------------------------
+.. index:: mdump
+
+**SYNOPSYS:**
+
+.. code:: c
+
+ mdump \[address \[length \[size]]]
+
+**DESCRIPTION:**
+
+This command displays the contents of memory at the ``address``
+and ``length`` in ``size`` byte units specified on the command line.
+
+When ``size`` is not provided, it defaults to ``1`` byte units.
+Values of ``1``, ``2``, and ``4`` are valid; all others will
+cause an error to be reported.
+
+When ``length`` is not provided, it defaults to ``320`` which
+is twenty lines of output with sixteen bytes of output per line.
+
+When ``address`` is not provided, it defaults to ``0x00000000``.
+
+**EXIT STATUS:**
+
+This command always returns 0 to indicate success.
+
+**NOTES:**
+
+Dumping memory from a non-existent address may result in an unrecoverable
+program fault.
+
+**EXAMPLES:**
+
+The following is an example of how to use ``mdump``:
+.. code:: c
+
+ SHLL \[/] $ mdump 0x10000 32
+ 0x0001000000 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
+ 0x0001001000 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
+ SHLL \[/] $ mdump 0x02000000 32
+ 0x02000000A1 48 00 00 29 00 80 33-81 C5 22 BC A6 10 21 00 .H..)..3.."...!.
+ 0x02000010A1 48 00 00 29 00 80 33-81 C5 22 BC A6 10 21 01 .H..)..3.."...!.
+ SHLL \[/] $ mdump 0x02001000 32
+ 0x0200100003 00 80 00 82 10 60 00-81 98 40 00 83 48 00 00 ......`.....H..
+ 0x0200101084 00 60 01 84 08 A0 07-86 10 20 01 87 28 C0 02 ..`....... ..(..
+
+**CONFIGURATION:**
+
+.. index:: CONFIGURE_SHELL_NO_COMMAND_MDUMP
+.. index:: CONFIGURE_SHELL_COMMAND_MDUMP
+
+This command is included in the default shell command set.
+When building a custom command set, define``CONFIGURE_SHELL_COMMAND_MDUMP`` to have this
+command included.
+
+This command can be excluded from the shell command set by
+defining ``CONFIGURE_SHELL_NO_COMMAND_MDUMP`` when all
+shell commands have been configured.
+
+**PROGRAMMING INFORMATION:**
+
+.. index:: rtems_shell_rtems_main_mdump
+
+The ``mdump`` is implemented by a C language function
+which has the following prototype:
+.. code:: c
+
+ int rtems_shell_rtems_main_mdump(
+ int argc,
+ char \**argv
+ );
+
+The configuration structure for the ``mdump`` has the
+following prototype:
+.. code:: c
+
+ extern rtems_shell_cmd_t rtems_shell_MDUMP_Command;
+
+wdump - display contents of memory (word)
+-----------------------------------------
+.. index:: wdump
+
+**SYNOPSYS:**
+
+.. code:: c
+
+ wdump \[address \[length]]
+
+**DESCRIPTION:**
+
+This command displays the contents of memory at the ``address``
+and ``length`` in bytes specified on the command line.
+
+This command is equivalent to ``mdump address length 2``.
+
+When ``length`` is not provided, it defaults to ``320`` which
+is twenty lines of output with eight words of output per line.
+
+When ``address`` is not provided, it defaults to ``0x00000000``.
+
+**EXIT STATUS:**
+
+This command always returns 0 to indicate success.
+
+**NOTES:**
+
+Dumping memory from a non-existent address may result in an unrecoverable
+program fault.
+
+**EXAMPLES:**
+
+The following is an example of how to use ``wdump``:
+.. code:: c
+
+ SHLL \[/] $ wdump 0x02010000 32
+ 0x02010000 0201 08D8 0201 08C0-0201 08AC 0201 0874 ...............t
+ 0x02010010 0201 0894 0201 0718-0201 0640 0201 0798 ...............
+
+**CONFIGURATION:**
+
+.. index:: CONFIGURE_SHELL_NO_COMMAND_WDUMP
+.. index:: CONFIGURE_SHELL_COMMAND_WDUMP
+
+This command is included in the default shell command set.
+When building a custom command set, define``CONFIGURE_SHELL_COMMAND_WDUMP`` to have this
+command included.
+
+This command can be excluded from the shell command set by
+defining ``CONFIGURE_SHELL_NO_COMMAND_WDUMP`` when all
+shell commands have been configured.
+
+**PROGRAMMING INFORMATION:**
+
+.. index:: rtems_shell_rtems_main_wdump
+
+The ``wdump`` is implemented by a C language function
+which has the following prototype:
+.. code:: c
+
+ int rtems_shell_rtems_main_wdump(
+ int argc,
+ char \**argv
+ );
+
+The configuration structure for the ``wdump`` has the
+following prototype:
+.. code:: c
+
+ extern rtems_shell_cmd_t rtems_shell_WDUMP_Command;
+
+ldump - display contents of memory (longword)
+---------------------------------------------
+.. index:: ldump
+
+**SYNOPSYS:**
+
+.. code:: c
+
+ ldump \[address \[length]]
+
+**DESCRIPTION:**
+
+This command displays the contents of memory at the ``address``
+and ``length`` in bytes specified on the command line.
+
+This command is equivalent to ``mdump address length 4``.
+
+When ``length`` is not provided, it defaults to ``320`` which
+is twenty lines of output with four longwords of output per line.
+
+When ``address`` is not provided, it defaults to ``0x00000000``.
+
+**EXIT STATUS:**
+
+This command always returns 0 to indicate success.
+
+**NOTES:**
+
+Dumping memory from a non-existent address may result in an unrecoverable
+program fault.
+
+**EXAMPLES:**
+
+The following is an example of how to use ``ldump``:
+.. code:: c
+
+ SHLL \[/] $ ldump 0x02010000 32
+ 0x02010000 020108D8 020108C0-020108AC 02010874 ...............t
+ 0x02010010 020 0894 02010718-02010640 02010798 ...............
+
+**CONFIGURATION:**
+
+.. index:: CONFIGURE_SHELL_NO_COMMAND_LDUMP
+.. index:: CONFIGURE_SHELL_COMMAND_LDUMP
+
+This command is included in the default shell command set.
+When building a custom command set, define``CONFIGURE_SHELL_COMMAND_LDUMP`` to have this
+command included.
+
+This command can be excluded from the shell command set by
+defining ``CONFIGURE_SHELL_NO_COMMAND_LDUMP`` when all
+shell commands have been configured.
+
+**PROGRAMMING INFORMATION:**
+
+.. index:: rtems_shell_rtems_main_ldump
+
+The ``ldump`` is implemented by a C language function
+which has the following prototype:
+.. code:: c
+
+ int rtems_shell_rtems_main_ldump(
+ int argc,
+ char \**argv
+ );
+
+The configuration structure for the ``ldump`` has the
+following prototype:
+.. code:: c
+
+ extern rtems_shell_cmd_t rtems_shell_LDUMP_Command;
+
+medit - modify contents of memory
+---------------------------------
+.. index:: medit
+
+**SYNOPSYS:**
+
+.. code:: c
+
+ medit address value1 \[value2 ... valueN]
+
+**DESCRIPTION:**
+
+This command is used to modify the contents of the memory starting
+at ``address`` using the octets specified by the parameters``value1`` through ``valueN``.
+
+**EXIT STATUS:**
+
+This command returns 0 on success and non-zero if an error is encountered.
+
+**NOTES:**
+
+Dumping memory from a non-existent address may result in an unrecoverable
+program fault.
+
+**EXAMPLES:**
+
+The following is an example of how to use ``medit``:
+.. code:: c
+
+ SHLL \[/] $ mdump 0x02000000 32
+ 0x02000000 A1 48 00 00 29 00 80 33-81 C5 22 BC A6 10 21 00 .H..)..3.."...!.
+ 0x02000010 A1 48 00 00 29 00 80 33-81 C5 22 BC A6 10 21 01 .H..)..3.."...!.
+ SHLL \[/] $ medit 0x02000000 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09
+ SHLL \[/] $ mdump 0x02000000 32
+ 0x02000000 01 02 03 04 05 06 07 08-09 00 22 BC A6 10 21 00 .........."...!.
+ 0x02000010 A1 48 00 00 29 00 80 33-81 C5 22 BC A6 10 21 01 .H..)..3.."...!.
+
+**CONFIGURATION:**
+
+.. index:: CONFIGURE_SHELL_NO_COMMAND_MEDIT
+.. index:: CONFIGURE_SHELL_COMMAND_MEDIT
+
+This command is included in the default shell command set.
+When building a custom command set, define``CONFIGURE_SHELL_COMMAND_MEDIT`` to have this
+command included.
+
+This command can be excluded from the shell command set by
+defining ``CONFIGURE_SHELL_NO_COMMAND_MEDIT`` when all
+shell commands have been configured.
+
+**PROGRAMMING INFORMATION:**
+
+.. index:: rtems_shell_rtems_main_medit
+
+The ``medit`` is implemented by a C language function
+which has the following prototype:
+.. code:: c
+
+ int rtems_shell_rtems_main_medit(
+ int argc,
+ char \**argv
+ );
+
+The configuration structure for the ``medit`` has the
+following prototype:
+.. code:: c
+
+ extern rtems_shell_cmd_t rtems_shell_MEDIT_Command;
+
+mfill - file memory with pattern
+--------------------------------
+.. index:: mfill
+
+**SYNOPSYS:**
+
+.. code:: c
+
+ mfill address length value
+
+**DESCRIPTION:**
+
+This command is used to fill the memory starting at ``address``
+for the specified ``length`` in octets when the specified at``value``.
+
+**EXIT STATUS:**
+
+This command returns 0 on success and non-zero if an error is encountered.
+
+**NOTES:**
+
+Filling a non-existent address range may result in an unrecoverable
+program fault. Similarly overwriting interrupt vector tables, code
+space or critical data areas can be fatal as shown in the example.
+
+**EXAMPLES:**
+
+In this example, the address used (``0x23d89a0``) as the base
+address of the filled area is the end of the stack for the
+Idle thread. This address was determined manually using gdb and
+is very specific to this application and BSP. The first command
+in this example is an ``mdump`` to display the initial contents
+of this memory. We see that the first 8 bytes are 0xA5 which is
+the pattern used as a guard by the Stack Checker. On
+the first context switch after the pattern is overwritten
+by the ``mfill`` command, the Stack Checker detect the pattern
+has been corrupted and generates a fatal error.
+.. code:: c
+
+ SHLL \[/] $ mdump 0x23d89a0 16
+ 0x023D89A0 A5 A5 A5 A5 A5 A5 A5 A5-FE ED F0 0D 0B AD 0D 06 ................
+ SHLL \[/] $ mfill 0x23d89a0 13 0x5a
+ SHLL \[/] $ BLOWN STACK!!! Offending task(0x23D4418): id=0x09010001; name=0x0203D908
+ stack covers range 0x23D89A0 - 0x23D99AF (4112 bytes)
+ Damaged pattern begins at 0x023D89A8 and is 16 bytes long
+
+**CONFIGURATION:**
+
+.. index:: CONFIGURE_SHELL_NO_COMMAND_MFILL
+.. index:: CONFIGURE_SHELL_COMMAND_MFILL
+
+This command is included in the default shell command set.
+When building a custom command set, define``CONFIGURE_SHELL_COMMAND_MFILL`` to have this
+command included.
+
+This command can be excluded from the shell command set by
+defining ``CONFIGURE_SHELL_NO_COMMAND_MFILL`` when all
+shell commands have been configured.
+
+**PROGRAMMING INFORMATION:**
+
+.. index:: rtems_shell_rtems_main_mfill
+
+The ``mfill`` is implemented by a C language function
+which has the following prototype:
+.. code:: c
+
+ int rtems_shell_rtems_main_mfill(
+ int argc,
+ char \**argv
+ );
+
+The configuration structure for the ``mfill`` has the
+following prototype:
+.. code:: c
+
+ extern rtems_shell_cmd_t rtems_shell_MFILL_Command;
+
+mmove - move contents of memory
+-------------------------------
+.. index:: mmove
+
+**SYNOPSYS:**
+
+.. code:: c
+
+ mmove dst src length
+
+**DESCRIPTION:**
+
+This command is used to copy the contents of the memory
+starting at ``src`` to the memory located at ``dst``
+for the specified ``length`` in octets.
+
+**EXIT STATUS:**
+
+This command returns 0 on success and non-zero if an error is encountered.
+
+**NOTES:**
+
+NONE
+
+**EXAMPLES:**
+
+The following is an example of how to use ``mmove``:
+.. code:: c
+
+ SHLL \[/] $ mdump 0x023d99a0 16
+ 0x023D99A0 A5 A5 A5 A5 A5 A5 A5 A5-A5 A5 A5 A5 A5 A5 A5 A5 ................
+ SHLL \[/] $ mdump 0x02000000 16
+ 0x02000000 A1 48 00 00 29 00 80 33-81 C5 22 BC A6 10 21 00 .H..)..3.."...!.
+ SHLL \[/] $ mmove 0x023d99a0 0x02000000 13
+ SHLL \[/] $ mdump 0x023d99a0 16
+ 0x023D99A0 A1 48 00 00 29 00 80 33-81 C5 22 BC A6 A5 A5 A5 .H..)..3..".....
+
+**CONFIGURATION:**
+
+.. index:: CONFIGURE_SHELL_NO_COMMAND_MMOVE
+.. index:: CONFIGURE_SHELL_COMMAND_MMOVE
+
+This command is included in the default shell command set.
+When building a custom command set, define``CONFIGURE_SHELL_COMMAND_MMOVE`` to have this
+command included.
+
+This command can be excluded from the shell command set by
+defining ``CONFIGURE_SHELL_NO_COMMAND_MMOVE`` when all
+shell commands have been configured.
+
+**PROGRAMMING INFORMATION:**
+
+.. index:: rtems_shell_rtems_main_mmove
+
+The ``mmove`` is implemented by a C language function
+which has the following prototype:
+.. code:: c
+
+ int rtems_shell_rtems_main_mmove(
+ int argc,
+ char \**argv
+ );
+
+The configuration structure for the ``mmove`` has the
+following prototype:
+.. code:: c
+
+ extern rtems_shell_cmd_t rtems_shell_MMOVE_Command;
+
+malloc - obtain information on C program heap
+---------------------------------------------
+.. index:: malloc
+
+**SYNOPSYS:**
+
+.. code:: c
+
+ malloc \[walk]
+
+**DESCRIPTION:**
+
+This command prints information about the current state of the C Program Heap
+used by the ``malloc()`` family of calls if no or invalid options are passed
+to the command. This includes the following information:
+
+- Number of free blocks
+
+- Largest free block
+
+- Total bytes free
+
+- Number of used blocks
+
+- Largest used block
+
+- Total bytes used
+
+- Size of the allocatable area in bytes
+
+- Minimum free size ever in bytes
+
+- Maximum number of free blocks ever
+
+- Maximum number of blocks searched ever
+
+- Lifetime number of bytes allocated
+
+- Lifetime number of bytes freed
+
+- Total number of searches
+
+- Total number of successful allocations
+
+- Total number of failed allocations
+
+- Total number of successful frees
+
+- Total number of successful resizes
+
+When the subcommand ``walk`` is specified, then a heap walk will be
+performed and information about each block is printed out.
+
+**EXIT STATUS:**
+
+This command returns 0 on success and non-zero if an error is encountered.
+
+**NOTES:**
+
+NONE
+
+**EXAMPLES:**
+
+The following is an example of how to use the ``malloc`` command.
+.. code:: c
+
+ SHLL \[/] $ malloc
+ C Program Heap and RTEMS Workspace are the same.
+ Number of free blocks: 2
+ Largest free block: 266207504
+ Total bytes free: 266208392
+ Number of used blocks: 167
+ Largest used block: 16392
+ Total bytes used: 83536
+ Size of the allocatable area in bytes: 266291928
+ Minimum free size ever in bytes: 266207360
+ Maximum number of free blocks ever: 6
+ Maximum number of blocks searched ever: 5
+ Lifetime number of bytes allocated: 91760
+ Lifetime number of bytes freed: 8224
+ Total number of searches: 234
+ Total number of successful allocations: 186
+ Total number of failed allocations: 0
+ Total number of successful frees: 19
+ Total number of successful resizes: 0
+ SHLL \[/] $ malloc walk
+ malloc walk
+ PASS[0]: page size 8, min block size 48
+ area begin 0x00210210, area end 0x0FFFC000
+ first block 0x00210214, last block 0x0FFFBFDC
+ first free 0x00228084, last free 0x00228354
+ PASS[0]: block 0x00210214: size 88
+ ...
+ PASS[0]: block 0x00220154: size 144
+ PASS[0]: block 0x002201E4: size 168, prev 0x002205BC, next 0x00228354 (= last free)
+ PASS[0]: block 0x0022028C: size 168, prev_size 168
+ ...
+ PASS[0]: block 0x00226E7C: size 4136
+ PASS[0]: block 0x00227EA4: size 408, prev 0x00228084 (= first free), next 0x00226CE4
+ PASS[0]: block 0x0022803C: size 72, prev_size 408
+ PASS[0]: block 0x00228084: size 648, prev 0x0020F75C (= head), next 0x00227EA4
+ PASS[0]: block 0x0022830C: size 72, prev_size 648
+ PASS[0]: block 0x00228354: size 266157192, prev 0x002201E4, next 0x0020F75C (= tail)
+ PASS[0]: block 0x0FFFBFDC: size 4028711480, prev_size 266157192
+
+**CONFIGURATION:**
+
+.. index:: CONFIGURE_SHELL_NO_COMMAND_MALLOC
+.. index:: CONFIGURE_SHELL_COMMAND_MALLOC
+
+This command is included in the default shell command set.
+When building a custom command set, define``CONFIGURE_SHELL_COMMAND_MALLOC`` to have this
+command included.
+
+This command can be excluded from the shell command set by
+defining ``CONFIGURE_SHELL_NO_COMMAND_MALLOC`` when all
+shell commands have been configured.
+
+**PROGRAMMING INFORMATION:**
+
+.. index:: rtems_shell_rtems_main_malloc
+
+The ``malloc`` is implemented by a C language function
+which has the following prototype:
+.. code:: c
+
+ int rtems_shell_rtems_main_malloc(
+ int argc,
+ char \**argv
+ );
+
+The configuration structure for the ``malloc`` has the
+following prototype:
+.. code:: c
+
+ extern rtems_shell_cmd_t rtems_shell_MALLOC_Command;
+
+.. COMMENT: COPYRIGHT (c) 1988-2008.
+
+.. COMMENT: On-Line Applications Research Corporation (OAR).
+
+.. COMMENT: All rights reserved.
+