This chapter describes pROBE+ operation in the standalone mode. For a description of a distributed debug configuration, see the SpOTLIGHT Debug Server User's Manual.
The pROBE+ debugger comes as a module you link with the pSOSystem OS. Chapter 4, ``Installation and Configuration," describes the pROBE+ configuration table.
The pROBE+ debugger consists of five individual services:
Of the subcomponents in this list, only the processor services subcomponent is mandatory, but at least one additional subcomponent must also be configured in the pROBE+ configuration table. In addition to the processor services, you must specify either the console interface executive or the remote debug interface executive. The remaining subcomponents are optional. The advantage of having subcomponents is that you save memory on the unused options.
In standalone mode, the pROBE+ debugger accepts and responds to commands through a console port that is normally connected to an ASCII terminal. You must supply character I/O drivers for the port, which is typically a serial port on the target hardware.
Figure 2-1 shows a pROBE+ standalone configuration with an ASCII terminal.
The pROBE+ debugger uses the following standard names to identify MIPS registers:
MIPS R3041, R3051, R3052:
ZERO, AT, V0-V1, A0-A3, T0-T9, S0-S8, K0-K1, SP, GP, RA, MDHI, MDLO, CAUSE, BADVADDR, EPC, SR, PRID, R0-R31, IP
MIPS R3081
ZERO, AT, V0-V1, A0-A3, T0-T9, S0-S8, K0-K1, SP, GP, RA, MDHI, MDLO, CAUSE, BADVADDR, EPC, SR, PRID, R0-R31, IP, FP0-FP31, FCSR
The pROBE+ debugger provides offset registers F0 through F7 to simplify the debugging of relocatable code. Typically, you load an offset register with the starting address of relocatable code or a data segment. A memory location can be referenced as a displacement relative to an offset register, so you do not repeatedly have to calculate addresses.
The pROBE+ debugger indicates that it is ready to accept commands by displaying the following prompt:
pROBE+>
or, in a multiprocessor system, the prompt:
pROBE+:n>
where n is the local node number.
The following rules apply to all pROBE+ commands:
The pROBE+ debugger keeps a record of the previous command you entered. You can recall the command in one of the following ways:
You can extend the pROBE+ debugger by defining new commands. When the pROBE+ debugger receives a command it does not understand, it automatically passes control to a user-supplied command handler. This feature is described in detail in Section 4.3.12, ``td_urcom.''
You can enter constants to the pROBE+ debugger in the following forms:
A hexadecimal constant is a string of one to eight hexadecimal characters. The following are examples:
0 FFFFFFFF acd123
A decimal constant is a string of one to ten decimal digits preceded by an ampersand (&). The following are examples:
&1234 &999999999
A character constant is a sequence of up to four ASCII characters enclosed in single-quotation marks. Internally, the pROBE+ debugger converts all string constants into 32-bit binary values. Strings with less than four characters are right-justified, with the remaining bytes zero-filled. The following are examples:
'A' is equivalent to 0x00000041.
'ab' is equivalent to 0x00006162.
' B' is equivalent to 0x00002041.
You can specify pSOS+ objects either by name or by ID. A pound sign (#) indicates an ID, otherwise the input expression represents the name. This convention allows names to contain nonprintable characters. For a description of pSOS+ objects, see pSOSystem System Concepts.
Examples:
You should specify the object name or ID wherever the pROBE+ syntax specifies any of the following:
<task>, <queue>, <semaphore>, <region>, <partition>
Some pROBE+ commands expect you to enter a date and/or time. A date must have the following format:
dd-mmm-yyyy
An example of a date is 13-AUG-1990. The numbers for day and year are decimal, and all four digits of the year must be entered. The month is always entered by using its standard three-character mnemonic (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, and Dec).
A time specification must have the following format:
hh:mm[:ss]
An example of a time is 14:12:45. The entry for hours has a 24-hour notation with decimal numbers. The entry for minutes and seconds consists of two digits each from 0 through 59. You can omit the seconds field or enter 0. For example, 14:12 and 14:12:0 are the same.
pROBE+ output conventions are similar to input conventions.
For output, the pROBE+ debugger provides a paging system that divides output into pages of 24 lines each. After printing 23 lines, the pROBE+ debugger pauses and displays the following prompt:
- More -
If you enter any nonnumeric character, the pROBE+ debugger resumes output and displays another 23 lines before the next pause. If you enter a number (1 through 9), the pROBE+ debugger resumes output and displays that number of lines before the next pause. You can disable paging with the FL command (see Section 3.7.1, ``FL - Set pROBE+ Flags"), in which case output is continuous.
XON/XOFF protocol is also supported. You can suspend transmission of output by pressing [Ctrl-S] and resume it by pressing [Ctrl-Q].
Numerical output is always hexadecimal except for the following:
For a disassembled MIPS instruction, constants are hexadecimal, but register names may contain decimal numbers. For example, the "16" in "r16" is decimal. See also Section 3.1.6, ``DI - Disassemble Memory."
The pROBE+ debugger displays the following for pSOS+ objects:
For a description of pSOS+ objects, see pSOSystem System Concepts.
Before printing the name, the pROBE+ debugger determines whether the name contains nonprintable characters. If so, it prints the name as a 32-bit hexadecimal number, otherwise it prints a character string in single quotation marks. If the object is global, an asterisk (*) appears at the end of the ID. The following are examples of pSOS+ object displays:
Occasionally, in place of an object name and ID, the pROBE+ debugger displays the following:
** DEL/BAD ID **
This indicates that the ID is invalid. An ID can be invalid if an object has been deleted or if an application passes an invalid ID when it makes a service call to the pSOS+ kernel.
Date and time output conventions are the same as for input:
The pROBE+ debugger maintains a set of flags that affects its behavior. The initial setting for each flag is user-specified in the configuration table parameter td_flags. After the pROBE+ debugger starts up, flag settings can be examined and/or altered with the FL command. Refer to Chapter 4, ``Installation and Configuration,'' for a description of each flag.
The pROBE+ debugger does not completely disable interrupts while it is running. This is important because, in some real-time applications, certain interrupts must be serviced to maintain system operation. With the pROBE+ debugger, you can control the interrupt level at which it operates so that interrupts can continue to receive servicing during pROBE+ execution. The interrupt levels are (0 or 1).
The pROBE+ debugger executes at a level that is the higher of the pROBE+ interrupt level and the interrupt level of the application at the time of the most recent break. For example, if the pROBE+ interrupt level is 1 and a break occurs in code running at level 0, then the pROBE+ debugger executes at level 1. However, if a break occurs in code running at level 1 and the pROBE+ interrupt level is 0, the pROBE+ debugger executes at level 1.
Do not confuse the pROBE+ interrupt level with the interrupt level of an application. The C0-SR register contains the interrupt enable current [IEc] bit. The C0-SR[IEc] bit indicates whether interrupts are enabled when the application resumes execution. If C0-SR[IEc] is 1, the IL is 0. If C0-SR[IEc] is 0, the IL is 1.
The initial pROBE+ interrupt is specified in the pROBE+ configuration table entry td_flags. After starting the pROBE+ debugger, you can examine and/or change the interrupt with the IL command (see Section 3.7.2, ``IL - Set pROBE+ Interrupt Level").
Ordinarily, you should set the pROBE+ interrupt level to 1. However, certain special conditions may require a lower setting. For example:
Typically, the pROBE+ debugger starts before the pSOS+ kernel or any other software components. This initial position of the pROBE+ debugger in the startup sequence allows you to download, set up, and start some or all of the elements in the application. This is particularly useful during preliminary debugging. However, the pROBE+ debugger accepts certain commands and options only after the pSOS+ kernel starts up. This list includes:
In addition, certain optional qualifiers to commands (for example, <task> for PR and DB) are not accepted before the pSOS+ kernel starts up. In such cases, the pROBE+ debugger rejects the command and displays the following error message:
pSOS+ Not Initialized
All other commands are permissible both before and after the pSOS+ kernel is started. These commands include memory and register commands, start and resume execution commands, loading commands, and instruction/memory access break commands.
Copyright © 1996, Integrated Systems, Inc. All rights reserved.