home *** CD-ROM | disk | FTP | other *** search
Text File | 1997-05-30 | 50.4 KB | 1,696 lines |
- < Using OS/2 Warp System Debugging Tools
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- July 18, 1997
-
-
-
-
-
- OS/2 Fix Distribution
- Personal System Products
- Austin, Tx
-
-
-
-
-
- (c) Copyright International Business Machines Corporation, 1997.
- All rights Reserved.
-
- July 18, 1997 - Warp Debug
-
-
-
- July 18, 1997 - Warp Debug
-
- CONTENTS
-
-
- Overview ......................................................... 1
- Dump Formatter ................................................... 1
- Kernel Debugger .................................................. 2
- System Trace Utilities ........................................... 2
- TRACEGET ....................................................... 3
- TRSPOOL ........................................................ 3
- DTRACE ......................................................... 5
- User Guide ..................................................... 5
- DTRACE functions ............................................... 8
- Format of the Trace Program File .............................. 11
- RPN command syntax ............................................ 12
- File header ..................................................... 13
- Tracepoint header ............................................... 15
- The Trace Program ............................................... 17
- Trace Program Examples .......................................... 27
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Contents ii
-
- July 18, 1997 - Warp Debug
-
- OVERVIEW
-
- This README file contains information for the users of the system
- debugging tools:
-
- ■ Dump Formatter
- ■ Kernel Debugger
- ■ System Trace Utilities
-
-
-
- DUMP FORMATTER
-
- With WARP Server SMP and Warp 4.0, each FixPak installs the
- corresponding version of the Dump Formatter and related symbol files
- in
-
- \OS2\SYSTEM\PMDF Warp Server SMP
- \OS2\PDPSI\PMDF\WARP4 Warp 4.0
-
-
- If multiple versions of the Dump Formatter are required then they must
- be installed in directories outside the \OS2 directory tree since the
- fix installation tool will replace all versions of DF_RET.EXE and
- DF_DEB.EXE if finds in the \OS2 directory tree.
-
- Thus, prior to installation of a FixPak the
-
- \OS2\SYSTEM\PMDF Warp Server SMP
- \OS2\PDPSI\PMDF\WARP4 Warp 4.0
-
-
- directory should be copied if it is required for use after the FixPak
- has been installed.
-
- When multiple versions of the Dump Formatter are used the
-
- \OS2\SYSTEM\PMDF\PMDFVERS.LST Warp Server SMP
- \OS2\PDPSI\PMDF\WARP4\PMDFVERS.LST Warp 4.0
-
-
- file should be updated to cross reference each system version with its
- corresponding Dump Formatter directory location. The format of
- PMDFVERS.LST entries are:
-
- df-path;build-level;description
-
-
- Dump Formatters and fuller sets of symbols file for various OS/2
- versions may be obtained from:
-
-
-
- Overview 1
-
- July 18, 1997 - Warp Debug
-
- ftp:\\service.boulder.ibm.com\ps\products\os2\fixes\debug
-
-
-
-
- KERNEL DEBUGGER
-
- If the debug kernel is installed when a FixPak is installed then it
- will be replaced by the retail version of new version of the kernel,
- together with any symbol files are that are installed by the FixPak.
- If these files are required after installation of a FixPak then they
- should be copied to a private directory not on the boot drive.
-
- After installation of a FixPak the associated debug (ALLSTRICT and
- HSTRICT) kernel and system symbol files may be obtained from:
-
- ftp:\\service.boulder.ibm.com\ps\products\os2\fixes\debug
-
-
-
-
- SYSTEM TRACE UTILITIES
-
- Each FixPak installs version specific trace formatting (*.TFF) and
- definition files (*.TDF) in the \OS2\SYSTEM\TRACE directory. If users
- service multiple versions of OS2 they may need to copy the *.TFF files
- to a private directory in order to allow a trace taken from another
- system version to format correctly. The /T= parameter of TRACEFMT
- will allow the user to specify the TFF path from the command line. The
- TFF path may also be specified by selecting the File pull-down and Set
- TFF path option of TRACEFMT.
-
- In general TFFs are changed for a given release of OS2 except for
- corrective purposes. The TDFs however are dependent on being precisely
- matched to the module version to which they apply. TDFs are used by
- the TRACE command to apply dynamic trace points. If the debug kernel
- is installed then the associated OS2KRNL.TDF must be installed if
- kernel tracing is required. The TDFs for the HSTRICT and ALLSTRICT
- kernels are packaged with the dump formatter symbols as OS2KRNLB.TDF
- and OS2KRNLD.TDF. These may be obtained from:
-
- ftp:\\service.boulder.ibm.com\ps\products\os2\fixes\debug
-
-
- Note: With OS/2 3.0 Fix Pack 29 and OS/2 4.0 GA the combined
- SYSTEM.TDF and SYSTEM.TFFs were obsoleted. Individual TFFs and TDFs
- are installed. However SYSTEM.TFF is sill supported by the TRACEFMT
- command and may be used for earlier versions of OS/2.
-
- Warp 3.0 FixPak 29 and Warp 4.0 GA introduce three new trace
- utilities: TRACEGET, TRSPOOL and DTRACE. These are described below:
-
-
- Overview 2
-
- July 18, 1997 - Warp Debug
-
- TRACEGET
-
- The TACEGET command will extract the System Trace buffer and save it
- in a file. The command syntax:
-
- TRACEGET file
-
-
-
-
- TRSPOOL
-
- TRSPOOL extends the usefulness of the OS/2 system trace facility by
- capturing the single system trace buffer and spooling it a cyclically
- used sequence of disk files. The captured trace disk files may be
- later formatted using TRACEFMT, by selecting the Open option of the
- File menu.
-
- TRSPOOL operates by polling the system trace buffer until halted by
- pressing Ctrl-C.
-
- The system trace buffer may be captured at regular intervals or by
- "Adaptive polling".
-
- Adaptive polling mode attempts to capture the system trace buffer when
- the system trace buffer is a certain per-centage used. The polling
- time is adjusted according to the actual usage of the last captured
- buffer. The adaptive algorithm has a built in hysteresis to avoid the
- affects of short bursts of intensive tracing or moments of inactivity.
- Because there is no system notification of when the trace buffer
- wraps, TRSPOOL may loose trace events under very erratic system
- performance.
-
- TRSPOOL will operate without parameter specification in adaptive
- polling mode. However the following parameters may be specified:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Overview 3
-
- July 18, 1997 - Warp Debug
-
- /An Specifies the target per-centage trace buffer usage for adaptive
- spooling.
- Default: 30(%%). This is the default spooling method.
- /Fn Specifies the number of spooled trace buffer files.
- Default: 10.
- /Tn Specifies fixed time trace buffer spooling, in mili-seconds,
- or if specified with /A the initial sleep time.
- Default: Adaptive spooling - /A option + initial sleep time
- 2000ms.
- Note: when adaptive spooling is active, the sleep time interval
- is limitated to a range between 50ms and 60000ms. Any time interval
- may be specified with fixed time spooling.
- /Q Specifies quiet operation - messages are suppressed.
- Default: non-quiet mode.
- /W Specifies write-through mode. Trace files are pre-allocated
- and opened in write-through mode.
- Default: normal file open mode.
- /P Specifies trace files should be pre-allocated.
- Default: files are not pre-allocated unless /W is specified.
- /? Display help.
-
-
- The generated trace buffer files have names: TRACEBUF.nnn, where nnn
- ranges from 000 to the value specified by /Fn.
-
- The /W option is provided for use where tracing precedes a system
- outage and there is no orderly shutdown. This disadvantage of using
- this option is that writing to the TRACEBUG.nnn files is made
- synchronous, consequently the time take to spool the trace buffer will
- be longer.
-
- The /P option pre-allocates and initialises all TRACEBUF.nnn files to
- nulls. This ensures that space is available on hard disk for the
- requisite TRACEBUF.nnn files. In addition there is an improved chance
- that data written to these files will be committed should a system
- outage occur. The /P option is implied by /W.
-
- Note: Neither of the /P or /W options is fail-safe. If a system outage
- occurs after the trace buffer has been read, but before data has been
- committed to disk then it will not be recorded. However, the segment
- allocated by TRSPOOL for the local copy of the trace buffer is
- reported at initialisation. This may also be located from a system
- dump by searching for the eye-catcher "TRSPOOL RAS DATA" in the
- TRSPOOL stack segment. The trace buffer selector follows the
- eye-catcher. The file number of the last file written is also recorded
- as a word following the trace buffer selector.
-
- To use TRSPOOL, the system trace must first be enabled by specifying
-
- TRACEBUF=63
-
-
-
- Overview 4
-
- July 18, 1997 - Warp Debug
-
- in the CONFIG.SYS.
-
- The system trace is activated by using the TRACE command or TRACE=
- statement of CONFIG.SYS.
-
-
- DTRACE
-
- DTRACE exploits the DosDynamicTrace facility at a low-level. This may
- be used to implement ad-hoc tracing in DLLs, Device Drivers, File
- System Drivers and the OS2 Kernel. EXE files are also included.
- Dynamic Trace may be used for diagnostic purposes and performance
- monitoring.
-
- Dynamic trace is a facility available within the OS/2 kernel.
- Tracepoints are implemented by modifying dynamically code of modules
- loaded in memory. This is in contrast to Static tracepoints which are
- implemented when applications call the DosSysTrace API.
-
- Dynamic tracepoints are implemented by replacing machine instructions
- at specified points within a module by INT3 instructions. This is
- done by the DosDynamicTrace API. When the INT3 instruction executes,
- control is passed to the system TRAP3 exception handler, which in turn
- passes control to Dynamic Trace if the TRAP3 was due to a known
- tracepoint. Dynamic Trace interprets instructions, which are in
- Reverse Polish Notation, that were passed to it when the trace point
- was defined. These instructions allow data to be logged in the system
- trace buffer and local variables associated with the tracepoint to be
- manipulated. After the RPN instruction stream is complete, the
- original instruction is single-stepped then normal execution resumed.
-
- The overhead of dynamic trace is a few milliseconds per tracepoint.
- Normally this is small enough not to make a noticeable difference to
- system performance.
-
-
- USER GUIDE
-
- Command Syntax:
-
- DTRACE APPLY trpgm_file [/h=hmte │ /n=name] [/m=major] [/i=id] [/q] [/d]
- DTRACE BUILDTDF trpgm_file [tdf_file] [/m=major] [/n=name] [/i=id] [/q]
- [/d]
- DTRACE REMOVE [trpgm_file │ /h=hmte │ /n=name] [/q] [/d]
- DTRACE CLEARALL [/q] [/d]
- DTRACE QUERY [/h=hmte │ /n=name] [/i=id] [/q] [/d]
- DTRACE GETVARS [/h=hmte │ /n=name] [/i=id] [/v=n:m] [/z] [/r] [/q] [/d]
-
-
- Numeric values may be specified in hexadecimal or decimal. Hexadecimal
- values are signified with either the (C -style) 0x prefix, e.g. 0x2f8;
-
-
- Overview 5
-
- July 18, 1997 - Warp Debug
-
- or the (assembler-style) h suffix, e.g. 2f8h
-
- Optional command line parameters (/i, /m, /h and /n) set defaults
- which override the default settings in the header of the trace program
- file. Overrides for specific tracepoints take precedence over the
- command line and the header in the trace program file.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Overview 6
-
- July 18, 1997 - Warp Debug
-
- hmte: module handle (any module with an MTE). May be specified also in
- the trace program file.
-
- name: module name.
- name may specify a simple name, a name and extension or a
- fully qualified name with path information.
-
- If a fully qualified name is specified then it is used without
- modification to determine the module handle. If this is unccessful
- the no attempt is made to search for the module.
-
- For partially specified names DTRACE attempts to work out the
- module handle according to the following assumptions:
-
- if a simple name without extension is specified then .DLL is
- assumed. If the DLL is not loaded then LIBPATH is used to search
- and load the DLL.
-
- All other module types must specify at the very least
- name and extension. If the module is not already loaded then
- PATH is seached for determine the fully qualified module name
- and hence the module handle.
-
-
- The following types of module may be traced:
-
- Physical Device Drivers
- Virtual Device Drivers
- File System Drivers
- Printer Drivers
- Queue Drivers
- Custom DLLs (DLLs with non-DLL extension names)
- EXE modules
- Custom EXE modules (EXEs with a non_EXE extension or no extension)
- Base device drivers.
- Any of the above in non-PATH or LIBPATH directories.
-
- For BASEDEVs the system records the path name as
- being the root directory of the boot drive regardless of which
- directory the driver was loaded from. DTRACE will attempt to
- derive the module handle of a BASEDEV automatically if only
- name and extension are supplied.
-
- Build BUILDTDF may be used for non-DLL modules however under
- OS/2 3.0+ JR09872 is required for the TRACE command to process
- TDFs for non-DLL modules.
-
- major: The default major code. May also be specified in the trace program
- file. Major codes specified with specific tracepoints in the trace
- program file override any other specification.
-
-
-
- Overview 7
-
- July 18, 1997 - Warp Debug
-
- id: Superset grouping of tracepoints. May include more than one major
- code. Defaults to 0 when defining tracepoints. NB dynamic trace
- generated by TRCUST uses id=0, unless overridden by TDFID=. Id may
- be specified also in the trace program file.
-
- Id is intended for use with the QUERY and GETVARS functions.
- These functions will assume all non-zero ids are to be processed if
- id is not specified.
-
- n:m Variables n to m. Dynamic Trace variables are referred to by index number
- starting with 0. Number of variables defined is determined by the
- vars= statement of the trace program file.
-
- z: Zero variables.
-
- r: Read variables.
-
- q: Suppress copyright and incidental informational messages.
-
- d: Debugging switch. This is provided for diagnosing problems with DTRACE.
- It should only be used at the request of Service personnel.
- Note: DTRACE also has associated DTRACE.TDF and TRC0063.TFF files which
- permit inernal tracing of DTRACE itself by means of TRACE ON DTRACE.EXE
-
- trpgm_file: Trace program file. If a simple name is specified then
- an extension of .RPN is assumed.
- See below. for the file description.
-
- tdf_fiie: The generated Trace Definition File name. See below.
-
-
- Options that may also be specified in the trace program file are
- overridden when specified on the command line.
-
-
- DTRACE FUNCTIONS
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Overview 8
-
- July 18, 1997 - Warp Debug
-
- APPLY: Insert dynamic tracepoints, specified by the trace program
- file for a module specified by name or hmte. A full
- description of the trace program file is given below.
-
- BUILDTDF: Build a Trace Definition File (TDF) from the definitions
- supplied in the trace program file. The OS/2 TRACE command
- may be used subsequently to apply or removed all or selected
- tracepoints defined in the TDF.
-
- TFD files must be stored in the current directory, DPATH or
- in \OS2\SYSTEM\TRACE.
-
- BUILDTDF permits group and type classifications to be
- specified with each tracepoint. These may be used by the
- OS/2 TRACE command to select subsets of tracepoints to be
- activated. The TRACE command also permits specific minor
- codes, or ranges of minor codes to be specified.
-
- The syntax for the TRACE command using a TDF file is as
- follows:
-
- TRACE ON│OFF tdf_file
-
- or TRACE ON tdf_file(minor spec)
-
- or TRACE ON tdf_file(group spec)
-
- or TRACE ON tdf_file(type spec)
-
- where:
-
- tdf_file is the file name, excluding path and
- extension of the tdf_file.
-
- minor spec is a combination of minor code or
- ranges of minor codes separated by commas.
- In the following example KERNEL minor codes
- (decimal) 1, 2 through 10 and 401 are traced.
-
- TRACE ON KERNEL(1,2-10,401)
-
- group spec is a combination of groups separated by
- commas. Each group may further specify one or more
- types.
- In the following example KERNEL group FS (with
- all types) and TK with types PRE and POST is traced.
-
- TRACE ON KERNEL(FS,TK:PRE+POST)
-
- type spec is a combination of types separated by
- commas. In the following example all KERNEL PRE and
-
-
- Overview 9
-
- July 18, 1997 - Warp Debug
-
- POST type tracepoints are traced.
-
- TRACE ON KERNEL(PRE,POST)
-
- Notes:
-
- Due to a limitation with the TRACE command, BUILDTDF
- can only be used to create TDFs for DLLs and OS2KRNL unless
- JR09872 is installed.
-
- If the TRACE command fails to find the TDF in the DPATH it
- will look in \OS2\SYSTEM\TRACE\SYSTEM.TDF before looking
- finally for \OS2\SYSTEM\TRACE\tdf_file. The becomes an
- important consideration when one of the pre-existing system
- trace definitions is modified or replaced.
-
- The TRACE command fails to find OS2KRNL.TDF in
- in OS2\SYSTEM\TRACE if executed from a command line where
- the current directory is other than on the boot drive.
- APAR PJ23293 addresses this problem.
-
- See the accompanying TRCTOOLS documentation for further
- information of modifying and replacing system trace
- definitions.
-
- REMOVE: Remove dynamic tracepoints for a module specified by name or
- handle.
-
- CLEARALL: Remove all dynamic tracepoints for all modules.
-
- QUERY: Query by id or hmte all traced modules, their ids and number
- of Dynamic Trace variables.
-
- By default all non-zero ids are queried.
-
- Note: Standard system dynamic trace definitions and user
- definitions that are defined using TRCUST are always defined
- with id=0.
-
- GETVARS: Retrieve and/or set to zero the Dynamic Trace variables for
- a given id or module.
-
- By default all variables of all non-zero ids are retrieved.
-
- Variables are displayed as a list in hexadecimal and decimal
- formats.
-
-
-
-
-
-
-
- Overview 10
-
- July 18, 1997 - Warp Debug
-
- FORMAT OF THE TRACE PROGRAM FILE
-
- This file specifies one or more tracepoints for a module. Each
- tracepoint may have an associated program that species to DynamicTrace
- what variables to manipulate and what data to log in the system trace
- buffer when the tracepoint fires.
-
- Comments may appear after the instructions or on whole lines. They are
- prefixed with a semi-colon.
-
- Blanks are ignored by DTRACE.
-
- The trace program consists of a header followed by one or more
- tracepoint definitions. Each tracepoint definition has a header
- followed by an optional program specified as a sequence of Reverse
- Polish Notation instructions. The RPN commands use a circular stack
- of 16 double-word elements as a work space. The top element of the
- stack is the only immediately accessible element. As each element is
- accessed the top of stack (TOS) pointer is moved to point to the
- preceding stack element - this is referred to as a POP operation even
- though the popped stack element is not actually removed from the
- stack. Thus an RPN command that takes two stack parameters pops the
- two topmost elements from the stack. Whenever data on the stack is
- referenced it is done so in integral numbers of elements. Thus
- pushing or popping a word will move the stack pointer as if a
- double-word had been pushed or popped. Word and byte length data is
- always padded to a double-word when pushed on to the stack.
-
- The trace program may be used for three purposes (which may be
- combined):
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Overview 11
-
- July 18, 1997 - Warp Debug
-
- 1) To cause one or more items of data to be logged in the system
- trace buffer.
-
- 2) To update local variables which are associated with a particular
- module being traced.
- 3) To detect a specific condition (value of a register, value in
- memory or code path) and force a System Dump when that condition
- occurs.
-
- NB: this function is not available in all releases of OS/2.
-
-
- The entire set of trace definitions and local variables for a
- particular module is referred to as a Dynamic Trace Object (DTO).
-
-
- One DTO may exist per module. DosDynamicTrace will not merge an
- existing DTO with additional definitions for the same module.
-
-
- DTOs for several modules may be grouped under the same id - see
- the /i parameter above and the id= parameter below.
-
-
- RPN COMMAND SYNTAX
-
- RPN command syntax rules are as follows:
-
- [label:] operator [operand1 [,operand2 [, ..... ]]] [; comment]
- [;comment]
-
- Where:
-
- label
- is an optional string of 1 - 255 characters, excluding ':',
- initiated with a non-numeric character and delimited by a ':'.
- A label must always precede a command, but the command my be
- coded on the following line. Labels are for use by the jump
- instructions as an alternative to coding an explicit numeric
- value. Backward jumping is not permitted.
-
- operator
- is one of the valid RPN commands listed below.
-
- operand1,...
- are operands as defined by each RPN command.
-
-
- A comment is initiated by a ';' and may follow on the same line as a
- command or on a new line.
-
-
-
- Overview 12
-
- July 18, 1997 - Warp Debug
-
- RPN commands,labels and operators are case insensitive.
-
- Imbedded blanks are ignored.
-
- Data logged by DTRACE may be formatted using TRACEFMT. The format will
- be in hexadecimal bytes unless a custom trace format file has been
- generated using the TRCUST utility. When using TRCUST, specify the TP
- parameter as @STATIC. The prefixes %P and %R may be used. See the OS/2
- Debugging Handbook (SBOF-8617).
-
- Refer to the OS/2 Debugging Handbook, Volume 1 and 3 for further
- information on the system trace utility.
-
-
- FILE HEADER
-
- Zero or more of the following may be specified, in any order:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Overview 13
-
- July 18, 1997 - Warp Debug
-
- vars= Number of Dynamic Trace variables to be defined
- (initialised to zero).
- major= Major code
- hmte= Module handle
- id= DTO grouping id - not to be confused with typedef or
- groupdef ids. This is a gouping of Dynamic Trace Objects.
- The default DTO id is 0. Id is used with GETVARS and QUERY
- functions.
- logmax= Maximum data to be logged in the trace buffer (default 512
- bytes).
- name= Module name. See name specification above.
- typedef= Defines a type keyword. This is used only by the BUILDTDF
- function. The definition is specified as:
-
- typedef=keyword,id.
-
- Keyword is a string, which is used by type statements, see
- below.
-
- id is a value equal to a power of two in the range 2**1 to
- 2**31.
-
- Multple typedef statements my be specified.
-
- groupdef= Defines a group keyword. This is used only by the BUILDTDF
- function. The definition is specified as:
-
- groupdef=keyword,id.
-
- Keyword is a string, which is used by group statements, see
- below.
-
- id is a value in the rande 0x to 0xffffffff.
-
- Multple groupdef statements my be specified.
-
-
- Major code and hmte are required but may be specified or overridden by
- the command line parameters.
-
- If name and hmte are specified then the first parameter encountered
- takes precedence.
-
- id defaults to zero.
-
- vars defaults to zero.
-
- logmax defaults to 512.
-
- The BUILDTDF function requires all definitions to be completely
- specified within the trace program file. Furthermore name must be
-
-
- Overview 14
-
- July 18, 1997 - Warp Debug
-
- specified rather than a module's hmte.
-
-
- TRACEPOINT HEADER
-
- The following must be specified, in any order, with the exception that
- minor= must appear first.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Overview 15
-
- July 18, 1997 - Warp Debug
-
- minor= Tracepoint minor code
-
- major= Tracepoint major code - this may be respecified for
- each tracepoint and overrides the major code specified
- in the file header. This applies to which the current
- tracepoint.
-
- opcode= Byte of opcode in module where the tracepoint will be
- inserted.
-
- object= Relative object of module where trace point will be
- applied. Objects are numbered from 1.
-
- offset= Offset within object where tracepoint will be applied.
-
- major= The major code override for a specific tracepoint. The
- default major code must be specified in the header to the
- trace program file.
-
- type= Type is an optional parameter that is used only by the
- BUILDTDF function. Its purpose is to associate with each
- tracepoint one or more types. These are used by the
- OS/2 TRACE command as a means of selecting a subset of the
- tracepoints defined in the generated TDF. The operand to the
- type= statement is be specified as a sequence of one or more
- keyword names defined by typedef statements, separated
- '+' signs as follows:
-
- type=[keyword1[+keyword2 ...]]
-
- A typical use of the trace type is to associate a particular
- tracepoint with a particular characteristic. For example,
- tracepoints in DOSCALL1 and KERNEL use type=PRE for API
- pre-invocation tracepoints and type=POST for
- API post-invocation tracepoints.
-
- Only one type statement is permissible per tracepoint.
-
- group= Group is an optional parameter that is used only by the
- BUILDTDF function. Its purpose is to associate related
- subsets of the set of tracepoints defined in the generated
- TDF. These are used by the OS/2 TRACE command as a means of
- selecting a subset of the tracepoints defined in the
- generated TDF. The operand to the group= statement is
- specified as a single keyword name that has been defined by
- the groupdef statements.
-
- A typical use of the trace group is to associate all
- tracepoints that relate to a particular component of the
- system. For example, the group FS is used to associate all
- tracepionts in DOSCALL1 and KERNEL that relate to the
-
-
- Overview 16
-
- July 18, 1997 - Warp Debug
-
- file-system.
-
- Group is intended to be an exclusive classification of
- tracepoints compared with Type. Only one group may be
- associated with a particular tracepoint, whereas a
- tracepoint may have several type.
-
- Only one group statement is permissible per tracepoint.
-
-
-
-
- THE TRACE PROGRAM
-
- Trace program may specify any meaningful combination of the following
- RPN instructions. (TOS = Top of Stack).
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Overview 17
-
- July 18, 1997 - Warp Debug
-
- Leng Mnem Operand(s) Description
- -th -onic
- Bytes
- ---------------------------------------------------------------------
- 1 Abort Abort - Log No Information
- 1 Add Add top 2 DWORD stack elements
- 1 Cnvrt DXS Convert Dword to Segmented
- 1 Cnvrt FXS Convert Flat to Segmented
- 1 Cnvrt SXD Convert Segmented to Dword
- 1 Cnvrt SXF Convert Segmented to Flat
- 3 Inc V,word Increment Immediate Variable
- 1 Inc VIi Increment indexed Variable
- 3 Jmp N,word Jump forward N bytes or to a label
- 3 Jmp NN,word Jump forward N bytes or to a label if TOS < 0
- 3 Jmp PN,word Jump forward N bytes or to a label if TOS > 0
- 3 Jmp ZN,word Jump forward N bytes or to a label if TOS = 0
- 1 Log ARF Log ASCIIZ at Flat Range
- 1 Log ARS Log ASCIIZ at Segmented Range
- 2 Log DN,byte Log N DWORDs
- 1 Log MRF Log Memory at Flat Range
- 1 Log MRS Log Memory at Segmented Range
- 2 Log WN,byte Log N WORDs
- 3 Move V,word Move top of stack to Immediate Var.
- 1 Move VIi Move top of stack to indexed Var.
- 1 Mul Multiply top 2 stack elements
- 3 Or V,word OR immed. indexed variable with TOS
- 2 Pop N,byte Rotate stack down (pop) N times
- 1 Push CS Push contents of (CS)
- 5 Push D,dword Push DWORD Immediate
- 1 Push DS Push contents of (DS)
- 1 Push EAX Push contents of (EAX)
- 1 Push EBP Push contents of (EBP)
- 1 Push EBX Push contents of (EBX)
- 1 Push ECX Push contents of (ECX)
- 1 Push EDI Push contents of (EDI)
- 1 Push EDX Push contents of (EDX)
- 1 Push EFlags Push contents of (EFlags)
- 1 Push EIP Push contents of (EIP)
- 1 Push ES Push contents of (ES)
- 1 Push ESI Push contents of (ESI)
- 1 Push ESP Push contents of (ESP)
- 1 Push FIF Push Flat Indirect Flat
- 1 Push FS Push contents of (FS)
- 1 Push GS Push contents of (GS)
- 5 Push OXF,dword Push (DWORD Object to Flat Address)
- 2 Push OXS,byte Push (Object to Selector)
- 1 Push SIS Push Segmented Indirect Segmented
- 1 Push SS Push contents of (SS)
- 3 Push V,word Push Immediate Variable
- 1 Push VIi Push indexed Variable
- 3 Push W,word Push WORD Immediate
-
-
- Overview 18
-
- July 18, 1997 - Warp Debug
-
- 1 Push WIS Push WORD Indirect Segmented
- 1 Remove Remove the current tracepoint
- 1 Sub Subtract top 2 stack elements
- 1 SysDump Force a system Dump (*)
- 1 And AND top 2 stack elements (*)
- 1 Or OR top 2 stack elements (*)
- 1 Xor XOR top 2 stack elements (*)
- 1 Neg 1's complement TOS (*)
- 1 Exit Log data and exit tracepoint (*)
- 3 SetMin W,word Override the tracepoint minor code with 'word' (**)
- 1 SetMin Override the tracepoint minor code from TOS (**)
- 3 SetMaj W,word Override the tracepoint major code with 'word' (**)
- 1 SetMaj Override the tracepoint major code from TOS (**)
- 1 Xchg Swap top two elements on the stack. (**)
-
-
- * Each of the commands flagged with (*) require APAR PJ22196 applying
- to the OS2KRNL (available with Warp 3.0 FixPak 29 and Warp 4.0 GA).
-
- ** Each of the commands flagged with (**) will be supported the GA
- version of OS/2 Warp 4.0 and Warp 3.0 FixPak 29.
-
- Each of these commands acts as follows:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Overview 19
-
- July 18, 1997 - Warp Debug
-
- PUSH: Push a value on to the RPN stack
-
- In Push SS and Push ESP the value of SS and ESP is dependent on whether the
- tracepoint occurred at ring 0 or not.
-
- In Push EIP, the EIP on the stack is one too large, due to the
- INT3.
-
- Push W takes a word operand, zero extends it, and pushes
- it on to the RPN stack.
-
- Push OXS converts its byte operand into a selector,
- zero extends that value, and pushes it on to the stack.
- The byte operand is on object number of the module which
- is currenlty being traced.
- Because MTEs may eventually become nonresident, the selectors
- (up to 256) are stored in an array by DynamicTrace when the tracepoints
- were inserted. The word operand indexes this array to get the sel.
-
- Push WIS pops an offset, then a selector, from the RPN stack,
- fetches the user word at that 16:16 address, zero extends it,
- and pushes that on to the RPN stack.
- If the address is invalid or not present, a GP fault or Page
- fault record will be logged in the buffer, and the interpreter
- will exit.
-
- Push SIS pops an offset, then a selector, from the RPN stack,
- fetches the user dword at that 16:16 address and pushes that on to
- the RPN stack in the segmented address format.* That is,
- the high word (selector) is zero extended and pushed, and then
- the low word (offset) is zero extended and pushed.
- If the address is invalid or not present, a GP fault or Page
- fault record will be logged in the buffer, and the interpreter
- will exit.
-
- Push OXF converts its dword operand into a flat address,
- and pushes that on to the stack. See description of PUSH OXS for
- more details.
-
- Push FIF pops a Dword from the RPN stack, and then
- pushes the dword at that flat address on to the stack.
-
- Push V takes a word operand. Push V uses that to index
- to the Dynamic Trace variable in the current DTO, and pushes the value
- it finds there.
-
- Push VIi fetches an index of a Dynamic Trace variable from
- the top of the stack, (without doing a pop), and then
- pushes the value of that variable on to the stack.
-
- LOG: Log data in the system trace buffer.
-
-
- Overview 20
-
- July 18, 1997 - Warp Debug
-
-
- Log WN takes a byte operand, and repeats the following operation
- that many times:
- Pop the value from the top of the RPN stack
- Log the low word of that value, ignoring the high word.
- If the log overflows, the interpreter will exit without continuing,
- but will record as much as it can.
-
- Log MRS pops the following from the RPN stack:
- Offset
- Selector
- Length
-
- Log MRS then zero extends all these values, and attempts to
- move Length number of bytes from the given 16:16 address into
- the log buffer.
-
- The logged memory is prefixed by 3 bytes :
- Token byte of 0,
- Length word (length of logged information, in bytes)
-
- If an address is invalid or not present, a GP fault or Page
- fault record will be logged in the buffer, and the interpreter
- will exit.
-
- If the log overflows, the interpreter will exit without continuing,
- and without logging the memory.
-
- Log ARS pops the following from the RPN stack:
- Offset
- Selector
- Length
-
- Log ARS then zero extends all these values, and attempts to
- move Length number of bytes from the given 16:16 address into
- the log buffer. The data transfer will be discontinued if a
- null byte is fetched. The null byte will not be logged.
-
- The logged string is prefixed by 3 bytes :
- Token byte of 1,
- Length word (length of logged information, in bytes)
-
- If an address is invalid or not present, a GP fault or Page
- fault record will be logged in the buffer, and the interpreter
- will exit.
-
- If the log overflows, the interpreter will exit without continuing,
- and without logging the string.
-
- Log DN takes a byte operand, and repeats the following operation
- that many times:
-
-
- Overview 21
-
- July 18, 1997 - Warp Debug
-
- Pop the value from the top of the RPN stack
- Log the value (as a DWORD)
-
- If the log overflows, the interpreter will exit without continuing,
- but will record as much as it can.
-
- Log MRF pops the following from the RPN stack:
- Flat Address
- Length
-
- Log MRF then zero extends the length, and attempts to move
- Length number of bytes from the given flat address into
- the log buffer.
-
- The logged memory is prefixed by 3 bytes :
- Token byte of 0,
- Length word (length of logged information, in bytes)
-
- If an address is not present, a Page fault record will be
- logged in the buffer, and the interpreter will exit.
-
- If the log overflows, the interpreter will exit without continuing,
- and without logging the memory.
-
-
- Log ARF pops the following from the RPN stack:
- Flat Address
- Length
-
- Log ARF then zero extends the length, and attempts to move
- Length number of bytes from the given flat address into
- the log buffer. The data transfer will be discontinued if a
- null byte is fetched. The null byte will not be logged.
-
- The logged string is prefixed by 3 bytes :
- Token byte of 1,
- Length word (length of logged information, in bytes)
-
- If an address is not present, a Page fault record will be
- logged in the buffer, and the interpreter will exit.
-
- If the log overflows, the interpreter will exit without continuing,
- and without logging the string.
-
-
- When memory references are invalid the token byte is set to one of
- the following to indicate the type of error encountered:
-
- -1 Invalid Selector
- -2 Selector not Present
- -3 Page not Present
-
-
- Overview 22
-
- July 18, 1997 - Warp Debug
-
-
- The byte count is set to 4 and the data logged is the fault
- address.
-
-
- ADD/SUB/MUL/AND/OR/XOR: Add/Subtact/Multiply the top two stack
- elements
-
- Add pops two DWORDs from the RPN stack, and pushes their sum.
-
- Sub pops two DWORDs from the RPN stack, and pushes their
- difference. The first value popped is subtracted from the second.
-
- Mul pops two DWORDs from the RPN stack, and pushes their
- product.
-
- And pops two DWORDs from the RPN stack, and pushes their
- bit-wise AND.
-
- Or pops two DWORDs from the RPN stack, and pushes their
- bit-wise Or.
-
- Xor pops two DWORDs from the RPN stack, and pushes their
- bit-wise Xor.
-
- NEG: 1's complement top of stack.
-
- Neg 1's complements the TOS. No data is pushed or popped.
-
- CNVRT: Convert an address
-
- Cnvrt FXS pops a dword from the RPN stack, uses CRMA
- to translate that flat pointer to a 16:16 segmented pointer.
- It then pushes the selector (zero extended) and then the
- offset (zero extended) on to the stack.
-
- If the flat address does not lie within the compatibility
- region, the interpreter will exit immediately.
-
-
- Cnvrt SXF pops a selector, then an offset from the RPN stack,
- uses CRMA to translate that 16:16 pointer to a flat address,
- and pushes that flat address on to the stack.
-
- If the segmented address does not lie within the comparability
- region (GDT selector), the interpreter will exit immediately.
-
- Cnvrt DXS pops a DWORD, then pushes the high word (zero
- extended) and then the low word (zero extended). No CRMA is
- applied.
-
-
-
- Overview 23
-
- July 18, 1997 - Warp Debug
-
- Cnvrt SXD pops a low word, then a high word, then
- concatenates them into a DWORD, and pushes the result.
-
-
- POP: Pop a value from the RPN stack.
-
- Pop N takes a byte operand, and pops that many operands
- from the stack. As the values are not actually removed from
- the 16-element circular stack, Pop N effectively rotates
- the stack down.
-
-
- MOVE: Move a value to a variable.
-
- Move V takes a word operand. Move V then moves
- the value on the top of the stack to the Dynamic Trace variable
- in the current DTO at that index. The top of stack pointer
- is not changed.
-
- Move VIi pops a variable index off the top of the stack,
- and then pops a value off the top of the stack. The value is moved
- into the Dynamic Trace variable in the current DTO at that index.
- The variable and the index are then pushed back on to the stack,
- so that there is no net change on the stack at all.
-
- If the index is too large, the interpreter will exit with an error.
-
- INC: Increment a variable.
-
- Inc V takes a word operand, and increments the value in the
- Dynamic Trace variable in the current DTO at that index.
-
- Inc VIi fetches an index of a Dynamic Trace variable from
- the top of the stack, (without doing a pop), and then
- increments the value of that variable.
-
- If the index is too large, the interpreter will exit with an error.
-
-
- JMP: Jump forward in the RPN program.
-
- Jmp takes a word or label as operand. Jmp causes an
- unconditional jump forward in the instruction stream by
- that number of bytes, relative to the first byte of the next
- instruction.
-
- Therefore, Jmp by 0 bytes is a NOP (i.e jmp n,0)
-
-
- Jmp ZN takes a word or label as operand. Jmp ZN causes an
- unconditional jump forward in the instruction stream by
-
-
- Overview 24
-
- July 18, 1997 - Warp Debug
-
- that number of bytes, relative to the end of the instruction,
- but only if the value on the top of the stack is zero.
-
- Jmp NN takes a word or label operand. JmpNN causes an
- unconditional jump forward in the instruction stream by
- that number of bytes, relative to the end of the instruction,
- but only if the value on the top of the stack is negative.
-
- Jmp PN takes a word or label operand. Jmp PN causes an
- unconditional jump forward in the instruction stream by
- that number of bytes, relative to the end of the instruction,
- but only if the value on the top of the stack is positive.
-
- To prevent loops, no backward jumps are permitted. Also, it is
- illegal to jump into the code stream for another tracepoint.
-
- If labels are specified, DTRACE calculates the relative forward
- offset.
-
- REMOVE: Remove and Abort the current tracepoint.
-
- ABORT: Abort the tracepoint.
-
- Abort aborts the tracepoint entirely. The interpreter
- exits, but does not log any information. The data logged
- by this tracepoint is lost.
-
- However, alterations to the variables remain.
-
- By using Abort in combination with the Jmp
- instructions, unnecessary tracepoints can be filtered
- at run time, without crowding or overflowing the log buffer.
-
- EXIT: Exit the tracepoint.
-
- Exit terminates the tracepoint. The interpreter
- exits, and logs any information requested so far. The tracepoint
- remains in tact.
-
- By using Exit in combination with the Jmp
- instructions, specific conditions can be detected before logging
- additional data.
-
- If Exit is not available (systems without PJ22196) then the
- equivalent may be achieved by coding:
-
- jmp n,exit
- .
- .
- .
- .
-
-
- Overview 25
-
- July 18, 1997 - Warp Debug
-
- exit: jmp n,0 ;nop
-
-
- ORV: OR a Dynamic Trace variable with TOS.
-
- SYSDUMP: Force a System Dump.
-
- SysDump transfers control to the stand alone dump process. No
- data is logged. No system shutdown is performed and normal
- system execution is terminated immediately.
-
- Use this command with the Jmp instructions to detect illusive error
- conditions that require dump analysis at the point of error.
-
-
- SETMAJ: Override the tracepoint major code
-
- SetMaj takes the word value from the TSO to override the tracepoint
- major code. The override remains in effect until the current RPN
- program exits. Since data is not logged to the system trace buffer
- until the RPN program exits, the major code may be overridden at any
- point and remain effective for the whole trace entry.
-
- SetMaj may be specified with the W,word operand form. In this case
- 'word' forms the major code override.
- Note: The system trace facility currently admits only major codes
- from 0 - 255. Any specification of a major code greater than 255
- will be treated as if the high-order byte value is zero.
-
- This is provided to allow trace formatting templates to be
- selected dynamically according to the data logged.
-
- SETMIN: Override the tracepoint minor code
-
- SetMin takes the word value from the TSO to override the tracepoint
- minor code. The override remains in effect until the current RPN
- program exits. Since data is not logged to the system trace buffer
- until the RPN program exits, the minor code may be overridden at
- any point and remain effective for the whole trace entry.
-
- SetMin may be specified with the W,word operand form. In this case
- 'word' forms the minor code override.
-
- The system trace facility admit minor codes in the range from
- 0x0000 to 0xffff.
-
- This is provided to allow trace formatting templates to be
- selected dynamically according to the data logged.
-
-
- XCHG: Exchange the top two entries on the RPN Stack.
-
-
- Overview 26
-
- July 18, 1997 - Warp Debug
-
-
- Xchg pops the top two stack elements then pushes them back on to
- the stack in the reverse order.
-
-
-
-
- TRACE PROGRAM EXAMPLES
-
- The following examples illustrate common usages of the RPN commands.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Overview 27
-
- July 18, 1997 - Warp Debug
-
- 1) Log AX and BX registers:
-
- Push EBX
- Push EAX
- Log WN,2 ;lower 16 bits of each DWORD
-
- 2) Log EIP, EBP and EAX:
-
- Push EAX
- Push EBP
- Push EIP
- Log DN,3 ;3 DWORDs from the stack
-
- 3) Log value at EBP+ESI:
-
- Push W,4 ; push immediate value 4 - length to log
- Push EBP
- Push ESI
- Add ; add top two DWORDs - puts EBP+ESI on stack
- Log MRF ; log memory at flat address range
-
- 4) Log value at SS:SP using 16-bit segmented addressing:
-
- Push W,9 ; push immediate value 9 - length to log
- Push SS
- Push ESP
- Log MRS ; log memory at segmented address range
-
- 5) Log 16 bytes of data pointed to by the flat address at SS:SP+8
-
- Push W,16 ; push immediate value 16 - length to log
- Push SS
- Push ESP
- Push 8 ; offset 8
- Add ; 8 added to ESP value on stack
- Push SIS ; pop ESP then SS and pop Dword at that address
- ; as two Words extended to Dwords (as if it was a sel:offset).
- ; stack now contains the length and split address of data to log
- Cnvrt SXD ; Concatenate the two words to form a flat address
- Log MRF ; log the data.
-
-
-
-
-
-
-
-
-
-
-
-
-
- Overview 28