User Guide 101470 2021-0 00 en
User Guide 101470 2021-0 00 en
User Guide 101470 2021-0 00 en
Version 2021.0
User Guide
Document History
Your access to the information in this document is conditional upon your acceptance that you will not use or permit others to use
the information for the purposes of determining whether implementations infringe any third party patents.
THIS DOCUMENT IS PROVIDED “AS IS”. ARM PROVIDES NO REPRESENTATIONS AND NO WARRANTIES,
EXPRESS, IMPLIED OR STATUTORY, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
MERCHANTABILITY, SATISFACTORY QUALITY, NON-INFRINGEMENT OR FITNESS FOR A PARTICULAR PURPOSE
WITH RESPECT TO THE DOCUMENT. For the avoidance of doubt, Arm makes no representation with respect to, and has
undertaken no analysis to identify or understand the scope and content of, third party patents, copyrights, trade secrets, or other
rights.
TO THE EXTENT NOT PROHIBITED BY LAW, IN NO EVENT WILL ARM BE LIABLE FOR ANY DAMAGES,
INCLUDING WITHOUT LIMITATION ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE, OR
CONSEQUENTIAL DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING
OUT OF ANY USE OF THIS DOCUMENT, EVEN IF ARM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.
This document consists solely of commercial items. You shall be responsible for ensuring that any use, duplication or disclosure of
this document complies fully with any relevant export laws and regulations to assure that this document or any portion thereof is
not exported, directly or indirectly, in violation of such export laws. Use of the word “partner” in reference to Arm’s customers is
not intended to create or refer to any partnership relationship with any other company. Arm may make changes to this document at
any time and without notice.
If any of the provisions contained in these terms conflict with any of the provisions of any click through or signed written
agreement covering this document with Arm, then the click through or signed written agreement prevails over and supersedes the
conflicting provisions of these terms. This document may be translated into other languages for convenience, and you agree that if
there is any conflict between the English version of this document and any translation, the terms of the English version of the
Agreement shall prevail.
The Arm corporate logo and words marked with ® or ™ are registered trademarks or trademarks of Arm Limited (or its
subsidiaries) in the US and/or elsewhere. All rights reserved. Other brands and names mentioned in this document may be the
trademarks of their respective owners. Please follow Arm’s trademark usage guidelines at http://www.arm.com/company/policies/
trademarks.
Copyright © 2018–2021 Arm Limited (or its affiliates). All rights reserved.
(LES-PRE-20349)
Confidentiality Status
This document is Non-Confidential. The right to use, copy and disclose this document may be subject to license restrictions in
accordance with the terms of the agreement entered into by Arm and the party that Arm delivered this document to.
This document includes terms that can be offensive. We will replace these terms in a future issue of this document.
Preface
About this book ..................................................... ..................................................... 20
Chapter 17 Troubleshooting
17.1 Arm Linux problems and solutions ................................... ................................... 17-553
17.2 Enabling internal logging from the debugger ........................... ........................... 17-554
17.3 FTDI probe: Incompatible driver error ................................ ................................ 17-555
17.4 Target connection problems and solutions .......................................................... 17-556
Chapter 21 Reference
21.1 About loading an image on to the target .............................................................. 21-666
21.2 About loading debug information into the debugger ............................................ 21-668
21.3 About passing arguments to main() .................................. .................................. 21-670
21.4 Updating multiple debug hardware units .............................. .............................. 21-671
21.5 Standards compliance in Arm® Debugger ............................. ............................. 21-672
21.6 Arm® Development Studio IDE analytics data points ..................... ..................... 21-673
21.7 Arm® Debugger analytics data points .................................................................. 21-674
21.8 Development Studio perspective keyboard shortcuts .................... .................... 21-677
Glossary
The Arm® Glossary is a list of terms used in Arm documentation, together with definitions for those
terms. The Arm Glossary does not contain terms that are industry standard unless the Arm meaning
differs from the generally accepted meaning.
See the Arm® Glossary for more information.
Typographic conventions
italic
Introduces special terminology, denotes cross-references, and citations.
bold
Highlights interface elements, such as menu names. Denotes signal names. Also used for terms
in descriptive lists, where appropriate.
monospace
Denotes text that you can enter at the keyboard, such as commands, file and program names,
and source code.
monospace
Denotes a permitted abbreviation for a command or option. You can enter the underlined text
instead of the full command or option name.
monospace italic
Denotes arguments to monospace text where the argument is to be replaced by a specific value.
monospace bold
Denotes language keywords when used outside example code.
<and>
Encloses replaceable terms for assembler syntax where they appear in code or code fragments.
For example:
MRC p15, 0, <Rd>, <CRn>, <CRm>, <Opcode_2>
SMALL CAPITALS
Used in body text for a few terms that have specific technical meanings, that are defined in the
Arm® Glossary. For example, IMPLEMENTATION DEFINED, IMPLEMENTATION SPECIFIC, UNKNOWN, and
UNPREDICTABLE.
Feedback
Feedback on content
If you have comments on content then send an e-mail to errata@arm.com. Give:
• The title Arm Development Studio User Guide.
• The number 101470_2021.0_00_en.
• If applicable, the page number(s) to which your comments refer.
• A concise explanation of your comments.
Arm also welcomes general suggestions for additions and improvements.
Note
Arm tests the PDF only in Adobe Acrobat and Acrobat Reader, and cannot guarantee the quality of the
represented document when used with any other PDF reader.
Other information
• Arm® Developer.
• Arm® Documentation.
• Technical Support.
• Arm® Glossary.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 1-23
reserved.
Non-Confidential
1 Configure Arm® Development Studio
1.1 Examples provided with Arm® Development Studio
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 1-24
reserved.
Non-Confidential
1 Configure Arm® Development Studio
1.2 Import the example projects
Procedure
1. Launch Arm Development Studio IDE.
2. Arm recommends that you create another workspace for example projects, so that they remain
separate from your own projects. To do this, select File > Switch Workspace > Other > Browse >
Make new folder, and enter a suitable name.
Result: Arm Development Studio IDE relaunches.
3. In the main menu, select File > Import....
4. Expand the Arm Development Studio group, select Examples and Programming Libraries and
click Next.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 1-25
reserved.
Non-Confidential
1 Configure Arm® Development Studio
1.2 Import the example projects
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 1-26
reserved.
Non-Confidential
1 Configure Arm® Development Studio
1.3 Configuring an RSE connection to work with an Arm Linux target
Procedure
1. In the Remote Systems view, click the Define a connection to remote system option on the toolbar.
2. In the Select Remote System Type dialog box, expand the General group and select SSH Only.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 1-27
reserved.
Non-Confidential
1 Configure Arm® Development Studio
1.3 Configuring an RSE connection to work with an Arm Linux target
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 1-28
reserved.
Non-Confidential
1 Configure Arm® Development Studio
1.3 Configuring an RSE connection to work with an Arm Linux target
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 1-29
reserved.
Non-Confidential
1 Configure Arm® Development Studio
1.3 Configuring an RSE connection to work with an Arm Linux target
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 1-30
reserved.
Non-Confidential
1 Configure Arm® Development Studio
1.3 Configuring an RSE connection to work with an Arm Linux target
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 1-31
reserved.
Non-Confidential
1 Configure Arm® Development Studio
1.4 Launching gdbserver with an application
Procedure
1. Open a terminal shell that is connected to the target.
2. In the Remote Systems view, right-click on Ssh Terminals.
3. Select Launch Terminal to open a terminal shell.
4. In the terminal shell, navigate to the directory where you copied the application, then execute the
required commands.
The following example shows the commands used to launch the Gnometris application.
export DISPLAY=ip:0.0
gdbserver :port gnometris
Where:
ip
is the connection port between gdbserver and the application, for example 5000.
Note
If the target has a display connected to it, you do not need to use the export DISPLAY command.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 1-32
reserved.
Non-Confidential
1 Configure Arm® Development Studio
1.5 Register a compiler toolchain
1.5.1 Registering a compiler toolchain using the Arm® Development Studio IDE
You can register compiler toolchains using the Preferences dialog box in Arm Development Studio.
Procedure
1. Open the Toolchains tab in the Preferences dialog box; Windows > Preferences > Arm DS >
Toolchains. Here, you can see the compiler toolchains that Arm DS currently knows about,
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 1-33
reserved.
Non-Confidential
1 Configure Arm® Development Studio
1.5 Register a compiler toolchain
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 1-34
reserved.
Non-Confidential
1 Configure Arm® Development Studio
1.5 Register a compiler toolchain
Note
You must manually enter the toolchain properties if:
• The toolchain properties were not autodetected.
• The family, major version, and minor version of the new toolchain are identical to a toolchain that
Arm DS already knows about.
Procedure
1. At the command prompt, enter add_toolchain <path>, where <path> is the directory containing the
toolchain binaries. The utility automatically detects the toolchain properties.
Note
By default, the add_toolchain utility is an interactive tool. To use the add_toochain utility as a
non-interactive tool, add the --non-interactive option to the command.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 1-35
reserved.
Non-Confidential
1 Configure Arm® Development Studio
1.5 Register a compiler toolchain
2. The utility prompts whether you want to register the toolchain with the details it has detected. If you
want to change the details, the utility prompts for the details of the toolchain.
3. Restart Arm Development Studio. You must do this before you can use the toolchain in the Arm DS
environment.
Note
• The toolchain target only applies to GCC toolchains. It indicates what target platform the GCC
toolchain builds for. For example, if your compiler toolchain binary is named arm-linux-
gnueabihf-gcc, then the target name is the prefix arm-linux-gnueabihf. The target field allows
Arm DS to distinguish different toolchains that otherwise have the same version.
• You must manually enter the toolchain properties if:
— The toolchain properties were not autodetected.
— The type, major version, and minor version of the new toolchain are identical to a toolchain
that Arm DS already knows about.
When you create a new project, Arm DS shows the new toolchain in the available list of toolchains.
Next Steps
To change the toolchain in existing project to a newly registered toolchain, right-click the project and
select Properties > C/C++ Build > Tool Chain Editor
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 1-36
reserved.
Non-Confidential
1 Configure Arm® Development Studio
1.5 Register a compiler toolchain
Procedure
1. To set a default compiler toolchain, run <install_directory>/bin/select_default_toolchain
and follow the instructions.
2. To specify a compiler toolchain for the current session, run <install_directory>/bin/suite_exec
--toolchain <toolchain_name>
Tip
Run suite_exec with no arguments for the list of available toolchains.
Note
If you specify a toolchain using the suite_exec --toolchain command, it overwrites the default
compiler toolchain for the current session.
Procedure
1. To set a default compiler toolchain:
a. Select Start > All Programs > Arm DS Command Prompt.
b. To see the available compiler toolchains, enter select_default_toolchain.
c. From the list of available toolchains, select your default compiler toolchain.
2. To specify a compiler toolchain for the current session:
a. Select Start > All Programs > Arm DS Command Prompt.
b. To see the available compiler toolchains, enter select_toolchain.
Note
Using this command overwrites the default compiler toolchain for the current session.
c. From the list of available toolchains, select the one that you want to use for this session.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 1-37
reserved.
Non-Confidential
1 Configure Arm® Development Studio
1.6 Specify plug-in install location
Prerequisites
• Installation of Arm Development Studio with appropriate licenses applied.
• Access to your Arm Development Studio install.
Procedure
1. At your operating system command prompt, enter: <armds_install_directory>/bin/armds_ide -
vmargs -Dosgi.configuration.area=<install_directory/sw/ide/configuration> -
Dosgi.configuration.cascaded=false.
Note
On Windows, you must run armds_idec.exe from either the Arm DS Command Prompt, or
directly from the <install_directory>/bin directory. Do not run the armds_idec.exe executable
that is in the <install_directory>/sw/eclipse directory.
The armds_idec.exe executable in <install_directory>/bin acts as a wrapper for
armds_idec.exe in <install_directory>/sw/eclipse. Running the executable from the
<install_directory>/bin directory sets up the Arm Development Studio environment (paths,
environment variables, and other similar items) in the same way as the Arm DS Command Prompt.
2. Install your Eclipse plug-in using your preferred plug-in installation option, for example, the Eclipse
Marketplace.
3. Restart Arm Development Studio when prompted to do so.
Your plug-ins are now installed into the Arm Development Studio <install_directory/sw/ide/
configuration> directory and are available to all users of the host workstation.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 1-38
reserved.
Non-Confidential
1 Configure Arm® Development Studio
1.7 Data collection in Arm® Development Studio
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 1-39
reserved.
Non-Confidential
Chapter 2
Working with projects
Projects are top level folders in your workspace that contain related files and sub-folders. A project must
exist in your workspace before you add a new file or import an existing file.
It contains the following sections:
• 2.1 Project types on page 2-41.
• 2.2 Create a new C or C++ project on page 2-43.
• 2.3 Creating an empty Makefile project on page 2-45.
• 2.4 Create a new Makefile project with existing code on page 2-46.
• 2.5 Setting up the compilation tools for a specific build configuration on page 2-48.
• 2.6 Configuring the C/C++ build behavior on page 2-50.
• 2.7 Run Arm® Development Studio IDE from the command-line to clean and build your projects
on page 2-52.
• 2.8 Updating a project to a new toolchain on page 2-54.
• 2.9 Adding a source file to your project on page 2-55.
• 2.10 Sharing Arm® Development Studio projects on page 2-57.
• 2.11 Working sets on page 2-58.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 2-40
reserved.
Non-Confidential
2 Working with projects
2.1 Project types
Note
Bare metal projects require a software license for Arm Compiler to successfully build an ELF image.
Bare-metal Executable
Uses Arm Compiler to build a bare-metal executable ELF image.
Bare-metal Static library
Uses Arm Compiler to build a library of ELF object format members for a bare-metal project.
Note
It is not possible to debug or run a stand-alone library file until it is linked into an image.
Executable
Uses the GNU Compilation Tools to build a Linux executable ELF image.
Shared Library
Uses the GNU Compilation Tools to build a dynamic library for a Linux application.
Static library
Uses the GNU Compilation Tools to build a library of ELF object format members for a Linux
application.
Note
It is not possible to debug or run a stand-alone library file until it is linked into an image.
Makefile project
Creates a project that requires a makefile to build the project. However, Eclipse does not
automatically create a makefile for an empty Makefile project. You can write the makefile
yourself or modify and use an existing makefile.
Note
Eclipse does not modify Makefile projects.
Build configurations
By default, the new project wizard provides two separate build configurations:
Debug
The debug target is configured to build output binaries that are fully debuggable, at the expense
of optimization. It configures the compiler optimization setting to minimum (level 0), to provide
an ideal debug view for code development.
Release
The release target is configured to build output binaries that are highly optimized, at the expense
of a poorer debug view. It configures the compiler optimization setting to high (level 3).
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 2-41
reserved.
Non-Confidential
2 Working with projects
2.1 Project types
In all new projects, the Debug configuration is automatically set as the active configuration. You can
change this in the C/C++ Build Settings panel of the Project Properties dialog box.
Note
C project
This does not select a source language by default and leaves this decision up to the compiler.
Both GCC and Arm Compiler default to C for .c files and C++ for .cpp files.
C++ project
Selects C++ as the source language by default, regardless of file extension.
In both cases, the source language for the entire project a source directory, or individual source file can
be configured in the build configuration settings.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 2-42
reserved.
Non-Confidential
2 Working with projects
2.2 Create a new C or C++ project
Procedure
1. Select File > New > Project... from the main menu.
2. Expand the C/C++ group, select either C Project or C++ Project, and click Next.
Note
C project
This does not select a source language by default and leaves this decision up to the compiler.
Both GCC and Arm Compiler default to C for .c files and C++ for .cpp files.
C++ project
Selects C++ as the source language by default, regardless of file extension.
In both cases, the source language for the entire project, a source directory or individual source file
can be configured in the build configuration settings.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 2-43
reserved.
Non-Confidential
2 Working with projects
2.2 Create a new C or C++ project
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 2-44
reserved.
Non-Confidential
2 Working with projects
2.3 Creating an empty Makefile project
Procedure
1. Create a new project:
a. Select File > New > Project... from the main menu.
b. Expand the C/C++ group, select either C Project or C++ Project, and click Next.
c. Enter a project name.
d. Leave the Use default location option selected so that the project is created in the default folder
shown. Alternatively, deselect this option and browse to your preferred project folder.
e. Expand the Makefile project group.
f. Select Empty project in the Project type panel.
g. Select the toolchain that you want to use when building your project. If your project is for an Arm
Linux target, select the appropriate GCC toolchain. You might need to download a GCC toolchain
if you have not done so already.
h. Click Finish to create your new project. The project is visible in the Project Explorer view.
2. Create a Makefile, and then edit:
a. Before you can build the project, you must have a Makefile that contains the compilation tool
settings. The easiest way to create one is to copy the Makefile from the example project, hello
and paste it into your new project. The hello project is in the Linux examples provided with Arm
Development Studio.
b. Locate the line that contains OBJS = hello.o.
c. Replace hello.o with the names of the object files corresponding to your source files.
d. Locate the line that contains TARGET =hello.
e. Replace hello with the name of the target image file corresponding to your source files.
f. Save the file.
g. Right-click the project and then select Properties > C/C++ Build. In the Builder Settings tab,
ensure that the Build directory points to the location of the Makefile.
3. Add your C/C++ files to the project.
Next Steps
Build the project. In the Project Explorer view, right-click the project and select Build Project.
Related tasks
2.4 Create a new Makefile project with existing code on page 2-46
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 2-45
reserved.
Non-Confidential
2 Working with projects
2.4 Create a new Makefile project with existing code
Procedure
1. Create a Makefile project:
a. Select File > New > Project... from the main menu.
b. Expand the C/C++ group, select Makefile Project with Existing Code, and click Next.
c. Enter a project name and enter the location of your existing source code.
d. Select the toolchain that you want to use for Indexer Settings. Indexer Settings provide source
code navigation in the Arm Development Studio IDE.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 2-46
reserved.
Non-Confidential
2 Working with projects
2.4 Create a new Makefile project with existing code
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 2-47
reserved.
Non-Confidential
2 Working with projects
2.5 Setting up the compilation tools for a specific build configuration
Procedure
1. In the Project Explorer view, right-click the source file or project and select Properties.
2. Expand C/C++ Build and select Settings.
3. The Configuration panel shows the active configuration. To create a new build configuration or
change the active setting, click Manage Configurations….
4. The compilation tools available for the current project, and their respective build configuration
panels, are displayed in the Tool Settings tab. Click on this tab and configure the build as required.
Note
Makefile projects do not use these configuration panels. The Makefile must contain all the required
compilation tool settings.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 2-48
reserved.
Non-Confidential
2 Working with projects
2.5 Setting up the compilation tools for a specific build configuration
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 2-49
reserved.
Non-Confidential
2 Working with projects
2.6 Configuring the C/C++ build behavior
You must also ensure that Build Automatically is selected from the Project menu. By default,
this menu option is selected.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 2-50
reserved.
Non-Confidential
2 Working with projects
2.6 Configuring the C/C++ build behavior
Manual
This is an incremental build that operates over the entire workspace on projects with Build
(Incremental build) selected. By default, this behavior is selected for all projects.
You can run an incremental build by selecting Build All or Build Project from the Project
menu.
Note
Manual builds do not save before running so you must save all related files before selecting this
option! To save automatically before building, you can change your default settings by selecting
Preferences... > General > Workspace from the Window menu.
Clean
This option discards any previous build states including object files and images from the
selected projects. The next automatic or manual build after a clean, applies the selected build
configuration to all resources.
You can run a clean build on either the entire workspace or specific projects by selecting
Clean… from the Project menu. You must also ensure that Clean is selected in the C/C++
Build > Behaviour tab of the Preferences dialog box. By default, this behavior is selected for
all projects.
Build order is a feature where inter-project dependencies are created and a specific build order is defined.
For example, an image might require several object files to be built in a specific order. To do this, you
must split your object files into separate smaller projects, reference them within a larger project to ensure
they are built before the larger project. Build order can also be applied to the referenced projects.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 2-51
reserved.
Non-Confidential
2 Working with projects
2.7 Run Arm® Development Studio IDE from the command-line to clean and build your projects
2.7 Run Arm® Development Studio IDE from the command-line to clean and build
your projects
You can run Arm Development Studio IDE from the command-line to clean and build your projects. This
might be useful when you want to create scripts to automate build procedures.
Before you begin, make sure that the Arm Development Studio IDE session is closed.
Use the Arm Development Studio command-line console to load the Arm Development Studio IDE,
make, and other utilities on your PATH environment variable. To launch the console:
• On Windows, select Start > All Programs > Arm Development Studio > Arm DS Command
Prompt.
• On Linux, run <install_directory>/bin/suite_exec <shell> to open a shell.
Run armds_idec.exe (on Windows) or armds_ide (on Linux) with the following Arm Development
Studio IDE arguments as required.
Argument Description
-nosplash Disables the Arm Development Studio IDE splash screen.
--launcher.suppressErrors Causes errors to be printed to the console instead of being reported in
a graphical dialog box.
-application Mandatory argument telling Arm Development Studio IDE to run the
com.arm.cmsis.pack.project.headlessbuild headless builder.
-data <workspaceDir> Specify the location of your workspace.
-import <projectDir> Import the project from the specified directory into your workspace.
Use this option multiple times to import multiple projects.
-build <projectName>[/<configName>] | all Build the project with the specified name, or all projects in your
workspace.
By default, this argument builds all the configurations within each
project. You can limit this action to a single configuration, such as
Debug or Release, by specifying the configuration name
immediately after your project name, separated with '/'.
Use this option multiple times to build multiple projects.
-cleanBuild <projectName>[/<configName>] | all Clean and build the project with the specified name, or all projects in
your workspace.
By default, this argument cleans and builds all the configurations
within each project. You can limit this action to a single
configuration, such as Debug or Release, by specifying the
configuration name immediately after your project name, separated
with '/'.
Use this option multiple times to clean and build multiple projects.
-cmsisRoot <path> Set the path to the CMSIS Packs root directory
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 2-52
reserved.
Non-Confidential
2 Working with projects
2.7 Run Arm® Development Studio IDE from the command-line to clean and build your projects
Note
On Windows, you must run armds_idec.exe from either the Arm DS Command Prompt, or directly
from the <install_directory>/bin directory. Do not run the armds_idec.exe executable that is in the
<install_directory>/sw/eclipse directory.
Examples
On Windows, to list and view the full set of available options, use the command:
armds_idec.exe -nosplash -consoleLog --launcher.suppressErrors -application
com.arm.cmsis.pack.project.headlessbuild -help
On Windows, to clean and build all the projects in a specific workspace, use the command:
armds_idec.exe -nosplash -application com.arm.cmsis.pack.project.headlessbuild -data
C:<\path\to\workspace> -cleanBuild all
On Linux, to build the Release configuration of project MyProject in a specific workspace, use the
command:
armds_ide -nosplash -application com.arm.cmsis.pack.project.headlessbuild -data </
path/to/workspace> -build MyProject/Release
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 2-53
reserved.
Non-Confidential
2 Working with projects
2.8 Updating a project to a new toolchain
Procedure
1. Right-click on the project in the Project Explorer view, and select Properties.
2. Expand C/C++ Build and select Tool Chain Editor.
3. Select the toolchain from the Current toolchain drop-down list and click OK.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 2-54
reserved.
Non-Confidential
2 Working with projects
2.9 Adding a source file to your project
Procedure
1. In the Development Studio perspective, right-click on the project and select New > Source File to
display the New Source File dialog box.
a. Alternatively, from the main menu, select File > New > Source File.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 2-55
reserved.
Non-Confidential
2 Working with projects
2.9 Adding a source file to your project
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 2-56
reserved.
Non-Confidential
2 Working with projects
2.10 Sharing Arm® Development Studio projects
Note
• There are many different ways to share projects and files, for example, using a source control tool.
This topic covers the general principles of sharing projects and files using Arm Development Studio,
and not the specifics of any particular tool.
• To share files, it is recommended to do so at the level of the project and not the workspace. Your
source files within Arm Development Studio are organized into projects, and projects exist within
your workspace. A workspace contains many files, including files in the .metadata directory, that
are specific to an individual user or installation.
Within each project, the files that must be shared beyond just your source code are:
• .project - Contains general information about the project type, and the Arm Development Studio
plug-ins to use to edit and build the project.
• .cproject - Contains C/C++ specific information, including compiler settings.
Arm Development Studio places built files into the project directory, including auto-generated makefiles,
object files, and image files. Not all files have to be shared. For example, sharing an auto-generated
makefile might be useful to allow building the project outside of Arm Development Studio, but if
projects are only built within Arm Development Studio then this is not necessary.
You must be careful when creating and configuring projects to avoid hard-coded references to tools and
files outside of Arm Development Studio that might differ between users.
To ensure that files outside of Arm Development Studio can be referenced in a user agnostic way, use the
${workspace_loc} built-in variable or custom environment variables.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 2-57
reserved.
Non-Confidential
2 Working with projects
2.11 Working sets
Procedure
1. Click the View Menu hamburger icon in the Project Explorer view toolbar.
2. Select the Select Working Set… option.
3. In the Select Working Set dialog box, click New….
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 2-58
reserved.
Non-Confidential
2 Working with projects
2.11 Working sets
Figure 2-8 Selecting the resource type for the new working set
5. In the Working set name field, enter a suitable name.
6. In the Working set contents panel, you can select existing projects that you want to associate with
this working set, or you can return to the wizard later to add projects.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 2-59
reserved.
Non-Confidential
2 Working with projects
2.11 Working sets
9. In the Select Working Set dialog box, select the working sets that you want to display in the Project
Explorer view.
Procedure
1. In the Project Explorer view toolbar, click the View Menu hamburger icon.
2. Select Top Level Elements from the context menu.
3. Select either Projects or Working Sets.
Procedure
1. Click on the View Menu icon in the Project Explorer view toolbar.
2. Select Deselect Working Set from the context menu.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 2-60
reserved.
Non-Confidential
Chapter 3
Working with editors
The following topics describe how to use the editors when developing a project for an Arm target.
It contains the following sections:
• 3.1 Editing source code on page 3-62.
• 3.2 About the C/C++ editor on page 3-63.
• 3.3 About the Arm assembler editor on page 3-64.
• 3.4 About the ELF content editor on page 3-65.
• 3.5 ELF content editor - Header tab on page 3-66.
• 3.6 ELF content editor - Sections tab on page 3-67.
• 3.7 ELF content editor - Segments tab on page 3-68.
• 3.8 ELF content editor - Symbol Table tab on page 3-69.
• 3.9 ELF content editor - Disassembly tab on page 3-70.
• 3.10 About the scatter file editor on page 3-71.
• 3.11 Creating a scatter file on page 3-72.
• 3.12 Importing a memory map from a BCD file on page 3-74.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 3-61
reserved.
Non-Confidential
3 Working with editors
3.1 Editing source code
Navigating
There are several ways to navigate to a specific resource within Development Studio. You can use the
Project Explorer view to open a resource by browsing through the resource tree and double-clicking on
a file. An alternative is to use the keyboard shortcuts or use the options from the Navigate menu.
Searching
To locate information or specific code contained within one or more files in Development Studio, you
can use the options from the Search menu. Textual searching with pattern matching and filters to refine
the search fields are provided in a customizable Search dialog box. You can also open this dialog box
from the main workbench toolbar.
Content assist
The C/C++ editor, Arm assembler editor, and the Arm Debugger Commands view provide content
assistance at the cursor position to auto-complete the selected item. Using the Ctrl+Space keyboard
shortcut produces a small dialog box with a list of valid options to choose from. You can shorten the list
by partially typing a few characters before using the keyboard shortcut. From the list you can use the
Arrow Keys to select the required item and then press the Enter key to insert it.
Bookmarks
You can use bookmarks to mark a specific position in a file or mark an entire file so that you can return
to it quickly. To create a bookmark, select a file or line of code that you want to mark and select Add
Bookmark from the Edit menu. The Bookmarks view displays all the user defined bookmarks and can
be accessed by selecting Window > Show View > Bookmarks from the main menu. If the Bookmarks
view is not listed then select Others… for an extended list.
To delete a bookmark, open the Bookmarks view, click on the bookmark that you want to delete and
select Delete from the Edit menu.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 3-62
reserved.
Non-Confidential
3 Working with editors
3.2 About the C/C++ editor
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 3-63
reserved.
Non-Confidential
3 Working with editors
3.3 About the Arm assembler editor
Content assist Content assist provides auto-completion on labels existing in the active file. When entering a label for a branch
instruction, Partially type the label and then use the keyboard shortcut Ctrl+Space to display a list of valid auto-
complete options. Use the Arrow Keys to select the required label and press Enter to complete the term. Continue
typing to ignore the auto-complete list.
Block Block comments are enabled or disabled by using Ctrl+Semicolon. Select a block of code and apply the keyboard
comments shortcut to change the commenting state.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 3-64
reserved.
Non-Confidential
3 Working with editors
3.4 About the ELF content editor
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 3-65
reserved.
Non-Confidential
3 Working with editors
3.5 ELF content editor - Header tab
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 3-66
reserved.
Non-Confidential
3 Working with editors
3.6 ELF content editor - Sections tab
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 3-67
reserved.
Non-Confidential
3 Working with editors
3.7 ELF content editor - Segments tab
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 3-68
reserved.
Non-Confidential
3 Working with editors
3.8 ELF content editor - Symbol Table tab
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 3-69
reserved.
Non-Confidential
3 Working with editors
3.9 ELF content editor - Disassembly tab
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 3-70
reserved.
Non-Confidential
3 Working with editors
3.10 About the scatter file editor
Before you can use a scatter file you must add the --scatter=file option to the project within the C/C
++ Build > Settings > Tool settings > Arm Linker > Image Layout panel of the Properties dialog
box.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 3-71
reserved.
Non-Confidential
3 Working with editors
3.11 Creating a scatter file
Prerequisites
Before you can use a scatter file, you must add the --scatter=file option to the project in the C/C++
Build > Settings > Tool settings > Arm Linker > Image Layout panel of the Properties dialog box.
Procedure
1. Open an existing project, or create a new project.
2. In your project, add a new empty text file with the extension .scat. For example scatter.scat.
3. In the Outline view, click the Add load region toolbar icon, or right-click and select Add load
region from the context menu.
4. Enter a load region name, for example, LR1.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 3-72
reserved.
Non-Confidential
3 Working with editors
3.11 Creating a scatter file
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 3-73
reserved.
Non-Confidential
3 Working with editors
3.12 Importing a memory map from a BCD file
Prerequisites
Before you can use a scatter file, you must add the --scatter=file option to the project in the C/C++
Build > Settings > Tool settings > Arm Linker > Image Layout panel of the Properties dialog box.
Procedure
1. Select File > Import > Scatter File Editor > Memory from a BCD File.
2. Enter the location of the BCD file, or click Browse… to select the folder.
3. Select the file that contains the memory map that you want to import.
4. If you want to add specific memory regions to an existing scatter file, select Add to current scatter
file.
Note
The scatter file must be open and active in the editor view before you can use this option.
5. If you want the wizard to create a new file with the same name as the BCD file but with a .scat file
extension, select Create new scatter file template.
6. Select the destination project folder.
7. By default, all the memory regions are selected. Edit the selections and table content as required.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 3-74
reserved.
Non-Confidential
3 Working with editors
3.12 Importing a memory map from a BCD file
Figure 3-8 Memory block selection for the scatter file editor
8. Click Finish.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 3-75
reserved.
Non-Confidential
Chapter 4
Importing and exporting projects
Describes how to import resources from existing projects and how to export resources to use with tools
external to Arm Development Studio.
It contains the following sections:
• 4.1 Importing and exporting options on page 4-77.
• 4.2 Using the Import wizard on page 4-78.
• 4.3 Using the Export wizard on page 4-79.
• 4.4 Import an existing Eclipse project on page 4-80.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 4-76
reserved.
Non-Confidential
4 Importing and exporting projects
4.1 Importing and exporting options
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 4-77
reserved.
Non-Confidential
4 Importing and exporting projects
4.2 Using the Import wizard
With the exception of the Existing Projects into Workspace wizard, files and folders are copied into
your workspace when you use the Import wizard. To create a link to an external file or project sub-
folder you must use the New File or New Folder wizard.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 4-78
reserved.
Non-Confidential
4 Importing and exporting projects
4.3 Using the Export wizard
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 4-79
reserved.
Non-Confidential
4 Importing and exporting projects
4.4 Import an existing Eclipse project
Procedure
1. Select File > Import... > Existing Project into Workspace. Click Next
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 4-80
reserved.
Non-Confidential
4 Importing and exporting projects
4.4 Import an existing Eclipse project
Note
If your existing project contains project settings from an older version of the build system, you are
given the option to update your project. Using the latest version means that you can access all the
latest toolchain features.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 4-81
reserved.
Non-Confidential
Chapter 5
Introduction to Arm® Debugger
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 5-82
reserved.
Non-Confidential
5 Introduction to Arm® Debugger
5.1 Overview: Arm® Debugger and important concepts
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 5-83
reserved.
Non-Confidential
5 Introduction to Arm® Debugger
5.2 Overview: Arm CoreSight™ debug and trace components
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 5-84
reserved.
Non-Confidential
5 Introduction to Arm® Debugger
5.3 Overview: Debugging multi-core (SMP and AMP), big.LITTLE™, and multi-cluster targets
5.3 Overview: Debugging multi-core (SMP and AMP), big.LITTLE™, and multi-
cluster targets
Arm Debugger is developed with multicore debug in mind for bare-metal, Linux kernel, or application-
level software development.
Awareness for Symmetric Multi-Processing (SMP), Asymmetric Multi-Processing (AMP), and
big.LITTLE configurations is embedded in Arm Debugger, allowing you to see which core, or cluster a
thread is executing on.
When debugging applications in Arm Debugger, multicore configurations such as SMP or big.LITTLE
require no special setup process. Arm Debugger includes predefined configurations, backed up by the
Platform Configuration Editor on page 14-294 which enables further customization. The nature of the
connection determines how Arm Debugger behaves, for example stopping and starting all cores
simultaneously in a SMP system.
This section contains the following subsections:
• 5.3.1 Debugging SMP systems on page 5-85.
• 5.3.2 Debugging AMP Systems on page 5-87.
• 5.3.3 Debugging big.LITTLE™ Systems on page 5-87.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 5-85
reserved.
Non-Confidential
5 Introduction to Arm® Debugger
5.3 Overview: Debugging multi-core (SMP and AMP), big.LITTLE™, and multi-cluster targets
Once connected to your target, use the Debug Control view to work with all the cores in your SMP
system.
The exception to this is when a nexti operation is required to step over a function call, in which case, the
debugger sets a breakpoint and then runs all processors. All other stepping commands affect all
processors.
Depending on your system, there might be a delay between different cores running or stopping. This
delay can be very large because the debugger must run and stop each core individually. However,
hardware cross-trigger implementations in most SMP systems ensure that the delays are minimal and are
limited to a few processor clock cycles.
In rare cases, one processor might stop, and one or more of the other processors might not respond. This
can occur, for example, when a processor running code in secure mode has temporarily disabled debug
ability. When this occurs, the Debug Control view displays the individual state of each processor,
running or stopped, so you can see which ones have failed to stop. Subsequent run and step operations
might not operate correctly until all the processors stop.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 5-86
reserved.
Non-Confidential
5 Introduction to Arm® Debugger
5.3 Overview: Debugging multi-core (SMP and AMP), big.LITTLE™, and multi-cluster targets
Trace
If you are using a connection that enables trace support, you can view trace for each of the processors in
your system using the Trace view.
By default, the Trace view shows trace for the processor that is currently selected in the Debug Control
view. Alternatively, you can choose to link a Trace view to a specific processor by using the Linked:
context toolbar option for that Trace view. Creating multiple Trace views linked to specific processors
enables you to view the trace from multiple processors at the same time.
Note
The indexes in the different Trace views do not necessarily represent the same point in time for different
processors.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 5-87
reserved.
Non-Confidential
5 Introduction to Arm® Debugger
5.3 Overview: Debugging multi-core (SMP and AMP), big.LITTLE™, and multi-cluster targets
Awareness for big.LITTLE configurations is built into Arm Debugger, allowing you to establish a bare-
metal, Linux kernel, or Linux application debug connection, just as you would for a single core
processor.
Note
For the software required to enable big.LITTLE support in your own OS, visit the big.LITTLE Linaro git
repository.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 5-88
reserved.
Non-Confidential
5 Introduction to Arm® Debugger
5.4 Overview: Debugging Arm®-based Linux applications
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 5-89
reserved.
Non-Confidential
5 Introduction to Arm® Debugger
5.5 Debugger concepts
Arm Development Studio comes pre-configured with support for a wide variety of devices out-
of-the-box, and you can view these in the Debug Configuration dialog box in the Arm
Development Studio IDE.
You can also add support for your own devices using the Platform Configuration Editor (PCE)
tool.
Contexts
Each processor in the target can run more than one process. However, the processor only
executes one process at any given time. Each process uses values stored in variables, registers,
and other memory locations. These values can change during the execution of the process.
The context of a process describes its current state, as defined principally by the call stack that
lists all the currently active calls.
The context changes when:
• A function is called.
• A function returns.
• An interrupt or an exception occurs.
Because variables can have class, local, or global scope, the context determines which variables
are currently accessible. Every process has its own context. When execution of a process stops,
you can examine and change values in its current context.
CTI
The Cross Trigger Interface (CTI) combines and maps trigger requests, and broadcasts them to
all other interfaces on the Embedded Cross Trigger (ECT) sub-system. See Cross-trigger
configuration on page 7-144 for more information.
DAP
The Debug Access Port (DAP) is a control and access component that enables debug access to
the complete SoC through system master ports. See About the Debug Access Port for more
information.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 5-90
reserved.
Non-Confidential
5 Introduction to Arm® Debugger
5.5 Debugger concepts
Debugger
A debugger is software running on a host computer that enables you to make use of a debug
adapter to examine and control the execution of software running on a debug target.
Debug agent
A debug agent is hardware or software, or both, that enables a host debugger to interact with a
target. For example, a debug agent enables you to read from and write to registers, read from
and write to memory, set breakpoints, download programs, run and single-step programs,
program flash memory, and so on.
gdbserver is an example of a software debug agent.
Debug session
A debug session begins when you connect the debugger to a target for debugging software
running on the target and ends when you disconnect the debugger from the target.
Debug target
A debug target is an environment where your program runs. This environment can be hardware,
software that simulates hardware, or a hardware emulator.
A hardware target can be anything from a mass-produced development board or electronic
equipment to a prototype product, or a printed circuit board.
During the early stages of product development, if no hardware is available, a simulation or
software target might be used to simulate hardware behavior. A Fixed Virtual Platform (FVP) is
a software model from Arm that provides functional behavior equivalent to real hardware.
Note
Even though you might run an FVP on the same host as the debugger, it is useful to think of it as
a separate piece of hardware.
Also, during the early stages of product development, hardware emulators are used to verify
hardware and software designs for pre-silicon testing.
Debug adapter
A debug adapter is a physical interface between the host debugger and hardware target. It acts as
a debug agent. A debug adapter is normally required for bare-metal start/stop debugging real
target hardware, for example, using JTAG.
Examples include DSTREAM, DSTREAM-ST, and the ULINK family of debug and trace
adapters.
DSTREAM
The Arm DSTREAM family of debug and trace units. For more information, see: DSTREAM
family
Note
Arm Development Studio supports the Arm DSTREAM debug unit, but it is discontinued and
no longer available to purchase.
DTSL
Debug and Trace Services Layer (DTSL) is a software layer within the Arm Debugger stack.
DTSL is implemented as a set of Java classes which are typically implemented (and possibly
extended) by Jython scripts. A typical DTSL instance is a combination of Java and Jython. Arm
has made DTSL available for your own use so that you can create programs (Java or Jython) to
access/control the target platform.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 5-91
reserved.
Non-Confidential
5 Introduction to Arm® Debugger
5.5 Debugger concepts
DWARF
DWARF is a debugging format used to describe programs in C and other similar programming
languages. It is most widely associated with the ELF object format but it has been used with
other object file formats.
ELF
Executable and Linkable Format (ELF) is a common standard file format for executables, object
code, shared libraries, and core dumps.
ETB
Embedded Trace Buffer (ETB) is an optional on-chip buffer that stores trace data from different
trace sources. You can use a debugger to retrieve captured trace data.
ETF
Embedded Trace FIFO (ETF) is a trace buffer that uses a dedicated SRAM as either a circular
capture buffer, or as a FIFO. The trace stream is captured by an ATB input that can then be
output over an ATB output or the Debug APB interface. The ETF is a configuration option of
the Trace Memory Controller (TMC).
ETM
Embedded Trace Macrocell (ETM) is an optional debug component that enables reconstruction
of program execution. The ETM is designed to be a high-speed, low-power debug tool that
supports trace.
ETR
Embedded Trace Router (ETR) is a CoreSight component which routes trace data to system
memory or other trace sinks, such as HSSTP.
FVP
Fixed Virtual Platform (FVP) enables development of software without the requirement for
actual hardware. The functional behavior of the FVP is equivalent to real hardware from a
programmers view.
ITM
Instruction Trace Macrocell (ITM) is a CoreSight component which delivers code
instrumentation output and specific hardware data streams.
jRDDI
The Java API implementation of RDDI.
Jython
An implementation of the Python language which is closely integrated with Java.
MTB
Micro Trace Buffer. This is used in the Cortex‑M0 and Cortex-M0+.
PTM
Program Trace Macrocell (PTM) is a CoreSight component which is paired with a core to
deliver instruction only program flow trace data.
RDDI
Remote Device Debug Interface (RDDI) is a C-level API which allows access to target debug
and trace functionality, typically through a DSTREAM box, or a CADI model.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 5-92
reserved.
Non-Confidential
5 Introduction to Arm® Debugger
5.5 Debugger concepts
Scope
The scope of a variable is determined by the point within an application at which it is defined.
Variables can have values that are relevant within:
• A specific class only (class).
• A specific function only (local).
• A specific file only (static global).
• The entire application (global).
SMP
A Symmetric Multi-Processing (SMP) system has multiple processors with the same
architecture. See Debugging SMP systems on page 5-85 for more information.
STM
System Trace Macrocell (STM) is a CoreSight component which delivers code instrumentation
output and other hardware generated data streams.
TPIU
Trace Port Interface Unit (TPIU) is a CoreSight component which delivers trace data to an
external trace capture device.
TMC
The Trace Memory Controller (TMC) enables you to capture trace using:
• The debug interface such as 2-pin serial wire debug.
• The system memory such as a dynamic Random Access Memory (RAM).
• The high-speed links that already exist in the System-on-Chip (SoC) peripheral.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 5-93
reserved.
Non-Confidential
Chapter 6
Configuring debug connections in Arm® Debugger
Describes how to configure and connect to a debug target using Arm Debugger.
It contains the following sections:
• 6.1 Overview: Debug connections in Arm® Debugger on page 6-95.
• 6.2 Configuring a connection to a bare-metal hardware target on page 6-96.
• 6.3 Configuring a connection to a Linux application using gdbserver on page 6-100.
• 6.4 Configuring a connection to a Linux kernel on page 6-103.
• 6.5 Configuring trace for bare-metal or Linux kernel targets on page 6-106.
• 6.6 Using Fixed Virtual Platform (FVP)s with Arm® Development Studio on page 6-109.
• 6.7 Configuring a connection to an external Fixed Virtual Platform (FVP) for bare-metal application
debug on page 6-110.
• 6.8 Configuring a connection from the command-line to a built-in Fixed Virtual Platform (FVP)
on page 6-113.
• 6.9 Configuring an Events view connection to a bare-metal target on page 6-114.
• 6.10 Exporting or importing an existing Arm® Development Studio launch configuration
on page 6-116.
• 6.11 Disconnecting from a target on page 6-119.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 6-94
reserved.
Non-Confidential
6 Configuring debug connections in Arm® Debugger
6.1 Overview: Debug connections in Arm® Debugger
Snapshot Viewer
Use the Snapshot Viewer to analyze and debug a read-only representation of the application state of
your processor using previously captured data. This is useful in scenarios where interactive debugging
with a target is not possible. For more information, see Working with the Snapshot Viewer
on page 13-282.
Related concepts
13.1 About the Snapshot Viewer on page 13-283
Related tasks
6.2 Configuring a connection to a bare-metal hardware target on page 6-96
6.3 Configuring a connection to a Linux application using gdbserver on page 6-100
6.4 Configuring a connection to a Linux kernel on page 6-103
6.7 Configuring a connection to an external Fixed Virtual Platform (FVP) for bare-metal application
debug on page 6-110
Related references
Chapter 13 Working with the Snapshot Viewer on page 13-282
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 6-95
reserved.
Non-Confidential
6 Configuring debug connections in Arm® Debugger
6.2 Configuring a connection to a bare-metal hardware target
Prerequisites
• Ensure that your target is powered on. Refer to the documentation supplied with the target for more
information.
• Ensure that the debug hardware adapter connecting your target with your workstation is powered on
and working.
• If using DSTREAM-ST, ensure that your target is connected correctly to the DSTREAM-ST unit. If
the target is connected and powered on, the TARGET LED illuminates green.
• If using DSTREAM, ensure that your target is connected correctly to the DSTREAM unit. If the
target is connected and powered on, the TARGET LED illuminates green, and the VTREF LED on
the DSTREAM probe illuminates.
Procedure
1. From the Arm Development Studio main menu, select File > New > Hardware Connection.
2. In the Hardware Connection dialog box, specify the details of the connection:
a. In Debug Connection enter a debug connection name, for example my_hardware_connection
and click Next.
b. In Target Selection select a target, for example Juno Arm Development Platform (r2) and
click Finish to complete the initial connection configuration.
3. In the displayed Edit Configuration dialog box, click the Connection tab to specify the target and
connection settings:
a. In the Select target panel confirm the target selected.
b. Select your debug hardware unit in the Target Connection list. For example, DSTREAM
Family.
c. If required, Edit the Debug and Trace Services Layer (DTSL) settings in the DTSL
Configuration Configuration dialog box to configure additional debug and trace settings for
your target.
d. In the Connections area, enter the Connection name or IP address of your debug hardware
adapter. If your connection is local, click Browse and select the connection using the Connection
Browser.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 6-96
reserved.
Non-Confidential
6 Configuring debug connections in Arm® Debugger
6.2 Configuring a connection to a bare-metal hardware target
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 6-97
reserved.
Non-Confidential
6 Configuring debug connections in Arm® Debugger
6.2 Configuring a connection to a bare-metal hardware target
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 6-98
reserved.
Non-Confidential
6 Configuring debug connections in Arm® Debugger
6.2 Configuring a connection to a bare-metal hardware target
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 6-99
reserved.
Non-Confidential
6 Configuring debug connections in Arm® Debugger
6.3 Configuring a connection to a Linux application using gdbserver
Prerequisites
• Set up your target with an Operating System (OS) installed and booted. Refer to the documentation
supplied with your target for more information.
• Obtain the target IP address or name for the connection between the debugger and the debug
hardware adapter. If the target is in your local subnet, click Browse and select your target.
• If required, set up a Remote Systems Explorer (RSE) on page 16-532 connection to the target.
Note
• If you are connecting to an already running gdbserver, then you must ensure that it is installed and
running on the target. To run gdbserver and the application on the target use: gdbserver port
path/myApplication. Where port is the connection port between gdbserver and the application
and path/myApplication is the application that you want to debug.
• If you are connecting to an Armv8 target, select the options under Connect via AArch64 gdbserver.
Procedure
1. From the Arm Development Studio main menu, select File > New > Linux Application Connection.
2. In the Linux Application Connection dialog box, specify the details of the connection:
a. Give the debug connection a name, for example my_linux_app_connection.
b. If using an existing project, select Use settings from an existing project option.
c. Click Finish.
3. In the Edit Configuration dialog box displayed:
• If you want to connect to a target with the application and gdbserver already running on it:
1. In the Connection tab, select Connect to already running application.
2. In the Connections area, specify the address and port details of the target.
3. If you want to terminate the gdbserver when disconnecting from the FVP, select Terminate
gdbserver on disconnect.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 6-100
reserved.
Non-Confidential
6 Configuring debug connections in Arm® Debugger
6.3 Configuring a connection to a Linux application using gdbserver
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 6-101
reserved.
Non-Confidential
6 Configuring debug connections in Arm® Debugger
6.3 Configuring a connection to a Linux application using gdbserver
4. If required, click the Arguments tab to enter arguments that are passed to the application
when the debug session starts.
5. If required, click the Environment tab to create and configure the target environment
variables that are passed to the application when the debug session starts.
• If you want to connect to your target, start gdbserver, and then debug an application already
present on the target, select Start gdbserver and debug target resident application, and
configure the options.
1. In the Model parameters area, the Enable virtual file system support option maps
directories on the host to a directory on the target. The Virtual File System (VFS) enables the
FVP to run an application and related shared library files from a directory on the local host.
— The Enable virtual file system support option is selected by default. If you do not want
virtual file system support, deselect this option.
— If the Enable virtual file system support option is enabled, your current workspace
location is used as the default location. The target sees this location as a writable mount
point.
2. In the Files tab, specify the location of the Application on target and the Target working
directory. If you need to load symbols, use the Load symbols from file option in the Files
panel.
3. In the Debugger tab, specify the actions that you want the debugger to perform after
connecting to the target.
4. If required, click the Arguments tab to enter arguments that are passed to the application
when the debug session starts.
5. If required, click the Environment tab to create and configure the target environment
variables that are passed to the application when the debug session starts.
4. Click Apply to save the configuration settings.
5. Click Debug to connect to the target and start debugging.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 6-102
reserved.
Non-Confidential
6 Configuring debug connections in Arm® Debugger
6.4 Configuring a connection to a Linux kernel
Prerequisites
For a Linux kernel module debug, a Remote Systems Explorer (RSE) on page 16-532 connection to the
target might be required. If so, you must know the target IP address or name.
Procedure
1. From the Arm Development Studio main menu, select File > New > Hardware Connection.
2. In the Hardware Connection dialog box, specify the details of the connection:
a. In Debug Connection give the debug connection a name, for example
my_linux_kernel_connection and click Next.
b. In Target Selection select a target, for example Juno Arm Development Platform (r2) and
click Finish to complete the initial configuration of the connection.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 6-103
reserved.
Non-Confidential
6 Configuring debug connections in Arm® Debugger
6.4 Configuring a connection to a Linux kernel
a. In the Select target panel, browse and select Linux Kernel and/or Device Driver Debug
operation, and further select the processor core you require.
b. Select your debug hardware unit in the Target Connection list. For example, DSTREAM
Family.
c. If you need to, Edit the Debug and Trace Services Layer (DTSL) settings in the DTSL
Configuration Editor to configure additional debug and trace settings for your target.
d. In the Connections area, enter the Connection name or IP address of your debug hardware
adapter. If your connection is local, click Browse and select the connection using the Connection
Browser.
4. Use the Files tab to specify your application and additional resources to download to the target:
a. If you want to load your application on the target at connection time, in the Target Configuration
area, specify your application in the Application on host to download field.
b. If you want to debug your application at source level, select Load symbols.
c. If you want to load additional resources, for example, additional symbols or peripheral description
files from a directory, add them in the Files area. Click Add resource to add resources, click
Remove resources to remove resources.
5. Select the Run control area in the Debugger tab to configure debugger settings:
a. Select Connect only and set up initialization scripts as required.
Note
Operating System (OS) support is automatically enabled when a Linux kernel vmlinux symbol
file is loaded into the debugger from the Arm Debugger launch configuration. However, you can
manually control this using the set os command.
For example, if you want to delay the activation of operating system support until the kernel has
booted and the Memory Management Unit (MMU) is initialized, then you can configure a
connection that uses a target initialization script to disable operating system support.
add-symbol-file <path>/modex.ko
Note
• The path to the vmlinux must be the same as your build environment.
• In the example above, the kernel image is called vmlinux, but this could be named differently
depending on your kernel image.
• In the example above, S:0 loads the symbols for secure space with 0 offset. The offset and
memory space prefix is dependent on your target. When working with multiple memory
spaces, ensure that you load the symbols for each memory space.
d. The debugger uses your workspace as the default working directory on the host. If you want to
change the default location, deselect the Use default option under Host working directory and
specify a new location.
e. In the Paths area, specify any directories on the host to search for files of your application using
the Source search directory field.
f. If you need to use additional resources, click Add resource (+) to add resources, click Remove
resources (-) to remove resources.
6. If required, use the Arguments tab to enter arguments that are passed to the main() function of the
application when the debug session starts. The debugger uses semihosting to pass arguments to
main().
7. If required, use the Environment tab to create and configure environment variables to pass into the
launch configuration when it is executed.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 6-104
reserved.
Non-Confidential
6 Configuring debug connections in Arm® Debugger
6.4 Configuring a connection to a Linux kernel
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 6-105
reserved.
Non-Confidential
6 Configuring debug connections in Arm® Debugger
6.5 Configuring trace for bare-metal or Linux kernel targets
Procedure
1. In Arm Debugger, select Window > Perspective > Open Perspective > Other > Development
Studio .
2. Select Run > Debug Configurations to open the Debug Configurations launcher panel.
3. Select the Arm Debugger debug configuration for your target in the left-hand pane.
If you want to create a new debug configuration for your target, then select Arm Debugger from the
left-hand pane, and then click the New button. Then select your bare-metal or Linux kernel target
from the Connection tab.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 6-106
reserved.
Non-Confidential
6 Configuring debug connections in Arm® Debugger
6.5 Configuring trace for bare-metal or Linux kernel targets
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 6-107
reserved.
Non-Confidential
6 Configuring debug connections in Arm® Debugger
6.5 Configuring trace for bare-metal or Linux kernel targets
Related tasks
15.3.12 Configure DSTREAM-PT trace mode on page 15-383
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 6-108
reserved.
Non-Confidential
6 Configuring debug connections in Arm® Debugger
6.6 Using Fixed Virtual Platform (FVP)s with Arm® Development Studio
6.6 Using Fixed Virtual Platform (FVP)s with Arm® Development Studio
A Fixed Virtual Platform (FVP) is a software model of a development platform, including processors and
peripherals. FVPs are provided as executables, and some are included in Development Studio.
Depending on your requirements, you can:
• Configure a connection to an FVP model for bare-metal application debug on page 6-110
• From the command-line, configure a connection to an FVP model for bare-metal application debug
on page 6-113
• Create a new model configuration and import new FVP models on page 14-324
Note
Arm FVPs not provided with Development Studio installation must be defined in the PATH environment
variable of your OS to be available for Development Studio.
You must add the <install_directory>/bin directory to your PATH environment variable and restart
Arm Development Studio.
• For Windows, enter set PATH=<your model path>\\bin;%PATH%
• For Linux, enter export PATH=<your model path>/bin:$PATH
To ensure that the modified path is available for future sessions:
• For Windows, right-click My Computer > Properties > Advanced system settings > Environment
Variables and under User Variables, create a PATH variable with the value <your model path>\
\bin, or else append ;<your model path>\\bin to any existing PATH variable.
• For Linux, set up the PATH in the appropriate shell configuration file. For example, in .bashrc, add
the line export PATH=<your model path>/bin:$PATH
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 6-109
reserved.
Non-Confidential
6 Configuring debug connections in Arm® Debugger
6.7 Configuring a connection to an external Fixed Virtual Platform (FVP) for bare-metal application debug
6.7 Configuring a connection to an external Fixed Virtual Platform (FVP) for bare-
metal application debug
You can use Arm Development Studio to connect to an external Fixed Virtual Platform (FVP) model for
bare-metal debugging.
This task explains how to:
• Create a model connection to connect to the Base_AEMv8A_AEMv8A FVP model and load your
application on the model.
• Start up the Base_AEMv8A_AEMv8A FVP model separately with the appropriate settings.
• Start a debug session in Development Studio to connect and attach to the running
Base_AEMv8A_AEMv8A FVP model.
Note
• Configuring a connection to a built-in FVP model follows a similar sequence of steps. Development
Studio launches built-in FVPs automatically when you start up a debug connection.
• FVPs available with your edition of Development Studio are listed under the Arm FVP (Installed
with Arm DS) tree. To see which FVPs are available with your license, compare Arm Development
Studio editions.
Prerequisites
• The FVP model that you are connecting to must be available in the Development Studio
configuration database so you can select it in the Model Connection dialog box. If the FVP model is
not available, you must first import it and create a new model configuration. See Create a new model
configuration on page 14-324 for information.
• To load and execute the application on your FVP model using Development Studio, your application
must first be built with the appropriate compiler and linker options so that it can run on your model.
To locate the options and parameters required to build your application, check the documentation for
your compiler and linker.
• You must have the appropriate licenses installed to run your FVP model from the command line.
Procedure
1. From the Arm Development Studio main menu, select File > New > Model Connection.
2. In the Model Connection dialog box, specify the details of the connection:
a. Give the connection a name in Debug connection name, for example:
my_external_fvp_connection.
b. If you want to associate the connection to an existing project, select Associate debug connection
with an existing project and click Next.
c. In Target Selection browse and select Base_AEMv8A_AEMv8A and click Finish to complete the
initial configuration of the connection.
3. In the displayed Edit Configuration dialog box, use the Connection tab to select the target and
connection settings:
a. In the Select target panel confirm the target selected.
b. If required, specify Model parameters under Connections.
c. If required, Edit the Debug and Trace Services Layer (DTSL) settings in the DTSL
Configuration dialog box to configure additional debug and trace settings for your target.
4. Use the Files tab to specify your application and additional resources to download to the target:
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 6-110
reserved.
Non-Confidential
6 Configuring debug connections in Arm® Debugger
6.7 Configuring a connection to an external Fixed Virtual Platform (FVP) for bare-metal application debug
a. In Target Configuration > Application on host to download, specify the application that you
want to load on the model.
b. If you want to debug your application at source level, select Load symbols.
c. If you want to load additional resources, for example, additional symbols or peripheral description
files from a directory, use the Files area to add them. Click + to add resources, click - to remove
resources.
5. Use the Debugger tab to configure debugger settings.
a. In the Run control area:
• Choose if you want to Connect only to the target or Debug from entry point. If you want to
start debugging from a specific symbol, select Debug from symbol.
• If you need to run target or debugger initialization scripts, select the relevant options and
specify the script paths.
• If you need to specify at debugger start up, select Execute debugger commands options and
specify the commands.
b. The debugger uses your workspace as the default working directory on the host. If you want to
change the default location, deselect the Use default option under Host working directory and
specify a new location.
c. In the Paths area, use the Source search directory field to enter any directions on the host to
search for your application files.
d. If you need to use additional resources, click Add resource (+) to add resources, click Remove
resources (-) to remove resources.
6. If required, use the Arguments tab to enter arguments that are passed, using semihosting, to the
main() function of the application when the debug session starts.
7. If required, use the Environment tab to create and configure environment variables to pass into the
launch configuration when it is executed.
8. Click Apply and then Close to save the configuration settings and close the Debug Configurations
dialog box.
You have now created a debug configuration to connect to the Base_AEMv8A_AEMv8A FVP target. You
can view this debug configuration in the Debug Control view.
9. The next step is to start up the Base_AEMv8A_AEMv8A FVP with the appropriate settings so that
Development Studio can connect to it when you start your debugging session.
a. Open a terminal window and navigate to the installation directory of the Base_AEMv8A_AEMv8A
FVP.
b. Start up the Base_AEMv8A_AEMv8A separately with the appropriate options and parameters.
For example, to run the FVP_Base_AEMv8A-AEMv8A.exe FVP model on Windows platforms, at the
command prompt enter:
FVP_Base_AEMv8A-AEMv8A.exe -S -C cluster0.NUM_CORES=0x1 -C
bp.secure_memory=false -C cache_state_modelled=0
Where:
• FVP_Base_AEMv8A-AEMv8A.exe - The executable for the FVP model on Windows platforms.
• -S or --cadi-server - Starts the CADI server so that Arm Debugger can connect to the FVP
model.
• -C or --parameter - Sets the parameter you want to use when running the FVP model.
• cluster0.NUM_CORES=0x1 - Specifies the number of cores to activate on the cluster in this
instance.
• bp.secure_memory=false - Sets the security state for memory access. In this example,
memory access is disabled.
• cache_state_modelled=0 - Sets the core cache state. In this example, it is disabled.
Note
The parameters and options that are required depend on your specific requirements. Check the
documentation for your FVP to locate the appropriate parameters.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 6-111
reserved.
Non-Confidential
6 Configuring debug connections in Arm® Debugger
6.7 Configuring a connection to an external Fixed Virtual Platform (FVP) for bare-metal application debug
You can find the options and parameters that are used in this example in the Fixed Virtual
Platforms FVP Reference Guide. You can also enter --list-params after the FVP executable
name to print available platform parameters.
The FVP is now running in the background awaiting incoming CADI connection requests from
Arm Debugger.
10. In the Debug Control view, double-click the debug configuration that you created.
This action starts the debug connection, loads the application on the model, and loads the debug
information into the debugger.
11. Click Continue running application to continue running your application.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 6-112
reserved.
Non-Confidential
6 Configuring debug connections in Arm® Debugger
6.8 Configuring a connection from the command-line to a built-in Fixed Virtual Platform (FVP)
Prerequisites
• The FVP model that you connect to must be available in the Development Studio configuration
database so you can select it. If the FVP model is not available, you must first import it and create a
new model configuration. See Create a new model configuration on page 14-324 for information.
• To load and execute the application on your FVP model using Development Studio, your application
must first be built with the appropriate compiler and linker options so that it can run on your model.
To locate the options and parameters required to build your application, refer to the documentation
for your compiler and linker.
• You must have the appropriate licenses installed to run your FVP model from the command line.
• If you use the command-line only mode, you can automate debug and trace activities. By automating
a debug session, you can save significant time and avoid repetitive tasks such as stepping through
code at source level.
Procedure
1. Open the Arm Development Studio command prompt:
• On Windows, select Start > All Programs > Arm Development Studio > Arm Development
Studio Command Prompt.
• On Linux, add the <install_directory/bin> location to your PATH environment variable and
then open a UNIX bash shell.
2. To connect to the Arm FVP Cortex-A9x4 FVP model and specify an image to load from your
workspace, at the command prompt, enter:
• On Windows: debugger --cdb-entry "Arm FVP::VE_Cortex_A9x4::Bare Metal
Debug::Bare Metal Debug::Debug Cortex-A9x4 SMP" --image "C:\Users\<user>
\developmentstudio-workspace\HelloWorld\Debug\HelloWorld.axf"
• On Linux: debugger --cdb-entry "Arm FVP::VE_Cortex_A9x4::Bare Metal Debug::Bare
Metal Debug::Debug Cortex-A9x4 SMP" --image "/home/<user>/developmentstudio-
workspace/HelloWorld/Debug/HelloWorld.axf"
Development Studio starts the Arm FVP Cortex-A9x4 FVP and loads the image. When you are
connected to your target, use any of the Arm Debugger commands to access the target and start
debugging.
For example, info registers displays all application level registers.
See Running Arm Debugger from the operating system command-line or from a script on page 12-264
for more information about how to use Arm Debugger from the operating system command-line or from
a script.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 6-113
reserved.
Non-Confidential
6 Configuring debug connections in Arm® Debugger
6.9 Configuring an Events view connection to a bare-metal target
Prerequisites
• On M-profile targets, set the registers appropriately to enable the required DWT packets. See the
Armv7-M Architecture Reference Manual for more information.
• Annotate your application source code with logging points and recompile it. See the ITM and Event
Viewer Example for Versatile Express Cortex-A9x4 provided with Arm Development Studio
examples for more information.
Procedure
1. Select Debug Configurations… from the Run menu.
2. Select Generic Arm C/C++ Application from the configuration tree and then click New to create a
new configuration.
3. In the Name field, enter a suitable name for the new configuration, for example, events_view_debug
4. Use the Connection tab to specify the target and connection settings:
a. Select the required platform in the Select target panel. For example, ARM Development Boards
> Versatile Express A9x4 > Bare Metal Debug > Debug Cortex-A9x4 SMP.
b. Select your debug hardware unit in the Target Connection list. For example, DSTREAM
Family.
c. In DTSL Options, click Edit to configure DSTREAM trace and other target options. This
displays the DTSL Configuration dialog box.
• In the Trace Capture tab, either select On Chip Trace Buffer (ETB) (for a JTAG cable
connection), or DSTREAM 4GB Trace Buffer (for a Mictor cable connection).
• In the ITM tab, enable or disable ITM trace and select any additional settings you require.
5. Click the Files tab to define the target environment and select debug versions of the application file
and libraries on the host that you want the debugger to use.
a. In the Target Configuration panel, specify your application in the Application on host to
download field.
b. If you want to debug your application at source level, select Load symbols.
c. If you want to load additional resources, for example, additional symbols or peripheral description
files from a directory, use the Files area to add them. Click + to add resources, click - to remove
resources.
6. Use the Debugger tab to configure debugger settings.
a. In the Run control area:
• Specify if you want to Connect only to the target or Debug from entry point. If you want to
start debugging from a specific symbol, select Debug from symbol.
• If you need to run target or debugger initialization scripts, select the relevant options and
specify the script paths.
• If you need to specify at debugger start up, select Execute debugger commands options and
specify the commands.
b. The debugger uses your workspace as the default working directory on the host. If you want to
change the default location, deselect the Use default option under Host working directory and
specify a new location.
c. In the Paths area, specify any directories on the host to search for files of your application using
the Source search directory field.
d. If you need to use additional resources, click Add resource (+) to add resources, click Remove
resources (-) to remove resources.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 6-114
reserved.
Non-Confidential
6 Configuring debug connections in Arm® Debugger
6.9 Configuring an Events view connection to a bare-metal target
7. If required, click the Arguments tab to enter arguments that are passed, using semihosting, to the
application when the debug session starts.
8. Click Apply to save the configuration settings.
9. Click Debug to connect to the target. Debugging requires the Development Studio perspective. If the
Confirm Perspective Switch dialog box opens, click Yes to switch perspective.
When connected and the Development Studio perspective opens, you are presented with all the
relevant views and editors.
10. Set up the Events view to show output generated by the System Trace Macrocell (STM) and
Instruction Trace Macrocell (ITM) events.
a. From the main menu, select Window > Show view > Events
Figure 6-9 Events view with data from the ITM source
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 6-115
reserved.
Non-Confidential
6 Configuring debug connections in Arm® Debugger
6.10 Exporting or importing an existing Arm® Development Studio launch configuration
Note
• To use a launch configuration from the Development Studio command-line, you must create a launch
configuration file using the Export tab on page 16-528 in the Debug Configurations dialog box.
• You cannot import Development Studio command-line launch configurations.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 6-116
reserved.
Non-Confidential
6 Configuring debug connections in Arm® Debugger
6.10 Exporting or importing an existing Arm® Development Studio launch configuration
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 6-117
reserved.
Non-Confidential
6 Configuring debug connections in Arm® Debugger
6.10 Exporting or importing an existing Arm® Development Studio launch configuration
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 6-118
reserved.
Non-Confidential
6 Configuring debug connections in Arm® Debugger
6.11 Disconnecting from a target
• If you are using the Debug Control view, on the toolbar, click .
Figure 6-13 Disconnecting from a target using the Debug Control view
• If you are using the Commands view, enter quit in the Command field and click Submit.
The disconnection process ensures that the target's state does not change, except for the following:
• Any downloads to the target are canceled and stopped.
• Any breakpoints are cleared on the target, but are maintained in Arm Development Studio.
• The DAP (Debug Access Port) is powered down.
• Debug bits in the DSC (Debug Status Control) register are cleared.
If a trace capture session is in progress, trace data continues to be captured even after Arm Development
Studio has disconnected from the target.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 6-119
reserved.
Non-Confidential
Chapter 7
Controlling Target Execution
Describes how to control the target when certain events occur or when certain conditions are met.
It contains the following sections:
• 7.1 Overview: Breakpoints and Watchpoints on page 7-121.
• 7.2 Running, stopping, and stepping through an application on page 7-123.
• 7.3 Working with breakpoints on page 7-125.
• 7.4 Working with watchpoints on page 7-126.
• 7.5 Importing and exporting breakpoints and watchpoints on page 7-128.
• 7.6 Viewing the properties of a breakpoint or a watchpoint on page 7-129.
• 7.7 Associating debug scripts to breakpoints on page 7-131.
• 7.8 Conditional breakpoints on page 7-132.
• 7.9 Assigning conditions to an existing breakpoint on page 7-133.
• 7.10 Conditional watchpoints on page 7-135.
• 7.11 Assigning conditions to an existing watchpoint on page 7-136.
• 7.12 Pending breakpoints and watchpoints on page 7-137.
• 7.13 Setting a tracepoint on page 7-139.
• 7.14 Handling UNIX signals on page 7-140.
• 7.15 Handling processor exceptions on page 7-142.
• 7.16 Cross-trigger configuration on page 7-144.
• 7.17 Using semihosting to access resources on the host computer on page 7-145.
• 7.18 Working with semihosting on page 7-147.
• 7.19 Configuring the debugger path substitution rules on page 7-149.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 7-120
reserved.
Non-Confidential
7 Controlling Target Execution
7.1 Overview: Breakpoints and Watchpoints
Breakpoints
A breakpoint enables you to interrupt your application when execution reaches a specific address. When
execution reaches the breakpoint, normal execution stops before any instruction stored there is executed.
Types of breakpoints:
• Software breakpoints stop your program when execution reaches a specific address.
Software breakpoints are implemented by the debugger replacing the instruction at the breakpoint
address with a special instruction. Software breakpoints can only be set in RAM.
• Hardware breakpoints use special processor hardware to interrupt application execution. Hardware
breakpoints are a limited resource.
You can configure breakpoint properties to make them:
• Conditional
Conditional breakpoints trigger when an expression evaluates to true or when an ignore counter is
reached. See Conditional breakpoints on page 7-132 for more information.
• Temporary
Temporary breakpoints can be hit only once and are automatically deleted afterwards.
• Scripted
A script file is assigned to a specific breakpoint. When the breakpoint is triggered, then the script
assigned to it is executed.
Note
• Memory region and the related access attributes.
• Hardware support provided by your target processor.
• Debug interface used to maintain the target connection.
• Running state if you are debugging an OS-aware application.
The Target view shows the breakpoint capabilities of the target.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 7-121
reserved.
Non-Confidential
7 Controlling Target Execution
7.1 Overview: Breakpoints and Watchpoints
Watchpoints
A watchpoint is similar to a breakpoint, but it is the address of a data access that is monitored rather than
an instruction being executed. You specify a global variable or a memory address to monitor.
Watchpoints are sometimes known as data breakpoints, emphasizing that they are data dependent.
Execution of your application stops when the address being monitored is accessed by your application.
You can set read, write, or read/write watchpoints.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 7-122
reserved.
Non-Confidential
7 Controlling Target Execution
7.2 Running, stopping, and stepping through an application
Note
• You must compile your code with debug information to use the source level stepping commands. By
default, source level calls to functions with no debug information are stepped over. Use the set step-
mode command to change this default setting.
• Be aware that when stepping at the source level, the debugger uses temporary breakpoints to stop
execution at the specified location. These temporary breakpoints might require the use of hardware
breakpoints, especially when stepping through code in ROM or Flash. If the available hardware
breakpoint resources are not enough, then the debugger displays an error message.
• Stepping on multicore targets are dependent on SMP/AMP and debugger settings. See Overview:
Debugging multi-core (SMP and AMP), big.LITTLE, and multi-cluster targets on page 5-85 for more
information.
There are several ways to step through an application. You can choose to step:
• Source level or instruction level.
In source level debugging, you step through one line or expression in your source code. For
instruction level debugging, you step through one machine instruction. Use the Toggle stepping
mode button on the toolbar to switch between source and instruction level debugging modes.
• Into, over, or out of all function calls.
If your source is compiled with debug information, using the execution control group of commands,
you can step into, step through, or step out of functions.
• Through multiple statements in a single line of source code, for example a for loop.
Toolbar options
Continue running the application - Click to start or resume execution.
Interrupt running the application - Click to pause execution.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 7-123
reserved.
Non-Confidential
7 Controlling Target Execution
7.2 Running, stopping, and stepping through an application
Step out - Click to continue running to the next line of code after the selected stack frame finishes.
Toggle stepping mode - Click to change the stepping mode between source line and instruction.
Examples
To step a specified number of times you must use the Commands view to manually execute one of the
stepping commands with a number.
For example:
steps 5 # Execute five source statements
stepi 5 # Execute five instructions
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 7-124
reserved.
Non-Confidential
7 Controlling Target Execution
7.3 Working with breakpoints
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 7-125
reserved.
Non-Confidential
7 Controlling Target Execution
7.4 Working with watchpoints
Setting a watchpoint
1. Select the required Access Type. You can choose:
• Read Read access watchpoint - To stop the target when a read access occurs.
• Write Write access watchpoint - To stop the target when a write access occurs.
• Access Read or Write access watchpoint - To stop the target when either a read or write
access occurs.
2. If you want to enable the watchpoint when it is created, select Enable.
Note
The default is enabled, but if a conditional watchpoint exists, the watchpoint is created disabled. Only
one watchpoint can be enabled if a conditional watchpoint exists.
3. Specify the width to watch at the given address, in bits. Accepted values are: 8, 16, 32, and 64 if
supported by the target.
This parameter is optional. The width defaults to:
• 32 bits for an address.
• The width corresponding to the type of the symbol or expression, if entered.
4. Expand Stop Condition and in the Expression field, enter a C-style expression. For example, if your
application code has a variable x, then you can specify: x == 10. If no expression is specified, then
the breakpoint or watchpoint condition is deleted.
5. Click OK to apply your selection.
If you created a watchpoint to monitor a global variable, you can view it in the Variables view. If you
created a watchpoint to monitor a memory address, you can view it in the Memory view.
Also, you can view all watchpoints and breakpoints in your application in the Breakpoints view.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 7-126
reserved.
Non-Confidential
7 Controlling Target Execution
7.4 Working with watchpoints
Deleting a watchpoint
To delete a watchpoint, right-click a watchpoint and either select Remove Watchpoint or select Toggle
Watchpoint.
Disabling a watchpoint
To disable a watchpoint, right-click a watchpoint and select Disable Watchpoint to temporarily disable
it. To re-enable it, select Enable Watchpoint.
Related tasks
7.11 Assigning conditions to an existing watchpoint on page 7-136
Related references
16.38 Watchpoint Properties dialog box on page 16-507
Related information
awatch command
rwatch command
watch command
watch set property command
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 7-127
reserved.
Non-Confidential
7 Controlling Target Execution
7.5 Importing and exporting breakpoints and watchpoints
Note
• All breakpoints and watchpoints shown in the Breakpoints view are saved.
• Existing breakpoints and watchpoints settings for the current connection are deleted and replaced by
the settings from the imported file.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 7-128
reserved.
Non-Confidential
7 Controlling Target Execution
7.6 Viewing the properties of a breakpoint or a watchpoint
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 7-129
reserved.
Non-Confidential
7 Controlling Target Execution
7.6 Viewing the properties of a breakpoint or a watchpoint
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 7-130
reserved.
Non-Confidential
7 Controlling Target Execution
7.7 Associating debug scripts to breakpoints
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 7-131
reserved.
Non-Confidential
7 Controlling Target Execution
7.8 Conditional breakpoints
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 7-132
reserved.
Non-Confidential
7 Controlling Target Execution
7.9 Assigning conditions to an existing breakpoint
Procedure
1. In the Breakpoints view, select the breakpoint that you want to modify and right-click to display the
context menu.
2. Select Properties… to display the Breakpoint Properties dialog box.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 7-133
reserved.
Non-Confidential
7 Controlling Target Execution
7.9 Assigning conditions to an existing breakpoint
Note
If you set a breakpoint for a specific thread, then any conditions you set for the breakpoint are
checked only for that thread.
5. If you want the debugger to delay hitting the breakpoint until a specific number of passes has
occurred, then:
a. In the Ignore Count field, enter the number of passes. For example, if you have a loop that
performs 100 iterations, and you want a breakpoint in that loop to be hit after 50 passes, then enter
50.
6. If you want to run a script when the selected breakpoint is triggered, then:
a. In the On break, runscript field, specify the script file.
Click File System… to locate the file in an external directory from the workspace or click
Workspace… to locate the file within the workspace.
Note
Take care with commands used in a script file that is attached to a breakpoint. For example, if the
script file contains the quit command, the debugger disconnects from the target when the
breakpoint is hit.
7. Select Continue Execution if you want to enable the debugger to automatically continue running the
application on completion of all the breakpoint actions. Alternatively, you can enter the continue
command as the last command in a script file, that is attached to a breakpoint.
8. Select Silent if you want to hide breakpoint information in the Commands view.
9. If required, specify a Virtual Machine ID (VMID).
Note
You can only specify a Virtual Machine ID (VMID) if hardware virtualization is supported by your
target.
10. Once you have selected the required options, click OK to save your changes.
Related references
16.3 Arm assembler editor on page 16-400
16.4 Breakpoints view on page 16-402
16.5 C/C++ editor on page 16-406
16.6 Commands view on page 16-410
16.9 Disassembly view on page 16-420
16.12 Expressions view on page 16-431
16.16 Memory view on page 16-441
16.19 Registers view on page 16-457
16.30 Variables view on page 16-490
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 7-134
reserved.
Non-Confidential
7 Controlling Target Execution
7.10 Conditional watchpoints
Note
• Conditional watchpoints are not supported on gdbserver connections currently.
• You can create several conditional watchpoints, but when a conditional watchpoint is enabled, no
other watchpoints (regardless of whether they are conditional) can be enabled.
• Conditional watchpoints can be intrusive and lower performance if they are hit frequently since the
debugger stops the target every time the watchpoint triggers.
See Working with watchpoints on page 7-126 for details about assigning a condition to watchpoint when
creating it. See Assigning conditions to an existing watchpoint on page 7-136 for details about assigning
conditions to an existing watchpoint.
You can also use the awatch, rwatch, and watch commands to assign conditions to a watchpoint.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 7-135
reserved.
Non-Confidential
7 Controlling Target Execution
7.11 Assigning conditions to an existing watchpoint
Procedure
1. In the Breakpoints view, select the watchpoint that you want to modify and right-click to display the
context menu.
2. Select Properties… to display the Watchpoint Properties dialog box.
3. If not selected, select Enabled.
4. Specify the width to watch at the given address, in bits. Accepted values are: 8, 16, 32, and 64 if
supported by the target.
This parameter is optional. The width defaults to:
• 32 bits for an address.
• The width corresponding to the type of the symbol or expression, if entered.
5. Expand Stop Condition and in the Expression field, enter a C-style expression. For example, if your
application code has a variable x, then you can specify: x == 10.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 7-136
reserved.
Non-Confidential
7 Controlling Target Execution
7.12 Pending breakpoints and watchpoints
Examples
break -p lib.c:20 # Sets a pending breakpoint at line 20 in lib.c
awatch -p *0x80D4 # Sets a pending read/write watchpoint on address 0x80D4
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 7-137
reserved.
Non-Confidential
7 Controlling Target Execution
7.12 Pending breakpoints and watchpoints
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 7-138
reserved.
Non-Confidential
7 Controlling Target Execution
7.13 Setting a tracepoint
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 7-139
reserved.
Non-Confidential
7 Controlling Target Execution
7.14 Handling UNIX signals
Note
You can also use the info signals command to display the current signal handler settings.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 7-140
reserved.
Non-Confidential
7 Controlling Target Execution
7.14 Handling UNIX signals
Note
UNIX signals SIGINT and SIGTRAP cannot be debugged in the same way as other signals because they
are used internally by the debugger for asynchronous stopping of the process and breakpoints
respectively.
Examples
If you want the application to ignore a signal, but log the event when it is triggered, then you must enable
stopping on a signal.
Ignoring a SIGHUP signal
In the following example, a SIGHUP signal occurs causing the debugger to stop and print a
message. No signal handler is invoked when using this setting and the debugged application
ignores the signal and continues to operate.
handle SIGHUP stop print # Enable stop and print on SIGHUP signal
Related concepts
10.9 About debugging shared libraries on page 10-203
10.10.2 About debugging a Linux kernel on page 10-206
10.10.3 About debugging Linux kernel modules on page 10-208
Related references
7.2 Running, stopping, and stepping through an application on page 7-123
9.1 Examining the target execution environment on page 9-187
9.2 Examining the call stack on page 9-188
7.15 Handling processor exceptions on page 7-142
16.4 Breakpoints view on page 16-402
16.6 Commands view on page 16-410
16.40 Manage Signals dialog box on page 16-510
Related information
Arm Debugger commands
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 7-141
reserved.
Non-Confidential
7 Controlling Target Execution
7.15 Handling processor exceptions
Note
The available vector catch events are dependent on the exact processor that you are connected to.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 7-142
reserved.
Non-Confidential
7 Controlling Target Execution
7.15 Handling processor exceptions
Note
You can also use the info signals command to display the current handler settings.
Examples
Debugging an exception handler
If you want the debugger to catch the exception, log the event, and stop the application when the
exception occurs, then you must enable stopping on an exception. In the following example, a
NON-SECURE_FIQ exception occurs causing the debugger to stop and print a message in the
Commands view. You can then step or run to the handler, if present.
handle NON-SECURE_FIQ stop # Enable stop and print on a NON-SECURE_FIQ
exception
Ignoring an exception
If you want the exception to invoke the handler without stopping, then you must disable
stopping on an exception.
handle NON-SECURE_FIQ nostop # Disable stop on a NON-SECURE_FIQ exception
Related concepts
10.9 About debugging shared libraries on page 10-203
10.10.2 About debugging a Linux kernel on page 10-206
10.10.3 About debugging Linux kernel modules on page 10-208
Related references
7.2 Running, stopping, and stepping through an application on page 7-123
9.1 Examining the target execution environment on page 9-187
9.2 Examining the call stack on page 9-188
7.14 Handling UNIX signals on page 7-140
16.4 Breakpoints view on page 16-402
16.6 Commands view on page 16-410
16.40 Manage Signals dialog box on page 16-510
Related information
Arm Debugger commands
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 7-143
reserved.
Non-Confidential
7 Controlling Target Execution
7.16 Cross-trigger configuration
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 7-144
reserved.
Non-Confidential
7 Controlling Target Execution
7.17 Using semihosting to access resources on the host computer
0xFFFFFFFF
Stack base
(Top of
memory)
Stack
Heap
limit
Heap
Heap
base
End of
application ZI data
RW
data
Application code
(RO +RW)
Application
base
0x00000000
Figure 7-11 Typical layout between top of memory, stack, and heap
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 7-145
reserved.
Non-Confidential
7 Controlling Target Execution
7.17 Using semihosting to access resources on the host computer
See Using the C and C++ libraries with an application in a semihosting environment section in the
Arm Compiler Arm C and C++ Libraries and Floating-Point Support User Guide for more
information.
• In Fast Models and FVPs, semihosting is enabled when the semihosting-enable=true option is set.
See Configuring the model in the Fixed Virtual Platform (FVP) Reference Guide for more
information.
• In Arm Debugger, semihosting is enabled automatically when an image is loaded that contains the
special symbols __auto_semihosting or __semihosting_library_function, or if you explicitly
enable semihosting using the set semihosting enabled on command. See the set semihosting
command documentation for more information.
Related references
21.3 About passing arguments to main() on page 21-670
7.18 Working with semihosting on page 7-147
16.47 Debug Configurations - Arguments tab on page 16-524
16.1 App Console view on page 16-397
Related information
Arm Debugger commands
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 7-146
reserved.
Non-Confidential
7 Controlling Target Execution
7.18 Working with semihosting
Examples
#include <stdio.h>
int main(void){
printf("Hello world\n");
return 0;
}
Note
Alternatively, you can disable semihosting in the console and use a separate telnet session to interact
directly with the application. During start up, the debugger creates a semihosting server socket and
displays the port number to use for the telnet session.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 7-147
reserved.
Non-Confidential
7 Controlling Target Execution
7.18 Working with semihosting
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 7-148
reserved.
Non-Confidential
7 Controlling Target Execution
7.19 Configuring the debugger path substitution rules
Procedure
1. Open the Path Substitution dialog box.
• If a source file cannot be located, a warning is displayed in the C/C++ editor. Click the Set Path
Substitution option.
2. In the Debug Control view, select Path Substitution from the view menu.
Note
You must be connected to your target to access the Path Substitution menu option.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 7-149
reserved.
Non-Confidential
7 Controlling Target Execution
7.19 Configuring the debugger path substitution rules
b. Click Edit Path to edit the path in the Edit Substitute Path dialog box.
c. Make your changes and click OK to accept the changes and close the dialog box.
6. Duplicate substitution rules.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 7-150
reserved.
Non-Confidential
7 Controlling Target Execution
7.19 Configuring the debugger path substitution rules
a. Select the path that you want to duplicate in the Path Substitution dialog box.
b.
Click Duplicate substitution rules to display the Edit Substitute Path dialog box.
c.
Make your changes and click OK to accept the changes and close the dialog box.
d.
If required, you can change the order of the substitution rules.
e.
Click OK to pass the substitution rules to the debugger and close the Path Substitution dialog
box.
Related concepts
21.2 About loading debug information into the debugger on page 21-668
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 7-151
reserved.
Non-Confidential
Chapter 8
Working with the Target Configuration Editor
Describes how to use the editor when developing a project for an Arm target.
It contains the following sections:
• 8.1 About the Target Configuration Editor on page 8-153.
• 8.2 Target configuration editor - Overview tab on page 8-154.
• 8.3 Target configuration editor - Memory tab on page 8-156.
• 8.4 Target configuration editor - Peripherals tab on page 8-159.
• 8.5 Target configuration editor - Registers tab on page 8-161.
• 8.6 Target configuration editor - Group View tab on page 8-163.
• 8.7 Target configuration editor - Enumerations tab on page 8-165.
• 8.8 Target configuration editor - Configurations tab on page 8-166.
• 8.9 Scenario demonstrating how to create a new target configuration file on page 8-168.
• 8.10 Creating a power domain for a target on page 8-179.
• 8.11 Creating a Group list on page 8-180.
• 8.12 Importing an existing target configuration file on page 8-182.
• 8.13 Exporting a target configuration file on page 8-184.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 8-152
reserved.
Non-Confidential
8 Working with the Target Configuration Editor
8.1 About the Target Configuration Editor
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 8-153
reserved.
Non-Confidential
8 Working with the Target Configuration Editor
8.2 Target configuration editor - Overview tab
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 8-154
reserved.
Non-Confidential
8 Working with the Target Configuration Editor
8.2 Target configuration editor - Overview tab
Mandatory fields are indicated by an asterisk. Toolbar buttons and error messages are displayed in the
header panel as appropriate.
Related concepts
8.1 About the Target Configuration Editor on page 8-153
Related tasks
8.10 Creating a power domain for a target on page 8-179
Related references
8.3 Target configuration editor - Memory tab on page 8-156
8.4 Target configuration editor - Peripherals tab on page 8-159
8.5 Target configuration editor - Registers tab on page 8-161
8.6 Target configuration editor - Group View tab on page 8-163
8.7 Target configuration editor - Enumerations tab on page 8-165
8.8 Target configuration editor - Configurations tab on page 8-166
8.9 Scenario demonstrating how to create a new target configuration file on page 8-168
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 8-155
reserved.
Non-Confidential
8 Working with the Target Configuration Editor
8.3 Target configuration editor - Memory tab
Graphical view
In the graphical view, the following options are available:
View by Map Rule
Filter the graphical view based on the selected rule.
View by Address Type
Filter the graphical view based on secure or non-secure addresses. Available only when
TrustZone is supported. You can select TrustZone support in the Overview tab.
View by Power Domain
Filter the graphical view based on the power domain. Available only when Power Domain is
supported. You can select Power Domain support in the Overview tab.
Add button
Add a new memory region.
Remove button
Remove the selected memory region.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 8-156
reserved.
Non-Confidential
8 Working with the Target Configuration Editor
8.3 Target configuration editor - Memory tab
Mandatory fields are indicated by an asterisk. Toolbar buttons and error messages are displayed in the
header panel as appropriate.
Related concepts
8.1 About the Target Configuration Editor on page 8-153
Related tasks
8.9.1 Creating a memory map on page 8-169
8.9.8 Creating a memory region for remapping by a control register on page 8-175
8.9.9 Applying the map rules to the overlapping memory regions on page 8-176
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 8-157
reserved.
Non-Confidential
8 Working with the Target Configuration Editor
8.3 Target configuration editor - Memory tab
Related references
8.2 Target configuration editor - Overview tab on page 8-154
8.4 Target configuration editor - Peripherals tab on page 8-159
8.5 Target configuration editor - Registers tab on page 8-161
8.6 Target configuration editor - Group View tab on page 8-163
8.7 Target configuration editor - Enumerations tab on page 8-165
8.8 Target configuration editor - Configurations tab on page 8-166
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 8-158
reserved.
Non-Confidential
8 Working with the Target Configuration Editor
8.4 Target configuration editor - Peripherals tab
Graphical view
In the graphical view, the following options are available:
View by Address Type
Filter the graphical view based on secure or non-secure addresses. Available only when
TrustZone is supported. You can select TrustZone support in the Overview tab.
View by Power Domain
Filter the graphical view based on the power domain. Available only when Power Domain is
supported. You can select Power Domain support in the Overview tab.
Add button
Add a new peripheral.
Remove button
Remove the selected peripheral and, if required, the associated registers.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 8-159
reserved.
Non-Confidential
8 Working with the Target Configuration Editor
8.4 Target configuration editor - Peripherals tab
Mandatory fields are indicated by an asterisk. Toolbar buttons and error messages are displayed in the
header panel as appropriate.
Related concepts
8.1 About the Target Configuration Editor on page 8-153
Related tasks
8.9.2 Creating a peripheral on page 8-170
Related references
8.2 Target configuration editor - Overview tab on page 8-154
8.3 Target configuration editor - Memory tab on page 8-156
8.5 Target configuration editor - Registers tab on page 8-161
8.6 Target configuration editor - Group View tab on page 8-163
8.7 Target configuration editor - Enumerations tab on page 8-165
8.8 Target configuration editor - Configurations tab on page 8-166
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 8-160
reserved.
Non-Confidential
8 Working with the Target Configuration Editor
8.5 Target configuration editor - Registers tab
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 8-161
reserved.
Non-Confidential
8 Working with the Target Configuration Editor
8.5 Target configuration editor - Registers tab
Mandatory fields are indicated by an asterisk. Toolbar buttons and error messages are displayed in the
header panel as appropriate.
Related concepts
8.1 About the Target Configuration Editor on page 8-153
Related tasks
8.9.3 Creating a standalone register on page 8-171
8.9.4 Creating a peripheral register on page 8-171
8.9.6 Assigning enumerations to a peripheral register on page 8-173
8.9.5 Creating enumerations for use with a peripheral register on page 8-172
Related references
8.2 Target configuration editor - Overview tab on page 8-154
8.3 Target configuration editor - Memory tab on page 8-156
8.4 Target configuration editor - Peripherals tab on page 8-159
8.6 Target configuration editor - Group View tab on page 8-163
8.7 Target configuration editor - Enumerations tab on page 8-165
8.8 Target configuration editor - Configurations tab on page 8-166
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 8-162
reserved.
Non-Confidential
8 Working with the Target Configuration Editor
8.6 Target configuration editor - Group View tab
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 8-163
reserved.
Non-Confidential
8 Working with the Target Configuration Editor
8.6 Target configuration editor - Group View tab
Mandatory fields are indicated by an asterisk. Toolbar buttons and error messages are displayed in the
header panel as appropriate.
Related concepts
8.1 About the Target Configuration Editor on page 8-153
Related tasks
8.11 Creating a Group list on page 8-180
Related references
8.2 Target configuration editor - Overview tab on page 8-154
8.3 Target configuration editor - Memory tab on page 8-156
8.4 Target configuration editor - Peripherals tab on page 8-159
8.5 Target configuration editor - Registers tab on page 8-161
8.7 Target configuration editor - Enumerations tab on page 8-165
8.8 Target configuration editor - Configurations tab on page 8-166
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 8-164
reserved.
Non-Confidential
8 Working with the Target Configuration Editor
8.7 Target configuration editor - Enumerations tab
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 8-165
reserved.
Non-Confidential
8 Working with the Target Configuration Editor
8.8 Target configuration editor - Configurations tab
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 8-166
reserved.
Non-Confidential
8 Working with the Target Configuration Editor
8.8 Target configuration editor - Configurations tab
Mandatory fields are indicated by an asterisk. Toolbar buttons and error messages are displayed in the
header panel as appropriate.
Related concepts
8.1 About the Target Configuration Editor on page 8-153
Related tasks
8.9.3 Creating a standalone register on page 8-171
8.9.7 Creating remapping rules for a control register on page 8-174
8.10 Creating a power domain for a target on page 8-179
Related references
8.2 Target configuration editor - Overview tab on page 8-154
8.3 Target configuration editor - Memory tab on page 8-156
8.4 Target configuration editor - Peripherals tab on page 8-159
8.5 Target configuration editor - Registers tab on page 8-161
8.6 Target configuration editor - Group View tab on page 8-163
8.7 Target configuration editor - Enumerations tab on page 8-165
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 8-167
reserved.
Non-Confidential
8 Working with the Target Configuration Editor
8.9 Scenario demonstrating how to create a new target configuration file
Reserved 8 7 6 5 4 3 2 1
LED
Bit [7] Read/Write Set to 1 to enable mapping of external peripheral DMA signals to the DMA controller channel.
— The core module and LCD control register. This register is located at 0x1000000C and controls a
number of user-configurable features of the core module and the display interface on the
baseboard.
31 24 23 21 20 19 8 7 4 3 2 1 0
Reserved RESET
EBI_WP REMAP
nMBDET
LED
This register uses bit 2 to control the remapping of an area of memory as shown in the following
table.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 8-168
reserved.
Non-Confidential
8 Working with the Target Configuration Editor
8.9 Scenario demonstrating how to create a new target configuration file
Procedure
1. Add a new file with the .tcf file extension to an open project. The editor opens with the Overview
tab activated.
2. Select the Overview tab, enter a unique board name, for example: My-Dev-Board.
3. Select the Memory tab.
4. Click the Switch to table button in the top right of the view.
5. Enter the data as shown in the following figure.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 8-169
reserved.
Non-Confidential
8 Working with the Target Configuration Editor
8.9 Scenario demonstrating how to create a new target configuration file
On completion, you can switch back to the graphical view to see the color coded stack of memory
regions.
Related tasks
8.9.2 Creating a peripheral on page 8-170
8.9.3 Creating a standalone register on page 8-171
8.9.4 Creating a peripheral register on page 8-171
8.9.5 Creating enumerations for use with a peripheral register on page 8-172
8.9.6 Assigning enumerations to a peripheral register on page 8-173
8.9.7 Creating remapping rules for a control register on page 8-174
8.9.8 Creating a memory region for remapping by a control register on page 8-175
8.9.9 Applying the map rules to the overlapping memory regions on page 8-176
Related references
8.3 Target configuration editor - Memory tab on page 8-156
Procedure
1. Select the Peripherals tab.
2. Click the Switch to table button in the top right of the view.
3. Enter the data as shown in the following figure.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 8-170
reserved.
Non-Confidential
8 Working with the Target Configuration Editor
8.9 Scenario demonstrating how to create a new target configuration file
Procedure
1. Select the Registers tab.
2. Enter the register data as shown in the figure.
3. Bitfield data is entered in a floating table associated with the selected register. Select the Unique
name field containing the register name, BRD_SYS_LED.
4. Click the Edit Bitfield button in the top right corner of the view.
5. In the floating Bitfield table, enter the data as shown in the following figure. If required, you can
dock this table below the register table by clicking on the title bar of the Bitfield table and dragging it
to the base of the register table.
Procedure
1. Select the Registers tab, if it is not already active.
2. Enter the peripheral register and associated bitfield data as shown in the following figure.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 8-171
reserved.
Non-Confidential
8 Working with the Target Configuration Editor
8.9 Scenario demonstrating how to create a new target configuration file
Procedure
1. Select the Enumerations tab.
2. Enter the data as shown in the following figure.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 8-172
reserved.
Non-Confidential
8 Working with the Target Configuration Editor
8.9 Scenario demonstrating how to create a new target configuration file
Procedure
1. Select the Registers tab.
2. Open the relevant Bitfield table for the DMA peripheral.
3. Assign enumerations as shown in the following figure.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 8-173
reserved.
Non-Confidential
8 Working with the Target Configuration Editor
8.9 Scenario demonstrating how to create a new target configuration file
Procedure
1. Select the Configurations tab.
2. Enter the data as shown in the following figure.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 8-174
reserved.
Non-Confidential
8 Working with the Target Configuration Editor
8.9 Scenario demonstrating how to create a new target configuration file
Procedure
1. Select the Memory tab.
2. Switch to the table view by clicking on the relevant button in the top corner.
3. Enter the data as shown in the following figure.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 8-175
reserved.
Non-Confidential
8 Working with the Target Configuration Editor
8.9 Scenario demonstrating how to create a new target configuration file
Procedure
1. Switch back to the graphic view by clicking on the relevant button in the top corner.
2. Select the overlapping memory region M32bit_RAM_block1_alias and then select
Remap_RAM_block1 from the Apply Map Rule drop-down menu as shown in the following
figure.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 8-176
reserved.
Non-Confidential
8 Working with the Target Configuration Editor
8.9 Scenario demonstrating how to create a new target configuration file
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 8-177
reserved.
Non-Confidential
8 Working with the Target Configuration Editor
8.9 Scenario demonstrating how to create a new target configuration file
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 8-178
reserved.
Non-Confidential
8 Working with the Target Configuration Editor
8.10 Creating a power domain for a target
Prerequisites
Before you create a power domain configuration, you must first create a control register.
Procedure
1. Click on the Overview tab.
2. Select Supported for the Power Domain setting.
3. Click on the Configurations tab.
4. Expand the Power Domain Configurations group.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 8-179
reserved.
Non-Confidential
8 Working with the Target Configuration Editor
8.11 Creating a Group list
Procedure
1. Click on the Group View tab.
2. Click Add a new group in the Group View List.
3. Select the new group.
Note
You can create a subgroup by selecting a group and clicking Add.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 8-180
reserved.
Non-Confidential
8 Working with the Target Configuration Editor
8.11 Creating a Group list
Related references
8.6 Target configuration editor - Group View tab on page 8-163
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 8-181
reserved.
Non-Confidential
8 Working with the Target Configuration Editor
8.12 Importing an existing target configuration file
Procedure
1. Select Import from the File menu.
2. Expand the Target Configuration Editor group.
3. Select the required file type.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 8-182
reserved.
Non-Confidential
8 Working with the Target Configuration Editor
8.12 Importing an existing target configuration file
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 8-183
reserved.
Non-Confidential
8 Working with the Target Configuration Editor
8.13 Exporting a target configuration file
Note
Before using the export wizard, you must ensure that the Target Configuration File (TCF) is open in the
editor view.
Procedure
1. Select Export from the File menu.
2. Expand the Target Configuration Editor group.
3. Select C Header file.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 8-184
reserved.
Non-Confidential
8 Working with the Target Configuration Editor
8.13 Exporting a target configuration file
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 8-185
reserved.
Non-Confidential
Chapter 9
Examining the Target
This chapter describes how to examine registers, variables, memory, and the call stack.
It contains the following sections:
• 9.1 Examining the target execution environment on page 9-187.
• 9.2 Examining the call stack on page 9-188.
• 9.3 About trace support on page 9-189.
• 9.4 About post-mortem debugging of trace data on page 9-192.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 9-186
reserved.
Non-Confidential
9 Examining the Target
9.1 Examining the target execution environment
Alternatively, you can use debugger commands to display the required information. In the Commands
view, you can execute individual commands or you can execute a sequence of commands by using a
script file.
Related concepts
10.9 About debugging shared libraries on page 10-203
10.10.2 About debugging a Linux kernel on page 10-206
10.10.3 About debugging Linux kernel modules on page 10-208
Related references
7.2 Running, stopping, and stepping through an application on page 7-123
9.2 Examining the call stack on page 9-188
7.14 Handling UNIX signals on page 7-140
7.15 Handling processor exceptions on page 7-142
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 9-187
reserved.
Non-Confidential
9 Examining the Target
9.2 Examining the call stack
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 9-188
reserved.
Non-Confidential
9 Examining the Target
9.3 About trace support
Trace hardware
Processor trace is typically provided by an external hardware block connected to the processor. This is
known as an Embedded Trace Macrocell (ETM) or Program Trace Macrocell (PTM) and is an optional
part of an Arm architecture-based system. System-on-chip designers might omit this block from their
silicon to reduce costs. Unless using start/stop debug to observe the trace data, these blocks observe (but
do not affect) the processor behavior and are able to monitor instruction execution and data accesses.
There are two main problems with capturing trace. The first is that with very high processor clock
speeds, even a few seconds of operation can mean billions of cycles of execution. Clearly, to look at this
volume of information would be extremely difficult. The second problem is that data trace requires very
high bandwidth as every load or store operation generates trace information. This is a problem because
typically only a few pins are provided on the chip and these outputs might be able to be switched at
significantly lower rates than the processor can be clocked at. It is very easy to exceed the capacity of the
trace port. To solve this latter problem, the trace macrocell tries to compress information to reduce the
bandwidth required. However, the main method to deal with these issues is to control the trace block so
that only selected trace information is gathered. For example, trace only execution, without recording
data values, or trace only data accesses to a particular peripheral or during execution of a particular
function.
In addition, it is common to store trace information in an on-chip memory buffer, the Embedded Trace
Buffer (ETB). This alleviates the problem of getting information off-chip at speed, but has an additional
cost in terms of silicon area and also provides a fixed limit on the amount of trace that can be captured.
The ETB stores the compressed trace information in a circular fashion, continuously capturing trace
information until stopped. The size of the ETB varies between chip implementations, but a buffer of 8 or
16kB is typically enough to hold a several thousand lines of program trace.
Trace Ranges
Trace ranges enable you to restrict the capture of trace to a linear range of memory. A trace range has a
start and end address in virtual memory, and any execution within this address range is captured. In
contrast to trace start and end points, any function calls made within a trace range are only captured if the
target of the function call is also within the specified address range. The number of trace ranges that can
be enabled is determined by the debug hardware in your processor.
When no trace ranges are set, trace data for all virtual addresses is captured. When any trace ranges are
set, trace capture is disabled by default, and is only enabled when within the defined ranges.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 9-189
reserved.
Non-Confidential
9 Examining the Target
9.3 About trace support
You can configure trace ranges using the Ranges tab in the Trace view. The start and end address for
each range can either be an absolute address or an expression, such as the name of a function. Be aware
that optimizing compilers might rearrange or minimize code in memory from that in the associated
source code. This can lead to code being unexpectedly included or excluded from the trace capture.
Trace Points
Trace points enable you to control precisely where in your program trace is captured. Trace points are
non-intrusive and do not require stopping the system to process. The maximum number of trace points
that can be set is determined by the debug hardware in your processor. To set trace points in the source
view, right-click in the margin and select the required option from the Arm DS Breakpoints context
menu. To set trace points in the Disassembly view, right-click on an instruction and select the required
option from the Arm DS Breakpoints context menu. Trace points are listed in the Breakpoints view. The
following types of trace points are available:
Trace Start Point
Enables trace capture when execution reaches the selected address.
Trace Stop Point
Disables trace capture when execution reaches the selected address
Trace Trigger Point
Marks this point in your source code so that you can more easily locate it in the Trace view.
Trace Start Points and Trace Stop Points enable and disable capture of trace respectively. Trace points do
not take account of nesting. For example, if you hit two Trace Start Points in a row, followed by two
Trace Stop Points, then the trace is disabled immediately when the first Trace Stop Point is reached, not
the second. With no Trace Start Points set then trace is enabled all the time by default. If you have any
Trace Start Points set, then trace is disabled by default and is only enabled when the first Trace Start
Point is hit.
Trace trigger points enable you to mark interesting locations in your source code so that you can easily
find them later in the Trace view. The first time a Trigger Point is hit a Trace Trigger Event record is
inserted into the trace buffer. Only the first Trigger Point to be hit inserts the trigger event record. To
configure the debugger so that it stops collecting trace when a trace trigger point is hit, use the Stop
Trace Capture On Trigger checkbox in the Properties tab of the Trace view.
Note
This does not stop the target. It only stops the trace capture. The target continues running normally until
it hits a breakpoint or until you click the Interrupt icon in the Debug Control view.
When this is set you can configure the amount of trace that is captured before and after a trace trigger
point using the Post-Trigger Capture Size field in the Properties tab of the Trace view. If you set this
field to:
0%
The trace capture stops as soon as possible after the first trigger point is hit. The trigger event
record can be found towards the end of the trace buffer.
50%
The trace capture stops after the first trigger point is hit and an additional 50% of the buffer is
filled. The trigger event record can be found towards the middle of the trace buffer.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 9-190
reserved.
Non-Confidential
9 Examining the Target
9.3 About trace support
99%
The trace capture stops after the first trigger point is hit and an additional 99% of the buffer is
filled. The trigger event record can be found towards the beginning of the trace buffer.
Note
Due to target timing constraints the trigger event record might get pushed out of the trace buffer.
Being able to limit trace capture to the precise areas of interest is especially helpful when using a capture
device such as an ETB, where the quantity of trace that can be captured is very small.
Select the Find Trigger Event record option in the view menu to locate Trigger Event record in the
trace buffer.
Note
Trace trigger functionality is dependent on the target platform being able to signal to the trace capture
hardware, such as ETB or DSTREAM, that a trigger condition has occurred. If this hardware signal is
not present or not configured correctly then it might not be possible to automatically stop trace capture
around trigger points.
Related concepts
9.4 About post-mortem debugging of trace data on page 9-192
12.1 Overview: Running Arm® Debugger from the command-line or from a script on page 12-265
Related tasks
12.4 Specifying a custom configuration database using the command-line on page 12-275
Related references
12.2 Command-line debugger options on page 12-266
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 9-191
reserved.
Non-Confidential
9 Examining the Target
9.4 About post-mortem debugging of trace data
Note
• The memory and registers are read-only.
• You can add more debug information using additional files.
• You can also decode trace and dump the output to files.
The basic steps for post-mortem debugging using the headless command-line debugger are:
1. Generate trace data files.
2. Use --cdb-list to list the platforms and parameters available in the configuration database.
3. Use --cdb-entry to specify a platform entry in the configuration database.
4. If you need to specify additional parameters, use the --cdb-entry-param option to specify the
parameters.
Note
At the Arm Development Studio command prompt, enter debugger --help to view the list of
available options.
Related concepts
9.3 About trace support on page 9-189
12.1 Overview: Running Arm® Debugger from the command-line or from a script on page 12-265
Related tasks
12.4 Specifying a custom configuration database using the command-line on page 12-275
Related references
12.2 Command-line debugger options on page 12-266
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 9-192
reserved.
Non-Confidential
Chapter 10
Debugging Embedded Systems
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 10-193
reserved.
Non-Confidential
10 Debugging Embedded Systems
10.1 About endianness
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 10-194
reserved.
Non-Confidential
10 Debugging Embedded Systems
10.2 About accessing AHB, APB, and AXI buses
When using address prefixes in expressions, you can also use address space parameters to specify
additional behavior. See Address space prefixes for information on how to do this.
Each address space has a size, which is the number of bits that comprise the address. Common address
space size on embedded and low-end devices is 32-bits, higher-end devices that require more memory
might use > 32-bits. As an example, some devices based around Arm architecture Armv7 make use of
LPAE (Large Physical Address Extensions) to extend physical addresses on the AXI bus to 40-bits, even
though virtual addresses within the processor are 32-bits.
The exact topology of the buses and their connection to the debug interface is dependent on your system.
See the CoreSight specifications for your hardware for more information. Typically, the debug access to
these buses bypass the processor, and so does not take into account memory mappings or caches within
the processor itself. It is implementation dependent on whether accesses to the buses occur before or after
any other caches in the system, such as L2 or L3 caches. The debugger does not attempt to achieve
coherency between caches in your system when accessing these buses and it is your responsibility to take
this into account and manually perform any clean or flush operations as required.
For example, to achieve cache coherency when debugging an image with the processors level 1 cache
enabled, you must clean and invalidate portions of the L1 cache prior to modifying any of your
application code or data using the AHB address space. This ensures that any existing changes in the
cache are written out to memory before writing to that address space, and that the processor correctly
reads your modification when execution resumes.
The behavior when accessing unallocated addresses is undefined, and depending on your system can lead
to locking up the buses. It is recommended that you only access those specific addresses that are defined
in your system. You can use the memory command to redefine the memory regions within the debugger
and modifying access rights to control the addresses. You can use the x command with the <count>
option to limit the amount of memory that is read.
Related concepts
10.4 About address spaces on page 10-197
Related references
16.6 Commands view on page 16-410
Related information
Arm Debugger commands
Address space prefixes
info memory command
info memory-parameters command
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 10-195
reserved.
Non-Confidential
10 Debugging Embedded Systems
10.3 About virtual and physical memory
If your processor also contains TrustZone® technology, then you have access to Secure and Normal
worlds, each with their own separate virtual and physical address mappings. In this case, the address
prefix P: is not available, and instead you must use NP: for normal physical and SP: for secure physical.
Note
• Processors that are compliant with Arm Architectures prior to Armv6 do not support physical
addressing in this manner. This includes the Arm7™ and Arm9™ family of processors.
• Physical address access is not enabled for all operations. For example, the Arm hardware does not
support setting breakpoints via a physical address.
When memory is accessed via a physical address, the caches are not flushed. Hence, results might
differ depending on whether you view memory through the physical or virtual addresses (assuming
they are addressing the same memory addresses).
Related references
16.6 Commands view on page 16-410
Related information
Arm Debugger commands
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 10-196
reserved.
Non-Confidential
10 Debugging Embedded Systems
10.4 About address spaces
Note
See Address space prefixes for information on how to use an address space prefix with the debug
commands.
Arm Debugger also uses these prefixes when reporting the current memory space where the execution
stopped, for example:
• For address spaces in Armv7-based processors:
Execution stopped in SVC mode at S:0x80000000
If the core is stopped in exception level EL3, the debugger cannot reliably determine whether the
translation regime at EL1/EL0 is configured for Secure or Non-secure access. This is because the Secure
Monitor can change this at run-time when switching between Secure and Non-secure Worlds. Memory
accesses from EL3, such as setting software breakpoints at EL1S: or EL1N: addresses, might cause
corruption or the target to lockup.
The memory spaces for the EL1 and EL0 exception levels have the same prefix because the same
translation tables are used for both EL0 and EL1. These translation tables are used for either Secure
EL1/EL0 or Non-secure EL1/EL0. The consequence of this is that if the core, in AArch64 state, is
stopped in EL0 in secure state, then the debugger reports: Execution stopped in EL0h mode at:
EL1S:0x0000000000000000.
Note
The reported EL1S: here refers to the memory space that is common to EL0 and EL1. It does not refer to
the exception level.
Related concepts
10.2 About accessing AHB, APB, and AXI buses on page 10-195
10.3 About virtual and physical memory on page 10-196
10.5 About debugging hypervisors on page 10-198
Related information
Address space prefixes
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 10-197
reserved.
Non-Confidential
10 Debugging Embedded Systems
10.5 About debugging hypervisors
Similarly, hardware and software breakpoints can be configured to match on hypervisor or guest
operating systems using the same address prefixes. If no address prefix is used then the breakpoint
applies to the address space that is current when the breakpoint is first set. For example, if a software
breakpoint is set in memory that is shared between hypervisor and a guest operating system, then the
possibility exists for the breakpoint to be hit from the wrong mode, and in this case the debugger may not
recognize your breakpoint as the reason for stopping.
For hardware breakpoints only, not software breakpoints, you can additionally configure them to match
only within a specific guest operating system. This feature uses the architecturally defined Virtual
Machine ID (VMID) register to spot when a specific guest operating system is executing. The hypervisor
is responsible for assigning unique VMIDs to each guest operating system setting this in the VMID
register when that guest operating system executes. In using this feature, it is your responsibility to
understand which VMID is associated with each guest operating system that you want to debug.
Assuming a VMID is known, you can apply a breakpoint to it within the Breakpoints view or by using
the break-stop-on-vmid command.
When debugging a system that is running multiple guest operating systems, you can optionally enable
the set print current-vmid setting to receive notifications in the console when the debugger stops
and the current VMID changes. You can also obtain the VMID within Arm Development Studio scripts
using the $vmid debugger variable.
Related references
16.6 Commands view on page 16-410
Related information
Arm Debugger Commands
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 10-198
reserved.
Non-Confidential
10 Debugging Embedded Systems
10.6 About debugging big.LITTLE™ systems
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 10-199
reserved.
Non-Confidential
10 Debugging Embedded Systems
10.7 About debugging bare-metal symmetric multiprocessing systems
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 10-200
reserved.
Non-Confidential
10 Debugging Embedded Systems
10.7 About debugging bare-metal symmetric multiprocessing systems
processors execute code that meets the criteria. When the debugger stops due to a breakpoint,
watchpoint, or signal, then the processor that causes the event is listed in the Commands view.
Breakpoints or watchpoints can be configured for one or more processors by selecting the required
processor in the relevant Properties dialog box. Alternatively, you can use the break-stop-on-cores
command. This feature is not available for signals.
Trace
When you are using a connection that enables trace support then you are able to view trace for each of
the processors in your system. By default, the Trace view shows trace for the processor that is currently
selected in the Debug Control view. Alternatively, you can choose to link a Trace view to a specific
processor by using the Linked: <context> toolbar option for that Trace view. Creating multiple Trace
views linked to specific processors enables you to view the trace from multiple processors at the same
time. The indexes in the Trace views do not necessarily represent the same point in time for different
processors.
Related concepts
10.6 About debugging big.LITTLE™ systems on page 10-199
21.1 About loading an image on to the target on page 21-666
21.2 About loading debug information into the debugger on page 21-668
Related tasks
7.9 Assigning conditions to an existing breakpoint on page 7-133
Related references
7.13 Setting a tracepoint on page 7-139
7.8 Conditional breakpoints on page 7-132
7.12 Pending breakpoints and watchpoints on page 7-137
7.2 Running, stopping, and stepping through an application on page 7-123
16.4 Breakpoints view on page 16-402
16.6 Commands view on page 16-410
16.9 Disassembly view on page 16-420
16.16 Memory view on page 16-441
16.18 Modules view on page 16-455
16.19 Registers view on page 16-457
16.30 Variables view on page 16-490
Related information
Arm Debugger Commands
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 10-201
reserved.
Non-Confidential
10 Debugging Embedded Systems
10.8 About debugging multi-threaded applications
where #3 is the unique ID used by the debugger, (USR) indicates the user mode, and ID 255 is the ID
from the OS.
A separate call stack is maintained for each thread and the selected stack frame is shown in bold text. All
the views in the Development Studio perspective are associated with the selected stack frame and are
updated when you select another frame.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 10-202
reserved.
Non-Confidential
10 Debugging Embedded Systems
10.9 About debugging shared libraries
Alternatively if you have multiple library files then it is probably more efficient to modify the search
paths in use by the debugger when searching for shared libraries. To do this you can use the Shared
library search directory option in the Paths panel of the Debugger tab.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 10-203
reserved.
Non-Confidential
10 Debugging Embedded Systems
10.9 About debugging shared libraries
For more information on the options in the Debug Configurations dialog box, use the dynamic help.
Related references
7.2 Running, stopping, and stepping through an application on page 7-123
9.1 Examining the target execution environment on page 9-187
9.2 Examining the call stack on page 9-188
7.14 Handling UNIX signals on page 7-140
7.15 Handling processor exceptions on page 7-142
16.4 Breakpoints view on page 16-402
16.6 Commands view on page 16-410
16.9 Disassembly view on page 16-420
16.16 Memory view on page 16-441
16.18 Modules view on page 16-455
16.19 Registers view on page 16-457
16.30 Variables view on page 16-490
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 10-204
reserved.
Non-Confidential
10 Debugging Embedded Systems
10.10 About OS awareness
Note
• By default, OS awareness is not present for an architecture or processor that is not listed above.
• OS awareness support for newer versions of the OS depends on the scope of changes to their internal
data structures.
• OS awareness in Arm Debugger does not support the original non-CMSIS Keil RTX.
• OS awareness for μC3 Standard requires you to set the vfp-flag parameter based on the --fpu
option that the μC3 Standard kernel was compiled with. You can set this using the OS Awareness tab
in the Debug Configurations dialog box, or using the command set os vfp-flag. You can set the
value to disabled, vfpv3_16, or vfpv3_32.
The Linux kernels that Arm Debugger provides OS awareness for are:
• Linux 2.6.28, Armv7-A
• Linux 2.6.38: Armv7-A
• Linux 3.0: Armv7-A
• Linux 3.11.0-rc6: Armv7-A
• Linux 3.13.0-rc3: Armv7-A
• Linux 3.6.0-rc6: Armv7-A
• Linux 3.7.0: Armv7-A
• Linux 3.9.0-rc3: Armv7-A
• Linux 3.11.0-rc6: Armv8-A
Note
Later versions of Linux are expected to work on Armv7-A Armv8-A architectures.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 10-205
reserved.
Non-Confidential
10 Debugging Embedded Systems
10.10 About OS awareness
Note
Operating system support in the debugger is activated only when OS-specific debug symbols are loaded.
Ensure that the debug symbols for the operating system are loaded before using any of the OS-specific
views and commands.
When building your FreeRTOS image, ensure that the following compiler flags are set:
• -DportREMOVE_STATIC_QUALIFIER
• -DINCLUDE_xTaskGetIdleTaskHandle
• -DconfigQUEUE_REGISTRY_SIZE=n (where n >= 1)
If these flags are set incorrectly, FreeRTOS support might fail to activate in Arm Debugger See the
documentation supplied with FreeRTOS to view the details of these flags.
Note
User space parameters (marked __user) that are not currently mapped in cannot be read by the debugger.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 10-206
reserved.
Non-Confidential
10 Debugging Embedded Systems
10.10 About OS awareness
CONFIG_PERF_EVENTS=n
Disables the performance events subsystem. Some implementations of the performance
events subsystem internally make use of hardware breakpoints, disrupting the use of
hardware breakpoints set by the debugger. It is recommended to disable this option if you
observe the debugger failing to hit hardware breakpoints or failing to report kernel module
load and unload events.
Note
If you are working with Arm Streamline, CONFIG_PERF_EVENTS must be enabled.
Compiling the kernel source generates a Linux kernel image and symbol files which contain debug
information.
Note
Be aware that:
• Other options might be required depending on the type of debugging you want to perform. Check
the kernel documentation for details.
• A Linux kernel is always compiled with full optimizations and inlining enabled, therefore:
— Stepping through code might not work as expected due to the possible reordering of some
instructions.
— Some variables might be optimized out by the compiler and therefore not be available for the
debugger.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 10-207
reserved.
Non-Confidential
10 Debugging Embedded Systems
10.10 About OS awareness
Built-in module
To debug a module that has been built into the kernel, the procedure is the same as for debugging the
kernel itself:
1. Compile the kernel together with the module.
2. Load the kernel image on to the target.
3. Load the related kernel image with debug information into the debugger
4. Debug the module as you would for any other kernel code.
Built-in (statically linked) modules are indistinguishable from the rest of the kernel code, so are not listed
by the info os-modules command and do not appear in the Modules view.
Loadable module
The procedure for debugging a loadable kernel module is more complex. From a Linux terminal shell,
you can use the insmod and rmmod commands to insert and remove a module. Debug information for
both the kernel and the loadable module must be loaded into the debugger. When you insert and remove
a module the debugger automatically resolves memory locations for debug information and existing
breakpoints. To do this, the debugger intercepts calls within the kernel to insert and remove modules.
This introduces a small delay for each action whilst the debugger stops the kernel to interrogate various
data structures.
Note
A connection must be established and Operating System (OS) support enabled within the debugger
before a loadable module can be detected. OS support is automatically enabled when a Linux kernel
image is loaded into the debugger. However, you can manually control this by using the set os
command.
Related concepts
10.10.2 About debugging a Linux kernel on page 10-206
10.7 About debugging bare-metal symmetric multiprocessing systems on page 10-200
Related tasks
6.4 Configuring a connection to a Linux kernel on page 6-103
Related references
7.2 Running, stopping, and stepping through an application on page 7-123
9.1 Examining the target execution environment on page 9-187
9.2 Examining the call stack on page 9-188
7.14 Handling UNIX signals on page 7-140
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 10-208
reserved.
Non-Confidential
10 Debugging Embedded Systems
10.10 About OS awareness
2. Load the kernel debug information. You can use the Development Studio add-symbol-file command
to load the kernel debug information into the debugger.
Note
• The address space where the kernel runs might differ from the current address space, especially if
stopped during the boot process. Ensure that the kernel debug image is loaded to the address
space that the kernel runs in, for example, EL1N.
• Do not enable OS awareness before the MMU is enabled. If you want to debug PikeOS, before
the MMU is enabled, see the Debugging PikeOS before the MMU is enabled section later in this
topic.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 10-209
reserved.
Non-Confidential
10 Debugging Embedded Systems
10.10 About OS awareness
• The kernel debug image must exactly match the kernel with which the loaded image was
compiled. Loading this information is necessary for the OS Awareness to function.
• If using the CODEO tool, you can determine the kernel that is used from the PikeOS Kernel
section of the Integration Project's Project Configuration. The debug image is typically stored
with a .elf or .unstripped file extension.
3. Load the debug information for your application or the PikeOS System Software using the add-
symbol-file command. Ensure that they are loaded to the correct address space.
Note
If using the CODEO tool, you can determine the location of files containing debug information from
the relevant sections of the Integration Project's Project Configuration. The debug images are
typically stored with a .elf or .unstripped file extension.
This step is not required or used by the OS awareness, but improves your experience if you plan to
debug either of these components.
Note
When debugging PikeOS, if you inspect unscheduled OS threads, their current Program Counter might
point to an address which is not currently mapped in by the MMU.
See About loading debug information into the debugger on page 21-668 for information on loading
debug symbols into the debugger. Also, see the documentation for the Development Studio add-symbol-
file command for information about loading the debug symbols into the debugger from the command
line.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 10-210
reserved.
Non-Confidential
10 Debugging Embedded Systems
10.10 About OS awareness
When the MMU is enabled, the previously loaded debug information must be reloaded at the unadjusted
virtual addresses. To reload the debug information, first, enter file, symbol file in the Development Studio
Command view to discard currently loaded symbols. Then, use the add-symbol-file command to load
the kernel debug information into the debugger, but this time with zero offset.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 10-211
reserved.
Non-Confidential
10 Debugging Embedded Systems
10.11 About debugging TrustZone enabled targets
When an operation such as loading debug symbols or setting a breakpoint needs to apply to both normal
and secure worlds then you must perform the operation twice, once for the normal world and once for the
secure world.
Registers such as $PC have no world. To access the content of memory from an address in a register that
is not in the current world, you can use an expression, N:0+$PC . This is generally not necessary for
expressions involving debug information, because these are associated with a world when they are
loaded.
Related references
16.4 Breakpoints view on page 16-402
16.6 Commands view on page 16-410
16.9 Disassembly view on page 16-420
16.16 Memory view on page 16-441
16.18 Modules view on page 16-455
16.19 Registers view on page 16-457
16.30 Variables view on page 16-490
Related information
Arm Debugger Commands
Arm Security Technology Building a Secure System using TrustZone Technology
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 10-212
reserved.
Non-Confidential
10 Debugging Embedded Systems
10.11 About debugging TrustZone enabled targets
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 10-213
reserved.
Non-Confidential
10 Debugging Embedded Systems
10.12 About debugging a Unified Extensible Firmware Interface (UEFI)
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 10-214
reserved.
Non-Confidential
10 Debugging Embedded Systems
10.13 About debugging MMUs
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 10-215
reserved.
Non-Confidential
10 Debugging Embedded Systems
10.13 About debugging MMUs
cache flush
Note
Flushing large caches might take a long time.
Related concepts
10.17 About debugging caches on page 10-220
Related references
16.17 MMU/MPU view on page 16-450
Related information
mmu command
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 10-216
reserved.
Non-Confidential
10 Debugging Embedded Systems
10.14 About Debug and Trace Services Layer (DTSL)
Arm has made DTSL available for your own use so that you can create Java or Jython programs to
access and control the target platform.
For details, see the DTSL documents and files provided with Arm Development Studio here:
<installation_directory>/sw/DTSL
Related references
Chapter 20 Debug and Trace Services Layer (DTSL) on page 20-597
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 10-217
reserved.
Non-Confidential
10 Debugging Embedded Systems
10.15 About CoreSight™ Target Access Library
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 10-218
reserved.
Non-Confidential
10 Debugging Embedded Systems
10.16 Debug and trace over functional I/O
A complete end-to-end solution results in an RDDI MEM-AP implementation for debug, and an RDDI
Streaming Trace implementation, both in the form of a shared library that is loaded by Arm Debugger.
These libraries are provided by the SoC or tool vendors. To associate the shared libraries with your new
connection type, you need a probe definition file, called probes.xml. All dependencies of the APIs,
including the transport protocol, drivers, and third-party libraries, must either be included in the shared
libraries or provided alongside them.
When you have configured and associated all of these software components, the result is a new virtual
probe. See Add a debug connection over functional I/O on page 15-364 for details on how to implement
a virtual probe.
Related tasks
15.3.6 Add a debug connection over functional I/O on page 15-364
15.3.5 Add a third-party debug probe on page 15-361
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 10-219
reserved.
Non-Confidential
10 Debugging Embedded Systems
10.17 About debugging caches
Note
Cache awareness is dependent on the exact device and connection method.
The Cache debug mode option in the DTSL Configuration Editor dialog box enables or disables the
reading of cache RAMs in the Cache Data view. Selecting this option enables the reading of cache
RAMs every time the target stops, if the Cache Data view is suitably configured.
Enabling the Preserve cache contents in debug state option in the DTSL Configuration Editor
preserves the cache contents while the core is stopped. If this option is disabled, there is no guarantee
that the cache contents will be preserved when the core is stopped.
Note
For the most accurate results, enable the Preserve cache contents in debug state option in the DTSL
Configuration Editor dialog box. When this option is not enabled, the information presented might be
less accurate due to debugger interactions with the target.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 10-220
reserved.
Non-Confidential
10 Debugging Embedded Systems
10.17 About debugging caches
Figure 10-5 DTSL Configuration Editor (Shown with cache read option enabled)
Note
For processors based on the Armv8 architecture, there are restrictions on cache preservation:
• Cache preservation is not possible when the MMU is configured to use the short descriptor
translation table format.
• When using the long descriptor translation table format, cache preservation is possible but the TLB
contents cannot be preserved.
You can either enable the options prior to connecting to the target from the Debug Configurations
dialog box, or after connecting from the Debug Control view context menu.
Note
On some devices, reading cache data can be very slow. To avoid issues, do not enable DTSL options that
are not required. Also, if not required, close any cache views in the user interface.
You can use the Memory view to display the target memory from the perspective of the different caches
present on the target. On the command line, to display or read the memory from the perspective of a
cache, prefix the memory address with <cacheViewID=value>:. For the Cortex‑A15 processor, possible
values of cacheViewID are:
• L1I
• L1D
• L2
• L3
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 10-221
reserved.
Non-Confidential
10 Debugging Embedded Systems
10.17 About debugging caches
For example:
# Display memory from address 0x9000 from the perspective of the L1D cache.
x/16w N<cacheViewID=L1D>:0x9000
# Dump memory to myFile.bin, from address 0x80009000 from the perspective of the L2 cache.
dump binary memory myFile.bin S<cacheViewID=L2>:0x80009000 0x10000
# Append to myFile.bin, memory from address 0x80009000 from the perspective of the L3 cache.
append memory myFile.bin <cacheViewID=L3>:0x80009000 0x10000
Related references
16.23 Cache Data view on page 16-470
16.16 Memory view on page 16-441
16.50 DTSL Configuration Editor dialog box on page 16-529
Related information
cache command
memory command
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 10-222
reserved.
Non-Confidential
10 Debugging Embedded Systems
10.18 About Arm® Debugger support for overlays
After loading your overlay-enabled application in Arm Development Studio, you can work with overlays
from both the command-line console and from the user interface:
• To see detailed information about the currently loaded overlays and the functions within each overlay,
use the Overlays on page 16-469 view. You can also use the info overlays command to view
information about the currently loaded overlays and functions within each overlay.
• To enable or disable overlay support, use the set overlays enabled command with the on, off, or auto
options. The default setting is auto.
See the overlay_manager example that is provided with Arm Development Studio for a reference
implementation of overlays.
Related references
16.22 Overlays view on page 16-469
Related information
Arm Compiler Software Development Guide: Overlay support
info overlays command
set overlays enabled command
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 10-223
reserved.
Non-Confidential
10 Debugging Embedded Systems
10.19 Debugging a loadable kernel module
Procedure
1. Create a new Debug Configuration.
a. From the main Arm Development Studio menu, select Run > Debug Configurations.
b. In the Debug Configurations dialog box, create a New Launch Configuration and give it a
name. For example, my_board.
c. In the Connection tab, select the target and platform and set up your target connection.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 10-224
reserved.
Non-Confidential
10 Debugging Embedded Systems
10.19 Debugging a loadable kernel module
Figure 10-6 Typical connection settings for a Linux kernel/Device Driver Debug
d. In the Files tab, set up the debugger settings to load debug information for the Linux kernel and
the module.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 10-225
reserved.
Non-Confidential
10 Debugging Embedded Systems
10.19 Debugging a loadable kernel module
Figure 10-7 Typical Files settings for a Linux kernel/Device Driver Debug
e. In the Debugger tab, select Connect only in the Run control panel.
f. Click Debug to connect the debugger to the target.
2. Configure and connect a terminal shell to the target. You can use the Remote System Explorer (RSE)
provided with Arm Development Studio.
3. Using RSE, copy the compiled module to the target:
a. On the host workstation, navigate to .../linux_system/kernel_module/stripped/modex.ko
file.
b. Drag and drop the module to a writeable directory on the target.
4. Using the terminal shell, insert the modex.ko kernel module.
a. Navigate to the location of the kernel module.
b. Execute the following command: insmodmodex.ko
The Modules view updates to display details of the loaded module.
5. To debug the module, set breakpoints, run, and step as required.
6. To modify the module source code:
a. Remove the module using commands as required in the terminal shell. For example: rmmod
modex
b. Recompile the module.
c. Repeat steps 3 to 5 as required.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 10-226
reserved.
Non-Confidential
10 Debugging Embedded Systems
10.19 Debugging a loadable kernel module
Related references
10.20 Useful commands for debugging a kernel module on page 10-228
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 10-227
reserved.
Non-Confidential
10 Debugging Embedded Systems
10.20 Useful commands for debugging a kernel module
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 10-228
reserved.
Non-Confidential
10 Debugging Embedded Systems
10.21 Performance analysis of the threads application running on Arm Linux
Prerequisites
This tutorial uses the threads_v7A example application to show how to use Arm Streamline to capture
and analyze profiling data from a Linux target. threads_v7A and threads_v8A are two of the Arm
Linux application examples that are provided with Arm Development Studio.
Before capturing the data, ensure that:
1. You have built the threads_v7A application.
2. You know the IP address or network name of the target. To find the IP address, you can use the
ifconfig application in a Linux console. The IP address is denoted by the inet addr.
3. The Linux kernel on the target is configured to work with Arm Streamline.
4. The gator daemon, gatord, is running on the target. If not, the simplest way to install and run gatord
on the target is to use the Setup Target… button in the Connection Browser dialog box. The
Connection Browser dialog box is accessible through the Streamline Data view by clicking on the
Browse for a target button.
5. SSH and gdbserver are running on the target.
Note
• For more information about building and running the threads application on a Linux target see the
readme.html supplied in the same directory as the source code for the example.
• For more information about how to configure your target for Arm Streamline, see the Arm Streamline
User Guide.
Procedure
1. Launch Arm Development Studio.
2. In the Remote Systems view, click and define a connection to the target
3. Launch the Arm Streamline application.
4. Specify the IP address or network name of the target in the Address field. Alternatively, use the
Browse for a target button, as shown in the following screenshot:
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 10-229
reserved.
Non-Confidential
10 Debugging Embedded Systems
10.21 Performance analysis of the threads application running on Arm Linux
8. The program stops at main(). To start capturing data, switch to the Streamline application and click
. Give the capture file a unique name. The Live view opens in Streamline, displaying the capture
data in real time.
9. In Arm DS, click Continue to continue executing the code.
10. When the application terminates, in Arm Streamline, click to stop the capture.
Arm Streamline automatically analyzes the capture data and produces a report, which it displays in the
Timeline view, as shown in the following screenshot:
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 10-230
reserved.
Non-Confidential
Chapter 11
Debugging with Scripts
Describes how to use scripts containing debugger commands to enable you to automate debugging
operations.
It contains the following sections:
• 11.1 Exporting Arm® Debugger commands generated during a debug session on page 11-232.
• 11.2 Creating an Arm® Debugger script on page 11-233.
• 11.3 Creating a CMM-style script on page 11-234.
• 11.4 Support for importing and translating CMM scripts on page 11-235.
• 11.5 About Jython scripts on page 11-237.
• 11.6 Jython script concepts and interfaces on page 11-239.
• 11.7 Creating Jython projects in Arm® Development Studio on page 11-241.
• 11.8 Creating a Jython script on page 11-245.
• 11.9 Running a script on page 11-247.
• 11.10 Use case scripts on page 11-249.
• 11.11 Metadata for use case scripts on page 11-250.
• 11.12 Definition block for use case scripts on page 11-251.
• 11.13 Defining the Run method for use case scripts on page 11-253.
• 11.14 Defining the options for use case scripts on page 11-254.
• 11.15 Defining the validation method for use case scripts on page 11-257.
• 11.16 Example use case script definition on page 11-258.
• 11.17 Multiple use cases in a single script on page 11-259.
• 11.18 usecase list command on page 11-260.
• 11.19 usecase help command on page 11-261.
• 11.20 usecase run command on page 11-262.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 11-231
reserved.
Non-Confidential
11 Debugging with Scripts
11.1 Exporting Arm® Debugger commands generated during a debug session
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 11-232
reserved.
Non-Confidential
11 Debugging with Scripts
11.2 Creating an Arm® Debugger script
# Initialization commands
load "struct_array.axf" # Load image
file "struct_array.axf" # Load symbols
break main # Set breakpoint at main()
break *0x814C # Set breakpoint at address 0x814C
# Run to breakpoint and print required values
run # Start running device
wait 0.5s # Wait or time-out after half a second
info stack # Display call stack
info registers # Display info for all registers
# Continue to next breakpoint and print required values
continue # Continue running device
wait 0.5s # Wait or time-out after half a second
info functions # Displays info for all functions
info registers # Display info for all registers
x/3wx 0x8000 # Display 3 words of memory from 0x8000 (hex)
...
# Shutdown commands
delete 1 # Delete breakpoint assigned number 1
delete 2 # Delete breakpoint assigned number 2
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 11-233
reserved.
Non-Confidential
11 Debugging with Scripts
11.3 Creating a CMM-style script
Examples
// Filename: myScript.cmm
system.up ; Connect to target and device
data.load.elf "hello.axf" ; Load image and symbols
// Setup breakpoints and registers
break.set main /disable ; Set breakpoint and immediately disabled
break.set 0x8048 ; Set breakpoint at specified address
break.set 0x8060 ; Set breakpoint at specified address
register.set R0 15 ; Set register R0
register.set PC main ; Set PC register to symbol address
...
break.enable main ; Enable breakpoint at specified symbol
// Run to breakpoint and display required values
go ; Start running device
var.print "Value is: " myVar ; Display string and variable value
print %h r(R0) ; Display register R0 in hexadecimal
// Run to breakpoint and print stack
go ; Run to next breakpoint
var.frame /locals /caller ; Display all variables and function callers
...
// Shutdown commands
break.delete main ; Delete breakpoint at address of main()
break.delete 0x8048 ; Delete breakpoint at address
break.delete 0x8060 ; Delete breakpoint at specified address
system.down ; Disconnect from target
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 11-234
reserved.
Non-Confidential
11 Debugging with Scripts
11.4 Support for importing and translating CMM scripts
Prerequisites
• CMM scripts must have the .cmm extension to use the Development Studio script import feature.
• Scripts are associated with a debug configuration. When importing or editing scripts, first select the
associated debug configuration for your target in the Debug Control view.
Procedure
1. To import a CMM script into Development Studio, in the Scripts view, click Import a script or
directory and select .
Note
You can also drag and drop the script to be imported into the script view, either from the Project
Explorer view or your operating system file explorer.
2. Browse and select the CMM script that you want to import, and click Open.
3. Choose a location for the translated CMM script and click OK. To view the imported CMM script, in
the Scripts view, expand the CMM node and locate your script.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 11-235
reserved.
Non-Confidential
11 Debugging with Scripts
11.4 Support for importing and translating CMM scripts
Related references
11.4.2 Supported CMM commands for translations on page 11-236
16.25 Scripts view on page 16-475
For detailed descriptions and formats for these individual commands, check the documentation provided
with your debugger.
Related tasks
11.4.1 Importing and translating a CMM script on page 11-235
Related references
11.4 Support for importing and translating CMM scripts on page 11-235
16.25 Scripts view on page 16-475
Related tasks
11.4.1 Importing and translating a CMM script on page 11-235
Related references
16.25 Scripts view on page 16-475
11.4.2 Supported CMM commands for translations on page 11-236
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 11-236
reserved.
Non-Confidential
11 Debugging with Scripts
11.5 About Jython scripts
import sys
from arm_ds.debugger_v1 import Debugger
from arm_ds.debugger_v1 import DebugException
# Debugger object for accessing the debugger
debugger = Debugger()
# Initialization commands
ec = debugger.getCurrentExecutionContext()
ec.getExecutionService().stop()
ec.getExecutionService().waitForStop()
# in case the execution context reference is out of date
ec = debugger.getCurrentExecutionContext()
# load image if provided in script arguments
if len(sys.argv) == 2:
image = sys.argv[1]
ec.getImageService().loadImage(image)
ec.getExecutionService().setExecutionAddressToEntryPoint()
ec.getImageService().loadSymbols(image)
# we can use all the DS commands available
print "Entry point: ",
print ec.executeDSCommand("print $ENTRYPOINT")
# Sample output:
# Entry point: $8 = 32768
else:
pass # assuming image and symbols are loaded
# sets a temporary breakpoint at main and resumes
ec.getExecutionService().resumeTo("main") # this method is non-blocking
try:
ec.getExecutionService().waitForStop(500) # wait for 500ms
except DebugException, e:
if e.getErrorCode() == "JYI31": # code of "Wait for stop timed out" message
print "Waiting timed out!"
sys.exit()
else:
raise # re-raise the exception if it is a different error
ec = debugger.getCurrentExecutionContext()
def getRegisterValue(executionContext, name):
"""Get register value and return string with unsigned hex and signed
integer, possibly string "error" if there was a problem reading
the register.
"""
try:
value = executionContext.getRegisterService().getValue(name)
# the returned value behaves like a numeric type,
# and even can be accessed like an array of bytes, e.g. 'print value[:]'
return "%s (%d)" % (str(value), int(value))
except DebugException, e:
return "error"
# print Core registers on all execution contexts
for i in range(debugger.getExecutionContextCount()):
ec = debugger.getExecutionContext(i)
# filter register names starting with "Core::"
coreRegisterNames = filter(lambda name: name.startswith("Core::"),
ec.getRegisterService().getRegisterNames())
# using Jython list comprehension get values of all these registers
registerInfo = ["%s = %s" % (name, getRegisterValue(ec, name))
for name in coreRegisterNames]
registers = ", ".join(registerInfo[:3]) # only first three
print "Identifier: %s, Registers: %s" % (ec.getIdentifier(), registers)
# Output:
# Identifier: 1, Registers: Core::R0 = 0x00000010 (16), Core::R1 = 0x00000000 (0),
Core::R2 = 0x0000A4A4 (42148)
# ...
Related tasks
11.7.1 Creating a new Jython project in Arm® Development Studio on page 11-241
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 11-237
reserved.
Non-Confidential
11 Debugging with Scripts
11.5 About Jython scripts
11.7.2 Configuring an existing project to use the Arm® Development Studio Jython interpreter
on page 11-244
11.8 Creating a Jython script on page 11-245
11.9 Running a script on page 11-247
Related references
11.6 Jython script concepts and interfaces on page 11-239
16.42 Script Parameters dialog box on page 16-512
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 11-238
reserved.
Non-Confidential
11 Debugging with Scripts
11.6 Jython script concepts and interfaces
Execution Contexts
Most operations on Arm Debugger Jython interfaces require an execution context. The
execution context represents the state of the target system. Separate execution contexts exist for
each process, thread, or processor that is accessible in the debugger. You can obtain an execution
context from the Debugger class instance, for example:
# Obtain the first execution context
debugger = Debugger()
ec = debugger.getCurrentExecutionContext()
Registers
You can access processor registers, coprocessor registers and peripheral registers using the
debugger Jython interface. To access a register you must know its name. The name can be
obtained from the Registers view in the graphical debugger. The RegisterService enables you to
read and write register values, for a given execution context, for example:
# Print the Program Counter (PC) from execution context ec
value = ec.getRegisterService().getValue('PC')
print 'The PC is %s' %value
Memory
You can access memory using the debugger Jython interface. You must specify an address and
the number of bytes to access. The address and size can be an absolute numeric value or a string
containing an expression to be evaluated within the specified execution context. Here is an
example:
# Print 16 bytes at address 0x0 from execution context ec
print ec.getMemoryService().read(0x0, 16)
DS Commands
The debugger jython interface enables you to execute arbitrary Arm Development Studio
commands. This is useful when the required functionality is not directly provided in the Jython
interface. You must specify the execution context, the command and any arguments that you
want to execute. The return value includes the textual output from the command and any errors.
Here is an example:
# Execute the Arm Development Studio command 'print $ENTRYPOINT' and print the result
print ec.executeDSCommand('print $ENTRYPOINT')
Error Handling
The methods on the debugger Jython interfaces throw DebugException whenever an error
occurs. You can catch exceptions to handle errors in order to provide more information. Here is
an example:
# Catch a DebugException and print the error message
try:
ec.getRegisterService().getValue('ThisRegisterDoesNotExist')
except DebugException, de:
print "Caught DebugException: %s" % (de.getMessage())
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 11-239
reserved.
Non-Confidential
11 Debugging with Scripts
11.6 Jython script concepts and interfaces
For more information on Arm Debugger Jython API documentation select Help Contents from the Help
menu.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 11-240
reserved.
Non-Confidential
11 Debugging with Scripts
11.7 Creating Jython projects in Arm® Development Studio
Procedure
1. Select File > New > Project... from the main menu.
2. Expand the PyDev group.
3. Select PyDev Project.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 11-241
reserved.
Non-Confidential
11 Debugging with Scripts
11.7 Creating Jython projects in Arm® Development Studio
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 11-242
reserved.
Non-Confidential
11 Debugging with Scripts
11.7 Creating Jython projects in Arm® Development Studio
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 11-243
reserved.
Non-Confidential
11 Debugging with Scripts
11.7 Creating Jython projects in Arm® Development Studio
11.7.2 Configuring an existing project to use the Arm® Development Studio Jython interpreter
Use these instructions to configure an existing project to use Arm DS Jython as the interpreter.
Procedure
1. In the Project Explorer view, right-click the project and select PyDev > Set as PyDev Project from
the context menu.
2. From the Project menu, select Properties to display the properties for the selected project.
Note
You can also right-click a project and select Properties to display the properties for the selected
project.
Related concepts
11.5 About Jython scripts on page 11-237
Related tasks
11.7.1 Creating a new Jython project in Arm® Development Studio on page 11-241
11.8 Creating a Jython script on page 11-245
11.9 Running a script on page 11-247
Related references
11.6 Jython script concepts and interfaces on page 11-239
16.42 Script Parameters dialog box on page 16-512
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 11-244
reserved.
Non-Confidential
11 Debugging with Scripts
11.8 Creating a Jython script
Procedure
1. Create an empty Jython script file.
2. Right-click the Jython script file and select Open.
3. Add the following code to your file in the editor:
from arm_ds.debugger_v1 import Debugger
Note
With this minimal code saved in the file you have access to auto-completion list and online help. Arm
recommends the use of this code to explore the Jython interface.
Next Steps
You can now view an entire Jython interface in the debugger. To open the source code that implements a
debugger object or interface, Ctrl+Click on the object or interface of interest.
Related concepts
11.5 About Jython scripts on page 11-237
Related tasks
11.7.1 Creating a new Jython project in Arm® Development Studio on page 11-241
11.7.2 Configuring an existing project to use the Arm® Development Studio Jython interpreter
on page 11-244
11.9 Running a script on page 11-247
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 11-245
reserved.
Non-Confidential
11 Debugging with Scripts
11.8 Creating a Jython script
Related references
11.6 Jython script concepts and interfaces on page 11-239
16.42 Script Parameters dialog box on page 16-512
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 11-246
reserved.
Non-Confidential
11 Debugging with Scripts
11.9 Running a script
Procedure
1. To run a script from the Arm Development Studio IDE:
a. Launch Arm Development Studio IDE.
b. Configure a connection to the target.
Note
Arm Debugger configurations can include the option to run a script file immediately after the
debugger connects to the target. To do this, in the Debugger tab of the Development Studio
Debug Configuration dialog box, select the appropriate script file option. See Debug
Configurations -Debugger tab on page 16-520 for more information.
Note
Debugger views are not updated when commands issued in a script are executed.
Related concepts
11.5 About Jython scripts on page 11-237
Related tasks
11.7.1 Creating a new Jython project in Arm® Development Studio on page 11-241
11.7.2 Configuring an existing project to use the Arm® Development Studio Jython interpreter
on page 11-244
11.8 Creating a Jython script on page 11-245
Related references
11.1 Exporting Arm® Debugger commands generated during a debug session on page 11-232
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 11-247
reserved.
Non-Confidential
11 Debugging with Scripts
11.9 Running a script
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 11-248
reserved.
Non-Confidential
11 Debugging with Scripts
11.10 Use case scripts
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 11-249
reserved.
Non-Confidential
11 Debugging with Scripts
11.11 Metadata for use case scripts
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 11-250
reserved.
Non-Confidential
11 Debugging with Scripts
11.12 Definition block for use case scripts
Run
The $Run$ tag specifies the name of the entry point to a single use case. When you run a use case on the
command line, it calls the method with the $Run$ tag. For details of how to define the entry point, and
how to supply additional arguments to the method, see Defining the Run method for use case scripts
on page 11-253.
Example:
...
$Run$ mainMethod
...
Title
The $Title$ tag specifies the title in a use case definition block. This is a single line string which is the
title of this use case script and is displayed when searching for use case scripts on the command-line.
Example:
...
Description
The $Description$ tag specifies the description in a use case definition block. This is a single line
string which is the description of this use case and is displayed when searching for use case scripts on the
command-line.
Example:
...
Options
The $Options$ tag specifies a method within the use case script, which can be called to retrieve a list of
options. For a description of how to define the options function, and how to construct a list of options,
see Defining the options for use case scripts on page 11-254.
Example:
...
$Options$ myOptions
...
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 11-251
reserved.
Non-Confidential
11 Debugging with Scripts
11.12 Definition block for use case scripts
Validation
The $Validation$ tag specifies the validation method in the use case definition block. You must specify
this to validate the options provided when the script is run. For a description of how to define the
validation function, see Defining the validation method for use case scripts on page 11-257.
Example:
...
$Validation$ myValidation
...
Help
The use of $Help$ tags is slightly different from the use of other tags. The $Help$ tag enables writing a
multi-line block of text, which appears in the output when a user requests help about the use case script.
This can be used to provide usage description, parameters for the use case scripts, or a more verbose help
text.
To define a block of help text, enclose the block in $Help$ tags. Formatting, such as new lines and
spaces are preserved in the $Help$ block. Everything, including the definition of other tags, are
consumed within a $Help$ block. The $Help$ block must be completed before other tags or code is
defined.
Example:
$Help$
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 11-252
reserved.
Non-Confidential
11 Debugging with Scripts
11.13 Defining the Run method for use case scripts
$Run$ mainMethod
...
def mainMethod(options):
It is possible to define an entry point to the use case that requires more than one parameter. The
definition of the $Run$ tag only defines the function name. The definition of the function within the
script defines how many parameters are needed.
Example:
...
$Run$ main
...
In this example main requires two parameters, filename and value which must be supplied on the
command-line when the use case script is run.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 11-253
reserved.
Non-Confidential
11 Debugging with Scripts
11.14 Defining the options for use case scripts
$Options$ myOptions
...
def myOptions():
return [list_of_options]
It is important that the function that supplies the options takes no arguments and returns a list of options
in the same format as described below. If the $Options$ tag is defined, and the function named in this
tag is not present in the script or the function used to supply the options takes arguments, then an error
occurs when running the script.
There are five option types which can be used to define options to a use case script. These are:
• UseCaseScript.booleanOption
• UseCaseScript.enumOption
• UseCaseScript.radioEnumOption
• UseCaseScript.integerOption
• UseCaseScript.stringOption
All of these options require:
• A variable name, that is used to refer to the option in a use case script
• A display name
• A default value that must be of the same type as the defined option
UseCaseScript.booleanOption
Describes a boolean. Possible values are True or False.
UseCaseScript.integerOption
Describes a whole integer value such as: 4, 99 or 100001. In addition to the fields required by all
options, a minimum and a maximum value can be supplied which restricts the range of integers
this option allows. Additionally, an output format of the integer option can be defined, which
can be either decimal (base 10) or hexadecimal (base 16).
UseCaseScript.stringOption
Describes a string such as traceCapture or etmv4 which can be used, for example, to refer to
the CoreSight components in the current system by name.
UseCaseScript.enumOption, UseCaseScript.radioEnumOption
Both these describe enumerations. These can be used to describe a list of values that are allowed
for this option. Enumeration values can be strings or integers.
Example:
UseCaseScript.booleanOption(name="timestamps", displayName="Enable global
timestamping", defaultValue=True)
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 11-254
reserved.
Non-Confidential
11 Debugging with Scripts
11.14 Defining the options for use case scripts
Defines an integer option 'cores' with a default value of 1, minimum value of 1 and maximum value of
16. The output format is in decimal (base 10).
UseCaseScript.integerOption(name="retries", displayName="Attempts to retry", defaultValue=5,
min=1, format=UseCaseScript.HEX)
Defines an integer option 'retries' with a default value of 5, minimum value of 1 and no maximum value.
The output will be in hexadecimal (base 16).
UseCaseScript.enumOption(name="contextid", displayName="Context ID Size", values = [("8", "8
bits"), ("16", "16 bits"), ("32", "32 bits")] , defaultValue="32")
Defines an enumeration 'contextid' with default value of '32', the values are restricted to members of the
enumeration: "8", "16" or "32".
Nesting Options
Options can be organized or grouped using the following:
• UseCaseScript.tabSet
• UseCaseScript.tabPage
• UseCaseScript.infoOption
• UseCaseScript.optionGroup
The groups are not associated with a value, and do not require a default. You can use the groups with the
option names to construct a complete set of options.
To specify the nesting of options, each option can include an optional childOptions keyword which is a
list of other options which are nested within this option. An example set of nested options can be seen
below.
Example:
The following example shows an options method, complete with a set of options.
def myOptions():
return [
UseCaseScript.optionGroup(
name="options",
displayName="Usecase Options",
childOptions=[
UseCaseScript.optionGroup(
name="connection",
displayName="Connection Options",
childOptions=[
UseCaseScript.integerOption(
name="cores",
displayName="Number of cores",
defaultValue=1,
min=1,
max=16),
UseCaseScript.stringOption(
name="traceBuffer",
displayName="Trace Capture Method",
defaultValue="none"),
]
),
UseCaseScript.enumOption(
name="contextID",
displayName="Context ID Size",
values = [("8", "8 bits"), ("16", "16 bits"), ("32", "32 bits")] ,
defaultValue="32"),
]
),
]
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 11-255
reserved.
Non-Confidential
11 Debugging with Scripts
11.14 Defining the options for use case scripts
Options are accessed according to how they are nested within the list of options. In this example there is
a group called options with two child options:
options.contextID
This is an enumeration within the options group, and stores the value of the contextID in this
example.
options.connection
This is another group for nesting options. It does not store any value. It contains the options:
options.connection.cores
This is an integer that accesses cores variable.
options.connection.traceBuffer
This is a string that accesses traceBuffer variables in the list of options.
DTSL Options
Options are defined in a similar way to the Debug and Trace Services Layer (DTSL) options, using the
same parameters and way of nesting child options.
See DTSL options on page 20-622 and the example usecase scripts in your Arm Development Studio
installation for more information on how to construct a list of options.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 11-256
reserved.
Non-Confidential
11 Debugging with Scripts
11.15 Defining the validation method for use case scripts
$Validation$ myValidation
...
def myValidation(options):
# Get the options which define the start and end of a trace range
# These options have been defined in the function defined in the $Options$ tag
start = options.getOptionValue("options.traceRange.start")
end = options.getOptionValue("options.traceRange.end")
# Conditional check for validation
if(start >= end):
# Report a specific error in the use case script if the validation check fails
UseCaseScript.error("The trace range start must be before the end")
It is important that the function that supplies the validation takes a single parameter, which is the use case
script object, used to access the options defined for use in the script.
If the $Validation$ tag is defined, and the method referred to in this tag is not present in the script or
the validation function takes the wrong number of arguments, an error occurs when running the script.
Error reporting
This validation example throws an error specific to use case scripts. If validation is not successful, for
example start >= end, in our script, the Arm Development Studio command-line displays:
UseCaseError: The trace range start must be before theend
It is possible not to use the built-in use case error reporting and throw a standard Jython or Java error
such as:
raise RuntimeError("Validation wasunsuccessful")
However, it is recommended to use the built-in use case script error reporting so that a clear user-defined
error is raised that originates from the use case script.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 11-257
reserved.
Non-Confidential
11 Debugging with Scripts
11.16 Example use case script definition
Examples
"""
USECASE
# Refers to a function called myValidation which validates the options in the script
$Validation$ myValidation
$Help$
usage: usecase.py [options]
A longer description of this use case
And additional usage, descriptions of parameters and extra information.
...
...
$Help$
# Function called mainMethod which defines the entry point to this usecase
$Run$ mainMethod
"""
def myOptions():
return [
UseCaseScript.optionGroup(
name="options",
displayName="Usecase Options",
childOptions=[
UseCaseScript.optionGroup(
name="connection",
displayName="Connection Options",
childOptions=[
UseCaseScript.integerOption(
name="cores",
displayName="Number of cores",
defaultValue=1,
min=1,
max=16),
UseCaseScript.stringOption(
name="traceBuffer",
displayName="Trace Capture Method",
defaultValue="none"),
]
),
UseCaseScript.enumOption(
name="contextID",
displayName="Context ID Size",
values = [("8", "8 bits"), ("16", "16 bits"), ("32", "32 bits")],
defaultValue="32"),
]
),
]
def myValidation(options):
print "Performing validation..."
if(options.getOptionValue('options.connection.cores') > 8):
UseCaseScript.error('Having more than 8 cores is not allowed for this usecase')
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 11-258
reserved.
Non-Confidential
11 Debugging with Scripts
11.17 Multiple use cases in a single script
...
...
$Run$ mainMethod
USECASE
...
...
$Run$ entry2
...
def mainMethod(options):
print "Running the first main method"
...
Multiple use case blocks can be defined as separate blocks dispersed throughout the script:
Example:
USECASE
...
...
$Run$ mainMethod
...
def mainMethod(options):
print "Running the first main method"
...
USECASE
...
...
$Run$ entry2
...
There is no limit to how many use cases you can define in a single script.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 11-259
reserved.
Non-Confidential
11 Debugging with Scripts
11.18 usecase list command
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 11-260
reserved.
Non-Confidential
11 Debugging with Scripts
11.19 usecase help command
Where:
<flag>
Is one of:
-p
Is the name of the entry point or main method defined in the use case. If a use case script defines
more than one entry point, then you must specify the <entry_point> parameter.
<script_name>
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 11-261
reserved.
Non-Confidential
11 Debugging with Scripts
11.20 usecase run command
The options that you can use are defined in the method with the $Options$ tag of the current use case
within the script. You can get more information about them using the usecase help command.
The syntax for setting options on the command line is --options.name=value or --
options.namevalue. If you do not specify a value for an option explicitly, the option takes the default
value defined in the script.
Note
The examples use options as the name of the top level group of options. However, you can give a
different name to the top level group of options in the use case script.
When issuing the usecase run command, rather than specifying an absolute path to a script, specify a -
p or -s flag before the script name. For example, issue usecase run -p <script_name> [<options>]
to run a use case script for the current platform.
If there is more than one use case defined in a single script, the entry point or main method to use when
running the script must be defined. For scripts with multiple use cases the syntax is usecase run
<script_name> <entry_point> [<options>].
If the entry point to the use case accepts positional arguments, you must specify them on the command-
line when the script is run. For example, if the main method in the use case script positional.py in the
current working directory is defined as follows:
...
$Run$ main
...
Example:
usecase run myscript.py --options.enableETM=True --options.enableETM.timestamping=True
--options.traceCapture "DSTREAM"
Runs a use case script called myscript.py in the current working directory, setting the options defined
for this use case.
usecase run multipleEntry.py mainOne --options.traceCapture "ETR"
Runs a use case script called multipleEntry.py in the current working directory. The entry point to this
use case script is mainOne. A single option is specified after the entry point.
usecase run -s multipleScript.py mainTwo filename.txt 100
Runs a use case script in the /Scripts/usecase/ directory in the configuration database called
multipleScript.py in the current working directory. The entry point to this use case script is mainTwo
which defines two positional arguments. No options are supplied to the script.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 11-262
reserved.
Non-Confidential
11 Debugging with Scripts
11.20 usecase run command
Saving options
On the command-line, providing a long list of options might be tedious to type in every time the script is
run over different connections. A solution to this is to use the built-in functionality --save-options.
For example, you can run the script usecase run <script_name> --<option1=...>, --
<option2=...> --save-options=</path/to/options.txt> where options.txt is the file in which
to save the options. This saves the options to this use case script, at runtime, to options.txt.
If you do not specify an option on the command-line, its default value is saved to the specified file.
Loading options
After saving options to a file, there is a similar mechanism for loading them back in. Issuing usecase
run <script_name> --load-options=<path/to/options.txt> loads the options in from
options.txt and, if successful, runs the script.
You can combine options by providing options on the command-line and loading them from a file.
Options from the command-line override those from a file.
Example:
The options file options.txt for myscript.py contains two option values:
• options.a=10.
• options.b=20.
Running usecase run myscript.py--load-options=options.txt results in options.a having the
value 10 and options.b having the value 20, loaded from the specified file. If an option is set on the
command-line, for example usecase run--options.b=99 --load-options=options.txt, it overrides
those options retrieved from the file. options.a takes the value 10, but options.b takes the new value
99 provided on the command-line and not the one stored in the file. This is useful for storing a standard
set of options for a single use case and modifying only those necessary at runtime.
Showing options
When running a script, the user might want to see what options are being used, especially if the options
are loaded from an external file. The built-in option --show-options displays the name and value of all
options being used in the script when the script is run.
Example:
usecase run <script_name> --show-options
Prints out a list of options for the script, with updated values for option1 and option2.
usecase run <script_name> --load-options=<file> --show-options
Prints out a list of options taking their values from the supplied file. If an option is not defined in
the loaded file, its default value is printed.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 11-263
reserved.
Non-Confidential
Chapter 12
Running Arm® Debugger from the operating system
command-line or from a script
This chapter describes how to use Arm Debugger from the operating system command-line or from a
script.
It contains the following sections:
• 12.1 Overview: Running Arm® Debugger from the command-line or from a script on page 12-265.
• 12.2 Command-line debugger options on page 12-266.
• 12.3 Running a debug session from a script on page 12-273.
• 12.4 Specifying a custom configuration database using the command-line on page 12-275.
• 12.5 Capturing trace data using the command-line debugger on page 12-277.
• 12.6 Working with the debug server on page 12-279.
• 12.7 Arm® Debugger command-line console keyboard shortcuts on page 12-281.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 12-264
reserved.
Non-Confidential
12 Running Arm® Debugger from the operating system command-line or from a script
12.1 Overview: Running Arm® Debugger from the command-line or from a script
12.1 Overview: Running Arm® Debugger from the command-line or from a script
Arm Debugger can operate in a command-line only mode, with no graphical user interface.
This is very useful when automating debug and trace activities. By automating a debug session, you can
save significant time and avoid repetitive tasks such as stepping through code at source level. This
becomes particularly useful when you need to run multiple tests as part of regression testing.
This mode has the advantage of being extremely lightweight and therefore faster. However, by extension,
it also lacks the enhancements that a GUI brings when connecting to a target device such as being able to
see synchronization between your source code, disassembly, variables, registers, and memory as you step
through execution.
If you want, you can drive the operation of Arm Debugger with individual commands in an interactive
way. However, Arm Debugger when used from the command-line, is typically driven from scripts. With
Arm Debugger, you might first carry out the required debug tasks in the graphical debugger. This
generates a record of each debug task, which can then be exported from the History view as a (.ds)
script.
You can edit scripts using the Scripts view. Alternatively, a debug script can be written manually using
the Arm Debugger commands for reference.
Arm Development Studio also supports Jython (.py) scripts which provide more capability than the
native Arm DS scripting language. These can be loaded into Arm Debugger to automate the debugger to
carry out more complex tasks.
See Command-line debugger options on page 12-266 for syntax and instructions on how to launch Arm
Debugger from the command line.
Related tasks
12.4 Specifying a custom configuration database using the command-line on page 12-275
Related references
12.2 Command-line debugger options on page 12-266
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 12-265
reserved.
Non-Confidential
12 Running Arm® Debugger from the operating system command-line or from a script
12.2 Command-line debugger options
Where:
armdbg
The debugger option and its arguments. This can either be to configure the command-line
debugger, or to connect to a target.
...
Note
When connected to your target, use any of the Arm Debugger commands to access the target and start
debugging.
For example, info registers displays all application level registers.
Options
--browse
Browses for available connections and lists targets that match the connection type specified in
the configuration database entry.
Note
You must specify --cdb-entry <arg> to use --browse.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 12-266
reserved.
Non-Confidential
12 Running Arm® Debugger from the operating system command-line or from a script
12.2 Command-line debugger options
--cdb-entry <arg>
Specifies a target from the configuration database that the debugger can connect to.
Use arg to specify the target configuration. arg is a string, concatenated using entries in each
level of the configuration database. The syntax of arg is:
"Manufacturer::Platform::Project type::Execution
environment::Activity::Connection type"
Use --cdb-list to determine the entries in the configuration database that the debugger can
connect to. You can specify partial entries such as "Arm Development Boards" or "Arm
Development Boards::Versatile Express A9x4" and press Enter to view the next possible
entries.
For example, to connect to an Arm Versatile Express A9x4 target using DSTREAM and a USB
connection, first use --cdb-list to identify the entries in the configuration database within Arm
Development Boards, use:
--cdb-entry-param <arg>
Specifies connection parameters for the debugger:
• Use arg to specify the parameters and their values.
• Use --cdb-list to identify the parameters the debugger needs. Parameters that the
debugger might need are:
Connection
Specifies the TCP address or the USB port number of the debug adapter to connect
to.
Address
Specifies parameters for a model connection. The model parameters depend on the
specific model that the debugger connects to. See the documentation on the model
for the parameters and how to configure them. The debugger uses the default model
parameter values if you do not specify them.
Use --cdb-entry-param for each parameter:
--cdb-entry-param "Connection=TestTarget" --cdb-entry-param
"dtsl_options_file=my_dtsl_settings.dtslprops"
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 12-267
reserved.
Non-Confidential
12 Running Arm® Debugger from the operating system command-line or from a script
12.2 Command-line debugger options
--cdb-list filter
Lists the entries in the configuration database. This option does not connect to any target.
The configuration database has a tree data structure, where each entry has entries within it. --
cdb-list identifies the entries in each level of the database. The levels are:
1. Manufacturer
2. Platform
3. Project type
4. Execution environment
5. Activity
6. Connection type
Use filter to specify the entries in each level, to identify the target and how to connect to it.
filter is a string concatenated using entries in successive levels of the configuration database.
The full syntax of filter is: "Manufacturer::Platform::Project type::Execution
environment::Activity::Connection type".
If you specify an incomplete filter, then --cdb-list shows the entries in the next level of the
configuration database. So if you do not specify a filter, --cdb-list shows the
Manufacturer entries from the first level of the configuration database. If you specify a filter
using entries from the first and second levels of the database, then --cdb-list shows the
Project type entries within the specified Platform. If you specify the complete filter then
--cdb-list lists the parameters that need to be specified using --cdb-list-param.
Note
• The entries in the configuration database are case-sensitive.
• Connection type refers to DSTREAM, so there is no Connection type when connecting to
a model.
For example, to list all the configuration database entries for the manufacturer NXP, use:
armdbg --cdb-list="NXP"
--cdb-root <arg>
Specifies additional configuration database locations in addition to the debugger's default
configuration database.
Note
• To specify more than one configuration database, you must separate the directory paths using
a colon (:) for Linux systems or a semicolon (;) for Windows systems.
• The order in which configuration database roots are specified is important when the same
information is available in different databases. That is, the data in the location typed last
(nearest to the end of full command-line) overrides data in locations before it.
• If you do not need any data from the default configuration database, use the additional
command-line option --cdb-root-ignore-default to tell the debugger not to use the
default configuration database.
Specifies whether the debugger stops the target and exits the current script when an error occurs.
The default is --continue_on_error=false.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 12-268
reserved.
Non-Confidential
12 Running Arm® Debugger from the operating system command-line or from a script
12.2 Command-line debugger options
--disable-semihosting
Specifies the image file for the debugger to load when it connects to the target.
--interactive
Specifies interactive mode that redirects standard input and output to the debugger from the
current command-line console, for example, Windows Command Prompt or Unix shell.
Note
This is the default if no script file is specified.
--launch-config <path>
Start a debug connection using the command-line launch configuration file specified in <path>.
For example:
armdbg --launch-config "C:\Workspace\debugconfiguration.cli"
You can create a command-line launch configuration using the Export tab on page 16-528 in the
Debug Configurations dialog box.
--launch-config-connect-only true | false
Specifies that the debugger only connect to the target when using the --launch-config option.
The default is --launch-config-connect-only false.
You can use --image and --stop_on_connect option in combination with the --launch-
config-connect-only option.
For example:
• To connect to the target without performing any other actions (such as loading images or
running initialization scripts) as specified in the debug configuration file:
armdbg --launch-config "C:\Workspace\debugconfiguration.cli" --launch-
config-connect-only true
• To connect to the target and load an image without performing any other actions (such as
running initialization scripts) as specified in the debug configuration file:
armdbg --launch-config "C:\Workspace\debugconfiguration.cli" --launch-
config-connect-only true --image "C:\Arm_DS_Workspace\fireworks_A9x4-FVP
\fireworks-Cortex-A9x4-FVP.axf"
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 12-269
reserved.
Non-Confidential
12 Running Arm® Debugger from the operating system command-line or from a script
12.2 Command-line debugger options
--log_config=<arg>
Specifies the type of logging configuration to output runtime messages from the debugger.
The arg can be:
info - Output messages using the predefined INFO level configuration. This level does not
output debug messages. This is the default.
debug - Output messages using the predefined DEBUG level configuration. This option outputs
both INFO level and DEBUG level messages.
filename - Specifies a user-defined logging configuration file to customize the output of
messages. The debugger supports <log4j> configuration files.
--log_file=<filename>
Specifies an output file to receive runtime messages from the debugger. If this option is not
used, then output messages are redirected to the console.
--script=<filename>
Specifies a script file containing debugger commands to control and debug your target. You can
repeat this option if you have several script files. The scripts are run in the order specified and
the debugger quits after the last script finishes. Add the --interactive option to the command-
line if you want the debugger to remain in interactive mode after the last script finishes.
-e or --semihosting-error
Specifies whether the debugger stops the target when it connects to the target device. To leave
the target unmodified on connection, you must specify false. The default is --
stop_on_connect=true.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 12-270
reserved.
Non-Confidential
12 Running Arm® Debugger from the operating system command-line or from a script
12.2 Command-line debugger options
--server
Note
You cannot use the debugger interactively (using the --interactive option) when using it as a
server.
When started as a server, by default, the debugger allocates a free port and listens on all
available addresses.
You can specify an address or port by specifying them in the [addr:]port format.
For example:
• If you want to make the debugger listen on port 1234 on all available addresses, you can
specify them using the following forms of the command:
armdbg --cdb-entry ... --server 1234
See Working with the debug server on page 12-279 for more information.
--top_mem=address
Specifies the stack base, also known as the top of memory. Top of memory is only used for
semihosting operations.
--target-os=<name>
Specifies the operating system on the target. Use this option if you want to debug the operating
system on the target.
--target-os-list
Lists the operating systems that you can debug with Arm Debugger.
Note
Specifying the --cdb-entry option is sufficient to establish a connection to a model. However to
establish a connection in all other cases, for example, for Linux application debug or when using
DSTREAM, you must specify both --cdb-entry and --cdb-entry-param options.
You must normally specify --cdb-entry when invoking the debugger for all other options to be valid.
The exception to this are:
• --cdb-list and --help do not require --cdb-entry.
• --cdb-root can be specified with either --cdb-list or --cdb-entry.
Examples
To connect to an Arm FVP Cortex-A9x4 model and specify an image to load, use:
armdbg --cdb-entry "Arm FVP::VE_Cortex_A9x4::Bare Metal Debug::Bare Metal Debug::Debug
Cortex-A9x4 SMP" --image "C:\\Arm_DS_Workspace\\fireworks_A9x4-FVP\\fireworks-Cortex-A9x4-
FVP.axf"
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 12-271
reserved.
Non-Confidential
12 Running Arm® Debugger from the operating system command-line or from a script
12.2 Command-line debugger options
To connect to a single Cortex‑A15 core on the Versatile Express Cortex-A15x2+A7x3 target using
DSTREAM and a TCP/IP connection:
armdbg --cdb-entry "Arm Development Boards::Versatile_Express_V2P-CA15_A7::Bare Metal
Debug::Bare Metal Debug::Debug Cortex-A15_0::DSTREAM" --cdb-entry-param
"Connection=TCP:10.8.197.59"
To connect to a Juno Arm Development Platform (r0) big.LITTLE target using DSTREAM and a
TCP/IP connection:
armdbg --cdb-entry "Arm Development Boards::Juno Arm Development Platform (r0)::Bare Metal
Debug::Bare Metal Debug::Debug Cortex-A57/Cortex-A53 big.LITTLE::DSTREAM" --cdb-entry-param
"Connection=TCP:10.2.194.40"
Note
To exit the connection, enter the quit debugger command.
Related references
12.7 Arm® Debugger command-line console keyboard shortcuts on page 12-281
11.1 Exporting Arm® Debugger commands generated during a debug session on page 11-232
7.17 Using semihosting to access resources on the host computer on page 7-145
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 12-272
reserved.
Non-Confidential
12 Running Arm® Debugger from the operating system command-line or from a script
12.3 Running a debug session from a script
Note
If you are using the Arm Development Studio graphical user interface (GUI) to perform your debugging,
a full list of all the Arm Debugger commands generated during a debug session is recorded in the
History view. You can select the commands that you want in your script file and right-click and select
Save selected lines as a script… to save them to a file.
Examples
A simple sample script file is shown below:
# Filename: myScript.ds
# Initialization commands
load file "struct_array.axf" # Load image and symbols
break main # Set breakpoint at main()
break *0x814C # Set breakpoint at address 0x814C
# Run to breakpoint and print required values
run # Start running device
wait 0.5s # Wait or time-out after half a second
info stack # Display call stack
info registers # Display info for all registers
# Continue to next breakpoint and print required values
continue # Continue running device
wait 0.5s # Wait or time-out after half a second
info functions # Displays info for all functions
info registers # Display info for all registers
x/3wx 0x8000 # Display 3 words of memory from 0x8000 (hex)
delete 1 # Delete breakpoint number 1
delete 2 # Delete breakpoint number 2
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 12-273
reserved.
Non-Confidential
12 Running Arm® Debugger from the operating system command-line or from a script
12.3 Running a debug session from a script
For example:
debugger --cdb-entry "Arm Development Boards::Versatile Express A9x4::Bare Metal
Debug::Bare Metal SMP Debug of all cores::Debug Cortex-A9x4 SMP::DSTREAM"--cdb-entry-
param "Connection=TCP:10.5.20.64" --cdb-entry-param "dtsl_options_file=C:\
\Arm_DS_Workspace\\my_dtsl_settings.dtslprops" --script= C:\\Arm_DS_Workspace\
\my_script.txt
See Specifying a custom configuration database using the command-line on page 12-275 and Capturing
trace data using the command-line debugger on page 12-277 for examples of how debugger options and
arguments are used.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 12-274
reserved.
Non-Confidential
12 Running Arm® Debugger from the operating system command-line or from a script
12.4 Specifying a custom configuration database using the command-line
Procedure
1. Launch an Arm Development Studio command-line console.
• On Windows, select Start > All Programs > Arm DS Command Prompt
• On Linux:
— Add the <install_directory>/bin directory to your PATH environment variable. If it is
already configured, then you can skip this step.
— Open a terminal.
2. List the entries in the user-specified configuration databases. Use the following syntax:
• On Windows, enter: :debugger --cdb-list--cdb-root path_to_cdb1[;path_to_cdb2]. For
example, debugger --cdb-list --cdb-root C:\\Arm_DS_Workspace\
\MyConfigDB1;Arm_DS_Workspace\\MyConfigDB2.
• On Linux, enter: debugger --cdb-list --cdb-root path_to_cdb1[:path_to_cdb2]. For
example, debugger --cdb-list --cdb-root \\Arm_DS_Workspace\
\MyConfigDB1:Arm_DS_Workspace\\MyConfigDB2.
Where:
debugger
3. When you have determined the details of your target, use the following command-line syntax to
connect to the target in your custom configuration database:
debugger --cdb-entry "Manufacturer::Platform::Project type::Execution
environment::Activity::Connection type" --cdb-root path_to_cdb1
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 12-275
reserved.
Non-Confidential
12 Running Arm® Debugger from the operating system command-line or from a script
12.4 Specifying a custom configuration database using the command-line
Where:
debugger
Correspond to the entries in your custom configuration database. The entries have a tree data
structure, where each entry has entries within it.
--cdb-root
Related concepts
12.1 Overview: Running Arm® Debugger from the command-line or from a script on page 12-265
Related references
12.2 Command-line debugger options on page 12-266
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 12-276
reserved.
Non-Confidential
12 Running Arm® Debugger from the operating system command-line or from a script
12.5 Capturing trace data using the command-line debugger
Procedure
1. Using the graphical interface of Arm Debugger, open the Debug Configurations dialog box for your
trace-capable target.
2. In the Connections tab, under DTSL options, click Edit to open the DTSL Configuration Editor
dialog box.
a. Select a Trace capture method in the Trace Buffer tab.
b. If required, select the relevant tab for your processor, and then select Enable core trace.
c. Click Apply to save the settings.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 12-277
reserved.
Non-Confidential
12 Running Arm® Debugger from the operating system command-line or from a script
12.5 Capturing trace data using the command-line debugger
3. Copy the DTSL settings file, for example default.dtslprops , from your workspace to a different
directory and change its name, for example to my_dtsl_settings.dtslprops.
4. Open the Arm DS Command Prompt and:
a. Use the --cdb-list command-line argument to identify your target name and configuration.
b. Invoke the command-line debugger with your target name and configuration and specify the
DTSL options file using --cdb-entry-params.
For example:
debugger --cdb-entry "pandaboard.org::OMAP 4430::Bare Metal Debug::Bare Metal
Debug::Debug Cortex-A9x2 SMP::RealView ICE" --cdb-entry-param "Connection=TestFarm-
Panda-A9x2" --cdb-entry-param "dtsl_options_file=C:\\Arm_DS_Workspace\
\my_dtsl_settings.dtslprops"
Related concepts
12.1 Overview: Running Arm® Debugger from the command-line or from a script on page 12-265
Related references
12.2 Command-line debugger options on page 12-266
16.43 Debug Configurations - Connection tab on page 16-513
16.50 DTSL Configuration Editor dialog box on page 16-529
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 12-278
reserved.
Non-Confidential
12 Running Arm® Debugger from the operating system command-line or from a script
12.6 Working with the debug server
By default, Arm Debugger assigns a free port and listens on all available addresses.
If necessary, you can bind a port and address by passing the [addr:]port parameters to the --server
command option.
For example:
• To listen on port 1234, you can use any of the following options:
debugger --cdb-entry "..." --server 1234
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 12-279
reserved.
Non-Confidential
12 Running Arm® Debugger from the operating system command-line or from a script
12.6 Working with the debug server
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 12-280
reserved.
Non-Confidential
12 Running Arm® Debugger from the operating system command-line or from a script
12.7 Arm® Debugger command-line console keyboard shortcuts
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 12-281
reserved.
Non-Confidential
Chapter 13
Working with the Snapshot Viewer
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 13-282
reserved.
Non-Confidential
13 Working with the Snapshot Viewer
13.1 About the Snapshot Viewer
Note
To do trace analysis, you must also have trace data.
If you are unable to provide all of this data, then the level of debug that is available is compromised.
Capturing this data is specific to your application, and no tools are provided to help with this. You might
have to install exception or signal handlers to catch erroneous situations in your application and dump
the required data out.
You must also consider how to get the dumped data from your device onto a workstation that is
accessible by the debugger. Some suggestions on how to do this are to:
• Write the data to a file on the host workstation using semihosting.
• Send the data over a UART to a terminal.
• Send the data over a socket using TCP/IP.
Register values
Register values are used to emulate the state of the original system at a particular point in time. The most
important registers are those in the current processor mode. For example, on an Armv4 architecture
processor these registers are R0-R15 and also the Program Status Registers (PSRs):
• Current Program Status Register (CPSR)
• Application Program Status Register (APSR)
• Saved Program Status Register (SPSR).
Be aware that on many Arm processors, an exception, a data abort, causes a switch to a different
processor mode. In this case, you must ensure that the register values you use reflect the correct mode in
which the exception occurred, rather than the register values within your exception handler.
If your application uses floating-point data and your device contains vector floating-point hardware, then
you must also provide the Snapshot Viewer with the contents of the vector floating-point registers. The
important registers to capture are:
• Floating-point Status and Control Register (FPSCR)
• Floating-Point EXCeption register (FPEXC)
• Single precision registers (S n )
• Double precision registers (D n )
• Quad precision registers (Q n ).
Memory values
The majority of the application state is usually stored in memory in the form of global variables, the heap
and the stack. Due to size constraints, it is often difficult to provide the Snapshot Viewer with a copy of
the entire contents of memory. In this case, you must carefully consider the areas of memory that are of
particular importance.
If you are debugging a crash, the most useful information to find out is often the call stack, because this
shows the calling sequence of each function prior to the exception and the values of all the respective
function parameters. To show the call stack, the debugger must know the current stack pointer and have
access to the contents of the memory that contains the stack. By default, on Arm processors, the stack
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 13-283
reserved.
Non-Confidential
13 Working with the Snapshot Viewer
13.1 About the Snapshot Viewer
grows downwards, you must provide the memory starting from the current stack pointer and going up in
memory until the beginning of the stack is reached. If you are unable to provide the entire contents of the
stack, then a smaller portion starting at the current stack pointer is still useful because it provides the
most recent function calls.
If your application uses global (extern or file static) data, then providing the corresponding memory
values enables you to view the variables within the debugger.
If you have local or global variables that point to heap data, then you might want to follow the relevant
pointers in the debugger to examine the data. To do this you must have provided the contents of the heap
to the Snapshot Viewer. Be aware that heap can often occupy a large memory range, so it might not be
possible to capture the entire heap. The layout of the heap in memory and the data structures that control
heap allocation are often specific to the application or the C library, see the relevant documentation for
more information.
To debug at the disassembly level, the debugger must have access to the memory values where the
application code is located. It is often not necessary to capture the contents of the memory containing the
code, because identical data can often be extracted directly from the image using processing tools such as
fromelf . However, some complications to be aware of are:
• Self-modifying code where the values in the image and memory can vary.
• Dynamic relocation of the memory address within the image at runtime.
Debug symbols
The debugger requires debug information to display high-level information about your application, for
example:
• Source code.
• Variable values and types.
• Structures.
• Call stack.
This information is stored by the compiler and linker within the application image, so you must ensure
that you have a local debug copy of the same image that you are running on your device. The amount of
debug information that is stored in the image, and therefore the resulting quality of your debug session,
can be affected by the debug and optimization settings passed to the compiler and linker.
It is common to strip out as much of the debug information as possible when running an image on an
embedded device. In such cases, try to use the original unstripped image for debugging purposes.
Related tasks
13.3 Connecting to the Snapshot Viewer on page 13-288
Related references
13.2 Components of a Snapshot Viewer initialization file on page 13-285
13.4 Considerations when creating debugger scripts for the Snapshot Viewer on page 13-290
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 13-284
reserved.
Non-Confidential
13 Working with the Snapshot Viewer
13.2 Components of a Snapshot Viewer initialization file
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 13-285
reserved.
Non-Confidential
13 Working with the Snapshot Viewer
13.2 Components of a Snapshot Viewer initialization file
[regs]
A section for standard Arm register names and values, for example, 0x0.
Banked registers can be explicitly specified using their names from the Arm Architecture
Reference Manual, for example, R13_fiq. In addition, the current mode is determined from the
Program Status Registers (PSRs), enabling register names without mode suffixes to be identified
with the appropriate banked registers.
The values of the PSRs and PC registers must always be provided. The values of other registers
are only required if it is intended to read them from the debugger.
Consider:
[regs]
CPSR=0x600000D2 ; IRQ
SP=0x8000
R14_irq=0x1234
Reading the registers named SP, R13, or R13_irq all yield the value 0x8000.
Reading the registers named LR, R14, or R14_irq all yield the value 0x1234.
Note
All registers are 32-bits, except Armv8 AArch64 registers which are 64-bits.
For more information about Snapshot Viewer file formats, see the documentation in
<installation_directory>\sw\debugger\snapshot.
Restrictions
The following restrictions apply:
• Consecutive bytes of memory must appear as consecutive bytes in one or more dump files.
• Address ranges representing memory regions must not overlap.
Examples
[device]
name=cpu_0
class=core
type=Cortex-A7 ; Selected processor
location=address:0x1200013000
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 13-286
reserved.
Non-Confidential
13 Working with the Snapshot Viewer
13.2 Components of a Snapshot Viewer initialization file
LR=0x0000808D
PC=0x000080B8
Related concepts
13.1 About the Snapshot Viewer on page 13-283
Related tasks
13.3 Connecting to the Snapshot Viewer on page 13-288
Related references
13.4 Considerations when creating debugger scripts for the Snapshot Viewer on page 13-290
Related information
Arm Architecture Reference Manual
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 13-287
reserved.
Non-Confidential
13 Working with the Snapshot Viewer
13.3 Connecting to the Snapshot Viewer
Prerequisites
Before connecting, ensure that you have a Snapshot Viewer initialization file that contains static
information about a target at a specific point in time. For example, your file might contain the contents of
registers, memory, and processor state.
Procedure
1. Connect to the Snapshot Viewer:
Connecting from Arm Development Studio Connecting from the command-line
1. Open the Debug Configurations dialog box. From the Arm Development 1. Launch Arm Debugger in the command-line
Studio menu, click Run -> Debug Configurations. console.
2. Select or create a debug configuration under Generic Arm C/C++ 2. Use the --target option to pass your
Application. Snapshot Viewer initialization file to the
3. In the Connection tab, select Generic -> Snapshot -> View snapshot -> debugger:
View snapshot.
armdbg --target=int.ini --
script=int.cmm
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 13-288
reserved.
Non-Confidential
13 Working with the Snapshot Viewer
13.3 Connecting to the Snapshot Viewer
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 13-289
reserved.
Non-Confidential
13 Working with the Snapshot Viewer
13.4 Considerations when creating debugger scripts for the Snapshot Viewer
13.4 Considerations when creating debugger scripts for the Snapshot Viewer
The Snapshot Viewer uses an initialization file that emulates the state of the original system. The
symbols are loaded from the image using the data.load.elf command with the /nocode /noreg
arguments.
Note
The snapshot data and registers are read-only and so the commands you can use are limited.
The following example shows a script using CMM-style commands to analyze the contents of the
types_m3.axf image.
system.up
data.load.elf "types_m3.axf" /nocode /noreg
;Arrays and pointers to arrays
var.print ""
var.print "Arrays and pointers to arrays:"
var.print "Value of i_array[9999] is " i_array[9999]
var.print "Value of *(i_array+9999) is " *(i_array+9999)
var.print "Value of d_array[1][5] is " d_array[1][5]
var.print "Values of *((*d_array)+9) is " *((*d_array)+9)
var.print "Values of *((*d_array)) is " *((*d_array))
var.print "Value of &d_array[5][5] is " &d_array[5][5]
;Display 0x100 bytes from address in register PC
var.print ""
var.print "Display 0x100 bytes from address in register PC:"
data.dump r(PC)++0x100
;Structures and bit-fields
var.print ""
var.print "Structures and bit-fields:"
var.print "Value of values2.no is " values2.no
var.print "Value of ptr_values->no is " ptr_values->no
var.print "Value of values2.name is " values2.name
var.print "Value of ptr_values->name is " ptr_values->name
var.print "Value of values2.name[0] is " values2.name[0]
var.print "Value of (*ptr_values).name is " (*ptr_values).name
var.print "Value of values2.f1 is " values2.f1
var.print "Value of values2.f2 is " values2.f2
var.print "Value of ptr_values->f1 is " ptr_values->f1
var.print ""
var.print "Disconnect:"
system.down
Related concepts
13.1 About the Snapshot Viewer on page 13-283
Related tasks
13.3 Connecting to the Snapshot Viewer on page 13-288
Related references
13.2 Components of a Snapshot Viewer initialization file on page 13-285
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 13-290
reserved.
Non-Confidential
Chapter 14
Platform Configuration
In this section we describe how to configure your debug hardware units, hardware, and model platforms
in Development Studio.
It contains the following sections:
• 14.1 Platform Configuration and the Platform Configuration Editor (PCE) on page 14-292.
• 14.2 Hardware targets on page 14-301.
• 14.3 Model targets on page 14-322.
• 14.4 Configuration database on page 14-333.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-291
reserved.
Non-Confidential
14 Platform Configuration
14.1 Platform Configuration and the Platform Configuration Editor (PCE)
Warning
If you are autodetecting hardware target information, sometimes it is not possible for Development
Studio to read all of the information that it needs from a platform. This can be caused by a variety of
issues which are described in Hardware platform bring-up in Development Studio on page 14-301.
If you experience autodetection issues and know the details about the debug system of the platform, use
manual platform configuration. For more information, see Manual platform configuration
on page 14-317.
The configuration database in Development Studio stores the platform configuration and connection
settings in Development Studio. To extend the default Development Studio configuration database, you
can create platform configurations in user configuration databases.
Note
If your platform configuration is already in the configuration database, you can use the existing
configuration to connect to the platform. For more information, see Configuring debug connections in
Arm® Debugger on page 6-94. You do not have to use the Platform Configuration Editor unless you want
to modify the platform configuration.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-292
reserved.
Non-Confidential
14 Platform Configuration
14.1 Platform Configuration and the Platform Configuration Editor (PCE)
• A configuration file for a platform, created and saved using the Platform Configuration Editor (PCE).
See Create a platform configuration on page 14-302.
• A configuration file for a model that provides a CADI server, created and saved using the Model
Configuration Editor. The model can be already running or you can specify the path and filename to
the executable file. See Create a new model configuration on page 14-324.
You can create the following debug operations:
• Single processor and Symmetric Multi Processing (SMP) bare-metal debug for hardware and models.
• Single processor and SMP Linux kernel debug for hardware.
• Linux application debug configurations for hardware.
• big.LITTLE configurations for cores that support big.LITTLE operation, such as Cortex‑A15 and
Cortex‑A7.
Note
For more information on SMP, see Debugging SMP systems on page 5-85.
Debug and Trace Services Layer (DTSL) options are produced for hardware targets with a trace
subsystem. These can include:
• Selection of on-chip (Embedded Trace Buffer (ETB), Micro Trace Buffer (MTB), Trace Memory
Controller (TMC) or other on-chip buffer) or off-chip (DSTREAM trace buffer) trace capture.
• Cycle-accurate trace capture.
• Trace capture range.
• Configuration and capture of Instruction Trace Macrocell (ITM) and System Trace Macrocell (STM)
trace to be handled by the Development Studio Event Viewer.
The PCE does not create debug operations that configure non-instruction trace macrocells, except for
ITM and STM.
For SMP configurations, the Cross Trigger Interface (CTI) synchronization is used on targets where a
suitable CTI is present. A CTI produces a much tighter synchronization with a very low latency, in the
order of cycles. Synchronization without using a CTI has a much higher latency, but makes no
assumptions about implementation or usage.
Note
The CTI must be fully implemented and connected in line with the Arm reference designs. The CTI must
not be used for any other purpose.
For multiplexed pins, you might have to manually configure off-chip Trace Port Interface Unit (TPIU)
trace, and also perform calibrations to handle signal timing issues.
Note
Sometimes calibration needs to be performed even if the trace pins are not multiplexed.
If you experience any problems or need to produce other configurations, contact your support
representative.
Related concepts
14.1.2 Platform Configuration Editor (PCE) on page 14-294
14.2.1 Hardware platform bring-up in Development Studio on page 14-301
14.3.1 Model platform bring-up in Development Studio on page 14-322
Related tasks
14.4.2 Add a configuration database on page 14-335
Related references
14.3.5 Model Configuration Editor on page 14-330
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-293
reserved.
Non-Confidential
14 Platform Configuration
14.1 Platform Configuration and the Platform Configuration Editor (PCE)
PCE enables you to easily specify the debug topology by defining the connections between the various
processors, CoreSight components, and debug IP on the platform. This enables Arm Debugger to create
the DTSL script for the debug connection to the platform.
You can also use the PCE to:
• Review the devices on your development platform.
• Modify device information or add new devices that Arm Debugger was unable to autodetect.
• Configure your debug hardware unit and target-related features that are appropriate to correctly
debug on your development platform.
• Review or modify the debug activities for the various processors on the platform.
• Build and save the platform configuration to an RDDI configuration file which Arm Debugger uses
to connect to the target processors on your development platform.
Note
To autodetect the devices on the platform, Arm Debugger connects to the platform. It does not maintain
the connection to the target after reading the device information.
Related concepts
14.1.1 Platform Configuration in Development Studio on page 14-292
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-294
reserved.
Non-Confidential
14 Platform Configuration
14.1 Platform Configuration and the Platform Configuration Editor (PCE)
Related references
14.1.4 Device hierarchy in the PCE view on page 14-297
Warning
• You cannot mix and match AP types. If your configuration uses an APv1 device, then your other
devices must be APv1 as well. If using an APv2 device, then your other devices must be APv2
devices.
• For ADIv6 systems, all AP devices must be APv2 devices.
• If a system has APv2 devices, all APv2 devices must have a base address.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-295
reserved.
Non-Confidential
14 Platform Configuration
14.1 Platform Configuration and the Platform Configuration Editor (PCE)
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-296
reserved.
Non-Confidential
14 Platform Configuration
14.1 Platform Configuration and the Platform Configuration Editor (PCE)
4. Specify the APv2 base addresses. For each nested APv2 device, in the Configuration Items table
specify the base address in the CORESIGHT_AP_ADDRESS field:
Note
• If you input an invalid address, the PCE reverts the value to the previous valid address (which
might be the default).
• For an APv1 device, set the CoreSight AP index using the CORESIGHT_AP_INDEX configuration
item.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-297
reserved.
Non-Confidential
14 Platform Configuration
14.1 Platform Configuration and the Platform Configuration Editor (PCE)
If you do not need some of the autodetected devices, you can remove them from the device hierarchy. To
remove a device, right click on the device and select Remove Device.
Access
To access, either:
• In the Project Explorer, right-click on an SDF file, and select Open With > Platform Configuration
Editor.
• Double-click an SDF file (where the SDF association has not been overridden).
• In the Project Explorer, right-click, and select File > New > Platform Configuration. After
autodetection or manual configuration of a platform, the PCE view opens.
• Select File > New > Other... > Configuration Database > Platform Configuration. After
autodetection or manual configuration of a platform, the PCE view opens.
• The hardware connection dialog box provides the option to enter the Platform Configuration Editor
(PCE) at the final stages of new connection creation: File > New > Hardware Connection. At the
target selection step, click Add a new platform…. It can also be accessed at the end of the target
selection flow for a CMSIS device; click Target Configuration.
Contents
The context menu for the device hierarchy contains:
Field Description
Toggle Devices Shows or hides the Devices Panel which lists the devices that you can add to the JTAG scan chain or device
Panel hierarchy.
Debug Adapter Shows the configuration for your debug hardware unit, for example, a DSTREAM unit. For more information
on the contents displayed, see Debug Adapter configuration in the PCE on page 15-375.
Devices Shows the scan chain and device hierarchy of your platform. The device hierarchy usually consists of one or
more Debug Access Ports (DAP). Each DAP consists of one or more Access Ports (AP). Each AP shows the
devices that have been detected through that access port.
• Device Table - Shows information about the RDDI ID, device name, type, family, class, AP Index, and
Base Address.
• Component Connections - Shows component connection information, including master, slave, and link
type, details, and origin.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-298
reserved.
Non-Confidential
14 Platform Configuration
14.1 Platform Configuration and the Platform Configuration Editor (PCE)
Field Description
Device Shows the device name, along with device and configuration information. See Device configuration panel
on page 14-319 for more information.
Debug Activities Shows the type of debug activities you can perform on the target. The debug activities are accessible from the
Debug Configurations dialog box when you want to start a debug session.
Enumerate APs Available for Debug Access Ports (DAP) on the device hierarchy. This enumerates the Access Ports under the
DAP.
Read CoreSight Reads the CoreSight ROM tables to obtain more information about the devices from the various access ports.
ROM Tables This might cause certain devices on the platform to become unresponsive. If so, during autodetection and after
selecting your debug hardware Probe, deselect Read CoreSight ROM Tables under the Autodetect tab in the
Debug Adapter pane.
Add Custom JTAG Adds a custom device to the JTAG scan chain.
Device
Add core cluster Opens a dialog box which you can use to add a cluster of cores and their associated devices (ETM/PTM, CTI,
components and PMU) in groups. If a base address is specified, then base addresses for all components are set, and
topology links are added between all added components. If you select the option to add funnel connections, all
ETM/PTM devices are linked to the funnel specified by the Funnel Base Address. If there is no device at this
address, a new funnel is created.
Autodetect Starts the autodetection. It detects the connections between the various components on the platform.
Component
Connections
Add Link From This Adds a topology link between the selected device and another device. The selected device is the link master. If
Device no links from the device can be created (for example, the device is already linked, or there are no devices to
which a valid link can be made) then this menu item is not available.
Add Link To This Adds a topology link between the selected device and another device. The selected device is the link slave. If
Device no links to the device can be created (for example, the device is already linked, or there are no devices from
which a valid link can be made) then this menu item is not available.
Usage
To add a device as a sibling or as a child, drag-and-drop from the Devices Panel to the appropriate place
in the device hierarchy.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-299
reserved.
Non-Confidential
14 Platform Configuration
14.1 Platform Configuration and the Platform Configuration Editor (PCE)
Any device that you add or remove from the hierarchy changes the topology of the SoC. You must
ensure that the topology is appropriate for your platform. After adding new devices, you can configure
the devices in the right-hand pane in the PCE view.
Related concepts
14.1.2 Platform Configuration Editor (PCE) on page 14-294
Related references
15.3.9 Debug Adapter configuration in the PCE on page 15-375
14.2.8 Add core cluster components dialog box on page 14-320
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-300
reserved.
Non-Confidential
14 Platform Configuration
14.2 Hardware targets
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-301
reserved.
Non-Confidential
14 Platform Configuration
14.2 Hardware targets
Related tasks
14.2.2 Create a platform configuration on page 14-302
14.2.3 Edit a platform configuration on page 14-309
14.2.5 Manual platform configuration on page 14-317
Warning
If you choose to autodetect your platform, depending on your target, you might receive warnings and
errors. If Development Studio is unable to detect the connection information from the platform, no
assumptions are made about how the devices are connected. You must provide this information in the
PCE view. For more information on the possible causes, see Hardware platform bring-up in
Development Studio on page 14-301.
Prerequisites
• If you autodetect your target, ensure you connect your debug adapter and targets, or that you have the
connection address.
• If you import from an existing RDDI configuration file, SDF file (*.rcf, *.rvc, *.sdf), CoreSight
Creator file (*.xml), or CMM script (*.cmm), ensure you have access to these files.
Procedure
1. Open the new project dialog box. In the Project Explorer, right-click, and select File > New >
Platform Configuration.
2. Select Configuration Database > Platform Configuration and then click Next .
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-302
reserved.
Non-Confidential
14 Platform Configuration
14.2 Hardware targets
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-303
reserved.
Non-Confidential
14 Platform Configuration
14.2 Hardware targets
To automatically detect the devices present on your platform, use this option. After autodetection,
you can add more devices and specify how the devices are interconnected.
You must supply the details for the debug hardware adapter attached to your platform, or to
specify its Connection Address.
If you are using outdated firmware, Development Studio warns you during the platform detection
process. For example:
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-304
reserved.
Non-Confidential
14 Platform Configuration
14.2 Hardware targets
Figure 14-8 Debug hardware firmware update notification during platform configuration
To update your debug hardware firmware, click Update.
• Advanced platform detection or manual creation
Gives you control over the individual stages that are involved in reading the device information
from your platform. For more information, see Manual platform configuration on page 14-317.
Note
This option is useful to read certain device information that can make the platform unresponsive.
• Import from an existing RDDI configuration file or SDF file (*.rcf, *.rvc, *.sdf), or
CoreSight Creator file (*.xml)
Note
Use this option if you already have a configuration file for your platform.
Imports minimal information about the components available on your platform, such as the base
address. After importing, you can manually provide additional information and links between the
components to enable full debug and trace support.
• Import from a *.cmm file
Imports a platform configuration from a CMM script (*.cmm) file.
CMM scripts can contain target description information such as:
— JTAG pre- and post- IR/DR bit information.
— Core types.
— Device base addresses.
— CoreSight topology information.
The PCE uses this information to create a Development Studio platform configuration, complete
with custom DTSL control tabs for trace configuration.
Some CMM scripts describe different targets (or different cores and trace devices in the same
target) depending on the value of parameters that are passed to the script. If a CMM script
requires parameters, enter them in the CMM script parameters field.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-305
reserved.
Non-Confidential
14 Platform Configuration
14.2 Hardware targets
Warning
To detect a new platform, ensure your debug hardware has the minimum firmware version for the
Arm Development Studio version installed.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-306
reserved.
Non-Confidential
14 Platform Configuration
14.2 Hardware targets
5. Select an existing configuration database from the list, or create a new one. To create a new
configuration database, click Create New Database, provide a name for your new configuration
database in the prompt, then click OK to save your configuration database.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-307
reserved.
Non-Confidential
14 Platform Configuration
14.2 Hardware targets
8. Click Finish.
9. (Optional - Advanced platform detection or manual creation only) Complete your configuration:
• Configure your debug hardware in Debug Adapter panel.
• Autodetect your platform. In Debug Adapter panel under Autodetect tab, click Autodetect
Platform.
Warning
Depending on your target, you might receive warnings and errors. Where Development Studio is
unable to obtain this information from the platform, no assumptions are made about how the devices
are connected. You must provide this information in the PCE view.
Always review the information that has been collected before deciding what further action to take. If
Development Studio fails to read information, it might be an indication of a deeper problem. For
more information, see Hardware platform bring-up in Development Studio on page 14-301.
• Check, edit, and save your configuration. If required, edit the configuration then select File >
Save.
The Platform Configuration Editor (PCE) view opens in the right-hand panel. You can view the
configuration database and platform in the Project Explorer.
Related concepts
14.1.1 Platform Configuration in Development Studio on page 14-292
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-308
reserved.
Non-Confidential
14 Platform Configuration
14.2 Hardware targets
Related tasks
14.2.5 Manual platform configuration on page 14-317
14.2.3 Edit a platform configuration on page 14-309
Related references
14.4.1 Configuration Database panel on page 14-333
Warning
Cross-triggering or trace might not work if the fields within the component connections table are not
correctly populated. When the CTI trigger links are not detected, SMP debug reverts to use loose
synchronization. Loose synchronization is when the cores are being stopped separately by the debugger,
instead of using the Cross-Trigger Matrix.
For a more detailed description of the possible reasons Development Studio might not autodetect your
platform correctly, see Hardware platform bring-up in Development Studio on page 14-301.
Prerequisites
• You need a platform configuration available to edit.
• You need the topological information that describes your platform.
Procedure
1. Select Devices in the Device hierarchy in the PCE view on page 14-297.
2. Navigate to the component connection information. In the right-hand pane, select the Component
Connections tab.
3. Add a new component connection to a master or slave device:
a. Click Add Link. This shows the Add Link dialog box.
b. Select a device for the Master, the <master-device>, and select a device for the Slave, the <slave-
device>. Click Ok to add the component connection.
Note
Depending on the device you add a component connection for, you might have to specify additional
parameters. For example:
• If you add a CTI as a master, then you must specify the trigger output port.
• If you add a CTI as a slave, then you must specify the trigger input port.
• If you add a Trace Replicator as a master, then you must specify the master interface.
• If you add a Trace Funnel as a slave, then you must specify the slave interface.
The Component Connections tab shows the user-added component connections in the PCE view.
4. Save the platform configuration. Select File > Save.
5. Customize the build. By default, CTI synchronization and trace are enabled. When CTI sync is
failing or causing problems, it is useful to disable these options. To build the platform configuration
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-309
reserved.
Non-Confidential
14 Platform Configuration
14.2 Hardware targets
without these options, deselect them in the Platform Builder tab in the Properties dialog box and
select Apply.
When starting from scratch with a complex system, to test the connection with your target and debug
your cores, you might prefer to disable trace in the configuration.
6. Build the platform configuration. Right-click the project in the Project Explorer view and select
Build Platform.
If the PCE suspects that some topology information is missing, a The system topology (component
connections) may not be correct dialog box appears. This can happen, for example, if you are using
trace components that do not have a programming model. If the dialog box appears:
• Select Full Debug and Trace to regenerate the debug configuration files with full debug and
trace information.
• Select Debug Only to regenerate the debug configuration files that only contain the configuration
for a debug session without trace capability.
• Select Return to PCE to manually provide the component interconnect information.
Note
If you return to the PCE, check that the component interconnect information is accurate. If
required, edit the information, save the platform configuration, and rebuild the platform
configuration.
8. Check your new device is trace capable for the <master-device> processor. In the Connection tab in
the Debug Configurations dialog box, click Edit on DTSL Options.
Related concepts
14.2.1 Hardware platform bring-up in Development Studio on page 14-301
Related tasks
14.2.2 Create a platform configuration on page 14-302
14.2.5 Manual platform configuration on page 14-317
Related references
14.1.4 Device hierarchy in the PCE view on page 14-297
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-310
reserved.
Non-Confidential
14 Platform Configuration
14.2 Hardware targets
When you select the Cortex-M3 processor, Arm Debugger displays a warning message if there is any
missing information.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-311
reserved.
Non-Confidential
14 Platform Configuration
14.2 Hardware targets
Prerequisites
• You need a Cortex-M3 processor platform configuration available to edit.
• You need the topological information that describes your platform.
Procedure
1. Select Devices in the Device hierarchy in the PCE view on page 14-297.
2. In the right-hand pane, select the Component Connections tab.
3. Add a new component connection:
a. Click Add Link. This shows the Add Link dialog box.
b. Select Cortex-M3 for the Master and select CSETM_6 for the Slave. To add the component
connection, click OK.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-312
reserved.
Non-Confidential
14 Platform Configuration
14.2 Hardware targets
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-313
reserved.
Non-Confidential
14 Platform Configuration
14.2 Hardware targets
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-314
reserved.
Non-Confidential
14 Platform Configuration
14.2 Hardware targets
Tip
When starting from scratch with a complex system, to test the connection with your target and
debug your cores, we recommend disabling trace in the configuration.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-315
reserved.
Non-Confidential
14 Platform Configuration
14.2 Hardware targets
8. Check your new device is trace capable for the <master-device> processor. From the Connection tab
in the Debug Configurations dialog box, click Edit on DTSL Options.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-316
reserved.
Non-Confidential
14 Platform Configuration
14.2 Hardware targets
Prerequisites
You will need the topological information that describes your platform.
Procedure
1. To manually configure a platform configuration, create a new configuration database to manually
configure, or select an existing configuration database:
• To create a new configuration database, follow the instructions in Create a platform configuration
on page 14-302. In the New Platform dialog box, select Advanced platform detection or
manual creation.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-317
reserved.
Non-Confidential
14 Platform Configuration
14.2 Hardware targets
b. Add your CoreSight devices or Cortex processors to the device hierarchy. Before you begin, you
must add a CoreSight Debug Access Port (DAP), for example ARMCS-DP. For each DAP, you
must add the CoreSight Memory Access Ports (AP) that you need, for example CSMEMAP. You
must specify the correct index and type of each AP.
c. Add the Cortex processors and CoreSight devices to the correct AP on the correct DAP. To do
this, drag-and-drop them from the devices panel into the correct AP. As the CoreSight devices are
memory-mapped, you can add them in any order. However, you need to ensure that the device
type and ROM table base address are correct.
d. Specify how the devices connect to each other. Edit a platform configuration on page 14-309
describes how to do this.
Warning
Always review the information that has been collected before deciding what further action to take.
If Development Studio fails to read information, it might be an indication of a deeper problem.
For example, if Development Studio fails to discover the base addresses because the devices are
powered down, it might not be possible to provide debug support. This can also happen for
manually configured platforms because powered down devices are not responsive to Arm
Debugger. You might need to perform other operations, such as enabling clocks or powering
processor clusters, before debug and trace are possible.
3. Save and build the *.sdf file. Click File > Save.
When you next connect to a target through File > New > <|Hardware|Linux Application|Model>
Connection, the manually configured platform is visible as an available target.
Related concepts
14.2.1 Hardware platform bring-up in Development Studio on page 14-301
Related tasks
14.2.2 Create a platform configuration on page 14-302
14.2.3 Edit a platform configuration on page 14-309
Related references
14.2.7 Device configuration panel on page 14-319
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-318
reserved.
Non-Confidential
14 Platform Configuration
14.2 Hardware targets
When you add a custom device, you must specify the correct JTAG Instruction Register (IR) length. You
can provide any name for the custom device. You cannot debug a custom device. However, if you add
the custom device in the correct order with the correct length, you will be able to debug the supported
devices in the same scan chain.
Note
You cannot consolidate multiple custom devices on the scan chain. For example, you cannot replace two
custom devices with instructions lengths of 4 and 5 bits, by a single custom device of instruction length 9
bits.
Related tasks
14.2.5 Manual platform configuration on page 14-317
14.2.3 Edit a platform configuration on page 14-309
Access
You can access the panel using one of the following methods:
• In the Project Explorer, right-click on an *.sdf file, and select Open With > Platform
Configuration Editor. Select a device.
• Double-click an *.sdf file (where the *.sdf association has not been overridden), then select a
device.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-319
reserved.
Non-Confidential
14 Platform Configuration
14.2 Hardware targets
• File > New > Other... > Configuration Database > Platform Configuration. At the end of the
wizard, you have the option to open the PCE to check or modify the platform. In the PCE, select a
device.
• The target connection wizard provides an option to enter the PCE: File > New > Hardware
Connection--> Add a new platform. In the PCE, select a device.
Contents
The Device configuration panel contains:
Field Description
Device Details Shows the general information about the device. Fields include:
• Device Name
• Device Type
• Device Family
• Device Class
Configuration Items Shows the configuration items for the device. These are used by Arm Debugger to configure the device when
connecting to the target. Changing these configuration items affects the behavior of the target.
Device Information Shows information about the device. The Arm Debugger uses this information to generate the platform
configuration. If you change the device information, the platform configuration generated by Arm Debugger
changes, which might result in different debug and trace options being available.
Related concepts
14.1.2 Platform Configuration Editor (PCE) on page 14-294
Related tasks
14.2.3 Edit a platform configuration on page 14-309
14.2.5 Manual platform configuration on page 14-317
Related references
14.2.8 Add core cluster components dialog box on page 14-320
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-320
reserved.
Non-Confidential
14 Platform Configuration
14.2 Hardware targets
Access
Right-click a MEM-AP device (Memory Access Port device) in the Device hierarchy in the PCE view
on page 14-297 and select Add core cluster components.
Contents
The Add core cluster components dialog box contains:
Field Description
First Core Base Address Enter the base address of your first core.
Add additional core Select the core components to add. Choose from:
components • CSETM/CSPTM
• CSCTI
• CSPMU
Related concepts
14.1.2 Platform Configuration Editor (PCE) on page 14-294
Related references
14.1.4 Device hierarchy in the PCE view on page 14-297
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-321
reserved.
Non-Confidential
14 Platform Configuration
14.3 Model targets
Note
You do not need an *.sdf file.
When Development Studio connects to a running model, the Model Configuration Editor connects to,
and interrogates, the model for information about its devices. The information detected is used to create
an *.mdf file (Model Description File). The *.mdf file is used to generate the model platform
configuration, but it is not required for connection.
To enable a simple and efficient model platform bring-up process, Arm Debugger automatically detects
most of the model configuration information. However, Arm Debugger might not recognize the core type
of new models with custom or pre-released cores. To resolve this, open the *.mdf file in Model
Configuration Editor and change the unrecognized core types to core types that are supported by Arm
Debugger.
For more information on creating model configurations, follow the instructions in Create a new model
configuration on page 14-324. For more information about the Model Configuration Editor, see Model
Configuration Editor on page 14-330.
Related tasks
14.3.4 Create a new model configuration on page 14-324
6.7 Configuring a connection to an external Fixed Virtual Platform (FVP) for bare-metal application
debug on page 6-110
6.3 Configuring a connection to a Linux application using gdbserver on page 6-100
6.4 Configuring a connection to a Linux kernel on page 6-103
6.2 Configuring a connection to a bare-metal hardware target on page 6-96
12.4 Specifying a custom configuration database using the command-line on page 12-275
Related references
14.3.5 Model Configuration Editor on page 14-330
6.1 Overview: Debug connections in Arm® Debugger on page 6-95
Related information
Component Architecture Debug Interface Developer Guide
Iris Developer Guide
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-322
reserved.
Non-Confidential
14 Platform Configuration
14.3 Model targets
14.3.2 Set up environment variables for models not provided with Arm® Development Studio
Arm Debugger provides built-in support for connecting to a large range of Arm Fast Models products. To
use any other simulation model with Arm Debugger, you must set up your host operating system
environment variables so that your models are available to Development Studio.
Prerequisites
• You might require local administrator access on the host operating system to make any changes to the
system environment variables.
Procedure
1. Add the install_directory/bin directory to your PATH environment variable:
• For Windows, enter set PATH=<your model path>\bin;%PATH%.
• For Linux, enter export PATH=<your model path>/bin:$PATH.
2. Restart Development Studio.
3. Ensure that the modified path is available for future sessions:
• For Windows:
1. Right-click My Computer > Properties > Advanced system settings >
Environment Variables.
2. Under User Variables, either create a PATH variable with the value <your model
path>\bin, or append ;<your model path>\bin to any existing PATH variable.
• For Linux, set up the PATH in the appropriate shell configuration file. For example, in .bashrc ,
add the line export PATH=<your model path>/bin:$PATH.
The models are now available to be used with Development Studio.
Related tasks
14.3.4 Create a new model configuration on page 14-324
14.3.3 Launch a Fast Model for use with Arm Development Studio on page 14-323
14.3.3 Launch a Fast Model for use with Arm Development Studio
If you want to connect to an already running model using Arm Development Studio, you need to first
launch the model with the appropriate model connection interface. You can launch a Fast Models as a
library file or as an executable.
Procedure
1. Launch your model and start the model connection interface server:
To launch models with Component Architecture Debug To launch models with Iris as the model connection
Interface (CADI) as the model connection interface interface server:
server:
• If your model is a library file: • If your model is a library file:
— On Windows, select Start > All Programs > Arm — On Windows, select Start > All Programs > Arm
Development Studio > Arm Development Studio Development Studio > Arm Development Studio
Command Prompt and enter, either: Command Prompt and enter, either:
◦ model_shell -m <your model path and ◦ model_shell -m <your model path and
name> -S name> -I
◦ <your model path and executable name> -S ◦ <your model path and executable name> -
— On Linux, open a new terminal and run: I
install_directory /bin/model_shell -m <your — On Linux, open a new terminal and run:
model path and name> -S. install_directory /bin/model_shell -m
• If your model is an executable file, at the command prompt, <your model path and name> -I.
enter <your model path and name> -S. • If your model is an executable file, at the command prompt,
enter <your model path and name> -I.
2. Connect to the running model using the Development Studio connection options.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-323
reserved.
Non-Confidential
14 Platform Configuration
14.3 Model targets
Note
• For more information about the options available with the model_shell utility in Development
Studio, enter model_shell --help at the Development Studio command prompt.
• For more information about the switches available for either CADI or the Iris model connection
interfaces, see the Fast Models documentation.
Related tasks
14.3.4 Create a new model configuration on page 14-324
14.3.2 Set up environment variables for models not provided with Arm® Development Studio
on page 14-323
Related information
FVP command-line options
Prerequisites
• If you are importing an existing model configuration file (*.mdf), ensure you have access to this file.
• Some of the options below require you to launch your model before connecting to it. Before using
these options, ensure you have launched your model with the appropriate model interface switches
before attempting to connect to it.
Procedure
1. Open the Model Configuration wizard. From the main menu, select File > New > Other > Model
Configuration and click Next.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-324
reserved.
Non-Confidential
14 Platform Configuration
14.3 Model targets
• Select the configuration database where you want to add your model.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-325
reserved.
Non-Confidential
14 Platform Configuration
14.3 Model targets
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-326
reserved.
Non-Confidential
14 Platform Configuration
14.3 Model targets
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-327
reserved.
Non-Confidential
14 Platform Configuration
14.3 Model targets
1. Select the Browse for model running on local host option and click Next.
2. Select the model you require from the listed models.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-328
reserved.
Non-Confidential
14 Platform Configuration
14.3 Model targets
1. Select the Connect to model running on either local or remote host option and
click Next.
2. Enter the connection address and port number of the model.
Next Steps
Make any changes to the model in the Model Configuration Editor. To save the changes to the model,
click Save.
To import and rebuild the Development Studio configuration database, click Import.
Click Debug to open the Debug Configurations dialog box to create, manage, and run configurations
for this target.
Related concepts
14.3.1 Model platform bring-up in Development Studio on page 14-322
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-329
reserved.
Non-Confidential
14 Platform Configuration
14.3 Model targets
Related tasks
14.3.3 Launch a Fast Model for use with Arm Development Studio on page 14-323
Related references
14.3.5 Model Configuration Editor on page 14-330
Related information
FVP command-line options
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-330
reserved.
Non-Confidential
14 Platform Configuration
14.3 Model targets
Contents
The Model Configuration Editor contains:
Field Description
Model Devices and View and configure the devices in the model.
Cluster • The Executable Devices section lists the cores available within the model. Add, remove, or edit the
Configuration tab available cores.
• The Associations section lists the non-executable devices within the model. Expand the associations to
see the mapping of the non-executable devices. Delete items from the associations view or add items from
the list of available non-executable devices.
Note
There are two important conventions for an Instance Name:
• Each name must be unique.
• For multi-cluster models, each name must be in the clusterX.cpuY format.
Debug Connections View and configure the debug connections. Drag cores or clusters from the Cores and Clusters section and
tab drop them into the node connection under Debug Activities. To enable Linux application debug, select the
Enable Linux Application Debug option.
Model Launch View and configure the launch settings for a specific model:
Configuration tab • To enable options and provide the path of the model you want to launch, select Launch and connect to a
specific model.
• Model Interface shows the interface used for creating the model configuration.
• To use the default launcher script, select Use Default Launcher Script. To provide an alternative launch
script, deselect the option, and provide a script path in Launch Script.
• To provide model launch parameters, specify them in the Model launch parameters panel. Click
Parameters to display available model launch parameters. Select the parameters to use, and click OK to
apply them.
• To provide model run-time parameters, specify them in the Model run-time parameters panel.
Note
To enable RDDI logging, you must specify a RDDI Log file to use.
Import Imports configuration database files and adds the project to Development Studio preferences.
Usage
Configure your model and connections in the Model Configuration Editor.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-331
reserved.
Non-Confidential
14 Platform Configuration
14.3 Model targets
To save the changes to the configuration, click Save. To import the configuration database files and add
the projects to the Development Studio preferences, click Import.
Warning
Changes to an *.mdf file must be imported into the Development Studio preferences to take effect.
To launch the Development Studio Debug Configurations dialog box, click Debug.
Related tasks
14.3.4 Create a new model configuration on page 14-324
14.3.3 Launch a Fast Model for use with Arm Development Studio on page 14-323
14.3.2 Set up environment variables for models not provided with Arm® Development Studio
on page 14-323
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-332
reserved.
Non-Confidential
14 Platform Configuration
14.4 Configuration database
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-333
reserved.
Non-Confidential
14 Platform Configuration
14.4 Configuration database
Access
Select Window > Preferences. In the Preferences dialog box, expand Arm DS and select
Configuration Database.
Contents
The Configuration Database panel contains:
Field Description
Edit Opens a dialog box to modify the name and location of the selected configuration database.
Test platforms… Enables you to test platforms and report any errors found. This is useful when trying to determine why a
platform configuration is not loading correctly.
Restore Defaults Removes all the configuration databases that do not belong to the Development Studio default system.
Usage
Development Studio configuration database reads and processes the default and user configuration
databases sequentially from top to bottom in the list. The information read in each configuration database
appends, or overwrites, the information read in the previous databases positioned above it in the list. This
means the information in the configuration database that is positioned at the bottom of the list has the
highest priority. The information in the configuration database that is positioned at the top of the list has
the lowest priority. For example, if you produced a modified core definition with different registers, you
would add it to the database at the bottom of the list so that the Development Studio configuration
database reads it last. Development Studio then uses this information instead of the core definitions in
the higher-positioned or default databases.
Ensure that you rebuild the Development Studio configuration database after you add, remove, or edit
any configuration databases. To rebuild the Development Studio configuration database, click Rebuild
database.
Related tasks
14.4.2 Add a configuration database on page 14-335
14.4.3 Add a Platform Configuration to a Configuration Database on page 14-337
14.2.2 Create a platform configuration on page 14-302
Related information
How do I add a custom components.xml file to an Arm Development Studio Configuration Database
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-334
reserved.
Non-Confidential
14 Platform Configuration
14.4 Configuration database
Prerequisites
You must have an existing configuration database.
Procedure
1. Open the Preferences dialog box. From the main menu, select Window > Preferences.
2. Expand Arm DS and select Configuration Database.
3. Add your new configuration database and configure the ordering:
a. Click Add. The Add configuration database location dialog box opens.
b. Enter a Name for the configuration database, for example, MyConfigDB.
c. Click Browse. Find and select the database, then click OK.
d. Click OK to close the Add configuration database location dialog box.
The new configuration database is listed as an option under User Configuration Databases.
e. (Optional) If required, change the order of the user configuration databases. Select the new
database and click Up or Down as required.
Note
Development Studio processes the user configuration databases from top to bottom, with the
information in the lower databases replacing information in the higher databases. For example, if
you want to produce a modified Cortex‑A15 processor definition with different registers, add
those changes to a new configuration database lower in the list of user databases.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-335
reserved.
Non-Confidential
14 Platform Configuration
14.4 Configuration database
Note
Development Studio provides built-in databases containing a default set of target configurations.
You can enable or disable these databases, but you cannot delete them.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-336
reserved.
Non-Confidential
14 Platform Configuration
14.4 Configuration database
Note
If you create a platform configuration using the PCE, Development Studio automatically saves it to the
configuration database you chose or create within the New Platform wizard.
Prerequisites
• You need the platform configuration files for the new platform.
Note
Your platform configuration must include the *.sdf file, but might also include files such as the
dtsl_config_script.py and the project_types.xml files.
• You need to have an existing user configuration database to update to add the platform configuration.
Procedure
1. Navigate to the user configuration database to update in your file system.
2. Add the new platform configuration directory (containing the *.sdf file) to the Boards directory.
3. Open the Configuration Database dialog box in Development Studio. Select Window >
Preferences. In the Preferences dialog box which opens, select Arm DS > Configuration
Database.
4. Rebuild the Development Studio configuration database. Ensure the updated user configuration
database is selected, and click Rebuild database.
Note
If the updated user configuration database is not listed, follow the instructions in Add a configuration
database on page 14-335 to add it as a new configuration database.
5. Click OK.
You can view the new platform in the Connection tab of the Debug Configuration dialog box. The new
platform is listed under <Platform Manufacturer>/<Platform Name> as specified in the *.sdf file.
Related tasks
14.4.2 Add a configuration database on page 14-335
Related references
14.4.1 Configuration Database panel on page 14-333
Related information
How do I add a custom components.xml file to an Arm Development Studio Configuration Database
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-337
reserved.
Non-Confidential
14 Platform Configuration
14.4 Configuration database
Warning
Generating a new platform configuration overwrites any DTSL scripts and other platform files that might
exist for your current configuration. Backup your configuration if you have applied manual changes to
your configuration.
Prerequisites
• Install the latest release of Arm Development Studio which contains support for the latest debug
hardware from Arm.
• You require an existing platform configuration on page 14-302.
Note
— Your platform configuration must include the *.sdf file, but might also include files such as the
dtsl_config_script.py and the project_types.xml files.
Procedure
1. In the Project Explorer, right-click the *.sdf file, and select Open With > Platform Configuration
Editor.
2. Click Debug Activities to view hardware debug units supported by your version of Arm Development
Studio.
3. Select the debug units that you require support for in your platform configuration.
4. Build the platform configuration. Right-click the project in the Project Explorer view and select
Build Platform.
If your platform contains incomplete or invalid topology, a This platform contains warnings dialog
box appears. If the dialog box appears:
• Select Debug Only to regenerate the debug configuration files containing the configuration for a
debug session without trace capability.
• Select Full Debug and Trace to regenerate the debug configuration files with full debug and
trace information.
• Select Return to PCE to manually provide the missing information.
Note
If you return to the PCE, check that the component interconnect information is accurate. If
required, edit the information, save the platform configuration, and rebuild the platform
configuration.
5. After the platform has built successfully, reapply any manual changes you had made to your previous
platform configuration.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 14-338
reserved.
Non-Confidential
Chapter 15
Using Debug Probes with Arm® Development
Studio
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-339
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.1 Overview: Debug Probes and Arm® Development Studio
Supported probes
Arm Development Studio automatically recognizes the Arm DSTREAM family and Keil ULINK™
family debug probes, as well as some third party probes. You can use other probes too, but they require
additional configuration for Arm Development Studio to recognize them.
The DSTREAM and ULINK probes implement JTAG and SWD interfaces that communicate with the
CoreSight debug components on your target.
• DSTREAM family:
— Arm DSTREAM-ST
— Arm DSTREAM-PT
— Arm DSTREAM-HT
Note
Although the Arm DSTREAM probe is supported, it is discontinued and is no longer available to
purchase.
• ULINK family:
— Keil ULINK2
— Keil ULINKpro
— Keil ULINKpro D
• Third party debug probes:
— ST-Link
— Cadence virtual debug
— FTDI MPSSE JTAG
Note
If you are using the FTDI MPSSE JTAG adapter on Linux, the OS automatically installs an
incorrect driver when you connect this adapter. For details on how to fix this issue, see
Troubleshooting: FTDI probe incompatible driver error in the Arm Development Studio User
Guide.
— USB Blaster II
Note
If you are using the USB-Blaster debug units, Arm Debugger can connect to Arria V SoC, Arria
10 SoC, Cyclone V SoC and Stratix 10 boards. To enable the connections, ensure that the
environment variable QUARTUS_ROOTDIR is set and contains the path to the Quartus tools
installation directory:
◦ On Windows, this environment variable is usually set by the Quartus tools installer.
◦ On Linux, you might have to manually set the environment variable to the Quartus tools
installation path. For example, ~/<quartus_tools_installation_directory>/
qprogrammer.
For information on installing device drivers for USB-Blaster and USB-Blaster II, consult your
Quartus tools documentation.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-340
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.1 Overview: Debug Probes and Arm® Development Studio
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-341
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.2 Configure DSTREAM-HT trace using the Arm® Development Studio Platform Configuration Editor
15.2 Configure DSTREAM-HT trace using the Arm® Development Studio Platform
Configuration Editor
Use the Platform Configuration Editor (PCE) in Arm Development Studio to add support for the
DSTREAM-HT system to your platform configuration.
This section contains the following subsections:
• 15.2.1 Create a DSTREAM-HT enabled platform configuration on page 15-342.
• 15.2.2 Customize the configuration usecase script for your target on page 15-348.
• 15.2.3 Create debug configuration and connect to the target on page 15-348.
• 15.2.4 Additional HSSTP target configuration setup on page 15-351.
• 15.2.5 DSTREAM-HT trace probe configuration on page 15-352.
• 15.2.6 Example HSSTP configurations provided with Arm® Development Studio on page 15-354.
Warning
Generating a new platform configuration overwrites any DTSL scripts and other platform files that might
exist for your current configuration. Backup your configuration if you have an existing configuration and
have applied manual changes to your configuration.
Prerequisites
• Install the latest release of Arm Development Studio which contains support for the latest debug
hardware from Arm.
• Ensure your DSTREAM-HT system has the latest firmware version on page 16-544 installed.
• If you autodetect your target, ensure that you connect your debug adapter and targets, or that you
have the connection address.
• If you import an existing RDDI configuration file, SDF file (.rcf, *.rvc, *.sdf), CoreSight Creator
file (*.xml), or CMM script (*.cmm), ensure that you have access to these files.
Procedure
1. Open the new project dialog box. In the Project Explorer, right-click, and select File > New >
Other > Platform Configuration.
2. Select Configuration Database > Platform Configuration and then click Next to view the Create
Platform Configuration dialog box.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-342
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.2 Configure DSTREAM-HT trace using the Arm® Development Studio Platform Configuration Editor
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-343
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.2 Configure DSTREAM-HT trace using the Arm® Development Studio Platform Configuration Editor
Automatically detects devices that are present on your platform, use this option. After
autodetection, you can add more devices and specify how the devices are interconnected.
• Advanced platform detection or manual creation
This option gives you control over the individual stages that are involved in reading the device
information from your platform. This option is useful, for example, to read certain device
information that might make the platform unresponsive. For more information, see Manual
platform configuration on page 14-317.
• Import from an existing RDDI configuration file or SDF file (*.rcf, *.rvc, *.sdf), or
CoreSight Creator file (*.xml)
Use this option if you already have a configuration file for your platform.
Imports minimal information about the components available on your platform, such as the base
address. After importing, you can manually provide additional information and links between the
components to enable full debug and trace support.
• Import from a *.cmm file
Imports a platform configuration from a CMM script (*.cmm) file.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-344
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.2 Configure DSTREAM-HT trace using the Arm® Development Studio Platform Configuration Editor
Warning
Depending on your target, you might receive warnings and errors. When Development Studio cannot
obtain this information from the platform, it does not make any assumptions about how the devices
are connected. You must provide this information in the PCE view.
Debug functionality succeeds if all cores are correctly detected. Where the connections between cores
are not detected, debug succeeds, but trace and cross-triggering functionality might be limited or
missing.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-345
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.2 Configure DSTREAM-HT trace using the Arm® Development Studio Platform Configuration Editor
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-346
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.2 Configure DSTREAM-HT trace using the Arm® Development Studio Platform Configuration Editor
8. Click Finish.
9. (Optional - Advanced platform detection or manual creation only) Complete your configuration:
• Configure your debug hardware in Debug Adapter panel.
• Autodetect your platform. In Debug Adapter panel under Autodetect tab, click Autodetect
Platform.
Warning
Depending on your target, you might receive warnings and errors. When Development Studio cannot
obtain this information from the platform, it does not make any assumptions about how the devices
are connected. You must provide this information in the PCE view.
Always review the information that has been collected before deciding what further action to take. If
Development Studio fails to read information, it might indicate a deeper problem. For more
information, see Hardware platform bring-up in Development Studio on page 14-301.
• Check, edit, and save your configuration. If required, edit the configuration then select File >
Save.
The Platform Configuration Editor (PCE) view opens in the right-hand panel. You can view the
configuration database and platform in the Project Explorer.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-347
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.2 Configure DSTREAM-HT trace using the Arm® Development Studio Platform Configuration Editor
Next Steps
After successfully creating the platform configuration with DSTREAM-HT support, the next step is to
modify the configuration usecase scripts on page 15-348 to accept target-specific values.
Prerequisites
• You require a platform configuration for your target generated using the Platform Configuration
Editor on page 15-342 (PCE) in Arm Development Studio.
• You require your target SoC user documentation. As part of the steps below you must modify the
configureTargetHSSTPLink(memAccessDevice) and
startTargetHSSTPTraining(memAccessDevice) functions with target-specific values. Refer to
your target SoC documentation for the required values.
Procedure
1. In the Project Explorer, browse to the configuration database which contains the configuration for
the platform you require.
2. Locate the hsstp_usecase.py file and open it with your preferred text editor.
3. In the hsstp_usecase.py file contents, locate the configureTargetHSSTPLink(memAccessDevice)
and startTargetHSSTPTraining(memAccessDevice) functions and modify it to the values specific
to your target.
The configuration usecase script specific to your target is now ready to run.
Next Steps
Run the script after you create a debug configuration on page 15-348 for your application and target.
Prerequisites
• Ensure that you have customized your configuration usecase on page 15-348 script for your specific
target.
• Ensure that your target is connected correctly to the DSTREAM-HT unit.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-348
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.2 Configure DSTREAM-HT trace using the Arm® Development Studio Platform Configuration Editor
• Ensure that your target is powered on. Refer to the documentation supplied with the target for more
information.
• Ensure that the debug hardware probe connecting your target to your workstation is powered on and
working.
Procedure
1. From the Arm Development Studio main menu, select File > New > Hardware Connection.
2. In the Hardware Connection dialog box, specify the details of the connection:
a. In Debug Connection give the debug connection a name, for example my_hsstp_connection and
click Next.
b. In Target Selection select a target, for example Renesas > R-Car H3 and click Finish. This
completes the initial connection configuration and opens the Edit Configuration dialog.
3. To specify the target and connection settings, in the Edit Configuration dialog box:
a. Select the Connection tab.
b. In the Select target panel confirm the target that is selected.
c. In the Target Connection list, select DSTREAM Family.
d. In the Connections area, enter the Connection name or IP address of your debug hardware
adapter. If your connection is local, click Browse and select the connection using the Connection
Browser.
e. In DSTL Options, click Edit to display the Debug and Trace Services Layer (DTSL)
Configuration for DSTREAM-HT dialog.
f. In the Trace Capture tab, set the Trace capture method as DSTREAM-HT 8GB Trace Buffer
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-349
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.2 Configure DSTREAM-HT trace using the Arm® Development Studio Platform Configuration Editor
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-350
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.2 Configure DSTREAM-HT trace using the Arm® Development Studio Platform Configuration Editor
If your target requires additional setup on page 15-351, make changes to the hsstp_usecase.py in the
Scripts view and run the default component of the script.
Prerequisites
• Ensure that you have customized your configuration usecase on page 15-348 script for your specific
target.
• Ensure that your debug connection is set up and working on page 15-348.
Procedure
1. Open the Scripts view, and locate the hsstp_usecase.py file that you modified for your target
on page 15-348.
2. Make any additional changes that you require.
3. Double-click the default stub to initiate the training sequence for your target and start HSSTP trace
output.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-351
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.2 Configure DSTREAM-HT trace using the Arm® Development Studio Platform Configuration Editor
Related tasks
15.2.1 Create a DSTREAM-HT enabled platform configuration on page 15-342
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-352
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.2 Configure DSTREAM-HT trace using the Arm® Development Studio Platform Configuration Editor
Currently, support is provided for 1 and 2-lane Arm HSSTP/Serial-ETM trace. Additional
lane support is planned for later Arm Development Studio releases.
Supported values: 1-6.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-353
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.2 Configure DSTREAM-HT trace using the Arm® Development Studio Platform Configuration Editor
View the hsstp_usecase.py files in the example configurations to see how the
configureTargetHSSTPLink(memAccessDevice) and
startTargetHSSTPTraining(memAccessDevice) functions are implemented. Although the examples
are target-specific, it demonstrates the general concept of the modifications required for your platform.
Related references
14.4 Configuration database on page 14-333
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-354
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.3 Debug Hardware configuration
Note
For information about the Debug Hardware Firmware Installer and Debug Hardware Configure IP views,
see Debug Hardware Firmware Installer view on page 16-544 and Debug Hardware Configure IP view
on page 16-542.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-355
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.3 Debug Hardware configuration
• Funnels and Replicators are trace links. They route trace information from trace sources to trace
sinks.
• Cross Trigger Interface (CTI) devices route events between other devices. The CTI network has a
variety of uses, including:
— Halt processors when trace buffers become full.
— Route trace triggers.
— Ensure tight synchronization between processors. For example, when one processor in a cluster
halts, the other processors in the cluster halt with minimal latency.
A debugger needs the details of the physical JTAG scan chain, and the details of individual Cortex
processors and CoreSight devices, including:
• CoreSight AP index.
• ROM table base address.
• Device type.
• Revision.
• Implementation detail.
However, a debugger also needs to know how the devices are connected to each other. For example,
which processors are part of the same cluster, how the CTI network can pass event information between
devices, and the topology of the trace subsystem. Without this information, a debugger might not be able
to provide all of the control and configuration services that are available. To provide this information to
Development Studio, use the device hierarchy in the Platform Configuration Editor (PCE). For more
information, see Device hierarchy in the PCE view on page 14-297 and Device configuration panel
on page 14-319. For instructions on configuring your debug hardware unit, see Configure your debug
hardware unit for Platform Autodetection on page 15-357.
Related concepts
5.2 Overview: Arm CoreSight™ debug and trace components on page 5-84
Related tasks
15.3.3 Configure your debug hardware unit for Platform Autodetection on page 15-357
Related references
14.1.4 Device hierarchy in the PCE view on page 14-297
14.2.7 Device configuration panel on page 14-319
Warning
After autodetecting your platform, check the system description within the PCE, and add any missing
information. For more information on platform configuration, see Platform Configuration in
Development Studio on page 14-292.
When you build a platform, three files are created as part of the debug configuration:
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-356
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.3 Debug Hardware configuration
system_description.sdf
The system description file has the same name as the platform described in its contents. For
example, a platform with the name Juno has an *.sdf file named Juno.sdf.
This file contains:
• Information about the devices present within the system.
• Details about the version and specific configuration of these devices.
• The topology information which describes their interconnections.
• Debug probe configuration settings.
• The information that is required to create and configure the DTSL configuration objects that
are used to debug the target.
Warning
Incomplete information within the *.sdf file might result in failing debug connections or trace
connections failing to produce valid trace. For example, missing or incomplete information
about ATB trace topology, CTI trigger topology, or SMP connections not using CTI
synchronization.
project_types.xml
Contains details about the debug activities that are available to Development Studio when
connecting to the target. For more information about this file, see About project_types.xml
on page 20-606.
dtsl_config_script.py
This is the DTSL Jython script file. It is responsible for the instantiation of the configuration
object and all associated devices. The file is created using the information directly from the
*.sdf file.
This Jython file enables you to add user-defined types, modify default trace and debug options,
and provide target-specific initialization, where required. For example, register writes to power
up the debug subsystem.
For more information about the structure of the DTSL Jython configuration file, see DTSL
Jython configuration file structure on page 15-367.
For more information about the DTSL configuration execution flow, see DTSL configuration
execution flow on page 15-372.
Related concepts
14.1.1 Platform Configuration in Development Studio on page 14-292
15.3.7 DTSL Jython configuration file structure on page 15-367
15.3.8 DTSL configuration execution flow on page 15-372
Prerequisites
• You must know the target platform.
• You need the configuration information for your debug hardware unit, for example:
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-357
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.3 Debug Hardware configuration
— Probe connection address (the connection address (TCP/USB) of the debug hardware unit).
— Clock speed (the JTAG clock speed of the target).
— The reset hold and delay times (hold: time in milliseconds the target is held in a hardware reset
state, delay: time in ms that the target waits after reset is released, before attempting any other
debugging operations).
— Drive strengths (to set the debug signals strengths from the debug hardware unit into the target).
— Reset behavior during autodetection (controls whether a system reset can take place during the
autodetection process, for example, on some targets that have a board with a tap controller a
system reset may cause autodetection to fail).
— Cable pin configurations (some boards can have the CoreSight 20 connector pins laid out
differently, changing this option allows the debugger and target to communicate properly).
These configuration settings must be correct for your specific target platform.
Note
For most cases, you can use the default settings.
• If you are using a third-party debug probe, add it using the instructions in Add a third-party debug
probe on page 15-361.
• You need an existing platform configuration to edit the debug hardware unit autodetection
configuration.
Procedure
1. Navigate to the device hierarchy in the PCE. Double-click an existing *.sdf file.
Note
For more information about the device hierarchy, see the Device hierarchy in the PCE view
on page 14-297 topic.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-358
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.3 Debug Hardware configuration
Note
For more information about the Debug Adapter view, see the Debug Adapter configuration in the
PCE on page 15-375 topic.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-359
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.3 Debug Hardware configuration
5. Check that the configuration information for your debug hardware unit is correct in each of the Probe
Configuration, Python Script, and Trace Configuration tabs.
Note
Descriptions of the configuration options in the Debug Adapter view are available in the Debug
Adapter configuration in the PCE on page 15-375 topic.
Next Steps
Next, click Autodetect Platform. The debug hardware unit interrogates the scan chain at the current
clock speed. If the clock speed is too high, some devices on the scan chain might not be detected. If you
suspect that some devices on the scan chain are not being detected, decrease the clock speed.
When platform autodetection has finished, review the detected configuration information and add any
missing topology links. Finally, rebuild the platform configuration.
For more information about creating and connecting to hardware platforms, see Hardware platform
bring-up in Development Studio on page 14-301.
Related tasks
15.3.5 Add a third-party debug probe on page 15-361
Related references
15.3.9 Debug Adapter configuration in the PCE on page 15-375
14.1.4 Device hierarchy in the PCE view on page 14-297
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-360
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.3 Debug Hardware configuration
Related tasks
15.3.5 Add a third-party debug probe on page 15-361
Prerequisites
You need one of the following, provided by the probe vendor:
• Implementation files:
— A probe definition file. This file is an XML file that defines your probe name and the RDDI
library file. It might also contain config_items and capabilities.
— An RDDI library file. The probe vendor might provide both a Windows and a Linux variant of the
file:
◦ Windows: rddi_example_2.dll.
◦ Linux: librddi_example.so.2.
Note
To create your own third-party probe implementation files, see Third-party Debug Probe API
on page 15-360.
Procedure
1. Set up your configuration database using the files provided by the probe vendor. The method for
doing this varies, depending on your scenario.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-361
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.3 Debug Hardware configuration
You have the implementation files, but no configuration You have an existing configuration database:
database:
1. (Optional) Create a configuration database: Import the database:
Note 1. Right-click in the Project Explorer, and select
This step is optional. If you want to edit an existing configuration Import... > General > Existing Projects into
database to add a third-party debug probe, you can jump to the next Workspace, and click Next.
step. 2. Browse to the file and click OK to select.
3. Select the Copy projects into workspace checkbox,
and click Finish.
a. In the Project Explorer view, right-click and select New > 4. If your workspace is not configured to automatically
Configuration Database. build projects, you must add the new database in
b. Enter a name for your database, and click OK. your settings:
Result: A configuration database directory is added to your a. Select Window -> Preferences to open the
workspace. It contains an empty directory called Boards. Preferences dialog box. Select Arm DS ->
2. To store third-party probes, edit the configuration database: Configuration Database.
b. Add your newly imported database to User
a. Navigate to your Development Studio workspace in your file
Configuration Databases and click Rebuild
system. Locate and open the configuration database to edit.
database.
b. Create a Probes directory at the same level as the Boards
directory. Result: The database is imported into your workspace
c. Open the Probes directory and add the probe definition and the and gets automatically rebuilt.
library files.
d. Rebuild your database. Open Development Studio and select
Window > Preferences > Arm DS > Configuration Database,
and click Rebuild database.
Warning
This rebuilds all of your databases.
Note
• Rebuild your database every time you change the probe definition file.
• To get the probe to appear in the PCE, close and re-open any open *.sdf files.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-362
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.3 Debug Hardware configuration
Warning
If you need to make any changes to the probe configuration values before autodetecting your target,
use manual platform configuration to connect to your target. For more information on manual
platform configuration, see Manual platform configuration on page 14-317. Follow the manual
configuration instructions and make any probe configuration changes before you add or edit the
existing topology for your platform.
a. In the device hierarchy list, select Debug Adapter and then select the Autodetect tab.
b. Add the connection address for your probe. In the Connection Address field, select your debug
adapter type, and click Browse to display the Connection Browser dialog box. Select your debug
adapter.
c. To configure the settings for the selected probe, click Autodetect Platform.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-363
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.3 Debug Hardware configuration
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-364
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.3 Debug Hardware configuration
Prerequisites
• Make sure that you have all of the software components that are listed in Debug and trace over
functional I/O on page 10-219, and that they are loaded as follows:
— The debug agent must be running on your target.
— The functional interface drivers must be installed on your machine.
— You need a directory that is called Probes, that contains your probe definition file (probes.xml),
the library files that implement the debug API and CSWP protocol, and other configuration files if
needed. All of these files are provided by your SoC vendor.
Procedure
1. In Arm Development Studio IDE, create a new Configuration Database connection:
a. File > New > Other > Configuration Database > Configuration Database.
b. Enter a name, and click Finish.
Result: The new database is listed in the Project Explorer.
2. Copy the configuration and library files into your new database:
a. Open the parent directory of the Probes directory.
b. Drag and drop the Probes directory into your new Configuration Database.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-365
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.3 Debug Hardware configuration
d. Providing there are no connection issues, in the Summary dialog box select Save a Debug and
Trace Platform Configuration and leave the Debug target after saving configuration box
unchecked. Click Next.
e. In the Platform Information dialog box, enter a descriptive Platform Manufacturer and
Platform Name, and then click Finish,
Result: The Platform Configuration Editor opens.
5. Configure your new platform. This is specific to your implementation. For further information, see
the documentation for your platform and debug architecture.
When you have finished, click Autodetect Platform.
On completion, your new platform is listed as an available platform, when you create a new debug
configuration
Next Steps
Now you can connect to your new virtual probe when you create a new debug configuration.
Note
RDDI MEM-AP virtual probes are not available for CMSIS connections. Only RDDI-DAP virtual probes are
available for CMSIS connections.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-366
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.3 Debug Hardware configuration
When you create a new debug configuration that uses your new probe, there might be a few differences,
including:
• The Connection Address field might be disabled if it is not requirement by the implementation. You
can enable this in the probes.xml file, or using the Arm Development Studio IDE.
• You might need to explicitly tell your target to connect to your virtual probe. You can do this using
the Platform Configuration Editor.
• If you have configurable connection settings for your virtual probe, you can edit them using the
Probe Configuration button:
Related concepts
10.16 Debug and trace over functional I/O on page 10-219
Related tasks
15.3.5 Add a third-party debug probe on page 15-361
Related references
16.51 Probe Configuration dialog box on page 16-531
Related information
Create a new debug configuration
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-367
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.3 Debug Hardware configuration
# The lists below are used within discover devices to initialize core and SMP devices
TRACE_RANGE_DESCRIPTION = '''Limit trace capture to the specified range. This is useful for
restricting trace capture to an OS (e.g. Linux kernel)'''
class DtslScript(ConfigurationBaseSDF):
@staticmethod
def getOptionList():
return [
DTSLv1.tabSet("options", "Options", childOptions=
[DTSLv1.tabPage("trace", "Trace Capture", childOptions=[
DTSLv1.enumOption('traceCapture', 'Trace capture method',
defaultValue="none",
values = [("none", "None"), ("CSTMC", "On Chip Trace Buffer (CSTMC/
ETF)"), ("DSTREAM", "DSTREAM 4GB TraceBuffer")],
setter=DtslScript.setTraceCaptureMethod),
DTSLv1.infoElement("traceOpts", "Trace Options", childOptions=[
DTSLv1.integerOption('timestampFrequency', 'Timestamp frequency',
defaultValue=25000000, isDynamic=False, description="This value will be used to set the
Counter Base Frequency ID Register of the Timestamp generator.\nIt represents the number of
ticks per second and is used to translate the timestamp value reported into anumber of
seconds.\nNote that changing this value may not result in a change in the observed
frequency."),
]),
DTSLv1.infoElement("offChip", "Off-Chip Trace", childOptions=[
DTSLv1.enumOption('tpiuPortWidth', 'TPIU Port Width',
defaultValue="16",
values = [("1", "1 bit"), ("2", "2 bit"), ("3", "3 bit"), ("4",
"4 bit"), ("5", "5 bit"), ("6", "6 bit"), ("7", "7 bit"), ("8", "8 bit"), ("9", "9 bit"),
("10", "10 bit"), ("11", "11 bit"), ("12", "12 bit"),("13", "13 bit"), ("14", "14 bit"),
("15", "15 bit"), ("16", "16 bit")], isDynamic=False),
]),
])]
+[DTSLv1.tabPage("Cortex-A53_SMP_0", "Cortex-A53", childOptions=[
DTSLv1.booleanOption('coreTrace', 'Enable Cortex-A53 core trace',
defaultValue=False,
childOptions =
# Allow each source to be enabled/disabled individually
[ DTSLv1.booleanOption('Cortex-A53_SMP_0_%d' % core, "Enable "
+ clusterCores[0][core] + " trace",defaultValue=True)
for core in range(len(clusterCores[0])) ] +
[ DTSLv1.booleanOption('timestamp', "Enable ETM Timestamps",
description="Controls the output oftimestamps into the ETM output streams",
defaultValue=True) ] +
[ DTSLv1.booleanOption('contextIDs', "Enable ETM Context IDs",
description="Controls the output ofcontext ID values into the ETM output streams",
defaultValue=True)
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-368
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.3 Debug Hardware configuration
] +
[ ETMv4TraceSource.cycleAccurateOption(DtslScript.getSourcesForCluster("Cortex-A53_SMP_0"))]
+
[ # Trace range selection (e.g. for linux kernel)
DTSLv1.booleanOption('traceRange', 'Trace capture range',
description=TRACE_RANGE_DESCRIPTION,
defaultValue = False,
childOptions = [
DTSLv1.integerOption('start', 'Start address',
description='Start address for trace capture',
defaultValue=0,
display=IIntegerOption.DisplayFormat.HEX),
DTSLv1.integerOption('end', 'End address',
description='End address for trace capture',
defaultValue=0xFFFFFFFF,
display=IIntegerOption.DisplayFormat.HEX)
])
]
),
])]
+[DTSLv1.tabPage("Cortex-A57_SMP_0", "Cortex-A57", childOptions=[
DTSLv1.booleanOption('coreTrace', 'Enable Cortex-A57 core trace',
defaultValue=False,
childOptions =
# Allow each source to be enabled/disabled individually
[ DTSLv1.booleanOption('Cortex-A57_SMP_0_%d' % core, "Enable "
+ clusterCores[1][core] + " trace",defaultValue=True)
for core in range(len(clusterCores[1])) ] +
[ DTSLv1.booleanOption('timestamp', "Enable ETM Timestamps",
description="Controls the output oftimestamps into the ETM output streams",
defaultValue=True) ] +
[ DTSLv1.booleanOption('contextIDs', "Enable ETM Context IDs",
description="Controls the output ofcontext ID values into the ETM output streams",
defaultValue=True)
] +
[ ETMv4TraceSource.cycleAccurateOption(DtslScript.getSourcesForCluster("Cortex-A57_SMP_0"))]
+
[ # Trace range selection (e.g. for linux kernel)
DTSLv1.booleanOption('traceRange', 'Trace capture range',
description=TRACE_RANGE_DESCRIPTION,
defaultValue = False,
childOptions = [
DTSLv1.integerOption('start', 'Start address',
description='Start address for trace capture',
defaultValue=0,
display=IIntegerOption.DisplayFormat.HEX),
DTSLv1.integerOption('end', 'End address',
description='End address for trace capture',
defaultValue=0xFFFFFFFF,
display=IIntegerOption.DisplayFormat.HEX)
])
]
),
])]
)
]
self.discoverDevices()
self.createTraceCapture()
# +----------------------------+
# | Target dependent functions |
# +----------------------------+
def discoverDevices(self):
'''Find and create devices'''
#MemAp devices
AXIAP(self, self.findDevice("CSMEMAP_0"), "CSMEMAP_0")
AHBAP(self, self.findDevice("CSMEMAP_1"), "CSMEMAP_1")
self.cortexA57cores = []
for coreName in (coreNames_cortexA57):
# Create core
coreDevice = a57_rams.A57CoreDevice(self, self.findDevice(coreName), coreName)
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-369
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.3 Debug Hardware configuration
self.cortexA57cores.append(coreDevice)
self.addDeviceInterface(coreDevice)
a57_rams.registerInternalRAMs(coreDevice)
# Create Trace Macrocell (if a macrocell exists for this core - disabled by
default - will enable with option)
tmName = self.getTraceSourceNameForCore(coreName)
if not tmName == None:
tm = ETMv4TraceSource(self, self.findDevice(tmName), streamID, tmName)
streamID += 2
tm.setEnabled(False)
self.cortexA53cores = []
for coreName in (coreNames_cortexA53):
# Create core
coreDevice = a53_rams.A53CoreDevice(self, self.findDevice(coreName), coreName)
self.cortexA53cores.append(coreDevice)
self.addDeviceInterface(coreDevice)
a53_rams.registerInternalRAMs(coreDevice)
# Create Trace Macrocell (if a macrocell exists for this core - disabled by
default - will enable with option)
tmName = self.getTraceSourceNameForCore(coreName)
if not tmName == None:
tm = ETMv4TraceSource(self, self.findDevice(tmName), streamID, tmName)
streamID += 2
tm.setEnabled(False)
self.setupCTISyncSMP()
self.setupCTISyncBigLittle(blCores)
def createTraceCapture(self):
# ETF Devices
etfTrace = TMCETBTraceCapture(self, self.getDeviceInterface("CSTMC"), "CSTMC")
self.addTraceCaptureInterface(etfTrace)
# DSTREAM
self.createDSTREAM()
self.addTraceCaptureInterface(self.DSTREAM)
def createDSTREAM(self):
self.DSTREAM = DSTREAMTraceCapture(self, "DSTREAM")
# +--------------------------------+
# | Callback functions for options |
# +--------------------------------+
def optionValuesChanged(self):
'''Callback to update the configuration state after options are changed'''
if not self.isConnected():
self.setInitialOptions()
self.updateDynamicOptions()
def setInitialOptions(self):
'''Set the initial options'''
traceMode = self.getOptionValue("options.trace.traceCapture")
coreTraceEnabled = self.getOptionValue("options.Cortex-A53_SMP_0.coreTrace")
for core in range(len(clusterCores[0])):
thisCoreTraceEnabled = self.getOptionValue("options.Cortex-
A53_SMP_0.coreTrace.Cortex-A53_SMP_0_%d" % core)
tmName = self.getTraceSourceNameForCore(clusterCores[0][core])
coreTM=self.getDeviceInterface(tmName)
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-370
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.3 Debug Hardware configuration
coreTraceEnabled = self.getOptionValue("options.Cortex-A57_SMP_0.coreTrace")
for core in range(len(clusterCores[1])):
thisCoreTraceEnabled = self.getOptionValue("options.Cortex-
A57_SMP_0.coreTrace.Cortex-A57_SMP_0_%d" % core)
tmName = self.getTraceSourceNameForCore(clusterCores[1][core])
coreTM=self.getDeviceInterface(tmName)
enableSource = coreTraceEnabled and thisCoreTraceEnabled
self.setTraceSourceEnabled(tmName, enableSource)
if(self.getOptionValue("options.Cortex-A57_SMP_0.coreTrace.traceRange")):
coreTM.clearAllTraceRanges()
coreTM.addTraceRange(self.getOptionValue("options.Cortex-
A57_SMP_0.coreTrace.traceRange.start"),
self.getOptionValue("options.Cortex-
A57_SMP_0.coreTrace.traceRange.end"))
coreTM.setTimestampingEnabled(self.getOptionValue("options.Cortex-
A57_SMP_0.coreTrace.timestamp"))
self.setContextIDEnabled(coreTM,
self.getOptionValue("options.Cortex-
A57_SMP_0.coreTrace.contextIDs"),
"32")
if self.getOptions().getOption("options.trace.offChip.tpiuPortWidth"):
self.setPortWidth(int(self.getOptionValue("options.trace.offChip.tpiuPortWidth")))
if self.getOptions().getOption("options.trace.offChip.traceBufferSize"):
self.setTraceBufferSize(self.getOptionValue("options.trace.offChip.traceBufferSize"))
self.configureTraceCapture(traceMode)
def updateDynamicOptions(self):
'''Update the dynamic options'''
# +------------------------------+
# | Target independent functions |
# +------------------------------
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-371
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.3 Debug Hardware configuration
def postConnect(self):
ConfigurationBaseSDF.postConnect(self)
try:
freq = self.getOptionValue("options.trace.traceOpts.timestampFrequency")
except:
return
..
Related concepts
15.3.8 DTSL configuration execution flow on page 15-372
15.3.2 Hardware configurations created by the PCE on page 15-356
The discoverDevices() function is responsible for the creation of all DTSL objects which
implement the IDevice interface. Configuration of the DTSL devices which are created by
default, is performed here. You can also initialize and configure any devices here. At this point,
the configuration is not connected, so it is important not to try to access the physical device.
Most of all objects that are created are not assigned to a field, but an IDeviceConnection
interface for any device can always be retrieved from the configuration using the
getDeviceInterface(deviceName) function. The getDeviceInterface(deviceName)
function is provided by the ConfigurationBase DTSL class, from which all DTSL
configurations are derived. For example, self.funnel =
getDeviceInterface("CSTFunnel_1").
To configure SMP, big.LITTLE, and DynamIQ™ DTSL devices for synchronized execution
debug, the discoverDevices() function also, where appropriate for the target, makes internal
calls to the ConfigurationBaseSDF class.
Next, the constructor calls createTraceCapture(). Within this function, all trace capture
devices are created and added to the configuration. The capture devices are added to the
configuration using the function addTraceCaptureInterface(). The
addTraceCaptureInterface() function also configures the trace/formatter mode of the capture
device, and disables it. If you instantiate more devices here, they must implement the
ITraceCapture interface and any specific configuration which does not require a target
connection. A target connection is a connection that is not yet made at the point of initialization
of the configuration object. Trace capture devices are not assigned to a field, but can be acquired
at any point after initialization using getTraceCaptureDevices()[devicename]. For example,
self.ETF =getTraceCaptureDevices()["CSTMC_1"].
After the configuration is constructed, all DTSL objects should be created and configured so far
as they are ready to start interacting with the target.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-372
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.3 Debug Hardware configuration
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-373
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.3 Debug Hardware configuration
postTraceStart()
The trace capture system is now capturing trace from all components that are configured to
produce it.
preTraceStop()
Called before trace stop.
traceStop()
Called at the point of stopping trace. Trace does not stop until the ancestor method is called.
postTraceStop()
Called after trace stop. No components are now producing trace.
You might be required to modify cores that are considered for big.LITTLE SMP devices
because the Platform Configuration Editor groups all 'big' and 'LITTLE' cores into a single
big.LITTLE SMP device. You can add or remove cores from this list. Only cores of the same
type can be added to any single list, and all cores must support big.LITTLE configurations.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-374
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.3 Debug Hardware configuration
Table 15-2 CTM channels default configuration for synchronized execution and trace triggering
v8 systems 0 1 2
v7 systems 2 1 3
To modify the channel used for any of the triggers, you can add the appropriate function to the
script, and have it return the required channel number.
For example:
def getCtmChannelStop(self):
return 1
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-375
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.3 Debug Hardware configuration
Access
• In the Project Explorer, right-click on a .sdf file, and select Open With > Platform Configuration
Editor.
• Double-click a .sdf file (where the SDF association has not been overridden).
• In the Project Explorer, right-click, and select File > New > Platform Configuration. After
autodetection or manual configuration of a platform, the PCE view opens.
• Select File > New > Other... > Configuration Database > Platform Configuration. After
autodetection or manual configuration of a platform, the PCE view opens.
• Enter the PCE and access debug adapter settings at the final stages of creating a new Hardware
Connection. Select File > New > Hardware Connection. At the target selection step, click Add a
new platform… and follow the steps in the wizard.
• At the end of the target selection flow for a CMSIS device; click Target Configuration.
Contents
The Debug Adapter configuration tabs contain:
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-376
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.3 Debug Hardware configuration
Tab Description
Probe View descriptions and set values for each probe configuration item. For example, use the UserOut_nn
Configuration configuration item to set User I/O pin values for your debug adapter (where nn is the UserOut item number as
displayed). Locate and select the UserOut_nn item and select either 0 - Low or 1 - High.
Python Script Adds a Python script to hook debug events and provide custom behavior. This script is added to the configuration
file as a configuration item.
Trace Selects parallel or HSSTP trace type, view a description for each trace type item, and configure the value set for
Configuration each item.
Related concepts
14.1.2 Platform Configuration Editor (PCE) on page 14-294
Related references
14.1.4 Device hierarchy in the PCE view on page 14-297
14.2.8 Add core cluster components dialog box on page 14-320
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-377
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.3 Debug Hardware configuration
You can set the values in the Platform Configuration Editor (PCE) under Debug Adapter in the Probe
Configuration tab.
Note
The options available depend on the selected debug Probe Type.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-378
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.3 Debug Hardware configuration
UseDeprecatedSWJ DSTREAM Specify that your debug hardware unit must use the deprecated SWJ switching sequence.
Sequence family only Use this item for older SWD-compatible targets which use the SWJ switching sequence.
nSRSTHighMode DSTREAM Set the drive strength to use when the reset signal is in the high or inactive state. You
family only can set the strength to be one of the following values: strong, weak high, or not
driven (tristate)
nSRSTLowMode DSTREAM Set the drive strength to use when the reset signal is in the low or active state. You can
family only set the strength to be one of the following values: strong, weak low, or not driven
(tristate).
nTRSTHighMode DSTREAM Reset mode used for the nTRST signal in the high state.
family only
nTRSTLowMode DSTREAM Set the drive strength to use when the reset signal is in the low, or active state. You can
family only set the strength to be one of the following values: strong, weak low, or not driven
(tristate).
SWOMode DSTREAM Protocol used to carry SWO data. Depending on the target mode, set to Manchester or
family only UART. If the SWO Mode is set to UART, the debug hardware unit can detect the SWO
UART Baud rate. This setting has no effect in Manchester mode.
SWOBaudRate DSTREAM SWO UART Baud rate. Specify the frequency of the incoming data. If you set this to 0,
family only the system attempts to autodetect the baud rate.
UART mode in the SWO context also means Non Return to Zero (NRZ) mode.
UserOut_nn DSTREAM Sets the state of the USER IO pins on the DSTREAM family of debug probes. Specify the
family only User I/O pin values for your debug adapter (where nn is the UserOut item number as
displayed). Locate and select the UserOut_nn item and select either 0 - Low or 1 -
High.
UserOut_P6_COAX DSTREAM User-defined hardware output pin 6 on header, and output co-axial connector.
family only
PowerFilterTime DSTREAM The power status filter. Limit sending power status notification messages.
family only
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-379
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.3 Debug Hardware configuration
JTAGAutoMaxFreq DSTREAM Set maximum frequency (Hz) used by the JTAG auto tune process in DSTREAM-ST.
family only
AllowTRST All probes Allow the debug probe to perform a TAP Reset.
A TAP reset performs a JTAG state machine reset and resets any TAP Controllers that are
receiving commands from the debug hardware unit.
True - This is the default. Your debug hardware unit holds the nTRST line active long
enough to perform any post-reset setup that might be required after a target-initiated reset.
Use the TRSTHoldTime config item to extend the time the target is held in reset.
False- Your debug hardware unit does not assert the reset line. Note that post-reset setup
might not be complete before the target starts to run.
To use JTAG state transitions to reset just the state machine, set this item to False, and
use the DoSoftTRST item instead.
DoSoftTRST All probes Allow debug probe to perform a TAP reset through JTAG state transitions.
Perform a JTAG sequence using the Test-Logic-Reset to force a reset. This is done in
addition to asserting the nTRST line if the AllowTRST configuration item is set to True.
ProbeMode All probes The debug interface mode. You can set the interface that connects to the target DAP to be
either JTAG or SWD. If set to SWD, your debug probe connects to your target using the SWD
protocol instead of JTAG.
SWJEnable All probes Use SWJ to switch the target between SWD and JTAG. If a target supports both JTAG and
SWD, you must enable this setting before you autoconfigure the target.
ResetHoldTime All probes nSRST hold time in milliseconds. Specify the time in milliseconds the target is held in a
hardware reset state.
TRSTHoldTime All probes nTRST hold time in milliseconds. Specify the time in milliseconds the target is held in a
hardware reset state.
PostResetDelay All probes nSRST post reset delay time in milliseconds. Specify the time in milliseconds that the
debug probe must wait after the reset is released, before attempting any other debugging
operation.
TRSTPostResetTime All probes nTRST post reset delay time in milliseconds. Specify the time in milliseconds that the
debug probe must wait after the reset is released, before attempting any other debugging
operations.
TRSTOnConnect All probes Perform TAP reset on connection to the first available core. Reset the target hardware by
asserting the nTRST signal when connecting to the first available core in a debug session.
SRSTOnConnect All probes Perform SYS reset on connection to the first available core. Reset the target hardware by
asserting the nSRST signal when connecting to the first available core in a debug session.
TAP Reset via State All probes Reset the JTAG logic in the target hardware by forcing transitions within its state machine.
Transitions This is done in addition to holding the nTRST TAP reset signal LOW. Specify this option if
nTRST is not connected, or if the target hardware requires that you force a reset of the
JTAG logic whenever resetting.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-380
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.3 Debug Hardware configuration
Target nSRST + nTRST All probes Select this item if the target hardware has its nSRST and nTRST JTAG signals linked.
linked
Linked_SRST_TRST All probes Set TRUE if the target hardware has the nSRST and nTRST signals physically linked.
PythonScript All probes The python script to hook debug events and provide custom behavior. You can specify the
python script in the Python script tab in the PCE.
PowerUpGPR All probes Set the item to enable powerup using any ROM table GPRs (ADIv6 debug systems only).
Related tasks
15.3.5 Add a third-party debug probe on page 15-361
15.3.3 Configure your debug hardware unit for Platform Autodetection on page 15-357
Related references
15.3.9 Debug Adapter configuration in the PCE on page 15-375
14.1.4 Device hierarchy in the PCE view on page 14-297
Streaming mode
Streaming mode is when the DSTREAM-PT probe forwards trace data to the host machine, as it is
capturing trace.
When using streaming mode:
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-381
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.3 Debug Hardware configuration
• The storage buffer is on the host machine, and can be any size. The Arm Development Studio IDE
lists 128GB as the maximum size, but you can overwrite this in the DTSL script on page 20-622.
• Live decode of trace events (ITM/STM) is supported.
• Stop on trigger is not supported.
DSTREAM-PT streaming trace mode has an 8GB First-In, First-Out (FIFO) buffer in between the target
and the host. This stabilizes the transfer rate of trace data to the host machine. It also means that the
buffer does not overflow if there is a sudden burst of trace data from the target, or if the host computer is
temporarily distracted from receiving the incoming trace.
When you stop trace capture, DSTREAM-PT ensures that any data in the FIFO buffer gets drained
before the transfer completes. You can view the captured trace data in the Trace view on page 16-482.
Warning
If the average rate of trace incoming from the target is higher than what the host is receiving, the buffer
eventually overflows when the 8GB FIFO is full. In this situation, DSTREAM-PT stops capturing new
trace, and the existing 8GB of trace data in the FIFO is delivered to the host. If this happens, a warning
message is displayed in the Commands view on page 16-410.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-382
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.3 Debug Hardware configuration
Prerequisites
• You need a debug connection to a target that is connected to a DSTREAM-PT probe.
Procedure
1. Open the Debug and Trace Services Layer (DTSL) Configuration dialog box:
a. In the Debug Control view, right-click your connection and select Debug Configurations.
b. In the Connection tab, click the DTSL Options Edit button.
2. Select a trace mode from the Trace Buffer tab:
Tip
See the DSTREAM-PT trace modes on page 15-381 topic for guidance on which off-chip trace
mode to use.
• To use the store and forward mode, select the DSTREAM-PT 8GB Trace Buffer option and
modify the TPIU port width if required.
• To use streaming mode, select the DSTREAM-PT Streaming Trace option:
1. Modify the TPIU port width if required.
2. Select a Host trace buffer size, that is, how much trace data you want to store on your host
machine.
Note
Store and forward mode and streaming mode are for off-chip trace. If your target has on-chip trace,
you might see additional trace modes listed.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-383
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.3 Debug Hardware configuration
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-384
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.3 Debug Hardware configuration
When you stop the capture session, the Trace View shows a list of executed instructions:
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-385
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.3 Debug Hardware configuration
Figure 15-23 Events view showing a trace data capture session with incoming trace events
• When using store and forward mode, live decode is not available. Instead, open the Events view and
when the capture session has stopped, you can see a list of all the trace events.
Related concepts
15.3.11 DSTREAM-PT trace modes on page 15-381
Related tasks
6.5 Configuring trace for bare-metal or Linux kernel targets on page 6-106
Related references
16.28 Trace view on page 16-482
16.29 Trace Control view on page 16-487
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-386
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.3 Debug Hardware configuration
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-387
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.4 DSTREAM dashboard
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-388
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.4 DSTREAM dashboard
Features
Name Description
View the status of the unit The dashboard displays a visual representation of the status LEDs that are physically present on the
unit.
Export data Export the host and firmware version details, in either plain text or JSON format.
Access the API documentation Read how to access all the information that is presented on the dashboard by using the Web APIs
instead.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-389
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.4 DSTREAM dashboard
Export data
• Use the Export section to select the type and data you want to export. You can export data
from the Host Details and the Firmware Version sections.
Access the API documentation
Click the API Documentation button and the documentation screen opens.
To expand and collapse the sections that are exposed by the APIs, use the + and - buttons.
To return to the dashboard, use the X button in the top-right corner.
Note
You can only access the API documentation when you have an active network connection to a
DSTREAM or DSTREAM-ST unit.
Related tasks
15.4.2 Connect to a DSTREAM unit remotely on page 15-390
Related references
15.4.3 DSTREAM Web API on page 15-391
Note
If you are a DSTREAM-PT or DSTREAM-HT user, you can only view information about your
DSTREAM-ST unit.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-390
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.4 DSTREAM dashboard
Prerequisites
• Your DSTREAM or DSTREAM-ST unit must be running firmware version 7.4.0-1 or higher.
• Your unit must be connected to a network.
Procedure
1. Get the IP address or host name of your unit:
a. Either open one of the following views in Arm Development Studio:
• Debug Hardware Configure IP view on page 16-542.
• Debug Hardware Firmware Installer view on page 16-544.
b. Or open the Debug Configurations - Connection tab on page 16-513.
c. Copy the IP address or host name.
2. Open a web browser, and paste the IP address or host name into the address bar, and press Enter.
The DSTREAM dashboard opens, displaying the state of the specified unit.
Next Steps
When connected, you can:
• View the state of the unit.
• Restart the unit.
For more information, see DSTREAM dashboard overview on page 15-388.
You can also interact with the unit using APIs. See DSTREAM Web API on page 15-391 for more
information.
Related references
15.4.1 DSTREAM dashboard overview on page 15-388
15.4.3 DSTREAM Web API on page 15-391
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-391
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.4 DSTREAM dashboard
Note
• If you are a DSTREAM-PT or DSTREAM-HT user, you can only view information about your
DSTREAM-ST unit.
• To use the Web API and to access the API documentation, you require an active network connection
to your DSTREAM or DSTREAM-ST unit.
Syntax
URL: http://<dashboard-URL>/<request>
To get your dashboard URL, see Connect to a DSTREAM unit remotely on page 15-390.
Where request is one of the following:
cgi-bin/restart
Note
To send these requests, you can use any of the following:
• A web browser.
• A command line utility, for example curl or wget.
• An HTTP library of any programming language.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-392
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.4 DSTREAM dashboard
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-393
reserved.
Non-Confidential
15 Using Debug Probes with Arm® Development Studio
15.4 DSTREAM dashboard
Related tasks
15.4.2 Connect to a DSTREAM unit remotely on page 15-390
Related references
15.4.1 DSTREAM dashboard overview on page 15-388
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 15-394
reserved.
Non-Confidential
Chapter 16
Perspectives and Views
Describes the perspective and related views in the Integrated Development Environment (IDE).
It contains the following sections:
• 16.1 App Console view on page 16-397.
• 16.2 Arm Asm Info view on page 16-399.
• 16.3 Arm assembler editor on page 16-400.
• 16.4 Breakpoints view on page 16-402.
• 16.5 C/C++ editor on page 16-406.
• 16.6 Commands view on page 16-410.
• 16.7 Debug Control view on page 16-413.
• 16.8 Stack view on page 16-417.
• 16.9 Disassembly view on page 16-420.
• 16.10 Events view on page 16-424.
• 16.11 Event Viewer Settings dialog box on page 16-427.
• 16.12 Expressions view on page 16-431.
• 16.13 Expression Inspector on page 16-435.
• 16.14 Functions view on page 16-436.
• 16.15 History view on page 16-439.
• 16.16 Memory view on page 16-441.
• 16.17 MMU/MPU view on page 16-450.
• 16.18 Modules view on page 16-455.
• 16.19 Registers view on page 16-457.
• 16.20 NVIC Registers view on page 16-464.
• 16.21 OS Data view on page 16-467.
• 16.22 Overlays view on page 16-469.
• 16.23 Cache Data view on page 16-470.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-395
reserved.
Non-Confidential
16 Perspectives and Views
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-396
reserved.
Non-Confidential
16 Perspectives and Views
16.1 App Console view
Note
Default settings for this view, for example the maximum number of lines to display, are controlled by the
Arm Debugger option in the Preferences dialog box. You can access these settings by selecting
Preferences from the Window menu.
Links this view to the selected connection in the Debug Control view. This is the default.
Alternatively, you can link the view to a different connection. If the connection you want is not
shown in the drop-down list you might have to select it first in the Debug Control view.
Save Console Buffer
Saves the contents of the App Console view to a text file.
Clear Console
Clears the contents of the App Console view.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-397
reserved.
Non-Confidential
16 Perspectives and Views
16.1 App Console view
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-398
reserved.
Non-Confidential
16 Perspectives and Views
16.2 Arm Asm Info view
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-399
reserved.
Non-Confidential
16 Perspectives and Views
16.3 Arm assembler editor
In the left-hand margin of each editor tab you can find a marker bar that displays view markers
associated with specific lines in the source code.
To set a breakpoint, double-click in the marker bar at the position where you want to set the breakpoint.
To delete a breakpoint, double-click on the breakpoint marker.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-400
reserved.
Non-Confidential
16 Perspectives and Views
16.3 Arm assembler editor
Note
The Default Breakpoint Type selected causes the top-level Toggle Breakpoint menu in this
context menu and the double-click action in the left-hand ruler to toggle either CDT Breakpoints
or Development Studio Breakpoints. This menu is also available from the Run menu in the
main menu bar at the top of the C/C++, Debug, and Development Studio perspectives.
The menu options under Arm DS Breakpoints do not retain this setting and always refer to
Development Studio Breakpoints.
Show Line Numbers
Show or hide line numbers.
For more information on other options not listed here, see the dynamic help.
Related tasks
7.9 Assigning conditions to an existing breakpoint on page 7-133
Related references
7.13 Setting a tracepoint on page 7-139
7.8 Conditional breakpoints on page 7-132
7.12 Pending breakpoints and watchpoints on page 7-137
Chapter 16 Perspectives and Views on page 16-395
9.1 Examining the target execution environment on page 9-187
9.2 Examining the call stack on page 9-188
16.2 Arm Asm Info view on page 16-399
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-401
reserved.
Non-Confidential
16 Perspectives and Views
16.4 Breakpoints view
where:
<source_file>:<linenum>
If the source file is available, the file name and line number in the file where the breakpoint is
set, for example main.c:44.
<function>+<offset>
The name of the function in which the breakpoint is set and the number of bytes from the start
of the function. For example, main_app+0x12 shows that the breakpoint is 18 bytes from the
start of the main_app() function.
<address>
The breakpoint ID number, #<N>. In some cases, such as in a for loop, a breakpoint might
comprise a number of sub-breakpoints. These are identified as <N>.<n>, where <N> is the
number of the parent. The syntax of a sub-breakpoint entry is:
<function>+<offset> <address> [#<ID>]
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-402
reserved.
Non-Confidential
16 Perspectives and Views
16.4 Breakpoints view
<instruction_set>
The instruction set of the instruction at the address of the breakpoint, A32 (Arm) or T32
(Thumb).
ignore = <num>/<count>
<count> is the value you have specified for the ignore count.
<nHits> hits
A counter that increments each time the breakpoint is hit. This is not displayed until the first hit.
If you set an ignore count, hits count does not start incrementing until the ignore count
reaches zero.
<condition>
where:
<name>
where:
<source_file>:<linenum>
If the source file is available, the file name and line number in the file where the tracepoint is
set.
Links this view to the selected connection in the Debug Control view. This is the default.
Alternatively, you can link the view to a different connection. If the connection you want is not
shown in the drop-down list you might have to select it first in the Debug Control view.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-403
reserved.
Non-Confidential
16 Perspectives and Views
16.4 Breakpoints view
Delete
Removes the selected breakpoints, watchpoints, and tracepoints.
Delete All
Removes all breakpoints, watchpoints, and tracepoints.
Go to File
Displays the source file containing the line of code where the selected breakpoint or tracepoint is
set. This option is disabled for a watchpoint.
Skip All Breakpoints
Deactivates all currently set breakpoints or watchpoints. The debugger remembers the enabled
and disabled state of each breakpoint or watchpoint, and restores that state when you reactivate
them again.
Show in Disassembly
Displays the disassembly where the selected breakpoint is set. This option is disabled for a
tracepoint.
Show in Memory
Displays the memory where the selected watchpoint is set. This option is disabled for a
tracepoint.
Resolve
Re-evaluates the address of the selected breakpoint or watchpoint. If the address can be
resolved, the breakpoint or watchpoint is set, otherwise it remains pending.
Enable Breakpoints
Enables the selected breakpoints, watchpoints, and tracepoints.
Disable Breakpoints
Disables the selected breakpoints, watchpoints, and tracepoints.
Copy
Copies the selected breakpoints, watchpoints, and tracepoints. You can also use the standard
keyboard shortcut to do this.
Paste
Pastes the copied breakpoints, watchpoints, and tracepoints. They are enabled by default. You
can also use the standard keyboard shortcut to do this.
Select all
Selects all breakpoints, watchpoints, and tracepoints. You can also use the standard keyboard
shortcut to do this.
Properties…
Displays the Properties dialog box for the selected breakpoint, watchpoint or tracepoint. This
enables you to control activation or change the access type for the selected watchpoint.
View Menu
The following View Menu options are available:
New Breakpoints View
Displays a new instance of the Breakpoints view.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-404
reserved.
Non-Confidential
16 Perspectives and Views
16.4 Breakpoints view
Import Breakpoints
Imports a list of breakpoints and watchpoints from a file.
Export Breakpoints
Exports the current list of breakpoints and watchpoints to a file.
Alphanumeric Sort
Sorts the list alphanumerically based on the string displayed in the view.
Ordered Sort
Sorts the list in the order they have been set.
Auto Update Breakpoint Line Numbers
Automatically updates breakpoint line numbers in the Breakpoints view when changes
occur in the source file.
Manage Signals
Displays the Manage Signals dialog box.
Related concepts
10.8 About debugging multi-threaded applications on page 10-202
10.9 About debugging shared libraries on page 10-203
10.10.2 About debugging a Linux kernel on page 10-206
10.10.3 About debugging Linux kernel modules on page 10-208
10.11 About debugging TrustZone enabled targets on page 10-212
Related tasks
7.9 Assigning conditions to an existing breakpoint on page 7-133
Related references
7.13 Setting a tracepoint on page 7-139
7.8 Conditional breakpoints on page 7-132
7.12 Pending breakpoints and watchpoints on page 7-137
Chapter 16 Perspectives and Views on page 16-395
9.1 Examining the target execution environment on page 9-187
9.2 Examining the call stack on page 9-188
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-405
reserved.
Non-Confidential
16 Perspectives and Views
16.5 C/C++ editor
In the left-hand margin of each editor tab you can find a marker bar that displays view markers
associated with specific lines in the source code.
To set a breakpoint, double-click in the marker bar at the position where you want to set the breakpoint.
To delete a breakpoint, double-click on the breakpoint marker.
Note
If you have sub-breakpoints to a parent breakpoint then double-clicking on the marker also deletes the
related sub-breakpoints.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-406
reserved.
Non-Confidential
16 Perspectives and Views
16.5 C/C++ editor
Toggle Breakpoint
Sets or removes a breakpoint at the selected address.
Toggle Hardware Breakpoint
Sets or removes a hardware breakpoint at the selected address.
Resolve Breakpoint
Resolves a pending breakpoint at the selected address.
Enable Breakpoint
Enables the breakpoint at the selected address.
Disable Breakpoint
Disables the breakpoint at the selected address.
Toggle Trace Start Point
Sets or removes a trace start point at the selected address.
Toggle Trace Stop Point
Sets or removes a trace stop point at the selected address.
Toggle Trace Trigger Point
Starts a trace trigger point at the selected address.
Breakpoint Properties…
Displays the Breakpoint Properties dialog box for the selected breakpoint. This enables
you to control breakpoint activation.
Default Breakpoint Type
The default type causes the top-level context menu entry, Toggle Breakpoint and the double-
click action in the marker bar to toggle either CDT Breakpoints or Development Studio
Breakpoints. When using Arm Debugger you must select Arm DS C/C++Breakpoint.
Development Studio breakpoint markers are red to distinguish them from the blue CDT
breakpoint markers.
Show Line Numbers
Shows or hides line numbers.
For more information on the other options not listed here, see the dynamic help.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-407
reserved.
Non-Confidential
16 Perspectives and Views
16.5 C/C++ editor
Show in Disassembly
This option:
1. Opens a new instance of the Disassembly view.
2. Highlights the addresses and instructions associated with the selected source line. A vertical
bar and shaded highlight shows the related disassembly.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-408
reserved.
Non-Confidential
16 Perspectives and Views
16.5 C/C++ editor
Inspect
Selecting this option opens the Expression Inspector window, and allows you to monitor the
values of the highlighted variables or expressions, and manually enter variables or expressions
to monitor.
Note
You must highlight the variable you want to inspect before invoking the menu, otherwise the
Inspect option is not available.
For more information on the other options not listed here, see the dynamic help.
Related tasks
7.9 Assigning conditions to an existing breakpoint on page 7-133
Related references
7.13 Setting a tracepoint on page 7-139
7.8 Conditional breakpoints on page 7-132
7.12 Pending breakpoints and watchpoints on page 7-137
16.12 Expressions view on page 16-431
Chapter 16 Perspectives and Views on page 16-395
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-409
reserved.
Non-Confidential
16 Perspectives and Views
16.6 Commands view
You can execute Arm Debugger commands by entering the command in the field provided, then click
Submit.
Note
You must connect to a target to use this feature.
You can also use content assist keyboard combinations, provided by Eclipse, to display a list of Arm
Debugger commands. Filtering is also possible by entering a partial command. For example, enter pr
followed by the content assist keyboard combination to search for the print command.
To display sub-commands, you must filter on the top-level command. For example, enter info followed
by the content assist keyboard combination to display all the info sub-commands.
See Development Studio perspective keyboard shortcuts in the Related reference section for details about
specific content assist keyboard combinations available in Arm Debugger.
Note
To access the default settings for this view, select Window then Preferences. From here, you can specify
settings such as the default location for script files, or the maximum number of lines to display.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-410
reserved.
Non-Confidential
16 Perspectives and Views
16.6 Commands view
Linked: context
Links this view to the selected connection in the Debug Control view. This is the default
setting. Alternatively you can link the view to a different connection. If the connection you want
is not shown in the drop-down list, you might have to select it first in the Debug Control view.
Save Console Buffer
Saves the contents of the Commands view to a text file.
Clear Console
Clears the contents of the Commands view.
Toggles Scroll Lock
Enables or disables the automatic scrolling of messages in the Commands view.
Bring to front when a command is executed
Disabled by default. When enabled, the debugger automatically changes the focus to this view
when a command is executed.
Script menu
A menu of options that enable you to manage and run command scripts:
<Recent scripts list>
A list of the recently run scripts.
<Recent favorites list>
A list of the scripts you have added to your favorites list.
Run Script File…
Displays the Open dialog box to select and run a script file.
Organize Favorites…
Displays the Scripts view, where you can organize your scripts.
Show Command History View
Displays the History view.
Copy
Copies the selected commands. You can also use the standard keyboard shortcut to do this.
Paste
Pastes the command that you have previously copied into the Command field. You can also use
the standard keyboard shortcut to do this.
Select all
Selects all output in the Commands view. You can also use the standard keyboard shortcut to do
this.
Save selected lines as a script…
Displays the Save As dialog box to save the selected commands to a script file.
When you click Save on the Save As dialog box, you are given the option to add the script file
to your favorites list. Click OK to add the script to your favorites list. Favorites are displayed in
the Scripts view.
Execute selected lines
Runs the selected commands.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-411
reserved.
Non-Confidential
16 Perspectives and Views
16.6 Commands view
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-412
reserved.
Non-Confidential
16 Perspectives and Views
16.7 Debug Control view
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-413
reserved.
Non-Confidential
16 Perspectives and Views
16.7 Debug Control view
Collapse All
Collapses all expanded items.
Display Cores/Display Threads
Click to toggle between viewing cores or threads. This option is only active for bare-metal
connections with OS awareness enabled.
Connect to Target
Connects to the selected target using the same launch configuration settings as the previous
connection.
Disconnect from Target
Disconnects from the selected target.
Remove Connection
Removes the selected target connection from the Debug Control view.
Remove All Connections
Removes all target connections from the Debug Control view, except any that are connected to
the target.
Debug from menu
This menu lists the different actions that you can perform when a connection is established.
Reset menu
This menu lists the different types of reset that are available on your target.
Continue
Continues running the target.
Note
A Connect only connection might require setting the PC register to the start of the image before
running it.
Interrupt
Interrupts the target and stops the current application.
Step Source Line, Step Instruction
This option depends on the stepping mode selected:
• If source line mode is selected, steps at the source level including stepping into all function
calls where there is debug information.
• If instruction mode is selected, steps at the instruction level including stepping into all
function calls.
Step Over Source Line, Step Over Instruction
This option depends on the stepping mode selected:
• If source line mode is selected, steps at the source level but stepping over all function calls.
• If instruction mode is selected, steps at the instruction level but stepping over all function
calls.
Step Out
Continues running to the next instruction after the selected stack frame finishes.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-414
reserved.
Non-Confidential
16 Perspectives and Views
16.7 Debug Control view
Stepping by Source Line (press to step by instruction), Stepping by Instruction (press to step by
source line)
Toggles the stepping mode between source line and instruction.
The Disassembly view and the source editor view are automatically displayed when you step in
instruction mode.
The source editor view is automatically displayed when you step in source line mode. If the
target stops in code such as a shared library, and the corresponding source is not available, then
the source editor view is not displayed.
Debug Configurations…
Displays the Debug Configurations dialog box, with the configuration for the selected
connection displayed.
Launch in background
If this option is disabled, the Progress Information dialog box is displayed when the
application launches.
Show in Stack
Opens the Stack view, and displays the stack information for the selected execution context.
DTSL options
Opens the DTSL Configuration Editor dialog box to specify the DTSL options for the target
connection.
Reset Development Studio Views to 'Linked'
Resets Arm Development Studio views to link to the selected connection in the Debug Control
view.
View CPU Caches
Displays the Cache Data view for a connected configuration.
View Menu
The following options are available:
Add Configuration (without connecting)…
Displays the Add Launch Configuration dialog box. The dialog box lists any
configurations that are not already listed in the DebugControl view.
Select one or more configurations, then click OK. The selected configurations are
added to the Debug Control view, but remain disconnected.
Load…
Displays a dialog box where you can select whether to load an image, debug
information, an image and debug information, or additional debug information. This
option might be disabled for targets where this functionality is not supported.
Set Working Directory…
Displays the Current Working Directory dialog box. Enter a new location for the
current working directory, then click OK.
Path Substitution…
Displays the Path Substitution and Edit Substitute Path dialog box.
Use the Edit Substitute Path dialog box to associate the image path with a source file
path on the host. Click OK. The image and host paths are added to the Path
Substitution dialog box. Click OK when finished.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-415
reserved.
Non-Confidential
16 Perspectives and Views
16.7 Debug Control view
Threads Presentation
Displays either a flat or hierarchical presentation of the threads in the stack trace.
Related concepts
10.8 About debugging multi-threaded applications on page 10-202
10.10.3 About debugging Linux kernel modules on page 10-208
10.10.2 About debugging a Linux kernel on page 10-206
10.9 About debugging shared libraries on page 10-203
Related references
16.8 Stack view on page 16-417
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-416
reserved.
Non-Confidential
16 Perspectives and Views
16.8 Stack view
Some of the views in the Development Studio perspective are associated with the currently selected
stack frame. Each associated view is synchronized accordingly.
You can also:
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-417
reserved.
Non-Confidential
16 Perspectives and Views
16.8 Stack view
Click to show or hide the LocalVariables panel. You can interact with local variables as you
would in the Variables view. See Variables view on page 16-490 for more information about
working with variables.
Set function prototype display options
Click to set the function prototype display options. You can choose to show or hide function
parameter types or values.
Note
Displaying a large number of function parameter values might slow the debugger performance.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-418
reserved.
Non-Confidential
16 Perspectives and Views
16.8 Stack view
To see more stack frames, click Fetch More Stack Frames to view the next set of stack
frames.
By default, the Stack view displays five stack frames, and each additional fetch displays the
next five available frames.
To increase the default depth of the stack frames to view, on the Stack view menu, click
and select the required stack depth. If you need more depth than the listed options, click Other
and enter the depth you require.
Note
Increasing the number of displayed stack frames might slow the debugger performance.
Toolbar options
The following View Menu options are available:
New Stack View
Displays a new instance of the Stack view.
Freeze Data
Toggles the freezing of data in the currently selected execution context. This option prevents
automatic updating of the view. You can still use the Refresh option to manually refresh the
view.
Update View When Hidden
Updates the view when it is hidden behind other views. By default, this view does not update
when hidden.
Related references
16.7 Debug Control view on page 16-413
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-419
reserved.
Non-Confidential
16 Perspectives and Views
16.9 Disassembly view
Gradient shading in the Disassembly view shows the start of each function.
Solid shading in the Disassembly view shows the instruction at the address of the current PC register
followed by any related instructions that correspond to the current source line.
In the left-hand margin of the Disassembly view you can find a marker bar that displays view markers
associated with specific locations in the disassembly code.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-420
reserved.
Non-Confidential
16 Perspectives and Views
16.9 Disassembly view
To set a breakpoint, double-click in the marker bar at the position where you want to set the breakpoint.
To delete a breakpoint, double-click on the breakpoint marker.
Note
If you have sub-breakpoints to a parent breakpoint then double-clicking on the marker also deletes the
related sub-breakpoints.
Links this view to the selected connection in the Debug Control view. This is the default.
Alternatively you can link the view to a different connection. If the connection you want is not
shown in the drop-down list you might have to select it first in the Debug Control view.
Next Instruction
Shows the disassembly for the instruction at the address of the program counter.
History
Addresses and expressions you specify in the Address field are added to the drop down box,
and persist until you clear the history list or exit Eclipse. If you want to keep an expression for
later use, add it to the Expressions view.
Address field
Enter the address for which you want to view the disassembly. You can specify the address as a
hex number or as an expression, for example $PC+256, $lr, or main.
Context menu options are available for editing this field.
Size field
The number of instructions to display before and after the location specified in the Address
field.
Context menu options are available for editing this field.
Search
Searches through debug information for symbols.
View Menu
The following View Menu options are available:
New Disassembly View
Displays a new instance of the Disassembly view.
Instruction Set
The instruction set to show in the view by default. Select one of the following:
[Auto]
Auto detect the instruction set from the image.
A32 (Arm)
Arm instruction set.
T32 (Thumb)
Thumb instruction set.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-421
reserved.
Non-Confidential
16 Perspectives and Views
16.9 Disassembly view
T32EE (ThumbEE)
ThumbEE instruction set.
Byte Order
Selects the byte order of the memory. The default is Auto (LE).
Clear History
Clears the list of addresses and expressions in the History drop-down box.
Update View When Hidden
Enables the updating of the view when it is hidden behind other views. By default this
view does not update when hidden.
Refresh
Refreshes the view.
Freeze Data
Toggles the freezing of data in the current view. This option also disables and enables
the Size and Type fields. You can still use the Refresh option to manually refresh the
view.
Action context menu
When you right-click in the left margin, the corresponding address and instruction is selected
and this context menu is displayed. The available options are:
Copy
Copies the selected address.
Paste
Pastes into the Address field the last address that you copied.
Select All
Selects all disassembly in the range specified by the Size field.
If you want to copy the selected lines of disassembly, you cannot use the Copy option
on this menu. Instead, use the copy keyboard shortcut for your host, Ctrl+C on
Windows.
Run to Selection
Runs to the selected address
Set PC to Selection
Sets the PC register to the selected address.
Show in Source
If source code is available:
1. Opens the corresponding source file in the C/C++ source editor view, if necessary.
2. Highlights the line of source associated with the selected address.
Show in Registers
If the memory address corresponds to a register, then displays the Registers view with
the related register selected.
Show in Functions
If the memory address corresponds to a function, then displays the Functions view
with the related function selected.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-422
reserved.
Non-Confidential
16 Perspectives and Views
16.9 Disassembly view
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-423
reserved.
Non-Confidential
16 Perspectives and Views
16.10 Events view
Figure 16-15 Events view (Shown with all ports enabled for an ETB:ITM trace source)
Note
• Use the Event Viewer Settings dialog box on page 16-427 to select a Trace Source as well as to set
up Ports (if ITM is the trace source) or Masters (if STM is the trace source) to display in the view.
• To view the Live Decode tab and streaming trace data, you must enable the Show live decode
console option in the Event Viewer Settings dialog box.
Links this view to the selected connection in the Debug Control view. This is the default.
Alternatively you can link the view to a different connection. If the connection you want is not
shown in the drop-down list, you might have to select it first in the Debug Control view.
Clear Trace
Clears the debug hardware device buffer and all trace sources. The views might retain data, but
after clearing trace, refreshing the views clears them as well.
Start of page
Displays events from the beginning of the trace buffer.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-424
reserved.
Non-Confidential
16 Perspectives and Views
16.10 Events view
Page back
Moves one page back in the trace buffer.
Page forward
Moves one page forward in the trace buffer.
End of page
Displays events from the end of the trace buffer.
View Menu
The following View Menu options are available:
New Events View
Displays a new instance of the Events view.
Find Global Timestamp…
Displays the Search by Timestamp dialog box which allows you to search through the
entire trace buffer. The search results opens up the page where the timestamp is found
and selects the closest timestamp.
Update View When Hidden
Enables the updating of the view when it is hidden behind other views. By default this
view does not update when hidden.
Refresh
Refreshes the view.
Freeze Data
Toggles the freezing of data in the current view. This option prevents automatic
updating of the view. You can still use the Refresh option to manually refresh the view.
Events Settings…
Displays the Settings dialog box where you can select a trace source and set options for
the selected trace source.
Open Trace Control View
Opens the Trace Control view.
DTSL Options…
Opens the DTSL Configuration Editor on page 16-529 dialog box.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-425
reserved.
Non-Confidential
16 Perspectives and Views
16.10 Events view
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-426
reserved.
Non-Confidential
16 Perspectives and Views
16.11 Event Viewer Settings dialog box
General settings
Select a Trace Source
Selects the required trace source from the list.
Height
The number of lines to display per results page. The default is 100 lines.
Width
The number of characters to display per line. The default is 80 characters.
Import
Imports an existing Event Viewer Settings configuration file. This file contains details about
the Trace Source and Ports (in the case of ITM trace) or Masters and Channels (in the case of
STM trace) used to create the configuration.
Export
Exports the currently displayed Event Viewer Settings configuration to use with a different
Events view.
OK
Reorganizes the current channels into a canonical form, saves the settings, and closes the dialog
box.
Cancel
Enables you to cancel unsaved changes.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-427
reserved.
Non-Confidential
16 Perspectives and Views
16.11 Event Viewer Settings dialog box
Figure 16-16 Event Viewer Settings (Shown with all Masters and Channels enabled for an
ETR:STM trace source)
Clear
Click to clear all Ports.
Show local timestamps
Select to display local timestamps. Local timestamps are expressed as an interval since the last
local timestamp. Local timestamps are available for CoreSight ITM trace and M-profile ITM
trace.
Show global timestamps (M-profile only)
Select to display global timestamps. Global timestamps are expressed as a 48-bit or 64-bit
counter value.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-428
reserved.
Non-Confidential
16 Perspectives and Views
16.11 Event Viewer Settings dialog box
Note
• To use the Live Decode tab, your target must support ITM or STM trace and must be
connected to a DSTREAM-ST unit.
• Live streaming data is read-only.
• If generating a large amount of ITM or STM trace, Arm recommends:
— Turning off Core Trace in the DSTL Options dialog box. This is to avoid data overflow
issues when a large amount of data is generated.
— Disabling some channels or ports to reduce data overload issues in the Live Decode tab.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-429
reserved.
Non-Confidential
16 Perspectives and Views
16.11 Event Viewer Settings dialog box
Encoding
Select the type of encoding you want for the data associated with the channels. The options
available are Binary and Text.
Reset
Click Reset to display and enable all available Masters and Channels for the selected STM
trace source.
Note
This clears any custom settings.
Clear
Click to clear all Masters and Channels.
Related references
16.10 Events view on page 16-424
Related information
CoreSight Components Technical Reference Manual
CoreSight System Trace Macrocell Technical Reference Manual
Armv7-M Architecture Reference Manual Documentation
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-430
reserved.
Non-Confidential
16 Perspectives and Views
16.12 Expressions view
You can:
Add expressions
Enter your expression in the Enter new expression here field and press Enter on your
keyboard. This adds the expression to the view and displays its value.
Note
If your expression contains side-effects when evaluating the expression, the results are
unpredictable. Side-effects occur when the state of one or more inputs to the expression changes
when the expression is evaluated.
For example, instead of x++ or x+=1 you must use x+1 .
Edit expressions
You can edit the values of expressions in the Value field. Select the value and edit it.
Toolbar options
The following options are available from the toolbar menu:
Show all numerical values in hexadecimal
Click the button to change all numeric values to hexadecimal values. This works as a
toggle and your preference is saved across sessions.
Delete
In the Expressions view, select the expression you want to remove from view, and click to
remove the selected expression.
Add New Expression
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-431
reserved.
Non-Confidential
16 Perspectives and Views
16.12 Expressions view
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-432
reserved.
Non-Confidential
16 Perspectives and Views
16.12 Expressions view
Column headers
Right-click on the column headers to select the columns that you want displayed:
Name
An expression that resolves to an address, such as main+1024, or a register, for example $R1.
Value
The value of the expression. You can modify a value that has a white background. A yellow
background indicates that the value has changed. This might result from you either performing a
debug action such as stepping or by you editing the value directly.
If you freeze the view, then you cannot change a value.
Type
The type associated with the value at the address identified by the expression.
Count
The number of array or pointer elements. You can edit a pointer element count.
Size
The size of the expression in bits.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-433
reserved.
Non-Confidential
16 Perspectives and Views
16.12 Expressions view
Location
The address in hexadecimal identified by the expression, or the name of a register, if the
expression contains only a single register name.
Access
The access type of the expression.
Show All Columns
Displays all columns.
Reset Columns
Resets the columns displayed and their widths to the default.
All columns are displayed by default.
Examples
When debugging the Linux kernel, to view its internal thread structure,use these expressions:
For Armv8 in SVC mode, with 8K stack size:
(struct thread_info*)($SP_SVC &~0x1FFF)
Related tasks
7.9 Assigning conditions to an existing breakpoint on page 7-133
Related references
16.13 Expression Inspector on page 16-435
7.13 Setting a tracepoint on page 7-139
7.8 Conditional breakpoints on page 7-132
7.12 Pending breakpoints and watchpoints on page 7-137
16.5 C/C++ editor on page 16-406
Chapter 16 Perspectives and Views on page 16-395
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-434
reserved.
Non-Confidential
16 Perspectives and Views
16.13 Expression Inspector
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-435
reserved.
Non-Confidential
16 Perspectives and Views
16.14 Functions view
Right-click on the column headers to select the columns that you want displayed:
Name
The name of the function.
Mangled Name
The C++ mangled name of the function.
Base Address
The function entry point.
Start Address
The start address of the function.
End Address
The end address of the function.
Size
The size of the function in bytes.
Compilation Unit
The name of the compilation unit containing the function.
Image
The location of the ELF image containing the function.
Show All Columns
Displays all columns.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-436
reserved.
Non-Confidential
16 Perspectives and Views
16.14 Functions view
Reset Columns
Resets the columns displayed and their widths to the default. The Name, StartAddress, End
Address, Compilation Unit, and Image columns are displayed by default.
Links this view to the selected connection in the Debug Control view. This is the default.
Alternatively you can link the view to a different connection. If the connection you want is not
shown in the drop-down list you might have to select it first in the Debug Control view.
Search
Searches the data in the current view for a function.
Copy
Copies the selected functions.
Select All
Selects all the functions in the view.
Run to Selection
Runs to the selected address.
Set PC to Selection
Sets the PC register to the start address of the selected function.
Show in Source
If source code is available:
1. Opens the corresponding source file in the C/C++ editor view, if necessary.
2. Highlights the line of source associated with the selected address.
Show in Memory
Displays the Memory view starting at the address of the selected function.
Show in Disassembly
Displays the Disassembly view starting at the address of the selected function.
Toggle Breakpoint
Sets or removes a breakpoint at the selected address.
Toggle Hardware Breakpoint
Sets or removes a hardware breakpoint at the selected address.
Toggle Trace Start Point
Sets or removes a trace start point at the selected address.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-437
reserved.
Non-Confidential
16 Perspectives and Views
16.14 Functions view
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-438
reserved.
Non-Confidential
16 Perspectives and Views
16.15 History view
Note
Default settings for this view are controlled by a Arm Debugger setting in the Preferences dialog box.
For example, the default location for script files. You can access these settings by selecting Preferences
from the Window menu.
Links this view to the selected connection in the Debug Control view. This is the default.
Alternatively you can link the view to a different connection. If the connection you want is not
shown in the drop-down list you might have to select it first in the Debug Control view.
Exports the selected lines as a script
Displays the Save As dialog box to save the selected commands to a script file.
When you click Save on the Save As dialog box, you are given the option to add the script file
to your favorites list. Click OK to add the script to your favorites list. Favorites are displayed in
the Scripts view.
Clear Console
Clears the contents of the History view.
Toggles Scroll Lock
Enables or disables the automatic scrolling of messages in the History view.
Copy
Copies the selected commands.
Select All
Selects all commands.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-439
reserved.
Non-Confidential
16 Perspectives and Views
16.15 History view
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-440
reserved.
Non-Confidential
16 Perspectives and Views
16.16 Memory view
History button
Addresses and expressions you specify in the Address field are added to the list, and persist
until you clear the history list. If you want to keep an expression for later use, add it to the
Expressions view.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-441
reserved.
Non-Confidential
16 Perspectives and Views
16.16 Memory view
Number of columns
The options enable you to resize the number of columns shown in the Memory view.
Fit to view
Select to resize the number of columns automatically.
2, 4, 8, 16
Select the number of columns to display in the Memory view in a 2, 4, 8, or 16-column
layout.
Custom
Select and specify the custom column layout you require.
To specify these values as default, set them under Window > Preferences > Arm DS >
Debugger > Memory View .
Note
When you select Running or Always, the Memory and Screen views are only updated
if the target supports access to that memory when running. For example, some
CoreSight targets support access to physical memory at any time through the Debug
Access Port (DAP) to the Advanced High-performance Bus Access Port (AHB-AP)
bridge. In those cases, add the AHB: prefix to the address selected in the Memory or
Screen views. This type of access bypasses any cache on the processor core, so the
memory content returned might be different to the value that the core reads.
Properties
Displays the Timed Auto-Refresh Properties on page 16-496 dialog box where you can
specify these options as default.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-442
reserved.
Non-Confidential
16 Perspectives and Views
16.16 Memory view
Format
Click to cycle through the memory cell formats and cell widths, or select a format from the
drop-down menu. The default is hexadecimal with a display width of 4 bytes.
Use the Hide Base Prefix option to hide base prefixes where applicable.
For example:
• For hexadecimal values, this option hides the preceding 0x. The value 0xEA000016 is shown
as EA000016.
• For binary values, this option hides the preceding 0b. The value 0b00010110 is shown as
00010110.
• For octal values, this option hides the preceding 0. The value 035200000026 is shown as
35200000026.
Search
Searches through debug information for symbols.
Details panel
Show or hide the details panel, which displays the value of the selected memory cell in different
formats. Memory view with details panel
Address field
Enter the address where you want to start viewing the target memory. Alternatively, you can
enter an expression that evaluates to an address.
Addresses and expressions you specify are added to the drop-down history list, and persist until
you clear the view history. If you want to keep an expression for later use, add it to the
Expressions view.
Size field
The number of bytes to display.
View Menu
The following View Menu options are available:
New Memory View
Displays a new instance of the Memory view.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-443
reserved.
Non-Confidential
16 Perspectives and Views
16.16 Memory view
Show Tooltips
Toggles the display of tooltips on memory cell values.
Auto Alignment
Aligns the memory view to the currently selected data width.
Show Compressed Addresses
Shows the least significant bytes of the address that are not repeating.
Show Cache
Shows how the core views the memory from the perspective of the different caches on
the target. This is disabled by default. When showing cache, the view is auto-aligned to
the cache-line size. When showing cache, the memory view shows a column for each
cache. If populated, the cache columns display the state of each cache using the
Modified/Owned/Exclusive/Shared/Invalid(MOESI) cache coherency protocol
notation.
Click on a cache column header or select a cache from the Cache Data menu to display
the data as viewed from that cache. The Memory (non-cached) option from the Cache
Data menu shows the data in memory, as if all caches are disabled.
Note
In multiprocessor systems, it is common to have caches dedicated to particular cores.
For example, a dual-core system might have per-core L1 caches, but share a single L2
cache. Cache snooping is a hardware feature that allows per-core caches to be accessed
from other cores. In such cases the Cache Data field shows all the caches that are
accessible to each core, whether directly or through snooping.
Byte Order
Selects the byte order of the memory. The default is Auto (LE).
Clear History
Clears the list of addresses and expressions in the History drop-down list.
Import Memory
Reads data from a file and writes it to memory.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-444
reserved.
Non-Confidential
16 Perspectives and Views
16.16 Memory view
Export Memory
Reads data from memory and writes it to a file.
Fill Memory
Writes a specific pattern of bytes to memory
Update View When Hidden
Enables the updating of the view when it is hidden behind other views. By default, this
view does not update when hidden.
Refresh
Refreshes the view.
Freeze Data
Toggles the freezing of data in the current view. This option also disables or enables the
Address and Size fields. You can still use the Refresh option to manually refresh the
view.
Editing context menu options
The context menu of the column header enables you to toggle the display of the individual
columns.
Reset Columns
Displays the default columns.
Characters
Displays the Characters column.
The following options are available on the context menu when you select a memory cell value,
the Address field, or the Size field for editing:
Cut
Copies and deletes the selected value.
Copy
Copies the selected value.
Paste
Pastes a value that you have previously cut or copied into the selected memory cell or
field.
Delete
Deletes the selected value.
Select All
Selects all the addresses.
The following additional options are available on the context menu when you select a memory
cell value:
Toggle Watchpoint
Sets or removes a watchpoint at the selected address. After a watchpoint is set, you can:
Enable Watchpoint
If disabled, enables the watchpoint at the selected address.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-445
reserved.
Non-Confidential
16 Perspectives and Views
16.16 Memory view
Disable Watchpoint
Disables the watchpoint at the selected address.
Remove Watchpoint
Removes the watchpoint at the selected address.
Watchpoint Properties
Displays and lets you change the watchpoint properties.
Translate Address <address>
Displays the MMU view and translates the address of the selected value in memory.
Number of columns
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-446
reserved.
Non-Confidential
16 Perspectives and Views
16.16 Memory view
The options enable you to resize the number of columns shown in the Memory view.
Fit to view
Select to resize the number of columns automatically.
2, 4, 8, 16
Select the number of columns to display in the Memory view in a 2, 4, 8, or 16-column
layout.
Custom
Select and specify the custom column layout you require.
Data format
Specify the format of the memory cell values. The default is hexadecimal.
Data size
Set the width of the memory cells in the Memory view. The default is 4 bytes.
Hide base prefix for memory values
Select to hide the base prefix where applicable.
For example:
• For hexadecimal values, this option hides the preceding 0x. So the value 0xEA000016 is
shown as EA000016.
• For binary values, this option hides the preceding 0b. So the value 0b00010110 is shown as
00010110.
• For octal values, this option hides the preceding 0. So the value 035200000026 is shown as
35200000026.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-447
reserved.
Non-Confidential
16 Perspectives and Views
16.16 Memory view
Another way to toggle the visibility of the Characters column, is to right-click the context
menu and select or unselect the Characters option: Select Characters from context menu to
show theASCII characters
Figure 16-27 Select Characters from context menu to show the ASCII characters
Show tooltip
Select to control the display of tooltips on memory cell values.
Automatically align the memory addresses
Aligns the memory view to the currently selected data width.
Show compressed addresses
Shows the least significant bytes of the address that are not repeating.
Show details panel
Shows the details panel, which displays the value of the selected memory cell in different
formats.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-448
reserved.
Non-Confidential
16 Perspectives and Views
16.16 Memory view
Related concepts
10.8 About debugging multi-threaded applications on page 10-202
10.9 About debugging shared libraries on page 10-203
10.10.2 About debugging a Linux kernel on page 10-206
10.10.3 About debugging Linux kernel modules on page 10-208
10.11 About debugging TrustZone enabled targets on page 10-212
Related tasks
7.9 Assigning conditions to an existing breakpoint on page 7-133
Related references
7.13 Setting a tracepoint on page 7-139
7.8 Conditional breakpoints on page 7-132
7.12 Pending breakpoints and watchpoints on page 7-137
Chapter 16 Perspectives and Views on page 16-395
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-449
reserved.
Non-Confidential
16 Perspectives and Views
16.17 MMU/MPU view
Note
MMU awareness is only supported on Armv7-A and Armv8-A architectures. MPU awareness is only
supported on Armv8-M architecture.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-450
reserved.
Non-Confidential
16 Perspectives and Views
16.17 MMU/MPU view
For targets which support address translation, the Tables tab contains the following columns:
Input Address
Specifies the input address to the translation table. This is usually the virtual address, but it can
also be an intermediate physical address.
Type
Specifies the type of entry in the translation table, for example Page Table, Section, Super
Section, Small Page, or Large Page.
Output Address
Specifies the output address from the translation table. This is usually the physical address, but
it can also be an intermediate physical address.
Attributes
Specifies the attributes for the memory region.
The Tables tab also provides additional information for each row of the translation table:
Descriptor Address
Specifies the address of the selected translation table location.
Descriptor Value
Specifies the content of the selected translation table location.
Input Address Range
Specifies the range of input addresses that are mapped by the selected translation table location.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-451
reserved.
Non-Confidential
16 Perspectives and Views
16.17 MMU/MPU view
Limit
Specifies the last address of the region.
Type
Specifies the region type.
Attributes
Specifies the memory attributes of the IDAU region.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-452
reserved.
Non-Confidential
16 Perspectives and Views
16.17 MMU/MPU view
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-453
reserved.
Non-Confidential
16 Perspectives and Views
16.17 MMU/MPU view
Freeze Data
Toggles the freezing of data in the current view. This option prevents automatic
updating of the view. You can still use the Refresh option to manually refresh the view.
Coalesce Invalid Entries
Condenses the contiguous rows of faulty or invalid input addresses into a single row in
the Tables tab.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-454
reserved.
Non-Confidential
16 Perspectives and Views
16.18 Modules view
Note
A connection must be established and OS support enabled within the debugger before a loadable module
can be detected. OS support is automatically enabled when a Linux kernel image is loaded into the
debugger. However, you can manually control this by using the set os command.
Right-click on the column headers to select the columns that you want displayed:
Name
Displays the name and location of the component on the target.
Symbols
Displays whether the symbols are currently loaded for each object.
Address
Displays the load address of the object.
Size
Displays the size of the object.
Type
Displays the component type. For example, shared library or OS module.
Host File
Displays the name and location of the component on the host workstation.
Show All Columns
Displays all columns.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-455
reserved.
Non-Confidential
16 Perspectives and Views
16.18 Modules view
Reset Columns
Resets the columns displayed and their widths to the default.
The Name, Symbols, Address, Type, and Host File columns are displayed by default.
Links this view to the selected connection in the Debug Control view. This is the default.
Alternatively you can link the view to a different connection. If the connection you want is not
shown in the drop-down list you might have to select it first in the Debug Control view.
Copy
Copies the selected data.
Select All
Selects all the displayed data.
Load Symbols
Loads debug information into the debugger from the source file displayed in the Host File
column. This option is disabled if the host file is unknown before the file is loaded.
Add Symbol File…
Opens a dialog box where you can select a file from the host workstation containing the debug
information required by the debugger.
Discard Symbols
Discards debug information relating to the selected file.
Show in Memory
Displays the Memory view starting at the load address of the selected object.
Show in Disassembly
Displays the Disassembly view starting at the load address of the selected object.
View Menu
The following View Menu options are available:
Update View When Hidden
Enables the updating of the view when it is hidden behind other views. By default this
view does not update when hidden.
Refresh
Refreshes the view.
Related concepts
10.8 About debugging multi-threaded applications on page 10-202
10.9 About debugging shared libraries on page 10-203
10.10.2 About debugging a Linux kernel on page 10-206
10.10.3 About debugging Linux kernel modules on page 10-208
10.11 About debugging TrustZone enabled targets on page 10-212
Related references
Chapter 16 Perspectives and Views on page 16-395
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-456
reserved.
Non-Confidential
16 Perspectives and Views
16.19 Registers view
You can:
Browse registers available on your target
The Registers view displays all available processor registers on your target. Click and expand
individual register groups to view specific registers.
If you want to refresh the Registers view, from the view menu click .
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-457
reserved.
Non-Confidential
16 Perspectives and Views
16.19 Registers view
If you know the name of the specific register or group you want to view, click to display
the search bar. Then, enter the name of the register or group you are looking for in the search
bar. This lists the registers and groups that match the text you entered.
For example, enter the text CP to view registers and groups with the text CP in their name.
Press Enter on your keyboard, or double-click the register or group in the search results to
select it in the Register view.
Tip
You can also use CTRL+F on your keyboard to enable the search bar. You can use the
ESC key on your keyboard to close the search bar.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-458
reserved.
Non-Confidential
16 Perspectives and Views
16.19 Registers view
Click the button to change all numeric values to hexadecimal values. This works as a
toggle and your preference is saved across sessions.
Create and manage register sets
You can use register sets to collect individual registers into specific custom groups.
To create a register set:
1. In the Registers view, under Register Set, click All Registers and select .
2. In the Create or Modify Register Set dialog box:
• Give the register set a name in Set Name, for example Core registers. You can create
multiple register groups if needed.
• Select the registers you need in All registers, and click Add. Your selected registers
appear under Chosen registers.
• Click OK, to confirm your selection and close the dialog box.
3. The Registers view displays the specific register group you selected.
4. To switch between various register groups, click All Registers and select the group you
want.
To manage a register set:
1. In the Registers view, under Register Set, click All Registers and select .
2. In the Manage Register Sets dialog box:
• If you want to create a new register set, click New and create a new register set.
• If you want to edit an existing register set, select a register set, and click Edit.
• If you want to delete an existing register set, select a register set and click Remove.
3. Click OK to confirm your changes.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-459
reserved.
Non-Confidential
16 Perspectives and Views
16.19 Registers view
Drag and drop an address held in a register from the Registers view to other views
Drag and drop an address held in a register from this view into either the Memory view to see
the memory at that address, or into the Disassembly view to disassemble from that address.
Change the display format of register values
You can set the format of individual bits for Program Status Registers (PSRs).
Freeze the selected view to prevent the values being updated by a running target
Select Freeze Data from the view menu to prevent values updating automatically when the
view refreshes.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-460
reserved.
Non-Confidential
16 Perspectives and Views
16.19 Registers view
Copy
Copies the selected registers. If a register contains bitfields, you must expand the bitfield to
copy the individual bitfield values.
It can be useful to copy registers to a text editor in order to compare the values when execution
stops at another location.
Select All
Selects all registers currently expanded in the view.
Show Memory Pointed to By <register name>
Displays the Memory view starting at the address held in the register.
Show Disassembly Pointed to By <register name>
Displays the Disassembly view starting at the address held in the register.
Translate Address in <register name>
Displays the MMU view and translates the address held in the register.
Send to <selection>
Displays a sub menu that enables you to add register filters to a specific Expressions view.
<Format list>
A list of formats you can use for the register values. These formats are Binary, Boolean,
Hexadecimal, Octal, Signed Decimal, and Unsigned decimal.
View Menu
The following View Menu options are available:
New Registers View
Creates a new instance of the Registers view.
Freeze Data
Toggles the freezing of data in the current view. This option prevents automatic
updating of the view. You can still use the Refresh option to manually refresh the view.
Editing context menu options
The following options are available on the context menu when you select a register value for
editing:
Undo
Reverts the last change you made to the selected value.
Cut
Copies and deletes the selected value.
Copy
Copies the selected value.
Paste
Pastes a value that you have previously cut or copied into the selected register value.
Delete
Deletes the selected value.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-461
reserved.
Non-Confidential
16 Perspectives and Views
16.19 Registers view
Select All
Selects the whole value.
Value
The value of the register. A yellow background indicates that the value has changed. This might
result from you either performing a debug action such as stepping or by you editing the value
directly.
If you freeze the view, then you cannot change a register value.
Type
The type of the register value.
Count
The number of array or pointer elements.
Size
The size of the register in bits.
Location
The name of the register or the bit range for a bitfield of a PSR. For example, bitfield M of the
CPSR is displayed as $CPSR[4..0].
Access
The access mode for the register.
Show All Columns
Displays all columns.
Reset Columns
Resets the columns displayed and their widths to the default.
The Name , Value, Size, and Access columns are displayed by default.
Related concepts
10.10.2 About debugging a Linux kernel on page 10-206
10.8 About debugging multi-threaded applications on page 10-202
10.9 About debugging shared libraries on page 10-203
10.10.3 About debugging Linux kernel modules on page 10-208
10.11 About debugging TrustZone enabled targets on page 10-212
Related tasks
7.9 Assigning conditions to an existing breakpoint on page 7-133
Related references
7.13 Setting a tracepoint on page 7-139
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-462
reserved.
Non-Confidential
16 Perspectives and Views
16.19 Registers view
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-463
reserved.
Non-Confidential
16 Perspectives and Views
16.20 NVIC Registers view
Note
• The NVIC Registers view is only enabled for Armv6-M and Armv7-M architectures.
• You can also use the Registers view to view register information.
The NVIC Registers view updates when registers are changed by the debugger or are manually changed
through the command prompt or register view.
Each exception is in one of the following states:
Inactive
The exception is not active and not pending.
Active
An exception that is being serviced by the processor but has not completed. An exception
handler can interrupt the execution of another exception handler. In this case, both exceptions
are in the active state.
Pending
The exception is waiting to be serviced by the processor. An interrupt request from a peripheral
or from software can change the state of the corresponding interrupt to pending.
Active and pending
The exception is being serviced by the processor and there is a pending exception from the same
source.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-464
reserved.
Non-Confidential
16 Perspectives and Views
16.20 NVIC Registers view
Name
Name of the exception or interrupt.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-465
reserved.
Non-Confidential
16 Perspectives and Views
16.20 NVIC Registers view
Source
Source of the exception or interrupt.
E
Enabled state of the exception or interrupt. The value 1 indicates True, 0 indicates
False, and - indicates not applicable.
P
Pending state of the exception or interrupt. The value 1 indicates True, 0 indicates
False, and - indicates not applicable.
A
Active state of the exception or interrupt. The value 1 indicates True, 0 indicates False,
and - indicates not applicable.
Priority
The priority of the exception or interrupt.
Application Interrupt and Reset Control
Displays the Application Interrupt and Register Control Register (AIRCR) information.
Interrupt Control State
Displays the Interrupt Control and State Register (ICSR) information.
Vector Table Offset
Displays the Vector Table Offset Register (VTOR) information.
Note
The VTOR information is only available for Armv7-M architectures.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-466
reserved.
Non-Confidential
16 Perspectives and Views
16.21 OS Data view
Note
The OS Data view is not used when debugging Linux applications. To view the running threads
information for Linux applications, use the Debug Control view.
Note
Data in the OS Data view depends on the selected data source.
Links this view to the selected connection in the Debug Control view. This is the default.
Alternatively you can link the view to a different connection. If the connection you want is not
shown in the list, you might have to select it first in the Debug Control view.
Show linked data in other Data views
Shows selected data in a view that is linked to another view.
View Menu
This menu contains the following option:
New OS Data View
Displays a new instance of the OS Data view.
Update View When Hidden
Enables the updating of the view when it is hidden behind other views. By default, this
view does not update when hidden.
Refresh
Refreshes the view.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-467
reserved.
Non-Confidential
16 Perspectives and Views
16.21 OS Data view
Freeze Data
Toggles the freezing of data in the current view. This option prevents automatic
updating of the view. You can still use the Refresh option to manually refresh the view.
Note
If the data is frozen, the value of a variable cannot be changed.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-468
reserved.
Non-Confidential
16 Perspectives and Views
16.22 Overlays view
Toolbar options
The following View Menu options are available:
New Overlays View
Displays a new instance of the Overlays view.
Freeze Data
Toggles the freezing of data in the currently selected execution context. This option prevents
automatic updating of the view. You can still use the Refresh option to manually refresh the
view.
Related concepts
10.18 About Arm® Debugger support for overlays on page 10-223
Related information
info overlays command
set overlays enabled command
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-469
reserved.
Non-Confidential
16 Perspectives and Views
16.23 Cache Data view
Links this view to the selected connection in the Debug Control view. This is the default.
Alternatively, you can link the view to a different connection. If the connection you want is not
shown in the drop-down list you might have to select it first in the Debug Control view.
Show linked data in other Data views
Shows selected data in a view that is linked to another view.
View Menu
This menu contains the following options:
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-470
reserved.
Non-Confidential
16 Perspectives and Views
16.23 Cache Data view
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-471
reserved.
Non-Confidential
16 Perspectives and Views
16.24 Screen view
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-472
reserved.
Non-Confidential
16 Perspectives and Views
16.24 Screen view
Toolbar options
The following toolbar options are available:
Linked:<context>
Links this view to the selected connection in the Debug Control view. This is the default.
Alternatively you can link the view to a different connection. If the connection you want is not
shown in the drop-down list you might have to select it first in the Debug Control view.
Timed auto refresh is off, Cannot update
Operation is as follows:
• If Timed auto-refresh is off mode is selected, the auto refresh is off.
• If the Cannot update mode is selected, the auto refresh is blocked.
Start
Starts auto-refreshing.
Stop
Stops auto-refreshing.
Update Interval
Specifies the auto-refresh interval, in seconds or minutes.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-473
reserved.
Non-Confidential
16 Perspectives and Views
16.24 Screen view
Update When
Specifies whether updates should occur only when the target is running or stopped, or always.
Properties
Displays the Timed Auto-Refresh Properties dialog box.
New Screen View
Creates a new instance of the Screen view.
Set screen buffer parameters
Displays the Screen Buffer Parameters dialog box. The dialog box contains the following
parameters:
Base Address
Sets the base address of the screen buffer.
Screen Width
Sets the width of the screen in pixels.
Screen Height
Sets the height of the screen in pixels.
Scan Line Alignment
Sets the byte alignment required for each scan line.
Pixel Type
Selects the pixel type.
Pixel Byte Order
Selects the byte order of the pixels within the data.
Click Apply to save the settings and close the dialog box.
Click Cancel to close the dialog box without saving.
Update View When Hidden
Enables the updating of the view when it is hidden behind other views. By default this view
does not update when hidden.
Refresh
Refreshes the view.
Freeze Data
Toggles the freezing of data in the current view. This option prevents automatic updating of the
view. You can still use the Refresh option to manually refresh the view.
The Screen view is not visible by default. To add this view:
1. Ensure that you are in the Development Studio perspective.
2. Select Window > Show View to open the Show View dialog box.
3. Select Screen view.
Related references
Chapter 16 Perspectives and Views on page 16-395
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-474
reserved.
Non-Confidential
16 Perspectives and Views
16.25 Scripts view
Note
• Scripts are dependent on a debug connection. To work with scripts, first create a debug configuration
for your target and select it in the Debug Control view.
• Debugger views are not updated when commands issued in a script are executed.
To create a script, click to display the Save As dialog box. Give your script a name and
select the type of script you want. You can choose any of the following types:
• Debugger Script (*.ds)
• Jython script (*.py)
• Text file (*.txt)
The script opens in the editor when you save it.
Import scripts
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-475
reserved.
Non-Confidential
16 Perspectives and Views
16.25 Scripts view
When working with use case scripts, you must select the use case configuration to run your
script.
Select your script and click to open the script in the editor.
Delete your script
Select the script that you want to delete and click . Confirm if you want to delete the script
from the view, or if you want to delete from the disk, and click OK.
Refresh the script view
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-476
reserved.
Non-Confidential
16 Perspectives and Views
16.25 Scripts view
Add to Favorites
You can add your frequently accessed scripts to a list of favorites to easily access them later. To
add a script to the list of favorites, right-click the script, and select Add to favorites.
To delete multiple scripts, select them with Ctrl+click and press the Delete key.
Tip
You can also access your favorites and recently accessed scripts from the Commands
on page 16-410 view.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-477
reserved.
Non-Confidential
16 Perspectives and Views
16.25 Scripts view
Related concepts
11.10 Use case scripts on page 11-249
Related references
Chapter 11 Debugging with Scripts on page 11-231
Chapter 12 Running Arm® Debugger from the operating system command-line or from a script
on page 12-264
11.4 Support for importing and translating CMM scripts on page 11-235
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-478
reserved.
Non-Confidential
16 Perspectives and Views
16.26 Target Console view
Note
Default settings for this view are controlled by Arm Debugger options in the Preferences dialog box. For
example, the default location for the console log. You can access these settings by selecting Preferences
from the Window menu.
Links this view to the selected connection in the Debug Control view. This is the default.
Alternatively you can link the view to a different connection. If the connection you want is not
shown in the drop-down list you might have to select it first in the Debug Control view.
Save Console Buffer
Saves the contents of the Target Console view to a text file.
Clear Console
Clears the contents of the Target Console view.
Toggles Scroll Lock
Enables or disables the automatic scrolling of messages in the Target Console view.
Bring to Front when target output is detected
Enabled by default. The debugger automatically changes the focus to this view when target
output is detected.
Copy
Copies the selected text.
Paste
Pastes text that you have previously copied.
Select All
Selects all text.
Related references
Chapter 16 Perspectives and Views on page 16-395
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-479
reserved.
Non-Confidential
16 Perspectives and Views
16.27 Target view
Right-click on the column headers to select the columns that you want displayed:
Name
The name of the target capability.
Value
The value of the target capability.
Key
The name of the target capability. This is used by some commands in the Commands view.
Description
A brief description of the target capability.
Show All Columns
Displays all columns.
Reset Columns
Resets the columns displayed and their widths to the default.
The Name, Value, and Description columns are displayed by default.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-480
reserved.
Non-Confidential
16 Perspectives and Views
16.27 Target view
Links this view to the selected connection in the Debug Control view. This is the default.
Alternatively you can link the view to a different connection. If the connection you want is not
shown in the drop-down list you might have to select it first in the Debug Control view.
Refresh the Target Capabilities
Refreshes the view.
View Menu
This menu contains the following option:
New Target View
Displays a new instance of the Target view.
Copy
Copies the selected capabilities. To copy the capabilities in a group such as Breakpoint
capabilities, you must first expand that group.
This is useful if you want to copy the capabilities to a text editor to save them for future
reference.
Select All
Selects all capabilities currently expanded in the view.
Related references
Chapter 16 Perspectives and Views on page 16-395
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-481
reserved.
Non-Confidential
16 Perspectives and Views
16.28 Trace view
In the navigational timeline, the color coding is a heat map showing the executed instructions and the
number of instructions each function executes in each timeline. The darker red color shows more
instructions and the lighter yellow color shows fewer instructions. At a scale of 1:1 however, the color
scheme changes to display memory access instructions as a darker red color, branch instructions as a
medium orange color, and all the other instructions as a lighter green color.
The Trace view might not be visible by default. To add this view:
1. Ensure that you are in the Development Studio perspective.
2. Select Window > Show View > Trace.
The Trace view navigation chart contains several tabs:
• Trace tab shows the graphical timeline and disassembly.
• Capture Device tab gives information about the trace capture device and the trace buffer, and allows
you to configure the trace capture.
• Source tab gives information about the trace source.
• Ranges tab allows you to limit the trace capture to a specific address range.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-482
reserved.
Non-Confidential
16 Perspectives and Views
16.28 Trace view
Links this view to the selected connection in the**Debug Control** view. This is the default.
Alternatively you can link the view to a different connection or processor in a Symmetric
MultiProcessing (SMP) connection. If the connection you want is not shown in the drop-down
list you might have to select it first in the Debug Control view.
Updating view when hidden, Not updating view when hidden
Toggles the updating of the view when it is hidden behind other views. By default the view does
not update when it is hidden, which might cause loss of trace data.
Show Next Match
Moves the focus of the navigation chart and disassembly trace to the next matching occurrence
for the selected function or instruction.
Show Previous Match
Moves the focus of the navigation chart and disassembly trace to the previous matching
occurrence for the selected function or instruction.
Don't mark other occurrences - click to start marking****Mark other occurrences - click to stop
marking
When function trace is selected, marks all occurrences of the selected function with a shaded
highlight. This is disabled when instruction trace is selected.
Clear Trace
Clears the raw trace data that is currently contained in the trace buffer and the trace view.
Showing instruction trace - click to switch to functions, Showing function trace - click to switch to
instructions
Toggles the disassembly trace between instructions and functions.
Export Trace Report
Displays the Export Trace Report dialog box to save the trace data to a file.
Home
Where enabled, moves the trace view to the beginning of the trace buffer. Changes might not be
visible if the trace buffer is too small.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-483
reserved.
Non-Confidential
16 Perspectives and Views
16.28 Trace view
Page Back
Where enabled, moves the trace view back one page. You can change the page size by
modifying the Set Maximum Instruction Depth setting.
Page Forward
Where enabled, moves the trace view forward one page. You can change the page size by
modifying the Set Maximum Instruction Depth setting.
End
Where enabled, moves the trace view to the end of the trace buffer. Changes might not be visible
if the trace buffer is too small.
Switch between navigation resolutions
Changes the timeline resolution in the navigation chart.
Switch between alternate views
Changes the view to display the navigation chart, disassembly trace or both.
Focus Here
At the top of the list, displays the function being executed in the selected time slot. The
remaining functions are listed in the order in which they are executed after the selected point in
time. Any functions that do not appear after that point in time are placed at the bottom and
ordered by total time.
Order By Total Time
Displays the functions ordered by the total time spent within the function. This is the default
ordering.
View Menu
The following View Menu options are available:
New Trace View
Displays a new instance of the Trace view.
Set Trace Page Size…
Displays a dialog box in which you can enter the maximum number of instructions to
display in the disassembly trace. The number must be within the range of 1,000 to
1,000,000 instructions.
Find Trace Trigger Event
Enables you to search for trigger events in the trace capture buffer.
Find Timestamp…
Displays a dialog box in which you can enter either a numeric timestamp as a 64 bit
value or in the h:m:s format.
Find Function…
Enables you to search for a function by name in the trace buffer.
Find Instruction by Address…
Enables you to search for an instruction by address in the trace buffer.
Find ETM data access in trace buffer…
Enables you to search for a data value or range of values in the trace buffer.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-484
reserved.
Non-Confidential
16 Perspectives and Views
16.28 Trace view
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-485
reserved.
Non-Confidential
16 Perspectives and Views
16.28 Trace view
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-486
reserved.
Non-Confidential
16 Perspectives and Views
16.29 Trace Control view
The trace capture device and trace sources available in the trace capture device are listed on the left hand
side of the view. Select any trace source to view additional information.
The following Trace Capture Device information is displayed in the view:
Trace Capture Device
The name of the trace capture device.
Capture Status
The trace capture status. On when capturing trace data, Off when not capturing trace data.
Trigger Position
The location of the trigger within the buffer.
Note
This information is only available for hardware targets.
Buffer Size
The capacity of the trace buffer.
Buffer Used
The amount of trace data currently in the buffer.
Buffer Wrapped
The trace buffer data wraparound status.
Persistent Trace
The persistent trace data status.
The following Trace Source information is displayed in the view:
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-487
reserved.
Non-Confidential
16 Perspectives and Views
16.29 Trace Control view
Trace Source
The name of the selected trace source.
Source ID
The unique ID of the selected trace source.
Source Encoding
The trace encoding format.
Core
The core associated with the trace source.
Context IDs
The tracing context IDs availability status.
Cycle Accurate Trace
The cycle accurate trace support status.
Virtualization Extensions
The virtualization extensions availability status.
Timestamps
Timestamp availability status for the trace.
Timestamp Origin
Whether a timestamp origin for the trace is set or cleared. When set, timestamps are displayed as
offsets from the origin.
Trace Triggers
Trace triggers support status.
Trace Start Points
Trace start points support status.
Trace Stop Points
Trace stop points support status.
Trace Ranges
Trace ranges support status.
Note
The information displayed varies depending on the trace source.
Stop Capture
Click Stop Capture to stop trace capture on the trace capture device. This is the same as the
trace stop command.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-488
reserved.
Non-Confidential
16 Perspectives and Views
16.29 Trace Control view
Note
The trace start and trace stop commands and the automatic start and stop trace options act as
master switches. Trace triggers cannot override them.
Links this view to the selected connection in the Debug Control view. This is the default.
Alternatively you can link the view to a specific connection or processor in a Symmetric
MultiProcessing (SMP) connection. If the connection you want is not shown in the drop-down
list, you might have to select it first in the Debug Control view.
New Trace Control View
Select this option to open a new Trace Control view.
Refresh
Select this option to refresh the current Trace Control view.
DTSL Options…
Select this option to open the Debug and Trace Services Layer (DTSL) Configuration dialog
box. You can use this dialog box to configure additional debug and trace settings, such as,
adding, editing or choosing a DTSL connection configuration.
Trace Dump…
Select this option to open the Trace Dump dialog box. In this dialog box, you can configure and
export the raw trace data from the buffer and write it to a file.
Related references
Chapter 16 Perspectives and Views on page 16-395
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-489
reserved.
Non-Confidential
16 Perspectives and Views
16.30 Variables view
You can:
View the contents of variables that are currently in scope
By default, the Variables view displays all the local variables. It also displays the file static and
global variable folder nodes. You can add and remove variables from the view. Keep the set of
variables in the view to a minimum to maintain good debug performance.
Add a specific variable to the Variables view
If you know the name of the variable you want to view, enter the variable name in the Add
Variable field. This lists the variables that match the text you entered. For example, enter the
text nu to view variables with nu in their name. Double-click the variable to add it to the view.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-490
reserved.
Non-Confidential
16 Perspectives and Views
16.30 Variables view
Delete variables
You can remove the variables that you added from the variables view. In the Variables view,
select the variables you want to remove from the view, and click , or press Delete on your
keyboard, to remove the selected variables. If you want to reset the view to display the default
variables again, then from the view menu, select .
Search for a specific variable
You can use the search feature in the Variables view to search for a specific variable in view.
If you know the name of the specific variable, click to display the Search Variables dialog
box. Either enter the name of the variable you want or select it from the list.
Press Enter on your keyboard, or double-click the variable to select and view it in the Variables
view.
Note
You can also use CTRL+F on your keyboard to display the Search Variables dialog box.
Refresh view
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-491
reserved.
Non-Confidential
16 Perspectives and Views
16.30 Variables view
Click to change all numeric values to hexadecimal values. This works as a toggle and your
preference is saved across sessions.
Modify the value of variables
You can modify the values of variables that have write access, by clicking in the Value column
for the variable and entering a new value. Enable the Access column to view access rights for
each variable.
Freeze the view to prevent the values being updated by a running target
Select Freeze Data from the view menu to prevent values updating automatically when the
view refreshes.
Drag and drop a variable from the Variables view to other views
Drag and drop a variable from this view into either the Memory view to see the memory at that
address, or into the Disassembly view to disassemble from that address.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-492
reserved.
Non-Confidential
16 Perspectives and Views
16.30 Variables view
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-493
reserved.
Non-Confidential
16 Perspectives and Views
16.30 Variables view
The following options are available on the context menu when you select a variable value for
editing:
Undo
Reverts the last change you made to the selected value.
Cut
Copies and deletes the selected value.
Copy
Copies the selected value.
Paste
Pastes a value that you have previously cut or copied into the selected variable value.
Delete
Deletes the selected value.
Select All
Selects the value.
Type
The type of the variable.
Count
The number of array or pointer elements.
Size
The size of the variable in bits.
Location
The address of the variable.
Access
The access mode for the variable.
Show All Columns
Displays all columns.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-494
reserved.
Non-Confidential
16 Perspectives and Views
16.30 Variables view
Reset Columns
Resets the columns displayed and their widths to the default.
Related concepts
10.8 About debugging multi-threaded applications on page 10-202
10.9 About debugging shared libraries on page 10-203
10.10.2 About debugging a Linux kernel on page 10-206
10.10.3 About debugging Linux kernel modules on page 10-208
10.11 About debugging TrustZone enabled targets on page 10-212
Related tasks
7.9 Assigning conditions to an existing breakpoint on page 7-133
Related references
7.13 Setting a tracepoint on page 7-139
7.8 Conditional breakpoints on page 7-132
7.12 Pending breakpoints and watchpoints on page 7-137
Chapter 16 Perspectives and Views on page 16-395
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-495
reserved.
Non-Confidential
16 Perspectives and Views
16.31 Timed Auto-Refresh Properties dialog box
Note
When you select Running or Always, the Memory and Screen views are only updated if the target
supports access to that memory when running. For example, some CoreSight targets support access to
physical memory at any time through the Debug Access Port (DAP) to the Advanced High-performance
Bus Access Port (AHB-AP) bridge. In those cases, add the AHB: prefix to the address selected in the
Memory or Screen views. This type of access bypasses any cache on the CPU core, so the memory
content returned might be different to the value that the core reads.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-496
reserved.
Non-Confidential
16 Perspectives and Views
16.32 Memory Exporter dialog box
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-497
reserved.
Non-Confidential
16 Perspectives and Views
16.33 Memory Importer dialog box
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-498
reserved.
Non-Confidential
16 Perspectives and Views
16.34 Fill Memory dialog box
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-499
reserved.
Non-Confidential
16 Perspectives and Views
16.35 Export Trace Report dialog box
Report Format
Configures the report.
Output Format
Selects the output format.
Include column headers
Enables you to add column headers in the first line of the report.
Select columns to export
Enables you to filter the trace data in the report.
Record Filters
Enables or disables trace filters.
Check All
Enables you to select all the trace filters.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-500
reserved.
Non-Confidential
16 Perspectives and Views
16.35 Export Trace Report dialog box
Uncheck All
Enables you to unselect all the trace filters.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-501
reserved.
Non-Confidential
16 Perspectives and Views
16.36 Trace Dump dialog box
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-502
reserved.
Non-Confidential
16 Perspectives and Views
16.36 Trace Dump dialog box
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-503
reserved.
Non-Confidential
16 Perspectives and Views
16.37 Breakpoint Properties dialog box
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-504
reserved.
Non-Confidential
16 Perspectives and Views
16.37 Breakpoint Properties dialog box
Breakpoint information
The breakpoint information shows the basic properties of a breakpoint. It comprises:
Description
This shows:
• If the source file is available, the file name and line number in the file where the breakpoint
is set, for example calendar.c:34.
• The name of the function in which the breakpoint is set and the number of bytes from the
start of the function. For example, main+0x4 shows that the breakpoint is 4 bytes from the
start of the main() function.
• The address at which the breakpoint is set.
• A breakpoint ID number, #<N>. In some cases, such as in a for loop, a breakpoint might
comprise a number of sub-breakpoints. These are identified as <N>.<n>, where <N> is the
number of the parent.
• The instruction set at the breakpoint, A32 (Arm) or T32 (Thumb).
• An ignore count, if set. The display format is:
ignore = <num>/<count>
<num> equals <count> initially, and decrements on each pass until it reaches zero.
<count> is the value you have specified for the ignore count.
• A hits count that increments each time the breakpoint is hit. This is not displayed until the
first hit. If you set an ignore count, hits count does not start incrementing until the ignore
count reaches zero.
• The stop condition you have specified, for example i==3.
Host File Location
The location of the image on the host machine.
Compiled File Location
The path that the image was compiled with. This can be relative or absolute. This location might
be different from the host file location if you compile and debug the image on different
machines.
Type
This shows:
• Whether or not the source file is available for the code at the breakpoint address, Source
Level if available or Address Level if not available.
• If the breakpoint is on code in a shared object, Auto indicates that the breakpoint is
automatically set when that shared object is loaded.
• If the breakpoint is Active, the type of the breakpoint, either Software Breakpoint or
Hardware Breakpoint.
• The instruction set of the instruction at the address of the breakpoint, A32 (Arm) or T32
(Thumb).
State
Indicates one of the following:
Active
The image or shared object containing the address of the breakpoint is loaded, and the
breakpoint is set.
Disabled
The breakpoint is disabled.
No Connection
The breakpoint is in an application that is not connected to a target.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-505
reserved.
Non-Confidential
16 Perspectives and Views
16.37 Breakpoint Properties dialog box
Pending
The image or shared object containing the address of the breakpoint has not yet been
loaded. The breakpoint becomes active when the image or shared object is loaded.
Address
A dialog box that displays one or more breakpoint or sub-breakpoint addresses. You can use the
check boxes to enable or disable the breakpoints.
Breakpoint options
The following options are available for you to set:
Break on Selected Threads or Cores
Select this option if you want to set a breakpoint for a specific thread or processor. This option is
disabled if none are available.
Stop Condition
Specify a C-style conditional expression for the selected breakpoint. For example, to activate the
breakpoint when the value of x equals 10, specify x==10.
Ignore Count
Specify the number of times the selected breakpoint is ignored before it is activated.
The debugger decrements the count on each pass. When it reaches zero, the breakpoint activates.
Each subsequent pass causes the breakpoint to activate.
On break, run script
Specify a script file to run when the selected breakpoint is activated.
Note
Take care with the commands you use in a script that are attached to a breakpoint. For example,
if you use the quit command in a script, the debugger disconnects from the target when the
breakpoint is hit.
Continue Execution
Select this option if you want to continue running the target after the breakpoint is activated.
Silent
Controls the printing of messages for the selected breakpoint in the Commands view.
Hardware Virtualization
Indicates whether Hardware Virtualization is supported.
Break on Virtual Machine ID
If Hardware Virtualization is supported, specify the VirtualMachine ID (VMID) of the guest
operating system to which the breakpoint applies.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-506
reserved.
Non-Confidential
16 Perspectives and Views
16.38 Watchpoint Properties dialog box
Location
The data location at which the watchpoint is set.
Address
The memory address at which the watchpoint is set.
Access Type
The type of access specified for the watchpoint.
Enabled
Select to enable watchpoint, deselect to disable watchpoint.
Data Width
Specify the width to watch at the given address, in bits. Accepted values are: 8, 16, 32, and 64 if
supported by the target. This parameter is optional.
The width defaults to:
• 32 bits for an address.
• The width corresponding to the type of the symbol or expression, if entered.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-507
reserved.
Non-Confidential
16 Perspectives and Views
16.38 Watchpoint Properties dialog box
Stop Condition
Specify the condition which must evaluate to true at the time the watchpoint is triggered for the
target to stop. Enter a C-style expression. For example, if your application code has a variable x,
then you can specify: x == 10.
Note
You can create several conditional watchpoints, but when a conditional watchpoint is enabled,
no other watchpoints (regardless of whether they are conditional) can be enabled.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-508
reserved.
Non-Confidential
16 Perspectives and Views
16.39 Tracepoint Properties dialog box
Note
• Tracepoint behavior might vary depending on the selected target.
• The start and stop points for trace must always exist as a pair. Whenever you set a start or stop point,
also set its partnering stop or start point.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-509
reserved.
Non-Confidential
16 Perspectives and Views
16.40 Manage Signals dialog box
Note
You can also use the infosignals command to display the current signal handler settings.
When a signal or processor exception occurs you can choose to stop execution, print a message, or both.
Stop and Print are selected for all signals by default.
Note
When connected to an application running on a remote target using gdbserver, the debugger handles
Unix signals, but on bare-metal targets with no operating system it handles processor exceptions.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-510
reserved.
Non-Confidential
16 Perspectives and Views
16.41 Functions Filter dialog box
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-511
reserved.
Non-Confidential
16 Perspectives and Views
16.42 Script Parameters dialog box
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-512
reserved.
Non-Confidential
16 Perspectives and Views
16.43 Debug Configurations - Connection tab
Select target
These options enable you to select the target manufacturer, board, project type, and debug
operation.
Target Connection
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-513
reserved.
Non-Confidential
16 Perspectives and Views
16.43 Debug Configurations - Connection tab
Note
You must select an RSE connection to the target if your Linux application debug operation is:
• Download and debug application
• Start gdbserver and debug target-resident application.
gdbserver (TCP)
Specify the target IP address or name and the associated port number for the connection
between the debugger and gdbserver.
The following options might also be available, depending on the debug operation you
selected:
• Select the Use Extended Mode checkbox if you want to restart an application under
debug. Be aware that this might not be fully implemented by gdbserver on all
targets.
• Select the Terminate gdbserver on disconnect checkbox to terminate gdbserver
when you disconnect from the target.
Note
Only available when the selected target is Connect to already running
application.
• Select the Use RSE Host checkbox to connect to gdbserver using the RSE
configured host.
gdbserver (serial)
Specify the local serial port and connection speed for the serial connection between the
debugger and gdbserver.
For model connections, details for gdbserver are obtained automatically from the
target.
Select the Use Extended Mode option if you want to restart an application under
debug. Be aware that this might not be fully implemented by gdbserver on all targets.
Bare Metal Debug
Select your debug adapter from the list. In Connection, specify the host name, IP
address, or the fully qualified domain name (FQDN) of your debug hardware adapter.
You can also click Browse… to display all the available debug hardware adapters on
your local subnet or USB connections.
Model parameters
Specify the parameters for launching your model.
The options available depend on the interface of your model. For Component
Architecture Debug Interface (CADI) models, you can specify Model parameters. For
Iris models, you can either select Launch a new model and specify the Model
parameters, or select Connect to an already running model and specify the
Connection address of the model.
See the Fast Models documentation for model parameters to use.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-514
reserved.
Non-Confidential
16 Perspectives and Views
16.43 Debug Configurations - Connection tab
DTSL Options
Select Edit… to configure additional debug and trace settings.
Apply
Save the current configuration. This does not connect to the target.
Revert
Undo any changes and revert to the last saved configuration.
Debug
Connect to the target and close the Debug Configurations dialog box.
Close
Close the Debug Configurations dialog box.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-515
reserved.
Non-Confidential
16 Perspectives and Views
16.44 Debug Configurations - Files tab
Figure 16-67 Files tab (Shown with file system configuration for an application on a Fixed Virtual
Platform)
Note
Options in the Files tab depend on the type of platform and debug operation that you select.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-516
reserved.
Non-Confidential
16 Perspectives and Views
16.44 Debug Configurations - Files tab
Files
These options enable you to configure the target file system and select files on the host that you
want to download to the target or use by the debugger. The Files tab options available for each
Debug operation are:
Table 16-2 Files tab options available for each Debug operation
Download and Debug target Connect to Debug using Debug and ETB
debug resident already running DSTREAM Trace using
application application gdbserver DSTREAM
Apply
Save the current configuration. This does not connect to the target.
Revert
Undo any changes and revert to the last saved configuration.
Debug
Connect to the target and close the Debug Configurations dialog box.
Close
Close the Debug Configurations dialog box.
Select Load symbols to load the debug symbols from the specified image.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-517
reserved.
Non-Confidential
16 Perspectives and Views
16.44 Debug Configurations - Files tab
Application on target
Specify the location of the application on the target. gdbserver uses this to launch the
application.
For example, to use the stripped (no debug) Gnometris application image when using a model
and VFS is configured to mount the host workspace as /writeable on the target, specify the
following in the field provided: /writeable/gnometris/stripped/gnometris
Target download directory
If the target has a preloaded image, then you might have to specify the location of the
corresponding image on your host.
The debugger uses the location of the application image on the target as the default current
working directory. To change the default setting for the application that you are debugging, enter
the location in the field provided. The current working directory is used whenever the
application references a file using a relative path.
Load symbols from file
Specify the application image containing the debug information to load:
• Enter the host location and file name in the field provided.
• Click File System… to locate the file in an external directory from the workspace.
• Click Workspace… to locate the file in a project directory or sub-directory within the
workspace.
For example, to load the debug version of Gnometris you must select the gnometris application
image that is available in the gnometris project root directory.
Although you can specify shared library files here, the usual method is to specify a path to your
shared libraries with the Shared library search directory option on the Debugger tab.
Note
Load symbols from file is selected by default.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-518
reserved.
Non-Confidential
16 Perspectives and Views
16.44 Debug Configurations - Files tab
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-519
reserved.
Non-Confidential
16 Perspectives and Views
16.45 Debug Configurations - Debugger tab
Figure 16-68 Debugger tab (Shown with settings for application starting point and search paths)
Run Control
These options enable you to define the running state of the target when you connect:
Connect only
Connect to the target, but do not run the application.
Note
The PC register is not set and pending breakpoints or watchpoints are subsequently
disabled when a connection is established.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-520
reserved.
Non-Confidential
16 Perspectives and Views
16.45 Debug Configurations - Debugger tab
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-521
reserved.
Non-Confidential
16 Perspectives and Views
16.45 Debug Configurations - Debugger tab
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-522
reserved.
Non-Confidential
16 Perspectives and Views
16.46 Debug Configurations - OS Awareness tab
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-523
reserved.
Non-Confidential
16 Perspectives and Views
16.47 Debug Configurations - Arguments tab
Program Arguments
This panel enables you to enter the arguments. Arguments are separated by spaces. They are
passed to the target application unmodified except when the text is an Eclipse argument variable
of the form ${<var_name>} where Eclipse replaces it with the related value.
For a Linux target, you might have to escape some characters using a backslash (\\) character.
For example, the @, (, ), ", and # characters must be escaped.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-524
reserved.
Non-Confidential
16 Perspectives and Views
16.47 Debug Configurations - Arguments tab
Variables…
This button opens the Select Variable dialog box where you can select variables that are passed
to the application when the debug session starts. For more information on variables, use the
dynamic help.
Apply
Save the current configuration. This does not connect to the target.
Revert
Undo any changes and revert to the last saved configuration.
Debug
Connect to the target and close the Debug Configurations dialog box.
Close
Close the Debug Configurations dialog box.
Related references
7.17 Using semihosting to access resources on the host computer on page 7-145
7.18 Working with semihosting on page 7-147
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-525
reserved.
Non-Confidential
16 Perspectives and Views
16.48 Debug Configurations - Environment tab
Figure 16-71 Environment tab (Shown with environment variables configured for a Fixed Virtual
Platform)
The Environment tab contains the following elements:
Note
The settings in this tab are not used for connections that use the Connect to already running gdbserver
debug operation.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-526
reserved.
Non-Confidential
16 Perspectives and Views
16.48 Debug Configurations - Environment tab
New…
Opens the New Environment Variable dialog box where you can create a new target
environment variable.
For example, the Gnometris application is provided as a packaged example in Arm
Development Studio. To debug the Gnometris application on a model, you must create a target
environment variable for the DISPLAY setting.
Edit…
Opens the Edit Environment Variable dialog box where you can edit the properties for the
selected target environment variable.
Remove
Removes the selected target environment variables from the list.
Apply
Save the current configuration. This does not connect to the target.
Revert
Undo any changes and revert to the last saved configuration.
Debug
Connect to the target and close the Debug Configurations dialog box.
Close
Close the Debug Configurations dialog box.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-527
reserved.
Non-Confidential
16 Perspectives and Views
16.49 Debug Configurations - Export tab
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-528
reserved.
Non-Confidential
16 Perspectives and Views
16.50 DTSL Configuration Editor dialog box
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-529
reserved.
Non-Confidential
16 Perspectives and Views
16.50 DTSL Configuration Editor dialog box
Figure 16-74 Configuration Editor (Shown with Trace capture method set to DSTREAM)
Related concepts
10.17 About debugging caches on page 10-220
Related references
16.23 Cache Data view on page 16-470
Related information
cache commands
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-530
reserved.
Non-Confidential
16 Perspectives and Views
16.51 Probe Configuration dialog box
Features
The options available depend on your probe. Check your hardware documentation for user-configurable
options for your probe.
Related tasks
15.3.6 Add a debug connection over functional I/O on page 15-364
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-531
reserved.
Non-Confidential
16 Perspectives and Views
16.52 About the Remote System Explorer
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-532
reserved.
Non-Confidential
16 Perspectives and Views
16.53 Remote Systems view
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-533
reserved.
Non-Confidential
16 Perspectives and Views
16.54 Remote System Details view
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-534
reserved.
Non-Confidential
16 Perspectives and Views
16.55 Target management terminal for serial and SSH connections
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-535
reserved.
Non-Confidential
16 Perspectives and Views
16.56 Remote Scratchpad view
Note
Be aware that although the scratchpad only shows links, any changes made to a linked resource also
change it in the original file system.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-536
reserved.
Non-Confidential
16 Perspectives and Views
16.57 Remote Systems terminal for SSH connections
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-537
reserved.
Non-Confidential
16 Perspectives and Views
16.58 Terminal Settings dialog box
Host
The host to connect to.
Port
The port that the target is connected to:
• telnet. This is the default.
• tgtcons.
Timeout (sec)
The connection's timeout in seconds.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-538
reserved.
Non-Confidential
16 Perspectives and Views
16.58 Terminal Settings dialog box
Host
The host to connect to.
User
The user name.
Password
The password corresponding to the user.
Timeout (sec)
The connection's timeout in seconds. Defaults to 0.
KeepAlive (sec)
The connection's keep alive time in seconds. Defaults to 300.
Port
The port that the target is connected to. Defaults to 22.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-539
reserved.
Non-Confidential
16 Perspectives and Views
16.58 Terminal Settings dialog box
Port
The port that the target is connected to.
Baud Rate
The connection baud rate.
Data Bits
The number of data bits.
Stop Bits
The number of stop bits for each character.
Parity
The parity type:
• None. This is the default.
• Even.
• Odd.
• Mark.
• Space.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-540
reserved.
Non-Confidential
16 Perspectives and Views
16.58 Terminal Settings dialog box
Flow Control
The flow control of the connection:
• None. This is the default.
• RTS/CTS.
• Xon/Xoff.
Timeout (sec)
The connection's timeout in seconds.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-541
reserved.
Non-Confidential
16 Perspectives and Views
16.59 Debug Hardware Configure IP view
Note
You have to configure the network settings once for each debug hardware unit.
Access
To access the Debug Hardware Configure IP view from the main menu, either:
• Select Window > Show View > Debug Hardware Configure IP.
• Select Window > Show View > Other... > Arm Debugger > Debug Hardware Configure IP.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-542
reserved.
Non-Confidential
16 Perspectives and Views
16.59 Debug Hardware Configure IP view
Contents
Field Description
Ethernet/MAC The Ethernet address/media access control (MAC) address of the debug hardware unit. The address is automatically
Address detected when you click Browse and select the hardware. To enter the value manually, select the Configure New
option.
Browse… Displays the Connection Browser dialog box. Use it to browse and select the debug hardware unit in your local
network, or one that is connected to a USB port on the host workstation.
Identify Click to visually identify your debug hardware unit using the indicators available on the debug hardware. On
DSTREAM, the DSTREAM logo flashes during identification.
Configure New Select this option to manually configure a debug hardware unit that was not previously configured, or is on a
different subnet.
Ethernet Type Select the type of Ethernet you are connecting to. Auto-Detect is the default option. For DSTREAM devices,
ensure that this is set to Auto-Detect.
Related references
16.60 Debug Hardware Firmware Installer view on page 16-544
16.61 Connection Browser dialog box on page 16-547
15.3 Debug Hardware configuration on page 15-355
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-543
reserved.
Non-Confidential
16 Perspectives and Views
16.60 Debug Hardware Firmware Installer view
Updating your debug hardware unit firmware using the Debug Hardware Firmware
Installer view
1. Connect your debug hardware to the host workstation.
2. From the main menu, select Window > Show View > Other > Arm Debugger > Debug Hardware
Firmware Installer to display the view.
3. In Select Debug Hardware, click Browse and select your debug hardware unit.
4. Click Connect to your debug hardware unit. The current firmware status of your debug hardware is
displayed.
5. In Select Firmware Update File, click Browse and select the firmware file for your debug hardware
unit. When the file is selected, the dialog box shows the selected firmware update file details. For
example:
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-544
reserved.
Non-Confidential
16 Perspectives and Views
16.60 Debug Hardware Firmware Installer view
Note
Arm Development Studio only displays the firmware file applicable to your debug hardware unit, so
it is easy for you to select the correct firmware file.
6. Click Install. The firmware update process starts. When complete, a message is displayed indicating
the status of the update.
Clear
Click to clear the currently selected debug hardware and firmware file.
Install
Click to install the firmware file on the selected debug hardware.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-545
reserved.
Non-Confidential
16 Perspectives and Views
16.60 Debug Hardware Firmware Installer view
base
The first release of the firmware for version N.n.
patch
Updates to the corresponding N.n release of the firmware.
unit
Identifies the debug hardware unit, and is one of:
dstream
For a DSTREAM debug and trace unit.
dstream2
For the newer family of DSTREAM debug and trace units.
rvi
For an RVI debug unit.
Related references
16.59 Debug Hardware Configure IP view on page 16-542
16.61 Connection Browser dialog box on page 16-547
21.4 Updating multiple debug hardware units on page 21-671
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-546
reserved.
Non-Confidential
16 Perspectives and Views
16.61 Connection Browser dialog box
Note
• If debug hardware units do not appear in the list, check your network and setup of your debug unit.
• Debug hardware units connected to different networks do not appear in the Connection Browser
dialog box. If you want to connect to a debug hardware unit on a separate network, you must know
the IP address of that unit.
• Any unit shown in light gray has responded to browse requests but does not have a valid IP address.
You cannot connect to that unit by TCP/IP until you have configured it for use on your network.
• Only appropriate debug hardware units are shown.
Related references
16.59 Debug Hardware Configure IP view on page 16-542
16.60 Debug Hardware Firmware Installer view on page 16-544
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-547
reserved.
Non-Confidential
16 Perspectives and Views
16.62 Preferences dialog box
To access the Preferences dialog box, select Preferences from the Window menu. Changes to these
settings are saved in the current workspace. If you want to copy your settings to another workspace, use
the Export wizard.
The contents of the preferences hierarchy tree include the following groups:
General
Controls the workspace, perspectives, editors, build order, linked resources, file associations,
path variables, background operations, keyboard and mouse settings.
Arm DS
Controls the default Arm Development Studio environment settings, presentation and formatting
for Development Studio editors and views, target configuration database search locations, and
the automatic checks for Development Studio product updates. You can also view Arm
Development Studio license information.
C/C++
Controls the C/C++ environment settings, CDT build variables, syntax formatting, and default
project wizard settings.
Help
Controls how the context help is displayed.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-548
reserved.
Non-Confidential
16 Perspectives and Views
16.62 Preferences dialog box
Install/Update
Controls the update history, scheduler, and policy.
Remote Systems
Controls the settings used by the Remote System Explorer.
Run/Debug
Controls the default perspectives, breakpoint, build, and launch settings before running and
debugging.
For more information on the other options not listed here, use the dynamic help.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-549
reserved.
Non-Confidential
16 Perspectives and Views
16.63 Properties dialog box
The contents of the properties hierarchy tree for a project include the following:
Resource
Displays the resource location, modification state, and file type.
Builders
Controls builders available for the selected project.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-550
reserved.
Non-Confidential
16 Perspectives and Views
16.63 Properties dialog box
C/C++ Build
Controls the environment, build, and tool chain settings for the active configuration.
C/C++ General
Controls documentation, file types, indexer and path/symbol settings.
Project References
Controls project dependencies.
For more information on the other options not listed here, use the dynamic help.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 16-551
reserved.
Non-Confidential
Chapter 17
Troubleshooting
Describes how to diagnose problems when debugging applications using Arm Debugger.
It contains the following sections:
• 17.1 Arm Linux problems and solutions on page 17-553.
• 17.2 Enabling internal logging from the debugger on page 17-554.
• 17.3 FTDI probe: Incompatible driver error on page 17-555.
• 17.4 Target connection problems and solutions on page 17-556.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 17-552
reserved.
Non-Confidential
17 Troubleshooting
17.1 Arm Linux problems and solutions
Related tasks
6.3 Configuring a connection to a Linux application using gdbserver on page 6-100
6.4 Configuring a connection to a Linux kernel on page 6-103
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 17-553
reserved.
Non-Confidential
17 Troubleshooting
17.2 Enabling internal logging from the debugger
Related references
16.6 Commands view on page 16-410
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 17-554
reserved.
Non-Confidential
17 Troubleshooting
17.3 FTDI probe: Incompatible driver error
Cause
The Linux operating system automatically loads an incompatible driver when the FTDI probe is plugged
in.
Solution
1. To unload the incompatible driver, enter the following commands in your Terminal:
sudo rmmod ftdi_sio
sudo rmmod usbserial
2. Browse for your FTDI probe again, and it is now listed in the Connection Browser.
Related information
FTDI Drivers Installation Guide for Linux
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 17-555
reserved.
Non-Confidential
17 Troubleshooting
17.4 Target connection problems and solutions
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 17-556
reserved.
Non-Confidential
Chapter 18
File-based Flash Programming in Arm®
Development Studio
Describes the file-based flash programming options available in Arm Development Studio.
It contains the following sections:
• 18.1 About file-based flash programming in Arm® Development Studio on page 18-558.
• 18.2 Flash programming configuration on page 18-560.
• 18.3 Creating an extension database for flash programming on page 18-562.
• 18.4 About using or extending the supplied Arm Keil® flash method on page 18-563.
• 18.5 About creating a new flash method on page 18-565.
• 18.6 About testing the flash configuration on page 18-569.
• 18.7 About flash method parameters on page 18-570.
• 18.8 About getting data to the flash algorithm on page 18-571.
• 18.9 About interacting with the target on page 18-572.
• 18.10 Flash multiple images for CMSIS connections on page 18-579.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 18-557
reserved.
Non-Confidential
18 File-based Flash Programming in Arm® Development Studio
18.1 About file-based flash programming in Arm® Development Studio
Note
You can use the Arm Debugger info flash command to view the flash configuration for your board.
Examples of downloading a code algorithm into the target system are the Keil flash programming
algorithms which are fully supported by Arm Debugger. For the Keil flash method, one of the method
configuration items is the algorithm to use to perform the flash programming. These algorithms all
follow the same top level software interface and so the same Keil flash method can be used to program
different types of flash. This means that Arm Debugger should be able to make direct use of any existing
Keil flash algorithm.
Note
All flash methods which directly interact with the target should do so using the Arm Debugger's DTSL
connection.
Note
An example, flash_example-FVP-A9x4, is provided with Arm Development Studio. This example
shows two ways of programming flash devices using Arm Development Studio, one using a Keil Flash
Method and the other using a Custom Flash Method written in Jython. For convenience, the Cortex-
A9x4 FVP model supplied with Arm Development Studio is used as the target device. This example can
be used as a template for creating new flash algorithms. The readme.html provided with the example
contains basic information on how to use the example.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 18-558
reserved.
Non-Confidential
18 File-based Flash Programming in Arm® Development Studio
18.1 About file-based flash programming in Arm® Development Studio
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 18-559
reserved.
Non-Confidential
18 File-based Flash Programming in Arm® Development Studio
18.2 Flash programming configuration
Configuration files
The target's platform entry information is stored across two files in the configuration database:
• project_types.xml - This file describes the debug operations supported for the platform and may
contain a reference to a flash configuration file. This is indicated by a tag such as
<flash_config>CDB://flash.xml</flash_config>.
• The CDB:// tag indicates a path relative to the target's platform directory which is usually the one that
contains the project_types.xml file. You can define a relative path above the target platform
directory using ../ . For example, a typical entry would be similar to
<flash_config>CDB://../../../Flash/STM32/flash.xml</flash_config>.
Using relative paths allows the flash configuration file to be shared between a number of targets with
the same chip and same flash configuration.
• The FDB:// tag indicates a path relative to where the Jython flash files (such as the stm32_setup.py
and keil_flash.py used in the examples) are located. For Arm Development Studio installations,
this is usually <installation_directory>/sw/debugger/configdb/Flash.
• A flash configuration .xml file. For example, flash.xml. This .xml file describes flash devices on a
target, including which memory regions they are mapped to and what parameters need to be passed to
the flash programming method.
A flash configuration must always specify the flash programming method to use, but can also optionally
specify a setup script and a teardown script. Setup and teardown scripts are used to prepare the target
platform for flash programming and to re-initialize it when flash programming is complete. These scripts
might be very specific to the target platform, whereas the flash programming method might be generic.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 18-560
reserved.
Non-Confidential
18 File-based Flash Programming in Arm® Development Studio
18.2 Flash programming configuration
class="KeilFlash" method_config="Option"/>
<setup script="FDB://stm32_setup.py" method="setup"/>
</programming_type>
</device>
</devices>
<method_configs>
<!-- Parameters for programming the main flash -->
<method_config id="Main">
<params>
<!-- Programming algorithm binary to load to target -->
<param name="algorithm" type="string" value="FDB://algorithms/
STM32F10x_512.FLM"/>
<!-- The core in the target to run the algorithm -->
<param name="coreName" type="string" value="Cortex-M3"/>
<!-- RAM location & size for algorithm code and write
buffers -->
<param name="ramAddress" type="integer" value="0x20000000"/>
<param name="ramSize" type="integer" value="0x10000"/>
<!-- Allow timeouts to be disabled -->
<param name="disableTimeouts" type="string" value="false"/>
<!-- Set to false to skip the verification stage -->
<param name="verify" type="string" value="true"/>
</params>
</method_config>
<!-- Parameters for programming the option flash -->
<method_config id="Option">
<params>
<!-- Programming algorithm binary to load to target -->
<param name="algorithm" type="string" value="FDB://algorithms/
STM32F10x_OPT.FLM"/>
<!-- The core in the target to run the algorithm -->
<param name="coreName" type="string" value="Cortex-M3"/>
<!-- RAM location & size for algorithm code and write
buffers -->
<param name="ramAddress" type="integer" value="0x20000000"/>
<param name="ramSize" type="integer" value="0x10000"/>
<!-- Allow timeouts to be disabled -->
<param name="disableTimeouts" type="string" value="false"/>
<!-- Set to false to skip the verification stage -->
<param name="verify" type="string" value="true"/>
</params>
</method_config>
</method_configs>
</flash_config>
Related tasks
18.3 Creating an extension database for flash programming on page 18-562
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 18-561
reserved.
Non-Confidential
18 File-based Flash Programming in Arm® Development Studio
18.3 Creating an extension database for flash programming
Procedure
1. At your preferred location, create a new directory with the name of your choice for the extension
database.
2. In your new directory, create two subdirectories and name them Boards and Flash respectively.
a. In the Boards directory, create a subdirectory for the board manufacturer.
b. In the board manufacturer subdirectory, create another directory for the board.
c. In the Flash directory, create a subdirectory and name it Algorithms.
For example, for a manufacturer MegaSoc-Co who makes Acme-Board-2000, the directory
structure would look similar to this:
Boards
\---> MegaSoc-Co
\---> Acme-Board-2000
project_types.xml
Flash
\---> Algorithms
Acme-Board-2000.flm
Acme-Board-2000-Flash.py
3. From the main menu in Arm Development Studio, select Window > Preferences > Arm DS >
Configuration Database.
a. In the User Configuration Databases area, click Add.
b. In the Add configuration database location dialog box, enter the Name and Location of your
configuration database and click OK.
4. In the Preferences dialog box, click OK to confirm your changes.
In the project_types.xml file for your platform, any reference to a CDB:// location will resolve to
the Boards/<manufacturer>/<board> directory and any reference to a FDB:// location will resolve
to the Flash directory.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 18-562
reserved.
Non-Confidential
18 File-based Flash Programming in Arm® Development Studio
18.4 About using or extending the supplied Arm Keil® flash method
18.4 About using or extending the supplied Arm Keil® flash method
Arm Debugger contains a full implementation of the Keil flash programming method. This might be
used to program any flash device supported by the Keil MDK product. It might also be used to support
any future device for which a Keil flash programming algorithm can be created.
For details on creating new Keil Flash Programming algorithms (these links apply to the Keil µVision®
product), see:
Algorithm Functions
Creating New Algorithms
To help with the creation of new Keil flash programming algorithms in Arm Development Studio, Arm
Debugger contains a full platform flash example for the Keil MCBSTM32E board. This can be used as a
template for new flash support.
Note
An example, flash_example-FVP-A9x4, is provided with Arm Development Studio. This example
shows two ways of programming flash devices using Arm Development Studio, one using a Keil Flash
Method and the other using a Custom Flash Method written in Jython. For convenience, the Cortex-
A9x4 FVP model supplied with Arm Development Studio is used as the target device. This example can
be used as a template for creating new flash algorithms. The readme.html provided with the example
contains basic information on how to use the example.
This section describes how to add flash support to an existing platform using an existing Keil flash
program, and how to add flash support to an existing platform using a new Keil flash algorithm.
This section contains the following subsections:
• 18.4.1 Adding flash support to an existing platform using an existing Keil® flash algorithm
on page 18-563.
• 18.4.2 Adding flash support to an existing target platform using a new Keil® flash algorithm
on page 18-564.
18.4.1 Adding flash support to an existing platform using an existing Keil® flash algorithm
To use the Keil MDK flash algorithms within Arm Development Studio, the algorithm binary needs to be
imported into the target configuration database and the flash configuration files created to reference the
keil_flash.py script.
This example uses the flash configuration for the Keil MCBSTM32E board example in Flash
programming configuration as a template to add support to a board called the Acme-Board-2000 made
by MegaSoc-Co.
Procedure
1. Copy the algorithm binary .FLM into your configuration database Flash/Algorithms directory.
2. Copy the flash configuration file from Boards/Keil/MCBSTM32E/keil-mcbstm32e_flash.xml to
Boards/MegaSoc-Co/Acme-Board-2000/flash.xml.
3. Edit the platform's project_types.xml to reference the flash.xml file by inserting
<flash_config>CDB://flash.xml</flash_config> below platform_data entry, for example:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 18-563
reserved.
Non-Confidential
18 File-based Flash Programming in Arm® Development Studio
18.4 About using or extending the supplied Arm Keil® flash method
4. Edit the devices section, and create a <device> block for each flash device on the target.
Note
The method_config attribute should refer to a unique <method_config> block for that device in the
<method_configs> section.
5. Optionally, create and then reference any setup or teardown script required for your board. If your
board does not need these, then do not add these lines to your configuration.
<setup script="FDB://Acme-Board-2000-Flash.py" method="setup"/>
6. Edit the method_configs section, creating a <method_config> block for each device.
Note
• The value for the algorithm parameter should be changed to the path to the algorithm copied in
Step 1. The FDB:// prefix is used to indicate the file can be found in the configuration database
Flash directory.
• The coreName parameter must be the name of the core on the target that runs the algorithm. This
must be the same name as used in the <core> definition within project_types.xml. For
example, <core connection_id ="Cortex-M3" core_definition ="Cortex-M3"/>.
• The ramAddress and ramSize parameters should be set to an area of RAM that the algorithm can
be downloaded in to and used as working RAM. It should be big enough to hold the algorithm,
stack plus scratch areas required to run the algorithm, and a sufficiently big area to download
image data. The other parameters do not normally need to be changed.
18.4.2 Adding flash support to an existing target platform using a new Keil® flash algorithm
Arm Development Studio ships with a complete Keil flash algorithm example for the STM32 device
family. You can use this as a template for creating and building your new flash algorithm.
Locate the Bare-metal_examples_Armv7.zip file within the <installation_directory>/examples
directory. Extract it to your file system and then import the examples/flash_algo-STM32F10x project
into your Arm Development Studio workspace.
Using this as your template, create a new project, copy the content from the example into your new
project, and modify as needed.
When you have successfully built your .FLM file(s), follow the instructions in the Adding flash support to
an existing platform using an existing Keil flash algorithm topic.
Related tasks
18.4.1 Adding flash support to an existing platform using an existing Keil® flash algorithm
on page 18-563
Related tasks
18.4.1 Adding flash support to an existing platform using an existing Keil® flash algorithm
on page 18-563
Related references
18.4.2 Adding flash support to an existing target platform using a new Keil® flash algorithm
on page 18-564
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 18-564
reserved.
Non-Confidential
18 File-based Flash Programming in Arm® Development Studio
18.5 About creating a new flash method
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 18-565
reserved.
Non-Confidential
18 File-based Flash Programming in Arm® Development Studio
18.5 About creating a new flash method
def setup(self):
# perform any setup for the method here
pass
def teardown(self):
# perform any clean up for the method here
# return the target status
return TargetStatus.STATE_RETAINED
Note
• The __init__ function is the constructor and is called when the class instance is created.
• methodServices allows the method to make calls into the flash programmer - it must not be accessed
directly.
• FlashMethodv1 provides functions that the method can call while programming.
• The program() and teardown() methods must return a value that describes the state the target has
been left in.
This can be one of:
— STATE_RETAINED - The target state has not been altered from the state when programming started.
In this state, the register and memory contents have been preserved or restored.
— STATE_LOST - Register and memory contents have been altered, but a system reset is not required.
— RESET_REQUIRED - It is recommended or required that the target be reset.
— POWER_CYCLE_REQUIRED - It is required that the target be manually power cycled. For example,
when a debugger-driven reset is not possible or not sufficient to reinitialize the target.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 18-566
reserved.
Non-Confidential
18 File-based Flash Programming in Arm® Development Studio
18.5 About creating a new flash method
<flash_config
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.arm.com/flash_config"
xsi:schemaLocation="http://www.arm.com/flash_config flash_config.xsd">
<devices>
<device name="Example">
<regions>
<region address="0x8000" size="0x10000">
</regions>
<programming_type type="FILE">
<method language="JYTHON" script="FDB://example_flash.py"
class="ExampleFlashWriter" method_config="Default"/>
<setup script="FDB://file_target.py" method="setup"/>
<teardown script="FDB://file_target.py" method="teardown"/>
</programming_type>
</device>
</devices>
<method_configs>
<method_config id="Default">
<params>
<!-- Use last 2K of RAM -->
<param name="ramAddress" type="integer" value="0x00100000"/>
<param name="ramSize" type="integer" value="0x800"/>
</params>
</method_config>
</method_configs>
</flash_config>
• The flash_config tag defines used XML spaces and schema. This does not usually need to be
changed. Under the flash_config tag, a devices tag is required. This contains a number of device
tags, each representing one flash device on the target. The device tag defines the name of the device -
this is the name reported by the info flash command and is used only when programming to a
specific device. It also defines a number of regions where the flash device appears in the target's
memory - the addresses of each region are matched against the address of each load region of the
image being programmed.
• The programming_type tag defines the programming method and setup/teardown scripts to be used
for a flash programming operation. Currently, only FILE is supported.
• The method tag defines the script which implements the programming method. Currently, only
JYTHON is supported for the language attribute. The script and class attributes define which script file
to load and the name of the class that implements the programming method within the script. The
method_config attributes define which set of parameters are used by the device. This allows multiple
devices to share a set of parameters.
• The programming_type may also have optional setup and teardown tags. These define a script and a
method within that script to call before or after flash programming.
• Within the method_configs tag, the parameters for each device are contained within method_config
tags.
• Parameters must have a unique name and a default value. You can override the value passed to the
method. See the help for the flash load command in Arm Debugger.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 18-567
reserved.
Non-Confidential
18 File-based Flash Programming in Arm® Development Studio
18.5 About creating a new flash method
• Where the configuration file references another file, for example, the script files, the FDB:// prefix
indicates that the file is located in the Flash subdirectory of the configuration database. If there are
multiple databases, then the Flash subdirectory of each database is searched until the file is found.
• The last file that needs to be changed is the project_types.xml file in the target's directory to tell
Arm Development Studio that the flash configuration can be found in the file created above. The
following line must be added under the top-level platform_data tag: <flash_config>CDB://
flash.xml</flash_config> The CDB:// prefix tells Arm Development Studio that the flash.xml
file is located in the same directory as the project_types.xml file.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 18-568
reserved.
Non-Confidential
18 File-based Flash Programming in Arm® Development Studio
18.6 About testing the flash configuration
Note
If Arm Development Studio is already open and project_types.xml is changed, it will be necessary to
rebuild the configuration database.
Within Arm Debugger, connect to your target system and enter info flash into the Commands view.
You should get an output similar to:
info flash
MainFlash
regions: 0x8000000-0x807FFFF
parameters: programPageTimeout: 100
driverVersion: 257
programPageSize: 0x400
eraseSectorTimeout: 500
sectorSizes: ((0x800, 0x00000000))
valEmpty: 0xff
type: 1
size: 0x00080000
name: STM32F10x High-density Flash
address: 0x08000000
algorithm: FDB://algorithms/STM32F10x_512.FLM
coreName: Cortex-M3
ramAddress: 0x20000000
ramSize: 0x10000
disableTimeouts: false
verify: true
You can test the flash programming operation by attempting to program with a test ELF file.
flash load flashyprogram.axf
Note
You can use any ELF ( .axf ) file which contains data within the configured address range.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 18-569
reserved.
Non-Confidential
18 File-based Flash Programming in Arm® Development Studio
18.7 About flash method parameters
Note
You can override the parameters from the Arm Development Studio command line.
The programming method can obtain the value of the parameters with:
• getParameter(name) returns the value of a parameter as a string. The method can convert this to
another type, such as integers, as required. None is returned if no value is set for this parameter.
• getParameters() returns a map of all parameters to values. Values can then be obtained with the []
operator.
For example:
def setup(self):
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 18-570
reserved.
Non-Confidential
18 File-based Flash Programming in Arm® Development Studio
18.8 About getting data to the flash algorithm
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 18-571
reserved.
Non-Confidential
18 File-based Flash Programming in Arm® Development Studio
18.9 About interacting with the target
Note
An example, flash_example-FVP-A9x4 , is provided with Arm Development Studio. This example
shows two ways of programming flash devices using Arm Development Studio, one using a Keil Flash
Method and the other using a Custom Flash Method written in Jython. For convenience, the Cortex-
A9x4 FVP model supplied with Arm Development Studio is used as the target device. This example can
be used as a template for creating new flash algorithms. The readme.html provided with the example
contains basic information on how to use the example.
def teardown(self):
if self.deviceOpened:
# close device connection if opened by this script
self.dev.closeConn()
Reading/writing memory
The core's memory can be accessed using the memWrite(), memFill(), and memRead() functions of the
dev object (IDevice).
from com.arm.rddi import RDDI
...
def program(self):
...
self.dev.memFill(0, addr, RDDI_ACC_SIZE.RDDI_ACC_WORD,
RDDI.RDDI_MRUL_NORMAL, False, words, 0)
self.dev.memWrite(0, addr, RDDI_ACC_SIZE.RDDI_ACC_WORD,
RDDI.RDDI_MRUL_NORMAL, False, len(buf), buf)
...
def verify(self):
...
readBuf = zeros(len(buf), 'b')
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 18-572
reserved.
Non-Confidential
18 File-based Flash Programming in Arm® Development Studio
18.9 About interacting with the target
Utility routines to make the method code clearer are provided in device_memory:
from flashprogrammer.device_memory import writeToTarget, readFromTarget
...
def program(self):
...
writeToTarget(self.dev, address, buf)
...
def verify(self):
...
readBuf = readFromTarget(self.dev, addr, count)
...
Note
You must be careful to only pass integer values and not long values.
These registers are accessed by using numeric IDs. These IDs are target specific. For example, R0 is
register 1 on a Cortex‑A device, but register 0 on a Cortex‑M device.
execution.py provides functions that map register names to numbers and allow reading or writing by
name.
• writeRegs(device, regs) writes a number of registers to a device. regs is a list of (name, value)
pairs.
For example:
writeRegs (self.dev, [ ("R0", 0), ("R1", 1234), ("PC", 0x8000) ]
For example:
value = readReg ("R0")
To request the core to stop and wait for the stop status event to be received, and raise an error if no event
is received before timeout elapses stopDevice(device, timeout=1.0)
• To check the device's status and calls stopDevice() if it is not stopped.
ensureDeviceStopped(device, timeout=1.0):
• To start the core and wait for it to stop, forces the core to stop and raise an error if it doesn't stop
before timeout elapses. The caller must set the registers appropriately and have set a breakpoint or
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 18-573
reserved.
Non-Confidential
18 File-based Flash Programming in Arm® Development Studio
18.9 About interacting with the target
vector catch to cause the core to stop at the desired address. runAndWaitForStop(device,
timeout=1.0):
• To set a software breakpoint at addr, start the core and wait for it to stop by calling
runAndWaitForStop(). The caller must set the registers appropriately. runToBreakpoint(device,
addr, bpFlags = RDDI.RDDI_BRUL_STD, timeout=1.0):
Flash programming algorithms are often implemented as functions that are run on the target itself. These
functions may take parameters where the parameters are passed through registers.
funcCall() allows methods to call functions that follow AAPCS (with some restrictions):
If the algorithm binary was linked as position independent, the addresses of the symbols are relative to
the load address and this offset should be applied when running the code on the target:
programAddr += algoAddr
Progress reporting
Flash programming can be a slow process, so it is desirable to have progress reporting features. The
method can do this by calling operationStarted(). This returns an object with functions:
• progress() - update the reported progress.
• complete() - report the operation as completed, with a success or failure.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 18-574
reserved.
Non-Confidential
18 File-based Flash Programming in Arm® Development Studio
18.9 About interacting with the target
Progress reporting can be added to the program() function in the previous example:
def program(self, regionID, offset, data):
# calculate the address to write to
region = self.getRegion(regionID)
addr = region.getAddress() + offset
# Report progress, assuming erase takes 20% of the time, program 50%
# and verify 30%
progress = self.operationStarted(
'Programming 0x%x bytes to 0x%08x' % (data.getSize(), addr),
100)
self.doErase(addr, data.getSize())
progress.progress('Erasing completed', 20)
self.doWrite(addr, data)
progress.progress('Writing completed', 20+50)
self.doVerify(addr, data)
progress.progress('Verifying completed', 20+50+30)
progress.completed(OperationResult.SUCCESS, 'All done')
The above example only has coarse progress reporting, only reporting at the end of each phase. Better
resolution can be achieved by allowing each sub-task to have a progress monitor. subOperation()
creates a child progress monitor.
Care should be taken to ensure completed() is called on the progress monitor when an error occurs.
Arm recommends you place a try: except: block around the code after a progress monitor is created.
import java.lang.Exception
Note
import java.lang.Exception - If you omit import and a Java exception is thrown, you may get a
confusing error report from Jython indicating that it cannot find the Java namespace. Further, the python
line location indicated as the source of the error will not be accurate.
Cancellation
If you wish to abort a long-running flash operation, programming methods can call isCancelled() to
check if the operation is canceled. If this returns true, the method stops programming.
Note
The teardown() functions are still called.
Messages
The programming method can report messages by calling the following:
• warning() - reports a warning message.
• info() - reports an informational message.
• debug() - reports a debug message - not normally displayed.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 18-575
reserved.
Non-Confidential
18 File-based Flash Programming in Arm® Development Studio
18.9 About interacting with the target
This searches paths of all flash subdirectories of every configuration database configured in Arm
Development Studio.
For example:
<installation_directory>/sw/debugger/configdb/Flash/
c:\MyDB\Flash
Error handling
Exceptions are thrown when errors occur. Errors from the API calls made by the programming method
will be com.arm.debug.flashprogrammer.FlashProgrammerException (or derived from this).
Methods may also report errors using Python's raise keyword. For example, if verification fails:
# compare contents
If a programming method needs to ensure that a cleanup occurs when an exception is thrown, the
following code forms a template:
import java.lang.Exception
...
try:
# Do programming
except (Exception, java.lang.Exception), e:
# exceptions may be derived from Java Exception or Python Exception
# report failure to progress monitor and rethrow
# Handle errors here
# Rethrow original exception
raise
finally:
# This is always executed on success or failure
# Close resources here
class RunProgrammer(FlashMethodv1):
def __init__(self, methodServices):
FlashMethodv1.__init__(self, methodServices)
progress = self.operationStarted(
'Programming 0x%x bytes with command %s' % (data.getSize(), ' '.join(cmd)),
100)
try:
# Get the path of the image file
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 18-576
reserved.
Non-Confidential
18 File-based Flash Programming in Arm® Development Studio
18.9 About interacting with the target
file = data.getUnderlyingFile().getCanonicalPath()
# run command
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE)
out, err = proc.communicate()
progress.progress('Completed', 100)
progress.completed(OperationResult.SUCCESS, 'All done')
return TargetStatus.STATE_RETAINED
os.environ can be used to lookup environment variables, for example, the location of a target's
toolchain:
programmerTool = os.path.join(os.environ['TOOLCHAIN_INSTALL'], 'flashprogrammer')
dev.setProcBreak("RSET")
dev.systemReset(0)
# TODO: wait for stop!
dev.clearProcBreak("RSET")
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 18-577
reserved.
Non-Confidential
18 File-based Flash Programming in Arm® Development Studio
18.9 About interacting with the target
Programming methods can extend any information in the flash configuration file (if any) with address
regions and parameters for the method by overriding a pair of class methods - getDefaultRegions()
and getDefaultParameters().
getDefaultParameters().
...
class ProgrammingMethod(FlashMethodv1):
...
def getDefaultRegions(self):
return [ FlashRegion(0x00100000, 0x10000), FlashRegion(0x00200000, 0x10000) ]
def getDefaultParameters(self):
params = {}
params['param1'] = "DefaultValue1"
params['param2'] = "DefaultValue2"
return params
The above code defines two 64kB regions at 0x00100000 and 0x00200000 . Regions supplied by this
method are only used if no regions are specified for the device in the configuration file. The above code
defines 2 extra parameters. These parameters are added to the parameters in the flash configuration. If a
parameter is defined in both, the default value in the flash configuration file is used. This region and
parameter information can be extracted from the algorithm binary itself (rather than being hard-coded as
in the above example). The Keil algorithm images contain a data structure defining regions covered by
the device and the programming parameters for the device. The Keil programming method loads the
algorithm binary (specified by a parameter in the configuration file) and extracts this information to
return in these calls.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 18-578
reserved.
Non-Confidential
18 File-based Flash Programming in Arm® Development Studio
18.10 Flash multiple images for CMSIS connections
Prerequisites
You require:
• A target that has writable flash regions.
• A CMSIS pack for your target.
• Single or multiple AXF images (.axf) that you want to load on to your target.
• An existing CMSIS C/C++ Application configuration. The Debug Configurations dialog box for a
CMSIS C/C++ Application configuration contains four tabs:
— Connection - Specify the probe type and connection address.
— Advanced - Specify the images to flash to the target, including the reset options.
— Flash - Specify the flash algorithms and download options.
— OS Awareness - target-dependent. Arm Debugger has debug symbols that are loaded for certain
OSs. See About OS awareness on page 10-205 for details.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 18-579
reserved.
Non-Confidential
18 File-based Flash Programming in Arm® Development Studio
18.10 Flash multiple images for CMSIS connections
Procedure
1. Open the Advanced tab:
a. Add a new image by clicking the green + button. The Add new image dialog box opens, where
you can select an .axf image from your filesystem or from your workspace.
Note
Any image found within the CMSIS C/C++ application project is automatically added to the table
when you first open the dialog box.
b. When the image is added to the table, use the checkboxes to:
• Select Download to tell Arm Debugger to load the image on to the target. If you do not select
this option, only the debug symbols are loaded.
Note
Arm recommends that you select Download for all or none of your images. If some images
are set to download and some are not, previously loaded image sections might get overwritten
or cleared when you flash the target. If there is a danger of this happening, a warning message
is shown at the top of the dialog box.
• Select the primary image. This tells the debugger which of the images in the table provides the
entry point, providing you have selected Debug from entry point.
Note
You must only have one primary image.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 18-580
reserved.
Non-Confidential
18 File-based Flash Programming in Arm® Development Studio
18.10 Flash multiple images for CMSIS connections
Figure 18-3 Screenshot of the CMSIS configuration Advanced tab dialog box
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 18-581
reserved.
Non-Confidential
18 File-based Flash Programming in Arm® Development Studio
18.10 Flash multiple images for CMSIS connections
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 18-582
reserved.
Non-Confidential
Chapter 19
Writing OS Awareness for Arm® Debugger
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 19-583
reserved.
Non-Confidential
19 Writing OS Awareness for Arm® Debugger
19.1 About Writing operating system awareness for Arm® Debugger
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 19-584
reserved.
Non-Confidential
19 Writing OS Awareness for Arm® Debugger
19.2 Creating an OS awareness extension
Note
You can create a new OS awareness extension by directly modifying the configuration database in the
Arm Development Studio installation folder with appropriate access privileges, but this is not
recommended.
1. Create a new configuration database folder on your workstation, containing an empty folder named
OS (upper case):
<some folder>
/mydb
/OS
2. In Window > Preferences> Arm DS > Configuration Database, click Add.
3. In the Add configuration database location dialog box, enter the path to mydb.
4. Now, add the OS awareness extension in mydb/OS. To do so, create a new folder named myos
containing the following files:
<some folder>
/mydb
/OS
/myos
/extension.xml
/messages.properties
As explained earlier, extension.xml declares the OS awareness extension. The schema describing
the structure of file extension.xml can be found in the Arm Development Studio installation folder
at sw/debugger/configdb/Schemas/os_extension.xsd.
The file messages.properties contains all user-visible strings. The file format is documented here:
messages.properties format
Having user-visible strings in a separate file allows them to be translated. The debugger searches for
translations in the following order in the named files:
• First messages_<language code>_<countrycode>.properties,
• Then messages_<language code>.properties,
• And finally in messages.properties.
Language and country codes are defined here respectively:
• http://www.loc.gov/standards/iso639-2/englangn.html
• http://www.iso.ch/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html
5. Consider the following content to start adding support for myos:
• extension.xml
<?xml version="1.0" encoding="UTF-8"?>
<os id="myos" version="5.15" xmlns="http://www.arm.com/os_extension">
<name>myos.title</name>
<description>myos.desc</description>
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 19-585
reserved.
Non-Confidential
19 Writing OS Awareness for Arm® Debugger
19.2 Creating an OS awareness extension
Note
The version attribute in the os element refers to the API version, which is aligned with the version
of Arm Development Studio that the API was made public with. You must set the version attribute
to the Arm Development Studio version that the OS awareness extension was developed in, or the
lowest version that it was tested with. The debugger does not display any extensions that require a
higher version number. However, as the API is backwards compatible, the debugger displays
extensions with earlier API versions.
The OS awareness API in Arm Development Studio is backwards compatible with versions of the OS
awareness API in DS-5. The OS Awareness API versioning scheme in DS-5 matches the DS-5
product versions. With this in mind, the earliest API version is 5.15.
• messages.properties
myos.title=My OS
myos.desc=This is My OS.
myos.help=Displays information about My OS.
This implementation is sufficient for the OS awareness extension to appear in the Arm DS Debug
Configuration, even though it is not complete and would cause errors if it is used for an actual
debugger connection at this stage.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 19-586
reserved.
Non-Confidential
19 Writing OS Awareness for Arm® Debugger
19.3 Implementing the OS awareness API
Note
A Python implementation does not require any particular build or compilation environment, as opposed
to a Java implementation. However, investigating problems within Python code is more difficult. You are
advised to read the Programming advice and noteworthy information on page 19-596 section before
starting to write your own Python implementation.
The detailed Java interfaces to implement are available in the Arm DS installation folder under sw/ide/
plugins, within the com.arm.debug.extension.source_<version>.jar file.
Note
You are encouraged to read the Javadoc documentation on Java interfaces as it contains essential
information that is not presented here.
The Java interface of immediate interest at this point is IOSProvider, in the package
com.arm.debug.extension.os. This interface must be implemented by the provider instance that was
left out with a todo comment in extension.xml.
First, add the simplest implementation to the configuration database entry:
<some folder>
/mydb
/OS
/myos
/extension.xml
/messages.properties
/provider.py
• extension.xml
def isOSInitialised(debugger):
return False
def getOSContextProvider():
return None
def getDataModel():
return None
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 19-587
reserved.
Non-Confidential
19 Writing OS Awareness for Arm® Debugger
19.3 Implementing the OS awareness API
This is enough to make the OS awareness implementation valid. A debug configuration with this OS
awareness selected works, although this does not add anything on top of a plain bare-metal connection.
However, this illustrates the logical lifecycle of the OS awareness:
1. Ensure debug information for the OS is available. On loading symbols, the debugger calls
areOSSymbolsLoaded(); the implementation returns true if it recognizes symbols as belonging to
the OS, enabling the next callback.
2. Ensure the OS is initialized. Once the symbols for the OS are available, the debugger calls
isOSInitialised(), immediately if the target is stopped or whenever the target stops next. This is
an opportunity for the awareness implementation to check that the OS has reached a state where
threads and other data structures are ready to be read, enabling the next two callbacks.
3. Retrieve information about threads and other data structures. Once the OS is initialized, the debugger
calls out to getOSContextProvider() and getDataModel() to read information from the target. In
reality, the debugger may call out to getOSContextProvider() and getDataModel() earlier on, but
does not use the returned objects to read from the target until areOSSymbolsLoaded() and
isOSInitialised() both returned true.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 19-588
reserved.
Non-Confidential
19 Writing OS Awareness for Arm® Debugger
19.4 Enabling the OS awareness
def areOSSymbolsLoaded(debugger):
return debugger.symbolExists("tasks") \
and debugger.symbolExists("scheduler_running")
def isOSInitialised(debugger):
try:
result = debugger.evaluateExpression("scheduler_running")
return result.readAsNumber() == 1
except DebugSessionException:
return False
def getOSContextProvider():
return None
def getDataModel():
return None
The osapi module in the import statement at the top of provider.py is a collection of wrappers around
Java objects and utility functions. The file osapi.py itself can be found in JAR file
com.arm.debug.extension_<version>.jar.
Connecting to a running target and loading symbols manually for the OS shows both
areOSSymbolsLoaded() and isOSInitialised() stages distinctly.
On connecting to the target running the OS, without loading symbols, the Debug Control view displays
Waiting for symbols to be loaded.
• After loading symbols for the OS, with the target still running, the Debug Control view now displays
Waiting for the target to stop. At this point, areOSSymbolsLoaded() has been called and returned
true, and the debugger is now waiting for the target to stop to call isOSInitialised().
• As soon as the target is stopped, the Debug Control view updates to show the OS awareness is
enabled. At this point, isOSInitialised() has been called and returned true.
Both the Active Threads and All Threads folders are always empty until you implement thread
awareness using getOSContextProvider().
Note
You can show the Cores folder by enabling the Always Show Cores option in the View Menu of the
Debug Control view.
• Another case is where areOSSymbolsLoaded() returns true but isOSInitialised() returns false.
This can happen, for instance, when connecting to a stopped target, loading both the kernel image to
the target and associated symbols in the debugger and starting debugging from a point in time earlier
than the OS initialization, for example, debugging from the image entry point.
In this case, the Debug Control view shows Waiting for the OS to be initialised as
scheduler_running is not set to 1 yet, but symbols are loaded.
Without the call to isOSInitialised() the debugger lets the awareness implementation start reading
potentially uninitialized memory, which is why this callback exists. The debugger keeps calling back
to isOSInitialised() on subsequent stops until it returns true, and the OS awareness can finally be
enabled.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 19-589
reserved.
Non-Confidential
19 Writing OS Awareness for Arm® Debugger
19.5 Implementing thread awareness
UNINITIALIZED = 0,
READY
} tstatus_t ;
typedef struct {
uint32_t id;
char *name;
volatile tstatus_t status;
uint32_t stack[STACK_SIZE];
uint32_t *sp;
} task_t;
And assuming the OS always stores the currently running task at the first element of the tasks array,
further callbacks can be implemented to return the currently running (or scheduled) task and all the tasks
(both scheduled and unscheduled) in a new contexts.py file:
<some folder>
/mydb
/OS
/myos
/extension.xml
/messages.properties
/provider.py
/contexts.py
• provider.py
def areOSSymbolsLoaded(debugger):
[...]
def isOSInitialised(debugger):
[...]
def getOSContextProvider():
# returns an instance of the Java interface IOSContextProvider
return ContextsProvider()
def getDataModel():
[...]
• contexts.py
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 19-590
reserved.
Non-Confidential
19 Writing OS Awareness for Arm® Debugger
19.5 Implementing thread awareness
Although getOSContextSavedRegister() is not yet implemented, this is enough for the debugger to
now populate the Debug Control view with the OS tasks as soon as the OS awareness is enabled.
Decoding the call stack of the currently running task and inspecting local variables at specific stack
frames for that task works without further changes since the task's registers values are read straight from
the core's registers. For unscheduled tasks, however, getOSContextSavedRegister() must be
implemented to read the registers values saved by the OS on switching contexts. How to read those
values depends entirely on the OS context switching logic.
Here is the implementation for myos, based on a typical context switching routine for M-class Arm
processors where registers are pushed onto the stack when a task is switched out by the OS scheduler:
from osapi import ExecutionContext
from osapi import ExecutionContextsProvider
if name == "SP":
# SP itself isn't pushed onto the stack: return its computed value
return debugger.evaluateExpression("(long)" + str(addr))
else:
# for any other register, return the value at the computed address
return debugger.evaluateExpression("(long*)" + str(addr))
return context
The debugger can now get the values of saved registers, allowing unwinding the stack of unscheduled
tasks.
Note
Enter info threads in the Commands view to display similar thread information as displayed in the
Debug Control view.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 19-591
reserved.
Non-Confidential
19 Writing OS Awareness for Arm® Debugger
19.6 Implementing data views
This section demonstrates how to implement a view, listing the tasks, including all available information.
The following additions to the implementation creates an empty Tasks table in the OS Data view:
<some folder>
/mydb
/OS
/myos
/extension.xml
/messages.properties
/provider.py
/contexts.py
/tasks.py
• provider.py
def areOSSymbolsLoaded(debugger):
[...]
def isOSInitialised(debugger):
[...]
def getOSContextProvider():
[...]
def getDataModel():
# returns an instance of the Java interface IDataModel
return Model("myos", [Tasks()])
• messages.properties
myos.title=My OS
myos.desc=This is My OS.
myos.help=Displays information about My OS.
tasks.title=Tasks
tasks.desc=This table shows all tasks, including uninitialized ones
tasks.help=Displays tasks defined within the OS and their current status.
tasks.id.title=Task
tasks.id.desc=The task identifier
tasks.name.title=Name
tasks.name.desc=The task name
tasks.status.title=Status
tasks.status.desc=The task status
tasks.priority.title=Priority
tasks.priority.desc=The task priority
tasks.sp.title=Stack pointer
tasks.sp.desc=This task's stack address
• tasks.py
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 19-592
reserved.
Non-Confidential
19 Writing OS Awareness for Arm® Debugger
19.6 Implementing data views
The createField and Table.__init__() functions automatically build up the keys to look for at run-
time in the messages.properties file. Any key that is not found in messages.properties is printed as
is.
The above modifications create a new empty Tasks table.
To populate the table, getRecords() in tasks.py must be implemented:
from osapi import Table
from osapi import createField
from osapi import createNumberCell, createTextCell, createAddressCell
from osapi import DECIMAL, TEXT, ADDRESS
if (members["status"].readAsNumber() == 0):
status = "Uninitialized"
name = None
sp = None
priority = None
else:
if (first):
status = "Running"
else:
status = "Ready"
name = members["name"].readAsNullTerminatedString()
sp = members["sp"].readAsAddress()
priority = members["priority"].readAsNumber()
cells = [createNumberCell(id),
createTextCell(name),
createTextCell(status),
createNumberCell(priority),
createAddressCell(sp)]
return self.createRecord(cells)
return records
Note
The debugger command info myos tasks prints the same information in the Commands view.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 19-593
reserved.
Non-Confidential
19 Writing OS Awareness for Arm® Debugger
19.7 Advanced OS awareness extension
The extension.xml file declares the OS awareness extension, as described in Creating an OS awareness
extension on page 19-585. You can define the additional parameters by adding to the os element in
extension.xml using the syntax that this example shows:
For this example, you must also add the following to message.properties:
myos.param.my_setting.desc=My setting
myos.param.my_setting.help=This is my setting
myos.param.my_setting.enabled=Enabled
myos.param.my_setting.disabled=Disabled
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 19-594
reserved.
Non-Confidential
19 Writing OS Awareness for Arm® Debugger
19.7 Advanced OS awareness extension
name
The string used to identify it within the debugger. The string can contain alphanumeric
characters a - z, A - Z and 0 - 9. The string can also contain - and _ but must not contain
whitespace or any other special characters. The string must be unique among other parameters.
description
The localizable string shown in the GUI.
Arm Debugger shows these settings in the OS Awareness tab in the Debug Configurations dialog box
Note
When using the command-line debugger the parameter is set to its default value initially. It is then
possible to manually change it after connecting to the target.
The parameters can be read from the OS awareness API using the getConnectionSetting method, for
example debugger.getConnectionSetting("os my-setting"). This returns the name string of the
selected value, or throws a DebugSessionException if the parameter does not exist.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 19-595
reserved.
Non-Confidential
19 Writing OS Awareness for Arm® Debugger
19.8 Programming advice and noteworthy information
• Any errors in the parts of the OS awareness logic which provide information to the debugger's user
interface results in errors being logged to the Eclipse log. The log can be found in your workspace
as .metadata/.log. It contains full stack traces and timestamps for all such errors, including source
file locations.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 19-596
reserved.
Non-Confidential
Chapter 20
Debug and Trace Services Layer (DTSL)
Describes the Arm Debugger Debug and Trace Services Layer (DTSL).
DTSL is a software layer that sits between the debugger and the RDDI target access API. Arm Debugger
uses DTSL to:
• Create target connections.
• Configure the target platform to be ready for debug operations.
• Communicate with the debug components on the target.
As a power user of Arm Debugger, you might need to use DTSL:
• As part of new platform support.
• To extend the capabilities of Arm Debugger.
• To add support for custom debug components.
• To create your own Java or Jython programs which interact with your target.
It contains the following sections:
• 20.1 Additional DTSL documentation and files on page 20-599.
• 20.2 Need for DTSL on page 20-600.
• 20.3 Arm® Development Studio configuration database on page 20-605.
• 20.4 DTSL as used by Arm® Debugger on page 20-611.
• 20.5 Main DTSL classes and hierarchy on page 20-613.
• 20.6 DTSL options on page 20-622.
• 20.7 DTSL support for SMP and AMP configurations on page 20-628.
• 20.8 DTSL Trace on page 20-632.
• 20.9 Embedded Logic Analyzer (ELA) on page 20-640.
• 20.10 Using the ELA-500 on page 20-643.
• 20.11 Using the ELA-600 on page 20-645.
• 20.12 Extending the DTSL object model on page 20-650.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-597
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
• 20.13 Debugging DTSL Jython code within Arm® Debugger on page 20-655.
• 20.14 DTSL in stand-alone mode on page 20-659.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-598
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.1 Additional DTSL documentation and files
Also, make sure you have access to DTSLExamples.zip. This contains example DTSL code, in addition
to the Arm Development Studio configdb entries discussed in this document. This document assumes
that you have added the examples to your Arm Development Studio IDE by importing the projects
contained in this file.
Related information
Arm Architecture Reference Manual Armv7-A and Armv7-R edition
Arm Debug Interface Architecture Specification
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-599
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.2 Need for DTSL
Such systems are continuing to become more complicated as time goes on. For example, SoC designers
might want to use multiple sub-systems which are accessed through multiple DAPs, but which are linked
by multiple Cross Trigger Interfaces (CTIs) so that they can still be synchronized. Each sub-system
would have a similar design to that shown in the figure, but with shared CTIs and possibly shared TPIU.
Because system designs are so complicated, and vary so greatly, DTSL is designed to provide a layer of
abstraction between the details of a particular system and the tools which provide debugging
functionality to the user. For example, a debug tool using DTSL knows that there is a source of trace data
for a particular core, and can access that data, but does not have to handle the complexities of system
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-600
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.2 Need for DTSL
configuration and tool set-up in order to get that data. It does not have to know how to, for example,
program up CoreSight Funnels, collect trace data from a DSTREAM, or demultiplex the TPIU trace
protocol.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-601
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.2 Need for DTSL
From the bottom upwards, the components of the debug stack are:
RDDI-DEBUG API
The debugger uses this API as its standard native connection to a debug controller such as
DSTREAM, CADI Model, or gdbserver. There is an implementation of RDDI-DEBUG for each of
the supported types of debug controller.
RDDI-Router API
This API is identical to RDDI-DEBUG, but it is used to 'vector' the API calls to the appropriate
implementation. This is necessary because the debugger can support multiple connections and
connection types simultaneously.
jRDDI
This is a Java wrapper for the C RDDI-DEBUG API. It is not a true Java layer, but nominally it is
the lowest Java layer in the stack.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-602
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.2 Need for DTSL
In addition to the layers that existed before DTSL, the stack now contains a DTSL layer which does the
following:
• Handles system initialization and DTSL-level component creation. This is controlled by DTSL
Jython scripts, which are typically contained in a platform configuration database (configdb).
Note
Do not confuse DTSL Jython Scripting with Arm Debugger Jython Scripting. Both of them use
Jython, but they operate at different levels in the software stack. However, a Debugger Jython Script
can use DTSL functionality.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-603
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.2 Need for DTSL
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-604
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.3 Arm® Development Studio configuration database
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-605
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.3 Arm® Development Studio configuration database
d. Click the Add… button to add the location of the new configuration database to the User
Configuration Databases list.
e. If you have modified any of the XML files in a configdb directory, you must tell Arm
Development Studio to rebuild the database by clicking the Rebuild database… button on the
Arm Development Studio Configuration Database preferences panel.
project_types.xml
This is the main XML file which describes the platform entry to Arm Development Studio.
keil-mcbstm32e.py
This is the DTSL platform configuration and setup script, implemented in Jython.
keil-mcbstm32e.rvc
This is the DSTREAM RDDI configuration file for the platform. This file can have an extension
of either .rcf or .rvc. The Arm Development Studio Platform Configuration Editor usually
creates this file.
keil-mcbstm32e_flash.xml
This contains information on flash devices and algorithms, and their configuration parameters.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-606
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.3 Arm® Development Studio configuration database
The XML file declares a BARE_METAL project type. BARE_METAL is a term which describes a system not
running an OS, where the debug connection takes full control of the core. The file declares an execution
environment within the project type, and declares debug activities within that execution environment.
The code here shows only one debug activity, but each execution environment can declare several debug
activities. The debug activity shown here is a debug and trace session using a DSTREAM target
connection.
When Arm Development Studio displays the debug session launcher dialog box, it scans the entire
configdb and builds a list of supported manufacturers and boards, and the supported project types and
debug activities, and lets the user choose which one they want to use. In the following example, the user
is assumed to have chosen the highlighted debug activity. When Arm Debugger launches the debug
session, it creates a DTSL configuration and passes it the {config_file, dtsl_config_script,
dtsl_config} property set. These parameters are used as follows:
<config_file>
This value is passed to the RDDI-DEBUG connection DLL or so (Arm Development Studio
uses RDDI-DEBUG as its target connection interface, and RDDI-DEBUG needs this file to tell
it which devices are in the target system).
<dtsl_config_script>
This value tells DTSL which Jython script to use to create the DTSL configuration used by the
debugger.
<dtsl_config>
The DTSL Jython script can contain several system configurations, defined by Jython class
names which in turn are derived from the DTSLv1 object. This value tells DTSL which class to
create. The MCBSTM32E Jython script contains two such classes, one for a debug and trace
configuration and one for a debug-only configuration. The class name used for the highlighted
example is DSTREAMDebugAndTrace, so in this example a Jython class named
DSTREAMDebugAndTrace must exist in the dtsl_config_script.
Some of these entries have a file location prefix of CDB://. This indicates that the location is within the
platform directory in the configuration database.
DTSL creates an instance of the referenced Jython class, which causes the def __init__(self, root)
constructor to be run. After this constructor is run, the debugger expects to find a DTSL Device object
whose name is the same as the name given in the core setting in the debug activity. In this example,
therefore, the debugger expects to find a DTSL object named 'Cortex-M3', and it directs all debug
operation requests to this object.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-607
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.3 Arm® Development Studio configuration database
• The script is written in Jython. Jython is an implementation of the Python language which integrates
tightly with Java. The integration is tight enough to allow the following:
— A Jython script can contain Python classes which Java can use, and which appear to Java as
though they were Java classes.
— A Jython script can contain Python classes which can sub-class Java classes.
— A Jython script can create Java class instances and use them. This is why the script contains some
import statements which import Java classes. Many of these classes are from the
com.arm.debug.dtsl package.
• DTSL creates an instance of a class named DSTREAMDebugAndTrace.
• The constructor __init__ creates all the DTSL objects required for the connection.
• The RDDI-DEBUG API, which is the native API used by the debugger for target access, assigns each
device a unique device index number. The script contains lines which find the index number for a
named device and assign that number to a variable. The following is an example of such a line: devID
= self.findDevice("Cortex-M3") This line assigns the RDDI device index number for the named
device 'Cortex-M3' to the variable devID.
• The script creates a ResetHookedDevice object, derived from Device, with the name 'Cortex-M3'.
This is an example of how Jython can extend the standard DTSL Java classes by sub-classing them.
• The script creates an AHBCortexMMemAPAccessor and installs it into the Cortex-M3 object as a
memory filter. This is how a custom named memory space is added to the core. When a memory
access is requested with an address prefixed by 'AHB', the access is redirected to the
AHBCortexMMemAPAccessor object which, in this case, uses the CoreSight AHB-AP to access the
memory.
• The script creates DTSL objects for the CoreSight components in the SoC.
• The script creates a DSTREAMTraceCapture object, which the debugger uses to read trace data.
• The script declares a set of options which provide user configuration data for the script. The debug
session launcher panel displays these options so that they can be set before making a target
connection. After the constructor is called, DTSL passes the option values to the class by calling its
optionValuesChanged() method.
[snip]
class ResetHookedDevice(Device):
def __init__(self, root, devNo, name):
Device.__init__(self, root, devNo, name)
self.parent = root
def systemReset(self, resetType):
Device.systemReset(self, resetType)
# Notify root configuration
self.parent.postReset()
class DSTREAMDebugAndTrace(DTSLv1):
'''A top level configuration class which supports debug and trace'''
@staticmethod
def getOptionList():
'''The method which specifies the configuration options which
the user can edit via the launcher panel |Edit...| button
'''
return [
DTSLv1.tabSet(
name='options',
displayName='Options',
childOptions=[
DSTREAMDebugAndTrace.getTraceBufferOptionsPage(),
DSTREAMDebugAndTrace.getETMOptionsPage(),
DSTREAMDebugAndTrace.getITMOptionsPage()
]
)
]
@staticmethod
def getTraceBufferOptionsPage():
# If you change the position or name of the traceCapture
# device option you MUST modify the project_types.xml to
# tell the debugger about the new location/name
return DTSLv1.tabPage(
name='traceBuffer',
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-608
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.3 Arm® Development Studio configuration database
displayName='Trace Buffer',
childOptions=[
DTSLv1.enumOption(
name='traceCaptureDevice',
displayName='Trace capture method',
defaultValue='DSTREAM',
values=[
('none', 'No trace capture device'),
('DSTREAM', 'DSTREAM 4GB Trace Buffer')
]
),
DTSLv1.booleanOption(
name='clearTraceOnConnect',
displayName='Clear Trace Buffer on connect',
defaultValue=True
),
DTSLv1.booleanOption(
name='startTraceOnConnect',
displayName='Start Trace Buffer on connect',
defaultValue=True
),
DTSLv1.enumOption(
name='traceWrapMode',
displayName='Trace full action',
defaultValue='wrap',
values=[
('wrap', 'Trace wraps on full and continues to store data'),
('stop', 'Trace halts on full')
]
)
]
)
[snip]
def __init__(self, root):
'''The class constructor'''
# base class construction
DTSLv1.__init__(self, root)
# create the devices in the platform
self.cores = []
self.traceSources = []
self.reservedATBIDs = {}
self.createDevices()
self.setupDSTREAMTrace()
for core in self.cores:
self.addDeviceInterface(core)
def createDevices(self):
# create MEMAP
devID = self.findDevice("CSMEMAP")
self.AHB = CortexM_AHBAP(self, devID, "CSMEMAP")
# create core
devID = self.findDevice("Cortex-M3")
self.cortexM3 = ResetHookedDevice(self, devID, "Cortex-M3")
self.cortexM3.registerAddressFilters(
[AHBCortexMMemAPAccessor("AHB", self.AHB, "AHB bus accessed via AP_0")])
self.cores.append(self.cortexM3)
# create the ETM disabled by default - will enable with option
devID = self.findDevice("CSETM")
self.ETM = V7M_ETMTraceSource(self, devID, 1, "ETM")
self.ETM.setEnabled(False)
self.traceSources.append(self.ETM)
# ITM disabled by default - will enable with option
devID = self.findDevice("CSITM")
self.ITM = V7M_ITMTraceSource(self, devID, 2, "ITM")
#self.ITM = M3_ITM(self, devID, 2, "ITM")
self.ITM.setEnabled(False)
self.traceSources.append(self.ITM)
# TPIU
devID = self.findDevice("CSTPIU")
self.TPIU = V7M_CSTPIU(self, devID, "TPIU", self.AHB)
# DSTREAM
self.DSTREAM = DSTREAMTraceCapture(self, "DSTREAM")
self.DSTREAM.setTraceMode(DSTREAMTraceCapture.TraceMode.Continuous)
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-609
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.3 Arm® Development Studio configuration database
To display and modify the DTSL options before connecting, use the IDE launcher panel. To display and
modify the DTSL options during an Arm Development Studio debug session, use the command line or
the Debug Control view.
In Windows 10, the DTSL options values are persisted in your workspace under the directory C:\Users
\<user>\Documents\ArmDS_Workspace\.metadata\.plugins\com.arm.ds\DTSL. In this directory
there is a sub-directory for the platform, in which there is another sub-directory for the debug operation.
Within the debug operation directory there are one or more .dtslprops files, whose names match the
names option sets in the DTSL Options dialog box. These files are standard Java properties files. The
following is the default properties file for the Keil MCBSTM32E Platform, Bare Metal Project, Debug
and Trace Debug operation:
options.ETM.cortexM3coreTraceEnabled=true
options.ITM.itmTraceEnabled=true
options.ITM.itmTraceEnabled.itmowner=Target
options.ITM.itmTraceEnabled.itmowner.target.targetITMATBID=2
options.ITM.itmTraceEnabled.itmowner.debugger.DWTENA=true
options.ITM.itmTraceEnabled.itmowner.debugger.PRIVMASK.[15\:8]=true
options.ITM.itmTraceEnabled.itmowner.debugger.PRIVMASK.[23\:16]=true
options.ITM.itmTraceEnabled.itmowner.debugger.PRIVMASK.[31\:24]=true
options.ITM.itmTraceEnabled.itmowner.debugger.PRIVMASK.[7\:0]=true
options.ITM.itmTraceEnabled.itmowner.debugger.STIMENA=0xFFFFFFFF
options.ITM.itmTraceEnabled.itmowner.debugger.TSENA=true
options.ITM.itmTraceEnabled.itmowner.debugger.TSPrescale=none
options.traceBuffer.traceCaptureDevice.clearTraceOnConnect=true
options.traceBuffer.traceCaptureDevice.startTraceOnConnect=true
options.traceBuffer.traceCaptureDevice.traceWrapMode=wrap
options.traceBuffer.traceCaptureDevice=DSTREAM
The names of the options exactly match the name hierarchy defined in the DTSL script (see the full
DTSL script source code to create the configuration options).
When Arm Debugger displays the options, it calls the getOptionList() method in the DTSL
configuration class to retrieve a data description of the options. It matches these options with the
persisted values from the .dtslprops file and transforms this data into an interactive dialog type display
for the user. When the user saves the options, the .dtslprops file is updated. After the DTSL
configuration instance is created, DTSL calls the optionValuesChanged() method to inform the
instance of the configuration settings values. During the debug session, the user can change any option
which is marked with an isDynamic=True property.
Related references
20.6 DTSL options on page 20-622
Related concepts
20.3.1 Modifying Arm® Development Studio configdb on page 20-605
20.3.2 Configdb board files on page 20-606
20.3.3 About project_types.xml on page 20-606
20.3.4 About the keil-mcbstm32e.py script on page 20-607
20.3.5 DTSL script on page 20-609
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-610
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.4 DTSL as used by Arm® Debugger
When built, the list is displayed in the Edit Configuration dialog box. You can then choose the
combination of manufacturer, board, project type, and debug activity you require.
After you select the debug activity, Arm Debugger inspects the DTSL script dtsl_config_script, and
configuration class dtsl_config, for any DTSL options. If any DTSL options are specified, Arm
Debugger activates the Edit… button so that you can change the values for the DTSL options.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-611
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.4 DTSL as used by Arm® Debugger
Related concepts
20.4.1 Arm® Development Studio debug session launcher on page 20-611
20.4.2 Connecting to DTSL on page 20-611
20.4.3 DTSL access from Debugger Jython scripts on page 20-612
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-612
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.5 Main DTSL classes and hierarchy
If the ConnectionParameters instance does not specify a DTSL configuration script, then an object of
type DefaultConfiguration is created. The configuration content is constructed by creating a Device
object for each device known to RDDI-DEBUG. For DSTREAM, this means that a Device object is
created for each device declared in the .rcf, .rvc, or .sdf files, but for other kinds of RDDI this might
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-613
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.5 Main DTSL classes and hierarchy
come from a different data set. This allows for a simple connection to a platform with direct connections
to any target devices specified in the RDDI configuration file.
If the ConnectionParameters instance does specify a DTSL configuration script, then that script is run
to create an instance of a configuration object derived from DTSLv1. When the configuration script is
run, it is expected to populate the configuration with the set of known device objects, trace sources, and
trace capture devices.
Note
• Arm recommends using a configuration script to create a DTSL configuration, because it allows
much greater flexibility when creating devices.
• DTSLv1 is named as such to show that the configuration is using the V1 interface and object set. This
is the current set. If Arm changes the interface and object set, then it might start using DTSLv2. This
allows Arm to maintain backwards compatibility, but also to move forward with new or modified
interfaces.
There are two object hierarchies in use for DTSL configurations, that can be split into:
1. Configurations which use .rcf or .rvc files.
For these types of configurations, all information related to the topology of the system is contained
within the Jython configuration script, where managed devices, trace component orders, and device
configuration (For example, funnel port configuration) are all performed explicitly within the script.
The Arm Development Studio Platform Configuration Editor previously created all configurations
which behaved in this way. For more details, see Arm DS configuration database on page 20-605.
2. Configurations which use a .sdf file directly.
SDF files can contain all required information related to target device topology, and so configurations
which use them directly do not have large amounts of python configuration code, and all this work is
performed internally by the ConfigurationBaseSDF class. Configurations created by the Arm
Development Studio Platform Configuration Editor use a .sdf file as an input. For more details, see
Platform Configuration on page 14-291 .
Line 1 locates the device ID (RDDI-DEBUG device index number) for the named device from the RDDI
configuration. Line 2 creates the DTSL ConnectableDevice object. Line 3 adds the device object to the
DTSL configuration.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-614
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.5 Main DTSL classes and hierarchy
Note
The figure shows the main components used for cores and core clusters.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-615
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.5 Main DTSL classes and hierarchy
When implementing new trace source objects, you can choose to base them on TraceDevice,
ConnectableTraceDevice, TraceSource, or ConnectableTraceSource. The choice depends on
whether the source needs a connection, and whether it can identify itself in the trace stream with a source
ID. As shown in the figure, all the standard Arm trace sources are derived from
ConnectableTraceSource. This is because they are real devices which can be connected to for
configuration, and which have ATB IDs to identify themselves in the received trace stream.
The following is a typical code sequence from a DTSL Jython script to create an ETM trace source:
1. devID = self.findDevice("CSETM")
2. etmATBID = 1
3. self.ETM = ETMv3_3TraceSource(self, devID, etmATBID, "ETM")
Line 1 locates the CSETM device ID (RDDI-DEBUG device index number) from the RDDI
configuration. Line 2 assigns the ATB ID to be used for the ETM. Line 3 creates the DTSL
ETMv3_3TraceSource object and names it 'ETM'. If there are multiple ETMs in the platform, they should
have different names, such as 'ETM_1' and 'ETM_2', or 'ETM_Cortex-A8' and 'ETM_Cortex-M3'.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-616
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.5 Main DTSL classes and hierarchy
After creating the trace source objects, you must inform any trace capture device about the set of trace
source objects to associate with it. This allows the client program to locate the ATB ID for the source of
interest and request delivery of trace data for that source.
Related concepts
20.5.5 DTSL trace capture objects on page 20-617
The following image shows the off-chip trace class hierarchy and interfaces:
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-617
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.5 Main DTSL classes and hierarchy
The following is a typical code sequence from a DTSL Jython script to create an ETB trace capture
device:
1. devID = self.findDevice("CSETB")
2. self.ETB = ETBTraceCapture(self, devID, "ETB")
3. self.ETB.setFormatterMode(FormatterMode.BYPASS)
4. self.ETB.addTraceSource(self.ETM, self.coretexA8.getID())
5. self.addTraceCaptureInterface(self.ETB)
6. self.setManagedDevices([self.ETM, self.ETB])
Line 1 locates the ETB device ID (number) from the RDDI configuration (.rcf file or .rvc file). Line 2
creates the ETBTraceCapture object with the name 'ETB'. Line 3 configures the formatter mode of the
ETB. Line 4 adds an ETM object, such as that created by the code sequence in DTSL trace source
objects on page 20-615 , to the set of trace sources to associate with the trace capturedevice. This should
be done for all trace source objects which deliver trace to the trace capture device. To associate the ETM
with a core, the code uses a version of the addTraceSource() method which allows it to associate the
core by its ID. Line 5 adds the trace capture device to the DTSL configuration. Line 6 tells DTSL to
automatically manage connection and disconnection to and from the ETM and ETB devices.
When a client program has a reference to the DTSL configuration object, it can query it for its set of
trace capture devices. For each trace capture device, it can find out which trace sources feed into the
trace capture device.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-618
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.5 Main DTSL classes and hierarchy
that if the data for the accessed address is currently in a cache, then the cached data value is returned.
This value might be different from the value in physical memory. This is usually what a DTSL client,
such as a debugger, wants to happen, so that it can present the same view of memory as that which
the core sees when executing instructions.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-619
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.5 Main DTSL classes and hierarchy
The image shows two main class trees. These are the MEM-AP tree and the DeviceMemoryAccessor
tree. The DTSL configuration typically creates objects for one or more of the MEM-AP class types,
suitably specialized for the actual bus type.
In the MCBSTM32E example, there is an AHB-AP which can be used to access memory directly. In the
case of Cortex-M3, this bus is also used to access the CoreSight debug components, but for non-
Cortex‑M cores it is more typical for there to be a separate APB-AP for debug component access. The
significant lines of the DTSL configuration script are similar to the following:
devID = self.findDevice("CSMEMAP")
In this case, the RDDI-DEBUG configuration has a device called CSMEMAP, which associates with a
CortexM_AHBAP DTSL object. This object is derived from a DTSL Device, and so has memory access
methods available.
If a client is aware of such DTSL devices, then it can use them to access memory directly.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-620
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.5 Main DTSL classes and hierarchy
Any number of address filters can be added, but each filter name (Arm Debugger address prefix) must be
unique.
To determine the supported address spaces for an object which implements IDevice, call the
getAddressSpaces() method. When a client matches against an address space, it can map the address
space to a rule parameter which is passed into the IDevice memory access methods. The rule
parameter is then used to direct the memory access to the appropriate device.
Related concepts
20.5.1 DTSL configuration objects on page 20-613
20.5.2 DTSL device objects on page 20-614
20.5.3 CoreSight device component register IDs on page 20-615
20.5.4 DTSL trace source objects on page 20-615
20.5.5 DTSL trace capture objects on page 20-617
20.5.6 Memory as seen by a core device on page 20-618
20.5.7 Physical memory access via CoreSight™ on page 20-619
20.5.8 DTSL MEM-AP support on page 20-619
20.5.9 Linking MEM-AP access to a core device on page 20-620
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-621
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.6 DTSL options
Note
The getOptionList() static method is not part of any defined Java interface. The DTSL configuration
script manager uses Jython introspection at run time to determine whether the method exists.
The object set returned from getOptionList() should be an array of option objects. It is very common
to partition the set of options into logical groups, each of which has its own tab page within a TabSet.
Each tab page contains the options for its associated group.
The following image shows the supported options types and class hierarchy:
The DTSLv1 class provides many static helper methods for creating the options, and it is more usual for
these methods to be used rather than directly creating the objects.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-622
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.6 DTSL options
Line 4 marks the method as a static method of the containing class. This allows it to be called before an
instance of the class exists. It also implies that any methods that are called are also static methods,
because there is no self (this) associated with an instance of the class. Line 5 defines the static method
with the name getOptionList. If this static method is present, then the configuration has options,
otherwise it does not. Line 10 creates a TabSet object with name options, display name 'Options', and
an array of child options, which in this example are each created by calling another static method.
Note
You might find it helpful to provide child options using several static methods. This prevents the nesting
level of brackets from becoming too deep and difficult to understand, and makes it easier for you to
avoid using the wrong type of bracket in the wrong place.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-623
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.6 DTSL options
Note
The code uses nesting and indentation to help keep track of closing bracket types.
Line 3 creates a tab page named traceBuffer, which has an array of child options. These child options
are displayed on the tab page within a GUI. Working through the child options might help you
understand how they are displayed to the user. Line 7 creates an enum option. This is an option whose
value is one of a set of pre-defined values, and which is typically presented to the user as a drop down
list box. The list box shows the pre-defined values, and the user selects one of them. The values are given
as pairs of strings. The first string is the internal value, and the second string is the text displayed to the
user. Lines 16 to 21 create boolean options. These are options which are true or false, or on or off, and
are usually shown to the user as a check box GUI element.
The following image shows how Arm Development Studio renders the tab set and tab page:
For more examples, see the full source code for the Keil example in the DTSLExampleConfigdb project.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-624
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.6 DTSL options
the name path options.traceBuffer.traceCaptureDevice. The components of this name path, joined
by ., are as follows:
options
The internal name of the outermost TabSet.
traceBuffer
The internal name of the child option for the trace buffer tab page object.
traceCaptureDevice
The internal name of the EnumOption for the currently selected trace capture device.
The full path name is important for at least three reasons:
• It can be used from the Arm Debugger command line, to read or modify the option value, using the
commands show dtsl-options or set dtsl-options.
• It can be used in the project_types.xml file to direct the Arm Debugger to relevant options, such as
which trace capture device to use (if any).
• It can be used in the getOptionValue and setOptionValue methods of the configuration, to read or
modify an option's value.
Note
The full path option name is case sensitive.
Here is an example output from the show dtsl-options command to see the list of available DTSL
options and their current values.
Command: show dtsl-options
Here is an example of the set dtsl-options command to change the current value of any non read-
only option:
Command: set dtsl-options options.ITM.itmTraceEnabled false
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-625
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.6 DTSL options
Not all options can be modified after connecting. For example, the trace capture device cannot typically
change during the debug session, although the option to enable ITM trace can change. Even if an option
can be changed, it might not apply the change immediately. For example, most trace-related dynamic
options apply changes only when tracing is started or restarted.
To mark an option as dynamic, add the isDynamic=True parameter to the option constructor. For
example, the ITM option to generate timestamps could be created as follows:
DTSLv1.booleanOption(
name='TSENA',
displayName = 'Enable differential timestamps',
defaultValue=True,
isDynamic=True
)
When Arm Debugger displays the options during a debug session, it only allows the dynamic options to
be changed. All the options are shown to the user, but the non-dynamic ones are grayed out and cannot
be changed.
Note
The optionValuesChanged method is called after the constructor is called, but before the DTSL
components are connected to the target platform. This means that the DTSL objects can be configured
with their settings, but cannot send the settings to the target components.
If the options are changed during a debug session, then the optionValuesChanged method is called
again, to inform the DTSL components that the options have changed.
Note
Currently, the call to the optionValuesChanged method does not indicate which options have changed.
A future version of DTSL will address this.
1. def optionValuesChanged(self):
Line 1 declares the optionValuesChanged method, which is called to tell the DTSL components that the
options have changed. Line 7 assigns the top level options name path value. Lines 8 to 11 call one of two
methods depending on whether the configuration is connected yet.
1. def setInitialOptions(self, obase):
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-626
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.6 DTSL options
6. if self.traceDeviceIsDSTREAM(obase):
7. self.setDSTREAMTraceEnabled(True)
8. self.setDSTREAMOptions(obase+".traceBuffer")
9. obaseETM = obase+".ETM"
10. obaseITM = obase+".ITM"
11. self.setETMEnabled(self.getOptionValue(
12. obaseETM+".cortexM3coreTraceEnabled"))
13. self.reservedATBIDs = {}
14. self.setITMEnabled(self.getOptionValue(obaseITM+".itmTraceEnabled"))
15. obaseITMOwner = obaseITM+".itmTraceEnabled.itmowner"
16. if self.debuggerOwnsITM(obaseITMOwner):
17. self.setITMOwnedByDebugger(True);
18. self.setITMOptions(obaseITMOwner+".debugger")
19. else:
20. self.setITMOwnedByDebugger(False);
21. self.reservedATBIDs["ITM"] =
22. self.getOptionValue(obaseITMOwner+".target.targetITMATBID")
23. self.updateATBIDAssignments()
24. else:
25. self.setDSTREAMTraceEnabled(False)
26. self.setETMEnabled(False)
27. self.setITMEnabled(False)
For the dynamic option changes, only the options marked as dynamic need inspecting.
Note
The option values are passed on to the corresponding DTSL objects, but the option changes might not be
applied immediately. In many cases, the change only applies when execution or trace is next started.
Whether the option change is applied immediately is determined by the implementation of the DTSL
object.
Related concepts
20.6.1 DTSL option classes on page 20-622
20.6.2 DTSL option example walk-through on page 20-623
20.6.3 Option names and hierarchy on page 20-624
20.6.4 Dynamic options on page 20-625
20.6.5 Option change notification on page 20-626
20.6.6 Option change notification example walk-through on page 20-626
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-627
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.7 DTSL support for SMP and AMP configurations
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-628
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.7 DTSL support for SMP and AMP configurations
• Software synchronization
• Tight synchronization
• Hardware synchronization
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-629
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.7 DTSL support for SMP and AMP configurations
true state of the system to the user, but still allows the state to be reported as consistent if consistency is
achieved at some future time.
DBGTRIGGER Output from core to CTI Indicates that the core is going to enter debug state (is going to stop executing)
EDBGRQ Input to core from CTI An external request for the core to enter debug state (stop executing)
DBGRESTART Input to core from CTI An external request for the core to exit debug state (start executing)
For synchronized execution to work, the DTSL configuration assigns two channels, one of which is for
stop requests and the other of which is for start requests. The CTI or CTIs are configured to connect the
above signals onto these channels.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-630
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.7 DTSL support for SMP and AMP configurations
The convention for DTSL configurations is that channel 0 is used for the stop channel and channel 1 is
used for the start channel. DTSL configuration scripts usually allow this to be modified by changing the
following constants, which are assigned near the top of the configuration script:
CTM_CHANNEL_SYNC_STOP = 0 # use channel 0 for sync stop
Related concepts
20.7.1 AMP systems and synchronized execution on page 20-628
20.7.2 Execution synchronization levels on page 20-628
20.7.3 Software synchronization on page 20-629
20.7.4 Tight synchronization on page 20-629
20.7.5 Hardware synchronization on page 20-629
20.7.6 SMP states on page 20-629
20.7.7 Use of CTI for SMP execution synchronization on page 20-630
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-631
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.8 DTSL Trace
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-632
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.8 DTSL Trace
The number and type of the pipeline decoding blocks depends on the format of the trace capture device
and the trace data format. However, the final stage should always be to place client compatible data (raw
trace source data) into a DataSink, ready for the trace client to consume.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-633
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.8 DTSL Trace
For Arm-based trace systems which use a TPIU Formatter (CoreSight ETB, TMC/ETB and TMC/ETR),
two further pipeline stages must be added. These are the SyncStripper and Deformatter stages, which
remove the TPIU sync frames and extract data for a particular trace source ID respectively.
By implementing new pipeline stages, it is possible to provide trace support for any trace capture device,
as long as the final output stage can be reduced to data which is compatible with the expectations of a
trace client.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-634
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.8 DTSL Trace
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-635
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.8 DTSL Trace
Related concepts
20.8.4 DTSL trace client read interface on page 20-634
The example code creates an STMSourceMatcherRange object with a parameter set which matches
against all Masters and Channels.
The STPv2 packet protocol outputs a SYNC packet which allows the decoder to synchronize the binary
data stream to the start of a packet. When decoding arbitrary data streams, the decoder needs to
synchronize to the stream before starting to decode the STPv2 packets. Once the stream is synchronized,
there is no need to resynchronize, as long as contiguous data is being decoded.
The decoder has two ways to handle errors in the STPv2 packets stream:
• Throw an STMDecodeException or an STMParseException. The advantage of this method is that the
errors are detected immediately, but the disadvantage is that you cannot continue processing STPv2
packets (there is no way to resume decoding after the last error position).
• Insert an STMDecodeError object into the generated STMObject set. The advantage of this method is
that the full data stream is decoded, but the disadvantage is that the error is not processed by the
client until the generated STMDecodeError is processed.
/**
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-636
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.8 DTSL Trace
}
[snip - code to figure out how much trace to read and from where. Also assign values to
nextPos[] and readSize.]
this.stmObjects.clear();
try {
stmChannelReader.read(nextPos[0], readSize, this, nextPos, reader);
} catch (DTSLException e) {
System.out.println("Caught DTSLException during STPv2 decode:");
System.out.println(e.getLocalizedMessage());
stmChannelReader.reSync();
}
}
catch (DTSLException e) {
System.out.println("DTSLException:");
e.printStackTrace();
}
finally {
/* Must return the trace reader to DTSL so that it knows we have finished
reading
*/
this.traceDevice.returnSourceReader(reader);
}
}
}
/* (non-Javadoc)
* @see
com.arm.debug.dtsl.decoders.stm.stmobjects.ISTMObjectReceiver#write(com.arm.debug.dtsl.decode
rs.stm.stmobjects.STMObject)
*/
@Override
public boolean write(STMObject stmObject) {
this.stmObjects.add(stmObject);
return true;
}
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-637
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.8 DTSL Trace
Related concepts
20.8.1 Platform trace generation on page 20-632
20.8.2 DTSL trace decoding on page 20-632
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-638
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.8 DTSL Trace
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-639
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.9 Embedded Logic Analyzer (ELA)
Trigger states 5 8
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-640
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.9 Embedded Logic Analyzer (ELA)
If your ELA-600 is configured to capture trace data using the ATB interface, check that you have the
following:
• A platform configuration that:
— Lists the relevant ELA trace components.
— Lists the component connections and their mapping between the ELA and its trace sink.
— If applicable, lists the CTIs and their connections.
• In the DTSL configuration view, you need to enable ELA trace, and setup and enable the trace source
and sink.
• A JSON file that contains a list of the components of your IP and their corresponding signal group
connections. This file is available from the IP designer.
ELA Scripts
Arm provides several python scripts with your Arm Development Studio installation. These allow you to
use and configure the ELA.
There are different scripts for ELA-500 and ELA-600:
ela_example.py This script provides some usecase examples that you can use in -
your own implementation. These are:
• Periodic trace.
• Configure the ELA using signal groups.
• Decode the trace data.
This script works with the example_ela_connections.json
file, and shows how the signal group descriptions provided in the
JSON file are used for configuration and decoding registers.
ela_lowlevel.py Use this script to configure the trigger state registers and the -
control registers.
ela_test.py Use this script to generate some random trace data in the ELA -
buffer for testing purposes.
process_trace.py - Use this script to:
• Decompress and decode trace data
from the buffer.
• Decompress and decode trace data
that comes from a file.
• Dump trace data from the buffer into
a file.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-641
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.9 Embedded Logic Analyzer (ELA)
Related concepts
11.10 Use case scripts on page 11-249
Related tasks
20.10 Using the ELA-500 on page 20-643
20.11 Using the ELA-600 on page 20-645
Related information
ELA-500 Product page
ELA-600 Product page
Using the CoreSight ELA-500 Embedded Logic Analyzer with Arm DS-5 tutorial
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-642
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.10 Using the ELA-500
Prerequisites
For the ELA to correctly decode your captured data, you need:
• A JSON file that lists all the components of your SoC, and their addresses.
• To save the JSON file in the same location as your scripts.
• To update the JSON file name in ela_example.py.
Procedure
• The designer of your target provides the JSON file. Alternatively you can use the provided
example_ela_connections.json file as a starting point, and manually add the information for your
target. You can find the information you need, such as the component IDs and their addresses, in the
ConfigDB entry for your target.
This section contains the following subsections:
• 20.10.1 Configure the ELA-500 on page 20-643.
• 20.10.2 Start and stop an ELA-500 trace capture on page 20-643.
• 20.10.3 Decode the trace capture on page 20-644.
Procedure
1. Import the scripts into Arm Development Studio as usecase scripts.
a. Open Arm Development Studio and import the ELA-500 examples file: File > Import > Arm DS
> Examples & Programming Libraries > Next.
b. Expand Examples and Debug and Trace Services Layer (DTSL), and select ELA-500.
c. Click Finish.
d. Open the Scripts view, right-click Use-case and select Add use case script directory.
If this option is inactive, connect to your target and the option will become active
e. Browse to your workspace, select the DTSLELA-500 folder, and click OK.
Arm Development Studio finds all the ELA scripts in that folder, and displays them under the Use
case list item.
2. Configure the ELA-500 using the Configuration Utility.
a. Expand ela_lowlevel.py, right-click Configure ELA and select Configure.
b. Under the Common tab, check Enable trace and click Apply.
c. Configure the Trigger States using the Trigger State {n} tabs. This configuration is target-
dependent. See the TRMs for the ELA-500 and for your target. For an example on what this might
look like, see the linked ELA-500 tutorial at the end of the introduction.
Procedure
1. To start an ELA-500 trace capture:
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-643
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.10 Using the ELA-500
a. Under the ela_control.py sub-menu, right-click Run ELA-500, and select Run
ela_control.py::Run ELA-500.
b. Run the target. The ELA-500 starts monitoring the specified signal groups running on the target,
waiting to respond to the specified trigger conditions.
2. To stop an ELA-500 trace capture:
a. Under the ela_control.py sub-menu, right-click Stop ELA-500, and select Run
ela_control.py::Stop ELA-500.
Prerequisites
Check that your JSON file is specified in the ela_example.py file, as this is used by the Decode trace
data function. You must place your JSON file in the DTSLELA-500 directory.
Procedure
1. Under the ela_example.py sub-menu, right-click Decode trace data and select Configure.
2. Configure the Signal Groups. To see what each signal group refers to, refer to your target's
documentation.
3. Right-click Decode trace data and click Run.
Decoding the data, based on the configured signal groups, turns it into something like this:
read 180 words
These code examples are for illustrative purposes only, to show the type of output you might expect
when using the ELA-500.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-644
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.11 Using the ELA-600
Prerequisites
For the ELA to correctly decode your captured data, you need a JSON file that lists the Signal Groups of
your SoC, and their connections.
Procedure
• The designer of your target provides the JSON file. Alternatively you can use the provided
axi_interconnect_mapping.json file as a starting point, and manually add the information for your
target. You can find the information you need in the ConfigDB entry for your target.
Note
The ETR is enabled by default. If your ELA-600 is connected to a different trace sink, you need to
disable the ETR; see the Start and stop an ELA-600 trace capture on page 20-645 section for details
on how to do this. You also need to configure your trace sink in the Configuration Utility. See
Configure the ELA-600 on page 20-645 for details on how to access the Configuration Utility.
Procedure
1. Import the scripts into Arm Development Studio as usecase scripts:
a. Open Arm Development Studio and import the DTSL zip file: File > Import > Arm DS >
Examples & Programming Libraries > Next.
b. Expand Examples and Debug and Trace Services Layer (DTSL), and select ELA-600.
c. Click Finish.
d. Open the Scripts view, right-click Use-case and select Add use case script directory.
If this option is inactive, connect to your target and the option will become active.
e. Browse to your workspace, select the DTSLELA-600 folder, and click OK.
Arm Development Studio finds all the ELA scripts in that folder, and displays them under the Use
case list item.
2. Configure the ELA-600 using the Configuration Utility:
a. Expand ela_setup.py, right-click Configure ELA and select Configure.
b. Under the Common tab, configure the common registers of the ELA. One of the usual settings is
Enable trace. When you have done this, click Apply.
c. Configure the Trigger States using the Trigger State {n} tabs. This configuration is target-
dependent. See the TRMs for the ELA-600 and for your target. For an example on what this might
look like, see the linked ELA-600 tutorial at the end of the introduction.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-645
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.11 Using the ELA-600
Prerequisites
The ETR is enabled by default. If you are not using the ETR as your trace sink, you must disable it in
two places as described in the following procedure.
Procedure
1. To start an ELA-600 trace capture:
a. Make sure your target is connected.
b. Under the ela_control.py sub-menu, right-click Run ELA-600, and select Run
ela_control.py::Run ELA-600.
c. Run the target. The ELA-600 starts monitoring the specified signal groups that are running on the
target, waiting to respond to the specified trigger conditions.
2. If your ELA-600 is not using the ETR as the trace sink, disable the ETR:
a. Right-click the Run ELA-600 script, select Configure, and deselect the Start the ETR when the
ELA-600 starts option.
b. Configure and enable your trace sink using the Configuration Utility. For configuration, see
Configure the ELA-600 on page 20-645.
3. To stop an ELA-600 trace capture:
a. Under the ela_control.py sub-menu, right-click Stop ELA-600, and select Run
ela_control.py::Stop ELA-600.
4. If your ELA-600 is not using the ETR as the trace sink, disable the ETR:
a. Right-click the Stop ELA-600 script, select Configure, and deselect the Stop the ETR when the
ELA-600 stops option.
Procedure
1. To generate the raw output of your capture:
a. In the Scripts view, expand ela_process_trace.py, right-click Decompress and decode ELA
trace and select Configure.
b. Under the General tab, make sure that Decompress trace is selected, and choose your preferred
output option.
c. If your trace data was processed with delta compression enabled, you will also need to go to the
Decompress tab and select the ELA trace captured with delta compression enabled checkbox.
d. Click OK to save these settings.
e. Right-click Decompress and decode ELA trace, and select Run
ela_process_trace.py::Decompress and decode ELA trace.
The decompressed data captured by the ELA looks like this:
Trace data: trigger state = 0, overrun = 0, data=0x80300162000003481C00400028082D07
Trace data: trigger state = 0, overrun = 0, data=0xA0300162000002C81C00400000602675
Trace data: trigger state = 0, overrun = 0, data=0x80400162000006506C005881F7C02C74
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-646
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.11 Using the ELA-600
a. In the Scripts view, expand ela_process_trace.py, right-click Decompress and decode ELA
trace and select Configure.
b. Under the General tab, make sure that Decompress and decode trace is selected, and choose
your preferred output option.
c. If delta compression was enabled during the trace capture, under the Decompress tab, check the
ELA trace captured with delta compression enabled checkbox.
d. Under the Decode tab, specify your JSON file in the ELA trace mapping file field, and set the
State for each monitored signal group by using the drop-down menus.
e. Click OK to save these settings.
f. Right-click Decompress and decode ELA trace, and select Run
ela_process_trace.py::Decompress and decode ELA trace.
Decoding the data, based on the configured signal groups, turns it into something like this:
Trace type: Data, Trace Stream: 0, Overrun: 0, Data:
0x80300162000003481C00400028082D07
P1_VALID : 1'h1
P1_AXID : 12'h6
P1_addr : 42'hB1000000
P1non-secure : 1'h0 => secure
Type_P1 : 4'hD => Exclusive Read
P0_VALID : 1'h0
P0_AXID : 12'h40E
P0_addr : 42'h80005010
P0non-secure : 1'h0 => secure
Type_P0 : 4'h2 => Read Shared, Read Clean, Read No Snoop Dirty
TTID_P1 : 6'h34
TTID_P0 : 6'h7
Procedure
1. To generate the raw output from your source file:
a. In the Scripts view, expand ela_process_trace.py, right-click Decompress and decode stored
binary data and select Configure.
b. Under the General tab, select Decompress trace and specify the source file in the Binary input
file… field.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-647
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.11 Using the ELA-600
c. If your trace data was processed with delta compression enabled, you will also need to go to the
Decompress tab and select the ELA trace captured with delta compression enabled checkbox.
d. Click OK to save these settings.
e. Right-click Decompress and decode stored binary data, and select Run
ela_process_trace.py::Decompress and decode stored binary data.
The decompressed data captured by the ELA looks like this:
Trace data: trigger state = 0, overrun = 0, data=0x80300162000003481C00400028082D07
Trace data: trigger state = 0, overrun = 0, data=0xA0300162000002C81C00400000602675
Trace data: trigger state = 0, overrun = 0, data=0x80400162000006506C005881F7C02C74
P1_VALID : 1'h1
P1_AXID : 12'h6
P1_addr : 42'hB1000000
P1non-secure : 1'h0 => secure
Type_P1 : 4'hD => Exclusive Read
P0_VALID : 1'h0
P0_AXID : 12'h40E
P0_addr : 42'h80005010
P0non-secure : 1'h0 => secure
Type_P0 : 4'h2 => Read Shared, Read Clean, Read No Snoop Dirty
TTID_P1 : 6'h34
TTID_P0 : 6'h7
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-648
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.11 Using the ELA-600
Procedure
1. In the Scripts view, expand ela_process_trace.py, right-click Dump ELA trace and select
Configure.
2. Specify a name for the Output file and click OK.
3. To generate the file, right-click Dump ELA trace and select Run ela_process_trace.py::Dump
ELA trace.
Related tasks
Decompress and decode an ELA-600 trace from buffer source on page 20-646
Decompress and decode an ELA-600 trace from binary source file on page 20-647
Dump ELA-600 trace data to binary source file on page 20-649
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-649
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.12 Extending the DTSL object model
postRDDIConnect
This is called immediately after the RDDI interface has been opened. At this point, the RDDI
interface has been opened, but no connection to the debug server has been made. This method
should be implemented to perform low-level configuration, for example, using the JTAG
interface to configure a TAP controller to make debug devices visible on the JTAG scan chain.
1. class DtslScript(DTSLv1):
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-650
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.12 Extending the DTSL object model
postDebugConnect
This is called after the RDDI debug interface has been opened. At this point, the RDDI debug
interface has been opened, but no connection to any device has been made. This method should
be implemented to perform any configuration required to access devices. For example, writes
using a DAP to power on other components could be performed here.
1. class DtslScript(DTSLv1):
postConnect
This is called after the connection and all devices in the managed device list have been opened.
This method should be implemented to perform any other configuration that isn't required to be
done at an earlier stage, for example, trace pin muxing.
1. class DtslScript(DTSLv1):
Related concepts
20.5.2 DTSL device objects on page 20-614
2. [snip]
3.
4. class DtslScript(DTSLv1):
5. '''A top-level configuration class which supports debug and trace'''
6.
7. [snip]
8.
9. def setupPinMUXForTrace(self):
10. '''Sets up the IO Pin MUX to select 4 bit TPIU trace'''
11. addrDBGMCU_CR = 0xE0042004
12. value = self.readMem(addrDBGMCU_CR)
13. value |= 0xE0 # TRACE_MODE=11 (4 bit port), TRACE_IOEN=1
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-651
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.12 Extending the DTSL object model
Line 38 declares the resetTarget method. This calls the normal reset method to perform the reset and
then calls the custom postReset method to perform the actions required after a reset.
The implementation of resetTarget in DTSLv1 is to call the systemReset method of the targetDevice.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-652
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.12 Extending the DTSL object model
class FileBasedTraceCaptureDevice(ConnectableTraceCaptureBase):
'''
Base class for a trace capture device which just returns
a fixed data set from a file. The amount of trace data captured
is just the size of the file.
'''
def __init__(self, configuration, name):
'''Construction
Params: configuration
the top level DTSL configuration (the
class you derived from DTSLv1)
name
the name for the trace capture device
'''
ConnectableTraceCaptureBase.__init__(self, configuration, name)
self.filename = None
self.fileOpened = False
self.hasStarted = False
self.trcFile = None
def connect(self):
'''We interpret connect() as an opening of the trace data file
'''
self.trcFile = file(self.filename, 'rb')
self.fileOpened = True
self.fileSize = os.path.getsize(self.filename)
def disconnect(self):
'''We interpret disconnect() as a closing of the trace data file
'''
if self.trcFile != None:
self.trcFile.close()
self.fileOpened = False
self.fileSize = 0
def isConnected(self):
return self.fileOpened
def startTraceCapture(self):
self.hasStarted = True
def stopTraceCapture(self):
self.hasStarted = False
def getMaxCaptureSize(self):
return self.fileSize
def getCaptureSize(self):
return self.fileSize
def getNewCaptureSize(self):
return self.getCaptureSize()
def hasWrapped(self):
return True
class ETBFileBasedTraceCaptureDevice(FileBasedTraceCaptureDevice):
'''
Creates a trace capture device which returns ETB trace
data from a file.
'''
def __init__(self, configuration, name):
'''Construction
Params: configuration
the top level DTSL configuration (the
class you derived from DTSLv1)
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-653
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.12 Extending the DTSL object model
name
the name for the trace capture device
'''
FileBasedTraceCaptureDevice.__init__(self, configuration, name)
We can use the new trace capture device in the platform DTSL Jython code:
from FileBasedTraceCapture import ETBFileBasedTraceCaptureDevice
[snip]
self.etbFileCaptureDevice = ETBFileBasedTraceCaptureDevice(self, 'ETB(FILE)')
self.etbFileCaptureDevice.setTraceFile('c:\\etbdump.bin')
self.addTraceCaptureInterface(self.etbFileCaptureDevice)
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-654
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.13 Debugging DTSL Jython code within Arm® Debugger
To find the cause of the error, try inspecting the Error Log. If the Error Log is not visible, select Window
> Show View > Error Log to show it.
The following is an example of some Error Log text:
Python error in script \\\\NAS1\\DTSL\\configdb\\Boards\\Keil\\MCBSTM32E\\keil-mcbstm32e.py
at line 11: ImportError: cannot import name V7M_ETMTraceSource when creating configuration
DSTREAMDebugAndTrace
After resolving any issues, close and reopen the Launcher Panel to make Arm Development Studio
reinspect the Jython script. If an error still occurs, you get more entries in the Error Log. If the error is
resolved, then the Edit… button for the DTSL options will appear as normal.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-655
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.13 Debugging DTSL Jython code within Arm® Debugger
Note
Sometimes, the error message shown in the dialog box might not be helpful, especially for run-time
errors rather than syntax or import errors. Arm Development Studio also places an entry in the Error
Log, so that you can inspect the error after dismissing the error dialog box. This error log entry might
contain more information. You can typically find this information by scrolling down the Exception Stack
Trace until you see the error reported at the point the Jython code was run.
After editing the Jython script to resolve any issues, try connecting again.
Note
You do not need to tell Arm Development Studio that the configdb has changed when you make changes
only to Jython scripts.
Note
Although you can run multiple instances of the Arm Development Studio IDE at the same time, the
instances cannot use the same Workspace.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-656
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.13 Debugging DTSL Jython code within Arm® Debugger
20.13.6 Starting a second instance of Arm® Development Studio for Jython debug
When you start a second instance of Arm Development Studio, with the first instance still running, you
are asked to use a different workspace. Choose a suitable location for this second workspace.
In this second instance of Arm Development Studio, switch to the PyDev perspective. To enable the
toolbar buttons that allow you to start and stop the PyDev debug server:
• Select Window > Customize Perspective... .
• Click the Command Groups Availability tab.
• Scroll down through the Available Command Groups and select the PyDev Debug entry.
• Click the Tool Bar Visibility tab.
• Make sure that the PyDev Debug entry, and the two End Debug Server and Start Debug Server
entries, are selected.
On the toolbar, you should see two new icons PyDev debug server start and stop icons to
stop and start the debug server.
Click the green P-bug icon to start the PyDev debug server. You should see a console view reporting the
port number on which the debugger is listening (5678 by default). The Arm Development Studio
instance is ready to accept remote debug connections.
Switch to the Development Studio perspective. Arm Development Studio IDE does not automatically
switch to the Development Studio perspective when a connection is made to the PyDev debugger. So if
you do not switch to the Development Studio perspective yourself, then you cannot notice the
connection.
'''Sets the tracing function with the pydev debug function and initializes needed
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-657
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.13 Debugging DTSL Jython code within Arm® Debugger
facilities.
@param host: the user may specify another host, if the debug server is not in the
same machine (default is the local host)
@param stdoutToServer: when this is true, the stdout is passed to the debug server
@param stderrToServer: when this is true, the stderr is passed to the debug server
so that they are printed in its console and not in this process console.
@param port: specifies which port to use for communicating with the server (note that
the server must be started in the same port).
@note: currently it's hard-coded at 5678 in the client
@param suspend: whether a breakpoint should be emulated as soon as this function
is called.
@param trace_only_current_thread: determines if only the current thread will be
traced or all future threads will also have the tracing enabled.
'''
Note
Calls to the DTSL .settrace() function without an active debug server produces errors. For example,
you might see errors similar to Python error in script pyclasspath/Lib/socket.py at line
1,159: error: when creating configuration DtslScript
In this situation:
• Check if the debug server has crashed during your debug session. Restart debug server if required.
• Check if you have removed the debug code from your script. It is good practice to remove debug
code from your script when you have finished debugging. Run your script again after removing the
debug code.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-658
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.14 DTSL in stand-alone mode
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-659
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.14 DTSL in stand-alone mode
20.14.3 Installing the Jython example within the Arm® Development Studio IDE
The DTSL Python example project requires that you have Jython and the PyDev plugin installed.
To download Jython, and for installation instructions, go to http://www.jython.org/. This document is
written with reference to Jython 2.5.3, but later versions should also work.
To download PyDev, and for installation instructions, go to http://pydev.org/. Make sure you configure
PyDev to know about the Jython version you have installed.
The example project DTSLPythonExample is in the DTSLExamples.zip file. You can import
DTSLPythonExample directly into your Arm Development Studio workspace. You must also import
DTSL.zip into your workspace.
The example project also contains two launch configurations for running the program. One configuration
uses the Arm Development Studio configdb board specification, and the other refers directly to the files
in the configdb. The project contains a configdb extension, which contains the Keil MCBSTM32 entries
compatible with this project.
Note
If you use your own Eclipse (non Arm Development Studio) installation, then you must set the Arm
Development Studio installation location within the Arm Development Studio preferences. This value is
used within the provided launch configurations.
The readme.txt file contained within the project has more information.
Related references
20.1 Additional DTSL documentation and files on page 20-599
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-660
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.14 DTSL in stand-alone mode
Before running the file, edit it and change the program parameters to suit the target system you are
connecting to. You might need to make the following changes:
• Change the location of jython.bat to match your Jython installation. Arm Development Studio does
contain part of a Jython installation, but it lacks the main jython.bat executable, so you must install
your own.
• Change the defined location of the Arm Development Studio workspace.
• Change the location of the Arm Development Studio configuration database to include the database
installed by Arm Development Studio and any further extensions you require (the location within a
workspace of DTSLExampleConfigdb\configdb is an extension required to run the example).
• Change the connection address for the DSTREAM box to match your box. If you are using a USB
connection then the code --connectionAddress "USB" can be left unchanged, but if you are using a
TCP connection then you must change it to be of the form --connectionAddress "TCP:<host-
name|ip-address>", for example --connectionAddress "TCP:DS-Tony" or --
connectionAddress "TCP:192.168.1.32".
• Change the manufacturer to match the directory name of your platform in the Boards sub-directory of
the Arm Development Studio config database.
• Change the board name to match the name of the board directory within the manufacturer directory.
• Change the debug operation to match one of the activity names contained in a bare metal debug
section of the project_types.xml file. For example:
<activity id="ICE_DEBUG" type="Debug">
When you run the dtslexample.py script, it connects to the target and runs through a series of register,
memory, and execution operations. By default, the script assumes that there is RAM at 0x20000000, and
that there is 64KB of it. This is correct for the Keil MCBSTM32 board. To change these values, use the
--ramStart and --ramSize options.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-661
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.14 DTSL in stand-alone mode
20.14.8 Installing the Java example within the Arm® Development Studio IDE
The example project DTSLJavaExample is in the DTSLExamples.zip file. You can import
DTSLJavaExample directly into your Arm Development Studio workspace. You must also import
DTSL.zip into your workspace. After importing it, change the project configuration to refer to your
DTSL library location:
1. Select the DTSLJavaExample within the Project Explorer, right click it, and select Properties.
2. Select 'Java Build Path' from the properties list.
3. Click the Libraries tab.
4. Replace all the referenced DTSL\libs.jar files with new entries which have the correct paths.
The example project also contains two launch configurations for running the program. One configuration
uses the Arm Development Studio configdb board specification, and the other refers directly to the files
in the configdb. The project contains a configdb extension, which contains the Keil MCBSTM32 entries
compatible with this project.
Note
If you use your own Eclipse (non Arm Development Studio) installation, then you must set the Arm
Development Studio installation location within the Arm Development Studio preferences. This value is
used within the provided launch configurations.
The readme.txt file contained within the project has more information.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-662
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.14 DTSL in stand-alone mode
Related references
20.1 Additional DTSL documentation and files on page 20-599
Before running the batch file, edit it and change the program parameters to suit the target system you are
connecting to. You might need to make the following changes:
• Change the defined location of the Arm Development Studio workspace.
• Change the location of the Arm Development Studio configuration database to include the database
installed by Arm Development Studio.
• Change the connection address for the DSTREAM box to match your box. If you are using a USB
connection then the code --connectionAddress "USB" can be left unchanged, but if you are using a
TCP connection then you must change it to be of the form --connectionAddress "TCP:<host-
name|ip-address>", for example --connectionAddress "TCP:DS-Tony" or --
connectionAddress "TCP:192.168.1.32".
• Change the manufacturer to match the directory name of your platform in the Boards sub-directory of
the Arm Development Studio config database.
• Change the board name to match the name of the board directory within the manufacturer directory.
• Change the debug operation to match one of the activity names contained in a bare metal debug
section of the project_types.xml file. For example:
<activity id="ICE_DEBUG" type="Debug">
When you run the DTSLExample.java program, it connects to the target and runs through a series of
register, memory, and execution operations. By default, the program assumes that there is RAM at
0x20000000, and that there is 64KB of it. This is correct for the Keil MCBSTM32 board. To change
these values, use the --ramStart and --ramSize options.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-663
reserved.
Non-Confidential
20 Debug and Trace Services Layer (DTSL)
20.14 DTSL in stand-alone mode
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 20-664
reserved.
Non-Confidential
Chapter 21
Reference
Lists other information that might be useful when working with Arm Debugger.
It contains the following sections:
• 21.1 About loading an image on to the target on page 21-666.
• 21.2 About loading debug information into the debugger on page 21-668.
• 21.3 About passing arguments to main() on page 21-670.
• 21.4 Updating multiple debug hardware units on page 21-671.
• 21.5 Standards compliance in Arm® Debugger on page 21-672.
• 21.6 Arm® Development Studio IDE analytics data points on page 21-673.
• 21.7 Arm® Debugger analytics data points on page 21-674.
• 21.8 Development Studio perspective keyboard shortcuts on page 21-677.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 21-665
reserved.
Non-Confidential
21 Reference
21.1 About loading an image on to the target
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 21-666
reserved.
Non-Confidential
21 Reference
21.1 About loading an image on to the target
Related references
16.6 Commands view on page 16-410
Related information
Arm Debugger commands
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 21-667
reserved.
Non-Confidential
21 Reference
21.2 About loading debug information into the debugger
Debug information is not loaded when an image is loaded to a target, but is a separate action. A typical
load sequence is:
1. Load the main application image.
2. Load any shared objects.
3. Load the symbols for the main application image.
4. Load the symbols for shared objects.
Loading debug information increases memory use and can take a long time. To minimize these costs, the
debugger loads debug information incrementally as it is needed. This is called on-demand loading.
Certain operations, such as listing all the symbols in an image, load additional data into the debugger and
therefore incur a small delay. Loading of debug information can occur at any time, on-demand, so you
must ensure that your images remain accessible to the debugger and do not change during your debug
session.
Images and shared objects might be preloaded onto the target, such as an image in a ROM device or an
OS-aware target. The corresponding image file and any shared object files must contain debug
information, and be accessible from your local host workstation. You can then configure a connection to
the target loading only the debug information from these files. Use the Load symbols from file option
on the debug configuration Files tab as appropriate for the target environment.
After connecting to the target you can also use the view menu entry Load… in the Debug Control view
to load files as required. The following options for loading debug information are available:
Add Symbols File
Loads additional debug information into the debugger.
Load Debug Info
Loads debug information into the debugger.
Load Image and Debug Info
Loads the application image on to the target, and loads the debug information from the same
image into the debugger.
Load Offset
Specifies a decimal or hexadecimal offset that is added to all addresses within the image. A
hexadecimal offset must be prefixed with 0x.
Set PC to entry point
Sets the PC to the entry point when loading image or debug information so that the code runs
from the beginning.
Note
The option is not available for the Add Symbols File option.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 21-668
reserved.
Non-Confidential
21 Reference
21.2 About loading debug information into the debugger
The debug information in an image or shared object also contains the path of the sources used to build it.
When execution stops at an address in the image or shared object, the debugger attempts to open the
corresponding source file. If this path is not present or the required source file is not found, then you
must inform the debugger where the source file is located. You do this by setting up a substitution rule
on page 7-149 to associate the path obtained from the image with the path to the required source file that
is accessible from your local host workstation.
Related concepts
21.1 About loading an image on to the target on page 21-666
Related tasks
6.7 Configuring a connection to an external Fixed Virtual Platform (FVP) for bare-metal application
debug on page 6-110
6.3 Configuring a connection to a Linux application using gdbserver on page 6-100
6.4 Configuring a connection to a Linux kernel on page 6-103
6.2 Configuring a connection to a bare-metal hardware target on page 6-96
6.9 Configuring an Events view connection to a bare-metal target on page 6-114
7.19 Configuring the debugger path substitution rules on page 7-149
Related references
16.6 Commands view on page 16-410
Related information
Arm Debugger commands
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 21-669
reserved.
Non-Confidential
21 Reference
21.3 About passing arguments to main()
Note
Semihosting must be active for these to work with bare-metal images.
Related references
7.17 Using semihosting to access resources on the host computer on page 7-145
7.18 Working with semihosting on page 7-147
16.47 Debug Configurations - Arguments tab on page 16-524
Related information
Arm Debugger commands
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 21-670
reserved.
Non-Confidential
21 Reference
21.4 Updating multiple debug hardware units
Syntax
dbghw_batchupdater -list <file>[-<option>]...
Where:
list <file>
Installs the firmware on the units. To install the firmware, you must also specify the
updatefile option.
Examples
# Input file C:\input_file.txt contains:
# TCP:ds-sheep1
# TCP:DS-Rhubarb
Related references
16.59 Debug Hardware Configure IP view on page 16-542
16.60 Debug Hardware Firmware Installer view on page 16-544
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 21-671
reserved.
Non-Confidential
21 Reference
21.5 Standards compliance in Arm® Debugger
Trace Protocols
The debugger can interpret trace that complies with the Embedded Trace Macrocell (ETM) (v3
and above), Instrumentation Trace Macrocell (ITM), and System Trace Macrocell (STM)
protocols.
Related information
ELF for the Arm Architecture
DWARF for the Arm Architecture
The DWARF Debugging Standard
International Organization for Standardization
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 21-672
reserved.
Non-Confidential
21 Reference
21.6 Arm® Development Studio IDE analytics data points
Utilities
Target Configuration Editor Tracked Use of the Target Configuration Editor 2019.0
Projects
CMSIS target software pack Tracked Use of target software supplied as software packs 2019.0
Toolchains
Imported toolchain Tracked Imported toolchain identifier, family and version, used to build a 2019.0
project in the IDE
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 21-673
reserved.
Non-Confidential
21 Reference
21.7 Arm® Debugger analytics data points
Feature
Graphical sessions Tracked When a graphical debug session is initiated, not necessarily successful. 2019.0
Commandline sessions Tracked When commandline debug sessions are initiated, not necessarily 2019.0
successful.
Trace Tracked This can for instance record usage of the Trace view in the IDE or usage 2019.0
of the trace dump command.
Python scripting Tracked Use of Python scripts, excluding scripting in DTSL. 2019.0
Trigger Points • A source command is executed for a file with a .py extension.
• A usecase command is executed.
• A breakpoint, with the script property set to a file with a .py
extension, is hit.
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 21-674
reserved.
Non-Confidential
21 Reference
21.7 Arm® Debugger analytics data points
Types Tracked Type of debug target. For example, Hardware, CADI Model, Linux 2019.0
Application, and so on.
CPU architectures Tracked Name of the major CPU architecture version and profile connected to, 2019.0
for example, Armv6-M.
Number of cores Tracked Number of cores connected to in a single debug session. 2019.0
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 21-675
reserved.
Non-Confidential
21 Reference
21.7 Arm® Debugger analytics data points
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 21-676
reserved.
Non-Confidential
21 Reference
21.8 Development Studio perspective keyboard shortcuts
F9
Interrupt the target and stop the current application if it is running.
Related references
16.6 Commands view on page 16-410
101470_2021.0_00_en Copyright © 2018–2021 Arm Limited or its affiliates. All rights 21-677
reserved.
Non-Confidential