home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / trcusinf.zip / TRCUST.INF (.txt)
OS/2 Help File  |  1994-04-18  |  57KB  |  2,252 lines

  1.  
  2. ΓòÉΓòÉΓòÉ 1. Dynamic Trace Customizer (TRCUST) ΓòÉΓòÉΓòÉ
  3.  
  4. Dynamic Trace Customizer V2.1 for OS/2 18th April 94 
  5.  
  6. 3rd version released for the OS2PDP BETA 
  7.  
  8.  
  9. ΓòÉΓòÉΓòÉ 1.1. Description ΓòÉΓòÉΓòÉ
  10.  
  11. OS/2 provides a mechanism by which developers may dynamically apply tracepoints 
  12. in their module at run time.  This method eliminates all overhead of tracing 
  13. when tracing is disabled. It also allows the developer to add tracepoints 
  14. without modifying source code.  This reduces the possibility that adding a 
  15. tracepoint will induce errors into one's code.  OS/2 needs a binary file, for 
  16. each module being dynamically traced, which defines the tracepoints for the 
  17. module. 
  18.  
  19. The Trace Customizer (TRCUST) converts tracepoint definitions from a trace 
  20. source file (TSF) into dynamic tracepoints for the trace definition file (TDF), 
  21. and into formatting rules in the trace format file (TFF). 
  22.  
  23. Definitions 
  24.  
  25. .TSF  An ASCII file created by a developer which defines all dynamic 
  26.       tracepoints for a given module. TRCUST currently allows at most only one 
  27.       major code per TSF. 
  28.  
  29. .TDF  A binary file, created by TRCUST, using the .TSF file as input.  This 
  30.       file defines all tracepoints in the module in a manner acceptable to 
  31.       OS/2. This is used by the Trace Utility, TRACE. 
  32.  
  33. .TFF  A binary file also created by TRCUST using the .TSF file.  This file 
  34.       defines how all tracepoints will be formatted.  This is used by the Trace 
  35.       Formatter, TRACEFMT. 
  36.  
  37. major code A byte value used to identify the module being traced. TRCUST allows 
  38.       at most only one major code per TSF. 
  39.  
  40. minor code A word value used to uniquely identify each tracepoint. 
  41.  
  42. GROUP A value used to identify this tracepoint with tracepoints of the same 
  43.       category.  Examples are MEM for memory management and PM for Presentation 
  44.       Manager. For an example of uses of groups, see the online help for the 
  45.       TRACE command. 
  46.  
  47. TYPE  A value used to associate a subset of dynamic trace events within a 
  48.       module. Examples are PRE for pre-invocation, POST for post-invocation and 
  49.       API for API calls within a module. For an explanation and examples of 
  50.       uses of types, see the online help for the trace command. 
  51.  
  52.  
  53. ΓòÉΓòÉΓòÉ 1.2. Overview ΓòÉΓòÉΓòÉ
  54.  
  55.  
  56. ΓòÉΓòÉΓòÉ 1.2.1. File Naming and Location ΓòÉΓòÉΓòÉ
  57.  
  58. The TDF file name is the same as the module to be traced, but has a file 
  59. extension of "TDF". The TFF has a name of the form "TRC00xx.TFF" where xx is 
  60. the major code, e.g. a module with major code 0xC2 will generate a TFF with the 
  61. name "TRC00C2.TFF". This naming convention is used to allow TRACEFMT to 
  62. dynamically generate the TFF name given only the major code. 
  63.  
  64. TRCUST can be invoked to process a TSF or to combine several TFF files into a 
  65. single TFF. For processing a TSF, TRCUST is given the name of a TSF, and 
  66. optionally: 
  67.  
  68. o the desired name of the resulting TDF 
  69.  
  70. o the MAP file name 
  71.  
  72. o the error message level 
  73.  
  74. TRCUST will store the TSF tracepoint formatting specifications in the TFF file 
  75. and if the tracepoint specified was not for a static tracepoint, the TSF 
  76. tracepoint definition will be converted into the format required by the Trace 
  77. Utility and stored in the TDF file. On errors, TRCUST will display appropriate 
  78. messages, skip any tracepoint with errors in its definition, and continue 
  79. processing the next tracepoint definition. 
  80.  
  81. For combining TFF files that use the same major code, TRCUST is given the name 
  82. of the file containing the TFF filenames to combine and the name of the file to 
  83. contain the combined trace format statements. 
  84.  
  85. TRCUST will issue an error message and abort processing under the following 
  86. conditions: 
  87.  
  88. o the TSF cannot be opened 
  89.  
  90. o when combining TFF files, if any TFF input files cannot be read or if all TFF 
  91.   input files do not use the same major code 
  92.  
  93. o when defining dynamic tracepoints, if the executable module to contain the 
  94.   tracepoints cannot be read 
  95.  
  96. o the TDF, or TFF files cannot be written to 
  97.  
  98. o an error in the header definition in the TSF 
  99.  
  100. o a missing ending quote in the TSF 
  101.  
  102. Note:  TRCUST always returns 0 so that, when invoking it from a makefile, 
  103. processing of the rest of the makefile can continue if TRCUST aborts. 
  104.  
  105. Combine TFF files when several modules that use dynamic tracing use the same 
  106. major code.  The Trace Formatter can only use one TFF file per major code to 
  107. get formatting information from. After the TSF file for each module is run 
  108. through TRCUST to produce a TDF and TFF file, TRCUST can be invoked again, this 
  109. time using the combine TFF files option and a file that only contains the paths 
  110. to all the TFF files using the same major code. TRCUST will read all the TFF 
  111. files.  If all TFF files don't use the same major code, TRCUST will issue an 
  112. error message and abort. TRCUST will read each trace format record from the TFF 
  113. files and write them (in ascending order according to minor code) to the 
  114. destination TFF file given. 
  115.  
  116.  
  117. ΓòÉΓòÉΓòÉ 1.2.2. Invoking the Trace Customizer ΓòÉΓòÉΓòÉ
  118.  
  119. The Trace Customizer is a protect mode only program and must therefore be run 
  120. under OS/2. TRCUST may be invoked to combine TFF files or to process a TSF. The 
  121. syntax for combining TFF files is as follows: 
  122.  
  123.  
  124.     [d:][path]TRCUST [d:][path]tffsource /C=[d:][path]tffdest [/Wn]
  125.  
  126. where: 
  127.  
  128. TRCUST 
  129.  
  130.     is the name of the Trace Customizer program. A drive and path may 
  131.     optionally be specified to explicitly define the location of the Trace 
  132.     Customizer program, otherwise the program is searched for in the current 
  133.     directory, followed by looking along the path defined by the PATH 
  134.     environment variable. 
  135.  
  136. [d:][path]tffsource 
  137.  
  138.     is the name of a file containing fully qualified (including extensions) 
  139.     pathnames of TFF files to combine. Each TFF file must use the same major 
  140.     code and each filename in the tffsource file is separated by white space. 
  141.     This will combine all TFF files for the same major code into a single TFF 
  142.     file.  If duplicate minor code format definitions are found, the first 
  143.     format definition for the minor code remains valid, the duplicates are 
  144.     discarded and a warning message is issued. If no path is provided the 
  145.     tffsource file is searched for in the current directory, followed by using 
  146.     the current value of DPATH. 
  147.  
  148. [d:][path]tffdest 
  149.  
  150.     is the name of the trace format destination file to store the combined 
  151.     trace format definitions. 
  152.  
  153. /Wn (optional) 
  154.  
  155.     is the level of error messages to be displayed, where n can be 0, 1, or 2. 
  156.     The possible message levels are shown below along with the messages that 
  157.     each displays: 
  158.  
  159.     0 fatal and severe messages 
  160.     1 fatal, severe, and error messages 
  161.     2 all (fatal, severe, error, and warning) messages 
  162.  
  163.     A message level of 2 is the default. 
  164.  
  165. An example of a tffsource file for using the combine TFF files option of TRCUST 
  166. is: 
  167.  
  168.  
  169. \TFF\PROG1\TRC00C2.TFF \TFF\PROG2\TRC00C2.TFF
  170. \TFF\PROG3\TRC00C2.TFF \TFF\PROG4\TRC00C2.TFF
  171.  
  172. To invoke TRCUST to combine TFF files using the above file as input (assume 
  173. filename is \TFF\PROG\TFF00C2) and output the combined format statements into 
  174. file \TFF\PROG\TR\TRC00C2.TFF is: 
  175.  
  176. TRCUST \TFF\PROG\TFF00C2 /C=\TFF\PROG\TRC00C2.TFF
  177. The syntax for processing a TSF file is as follows: 
  178.  
  179.  
  180.    [d:][path]TRCUST [d:][path]tsf [[d:][path]tdf] [/M=mapfile] [/Wn]
  181.  
  182. where: 
  183.  
  184. TRCUST 
  185.  
  186.     is the name of the Trace Customizer program. A drive and path may 
  187.     optionally be specified to explicitly define the location of the Trace 
  188.     Customizer program, otherwise the program is searched for in the current 
  189.     directory, followed by looking along the path defined by the PATH 
  190.     environment variable. 
  191.  
  192. [d:][path]tsf 
  193.  
  194.     is the name of the trace source file. If no file extension is provided then 
  195.     an extension of TSF is assumed. If no path is provided the trace source 
  196.     file is searched for in the current directory, followed by using the 
  197.     current value of DPATH. 
  198.  
  199. [d:][path]tdf (optional)
  200.  
  201.      is the name of the trace definition file to store the dynamic tracepoint 
  202.     definitions. If not specified, the TSF filename is used with an extension 
  203.     of TDF. If no file extension is provided then an extension of TDF is 
  204.     assumed. 
  205.  
  206. /M=mapfile (optional)
  207.  
  208.      defines mapfile as the MAP file for this module. The name may be qualified 
  209.     by a drive/directory, otherwise it will be searched for in the current 
  210.     directory followed by the path specified by the DPATH environment variable. 
  211.     If specified as an option, the MAP file must exist and the filename 
  212.     extension must be MAP or TRCUST will abort processing. The mapfile will 
  213.     only be used if a symbol is not found in the symbolic debug information 
  214.     stored in the executable module. 
  215.  
  216. /Wn (optional) 
  217.  
  218.     is the level of error messages to be displayed, where n can be 0, 1, or 2. 
  219.     The possible message levels are shown below along with the messages that 
  220.     each displays: 
  221.  
  222.     0 fatal and severe messages 
  223.     1 fatal, severe, and error messages 
  224.     2 all (fatal, severe, error, and warning) messages 
  225.  
  226.     A message level of 2 is the default. 
  227.  
  228.  
  229. ΓòÉΓòÉΓòÉ 1.2.3. Symbolic Debug Support ΓòÉΓòÉΓòÉ
  230.  
  231.  
  232. ΓòÉΓòÉΓòÉ 1.2.3.1. Source Level Symbolic Support ΓòÉΓòÉΓòÉ
  233.  
  234. If the module has been compiled and linked with the debug options: 
  235.  
  236.  1. /Ti on the C/Set2 language compiler for C source files 
  237.  2. /CO on the link command 
  238. then the Trace Customizer can look into the module to extract symbolic 
  239. information. In this case addresses may be specified symbolically. 
  240.  
  241. Note that not all source files must be C language,  although only public labels 
  242. from assembler routines will be found in the symbolic information.  You may 
  243. specify filename and line number, a local variable name or a global variable 
  244. name when using C routines. All symbolic names are case sensitive when the 
  245. source was compiled with debug options, but if linking in a C language program 
  246. that was not compiled with debug options, all symbolic names are case sensitive 
  247. and begin with an underscore "_" character unless the name is declared with the 
  248. Pascal calling conventions, in which case the underscore is omitted but the 
  249. symbolic name is capitalized. 
  250.  
  251.  
  252. ΓòÉΓòÉΓòÉ 1.2.3.2. MAP File Support ΓòÉΓòÉΓòÉ
  253.  
  254. The Trace Customizer can also use the symbolic information in the MAP file 
  255. produced by the linker. All public symbols will be listed with their offsets in 
  256. the module being traced. This is not as complete a support as offered by the 
  257. debug compile option for C language source files, but it does allow entry 
  258. points, public labels and global data to be referenced symbolically within the 
  259. TSF. Note that the use of a MAP file is NOT language dependent. 
  260.  
  261. Note:  When using a MAP file, if the symbolic name is a C language entry point, 
  262. it will be case sensitive and begin with an underscore "_" character unless it 
  263. is declared with the Pascal naming convention, in which case the underscore is 
  264. omitted and the name is capitalized. If the name is not from C language source 
  265. file, the name is case sensitive. 
  266.  
  267.  
  268. ΓòÉΓòÉΓòÉ 1.2.3.3. Building a Module ΓòÉΓòÉΓòÉ
  269.  
  270. To trace only public procedures, you only need your MAP file that was generated 
  271. by linking your module. 
  272.  
  273. To trace local variables in C language routines, compile the C programs with 
  274. the debug option and assemble the ASM routines with public symbols.  Link all 
  275. the OBJs together with the debug option (/CO) and run TRCUST on the executable 
  276. module. You can now strip the debug information from the executable file by 
  277. either relinking the OBJs without the debug option or by using a tool to delete 
  278. the debug information from the executable module file. 
  279.  
  280.  
  281. ΓòÉΓòÉΓòÉ 1.2.4. TDF and TFF File Usage ΓòÉΓòÉΓòÉ
  282.  
  283. The TDF, and TFF files produced by TRCUST are used in the following way: 
  284.  
  285.                                 ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  286.                                 Γöé  .TSF   Γöé
  287.                                 ΓööΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÿ
  288.                                      V
  289.                               ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  290.                               Γöé TRCUST Util Γöé
  291.                               ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  292.         ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  293.         V                            V
  294.    ΓöîΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÉ                  ΓöîΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÉ
  295.    Γöé  .TDF   Γöé                  Γöé  .TFF   Γöé
  296.    ΓööΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÿ                  ΓööΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÿ
  297.         V                            Γöé
  298.  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ                     Γöé
  299.  Γöé  TRACE Util Γöé                     Γöé
  300.  ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ                     Γöé
  301.         V                            Γöé
  302. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ                    Γöé
  303. Γöétracepoints setΓöé                    Γöé
  304. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ                    Γöé
  305.         V                            Γöé
  306. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ                    Γöé
  307. Γöé tracepoint hitΓöé                    Γöé
  308. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ                    Γöé
  309.         V                            Γöé
  310. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ                    Γöé
  311. Γöé  OS/2 kernel  Γöé                    Γöé
  312. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ                    Γöé
  313.         V                            Γöé
  314.         Γöé                            Γöé
  315.         Γöé                            Γöé
  316.         Γöé                            Γöé
  317.         Γöé                            Γöé
  318.         Γöé                            Γöé
  319.         Γöé                            Γöé
  320.         Γöé                            Γöé
  321.         V                            V
  322. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ             ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  323. Γöé  trace buffer Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ>ΓöñTRACEFMT UtilΓöé
  324. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ             ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  325.                                      V
  326.                               ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  327.                               Γöé  formatted  Γöé
  328.                               Γöétrace recordsΓöé
  329.                               ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  330. How TRCUST fits into the system 
  331.  
  332. To trace a module do the following: 
  333.  
  334.  1. Define the tracepoints and data to be traced in the TSF. 
  335.  
  336.  2. Invoke the Trace Customizer using the TSF as input. 
  337.  
  338.    This produces two files, a TDF and a TFF. 
  339.  
  340.  3. Put the TDF file in the same directory the module to trace resides, put the 
  341.     TFF file in a directory accessible by TRACEFMT.  It is suggested that all 
  342.     TFF files reside in the same subdirectory, an example directory could be 
  343.     \OS2\SYSTEM\TRACE. 
  344.  
  345.  4. Invoke the OS/2 TRACE command using the name of the TDF instead of the 
  346.     major code value. 
  347.  
  348.    This activates the tracepoints, causing the trace data to be saved in the 
  349.    system trace buffer. 
  350.  
  351.  5. The OS/2 TRACE command can be used to turn tracing off at any time. 
  352.  
  353.  6. To display the contents of the trace buffer, invoke the OS/2 TRACEFMT 
  354.     command. 
  355.  
  356.    TRACEFMT uses the major code to determine the TFF file and uses the 
  357.    formatting string corresponding to the minor code value to format the data 
  358.    in the RAS trace buffer and output it to the screen, file or printer. 
  359.  
  360.  
  361. ΓòÉΓòÉΓòÉ 1.2.5. Symbols and Abbreviations Used in the Document ΓòÉΓòÉΓòÉ
  362.  
  363. [...]     denotes optional items. 
  364.  
  365. [... | ... | ...] denotes a list of optional items, zero or more of which may 
  366.           be chosen. 
  367.  
  368. {... | ... | ...} denotes a list of items of which ONE must be chosen. 
  369.  
  370. item...   denotes that item is repeated zero or more times. 
  371.  
  372. statement,..... denotes this example is incomplete. 
  373.  
  374. nnn       is a number in the range 0-255 inclusive. 
  375.  
  376. nnnnn     is a number in the range 0-65535 inclusive. 
  377.  
  378. All numbers and values can be entered in decimal form or in C hexadecimal form 
  379. (0x....). 
  380.  
  381.  
  382. ΓòÉΓòÉΓòÉ 1.3. Trace Source File ΓòÉΓòÉΓòÉ
  383.  
  384. This section details the statements that can appear within a trace source file. 
  385.  
  386. Examples are given of TRACE statements. 
  387.  
  388.  
  389. ΓòÉΓòÉΓòÉ 1.3.1. TSF Format ΓòÉΓòÉΓòÉ
  390.  
  391. The layout of a trace source file is: 
  392.  
  393.  
  394.                 ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  395.                 Γöé        Header          Γöé
  396.                 Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  397.                 Γöé  Type List Definition  Γöé
  398.                 Γöé       (optional)       Γöé
  399.                 Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  400.                 Γöé  Group List Definition Γöé
  401.                 Γöé       (optional)       Γöé
  402.                 Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  403.                 Γöé                        Γöé
  404.                 Γöé                        Γöé
  405.                 Γöé Tracepoint Definitions Γöé
  406.                 Γöé                        Γöé
  407.                 Γöé                        Γöé
  408.                 ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  409.  
  410. Layout of a trace source file 
  411.  
  412. Note: 
  413.  
  414. o Comments may be freely inserted anywhere in the trace source file. A comment 
  415.   is identified by a ; or by using C syntax comments anywhere in the file.  A C 
  416.   comment has start and end delimiters, namely /* and */. C type comments may 
  417.   span lines, and may be nested. 
  418.  
  419. o Below are sample TSF files.  See Sample Trace Source Files for more examples. 
  420.  
  421. ;  Sample trace source file depicting dynamic tracing for OS calls compiled
  422. ;  with 32-bit addressing
  423.  
  424.       MODNAME = doscall1.dll
  425.       MAJOR   = 100  /* this is decimal, would be 0x64 if specified hex */
  426.       MAXDATALENGTH = 200 /* max bytes logged per tracepoint is 200 */
  427.  
  428.       TYPELIST NAME=PRE,ID=1,
  429.                NAME=SYS,ID=0x40,
  430.                NAME=API,ID=128,     /* decimal, if hex would be 0x80 */
  431.                NAME=POST,ID=0x8000
  432.  
  433.       GROUPLIST NAME=MEM,ID=2,
  434.                 NAME=FS,ID=0x5,
  435.                 NAME=MOU,ID=13,
  436.                 NAME=DOS,ID=0x2B    /* would be 43 if decimal */
  437.  
  438.       TRACE   MINOR=0x0001,
  439.               TP=.DosOpen,          /* Pre-invocation tracing on DosOpen */
  440.               TYPE=(PRE,API),
  441.               GROUP=DOS,
  442.               DESC="(OS) DosOpen    Pre-Invocation",
  443.               FMT="Major = %X  Minor = %Y",
  444.               FMT="            EAX = %D",
  445.               FMT="            FileName = %P%S",
  446.               REGS=(EAX),
  447.               ASCIIZ32=(.FileName,DIRECT,128)
  448.  
  449.       TRACE   MINOR=0x7001,         /* Puts tracept on code at line 28 */
  450.                                     /*   of file dosopen1.c.  Debug    */
  451.               TP=@dosopen1.c,28,    /*   info is needed to use this.   */
  452.               TYPE=(API),
  453.               GROUP=DOS,
  454.               DESC="(OS) CheckParm  After Createhandle",
  455.               FMT="                 New handle = %P%W",
  456.               MEM32=(.handle,DIRECT,2)
  457.  
  458.       TRACE   MINOR=0x8001,         /* Post-invocation tracing at         */
  459.               TP=.DosOpenC,RETEP,   /*   procedure DosOpenC return point. */
  460.               TYPE=(API,POST),      /*   Debug    info is needed to use   */
  461.               GROUP=DOS,            /*   this type of tracepoint.         */
  462.               DESC="(OS) DosOpenC   Post-Invocation",
  463.               FMT="                 Return Code = %P%W",
  464.               FMT="                 Variable Rec= %P%U",
  465.               MEM32=(.retcode,DIRECT,2),
  466.               /* The following will log a variable length structure.  The */
  467.               /*   second field in the structure is the length of the     */
  468.               /*   record(position var_struct+2).  This LEN parameter must*/
  469.               /*   immediately precede the memory specification defining  */
  470.               /*   the variable length record.                            */
  471.               LEN=(var_struct+2,DIRECT),
  472.               MEM32=(.var_struct,DIRECT,LEN)
  473.  
  474.  
  475. ΓòÉΓòÉΓòÉ 1.3.2. TSF Header ΓòÉΓòÉΓòÉ
  476.  
  477. This defines common information for the module to be traced. The format is: 
  478.  
  479.  
  480.         MODNAME = [d:][path]Name
  481.         MAJOR   = nnn
  482.       [ MAXDATALENGTH = nnnn ]
  483.  
  484. where: 
  485.  
  486. d: 
  487.  
  488.     is the drive containing the module. If not specified the current drive is 
  489.     used. 
  490.  
  491. path 
  492.  
  493.     is the path to the module. If not specified the current path is used. 
  494.  
  495. Name 
  496.  
  497.     is the name of the executable module to be traced. If an extension is not 
  498.     specified and the Name is not OS2KRNL, an extension of DLL is appended to 
  499.     Name. 
  500.  
  501. MAJOR=nnn 
  502.  
  503.     defines the major trace ID allocated to this module. It may be in the range 
  504.     1 to 255 decimal or specified 0x1 to 0xFF hex. The default value is 1. The 
  505.     major trace ID is part of the data placed in the trace buffer when a 
  506.     tracepoint is executed. 
  507.  
  508.     Only one major code is permitted per module. 
  509.  
  510.     Note:  OS/2 currently only supports major codes 0x1 - 0x00FF. 
  511.  
  512. MAXDATALENGTH=nnnn (optional) 
  513.  
  514.     defines the maximum amount of data that a single tracepoint call will 
  515.     insert into the trace buffer. 
  516.  
  517.     The length may be in the range 20 to 512 decimal or specified 0x14 to 0x200 
  518.     hex.  The default value is 512. This limit on the amount of data to trace 
  519.     is to avoid yielding the processor when doing dynamic tracing. 
  520.  
  521.  
  522. ΓòÉΓòÉΓòÉ 1.3.3. Typelist Definition ΓòÉΓòÉΓòÉ
  523.  
  524. This defines the optional typelist event IDs. For more description and examples 
  525. of event types see the online help for the trace command. 
  526.  
  527. The format is: 
  528.  
  529.  
  530.         TYPELIST NAME=TypeName,ID=TypeValue,
  531.                 [NAME=TypeName,ID=TypeValue,]...
  532.  
  533. where: 
  534.  
  535. NAME=Typename 
  536.  
  537.     defines a 1-8 byte character string used to reference the TypeValue in the 
  538.     tracepoint definitions.  All TypeNames and GroupNames within a TSF must be 
  539.     unique. 
  540.  
  541. ID=TypeValue 
  542.  
  543.     defines a bit value of the form 2**y where y in range 0 to 15, permitting a 
  544.     maximum of 16 types to be defined in a single TSF. This can be decimal or 
  545.     specified  0xnnnn for hex. 
  546.  
  547. An example TYPELIST definition follows: 
  548.  
  549.       TYPELIST NAME=PRE,ID=1,
  550.                NAME=SYS,ID=0x40,
  551.                NAME=API,ID=128,
  552.                NAME=POST,ID=0x8000,.....
  553.  
  554.  
  555. ΓòÉΓòÉΓòÉ 1.3.4. Grouplist Definition ΓòÉΓòÉΓòÉ
  556.  
  557. This defines the optional grouplist IDs. For more description and examples of 
  558. groups see the online help for the trace command. 
  559.  
  560. The format is: 
  561.  
  562.  
  563.         GROUPLIST NAME=GroupName,ID=GroupValue,
  564.                  [NAME=GroupName,ID=GroupValue,]...
  565.  
  566. where: 
  567.  
  568. NAME=GroupName 
  569.  
  570.     defines a 1-8 byte character string used to reference the GroupValue in the 
  571.     tracepoint definitions.  There are a maximum of 48 GroupNames allowed in a 
  572.     TSF file.  All TypeNames and GroupNames within a TSF must be unique. 
  573.  
  574. ID=GroupValue 
  575.  
  576.     defines a word value in the range 1 to 65535 decimal or 0x1 to 0xFFFF hex. 
  577.  
  578. An example GROUPLIST definition follows: 
  579.  
  580.       GROUPLIST NAME=MEM,ID=2,
  581.                 NAME=FS,ID=0x5,
  582.                 NAME=MOU,ID=13,.....
  583.  
  584.  
  585. ΓòÉΓòÉΓòÉ 1.3.5. Tracepoint Definitions ΓòÉΓòÉΓòÉ
  586.  
  587. The tracepoint address and the data to be traced are specified by the TRACE 
  588. statement. There are a maximum of 65535 tracepoints permitted in a trace source 
  589. file. 
  590.  
  591. The format of the TRACE statement is: 
  592.  
  593.  
  594.         TRACE   [MINOR=minorcode,]
  595.                 TP={@STATIC,|@filename,linenum,|.name[{+|-}offs][,RETEP]},
  596.                 [OPCODE=0xnn,]
  597.                 [TYPE=(typename[,typename...]),]
  598.                 [GROUP=groupnam,]
  599.                 [DESC="Tracepoint description",]
  600.                 [FMT="Formatting string",]...
  601.                 [LEN=(length_spec,flag),]
  602.                 [DATA_STMT,]...
  603.  
  604. The TRACE keyword delimits a tracepoint definition statement. The definition is 
  605. considered complete when the next TRACE keyword is encountered or the end of 
  606. file is reached. There is one TRACE statement for each tracepoint. 
  607.  
  608. LEN is used to log variable length records. A DATA_STMT must immediately follow 
  609. the LEN statement.  LEN will give the location of a one word field containing 
  610. the number of bytes to log for the following DATA_STMT. 
  611.  
  612.  
  613. ΓòÉΓòÉΓòÉ 1.3.5.1. MINOR Keyword ΓòÉΓòÉΓòÉ
  614.  
  615. The MINOR parameter is an optional keyword parameter.  If it is specified in 
  616. the first tracepoint definition, it must be specified in every tracepoint 
  617. definition.  If it is not specified in the first tracepoint definition, it 
  618. cannot be specified in any of the subsequent tracepoint definitions. It should 
  619. be coded as: 
  620.  
  621.  
  622.         MINOR=nnnnn,
  623.  
  624. where: 
  625.  
  626. nnnnn 
  627.  
  628.     is a decimal number from 1 to 65535 or a hex number from 0x1 to 0xFFFF. 
  629.     This represents the minor code for the tracepoint, which must be unique for 
  630.     the major code specified for this module. When tracepoints with duplicate 
  631.     minor codes are encountered, the first is saved and the rest are discarded, 
  632.     and an error message is issued. 
  633.  
  634. If minor codes are not specified in the TSF, TRCUST sequentially provides them, 
  635. starting with 1, for each tracepoint definition it encounters. 
  636.  
  637.  
  638. ΓòÉΓòÉΓòÉ 1.3.5.2. TP Keyword ΓòÉΓòÉΓòÉ
  639.  
  640. The TP parameter is a required keyword parameter. If TP is specified more than 
  641. once for a single tracepoint definition, the tracepoint is discarded. TP has 
  642. three mutually exclusive definitions which can be coded as: 
  643.  
  644.  
  645.         TP=@STATIC,
  646.  
  647. where: 
  648.  
  649. STATIC 
  650.  
  651.     defines this tracepoint entry to be used only for creating a trace format 
  652.     statement for the TFF file.  No tracepoint definition is created for the 
  653.     TDF, and the only other TRACE parameters that will be used are DESC, MINOR 
  654.     and FMT. This is used to create trace formatting information for static 
  655.     tracepoints. If the TSF contains only @STATIC directives, no TDF files are 
  656.     created. 
  657.  
  658.  
  659.         TP=@filename,linenum,
  660.  
  661. where: 
  662.  
  663. filename 
  664.  
  665.     is an ASCII string specifying the name (including extension) of a source 
  666.     filename used in creating the module.  The source filename is stored in the 
  667.     debug information contained in the executable module, so debug information 
  668.     must exist to use this parameter. The filename is not case sensitive. 
  669.  
  670. linenum 
  671.  
  672.     is a decimal number specifying the line number in the given source file 
  673.     name to place the tracepoint. 
  674.  
  675. Note:  Debug information must exist to use this option. The statement at the 
  676. given source linenum may have been rearranged during compiler optimization, so 
  677. the developer must use this with caution.  If the linenum is not found in the 
  678. debug information, the tracepoint is applied at the next linenum defined in the 
  679. debug information and a warning message is issued to the user. 
  680.  
  681. An example to apply a tracepoint to line 35 of file stubfile.c is: 
  682.  
  683.     TRACE   MINOR=0x700A,              /* puts tracepoint on code at line */
  684.             TP=@stubfile.c,35,.....    /*  35 of source file stubfile.c   */
  685.  
  686.  
  687.         TP=.name[{+|-}offs][,RETEP],
  688.  
  689. where: 
  690.  
  691. name 
  692.  
  693.     is a public label or an entry point name of a procedure to be traced. The 
  694.     "." preceding name is required. Name must be found in the debug information 
  695.     in the module or name must be a public symbol as found in the MAP file. If 
  696.     debug information is used, the address of this tracepoint will be 
  697.     immediately following the prologue of the procedure. If MAP information is 
  698.     used, this address points to the opcode at the given label. 
  699.  
  700.     If the procedure was compiled with debug support, Name is case sensitive. 
  701.     If not, C language functions will be case sensitive and begin with an 
  702.     underscore "_" character unless the function is declared with the Pascal 
  703.     calling convention, in which case the underscore is omitted and the name is 
  704.     capitalized. 
  705.  
  706. offs (optional) 
  707.  
  708.     is a decimal (specified as nnnnnnnn)  or hex (specified as 0xnnnnnnnn) 
  709.     offset from the entry point address. 
  710.  
  711. RETEP (optional) 
  712.  
  713.     specifies that the tracepoint will be inserted at the return address 
  714.     corresponding to this entry point. This is just before the procedure 
  715.     epilogue is executed and at this point the procedure's automatic data is 
  716.     still addressable from register (E)BP and the return code (if any) is set 
  717.     up in (E)AX. 
  718.  
  719.     The module must include information supplied by the debug compile option 
  720.     (see Source Level Symbolic Support ), meaning that the source language must 
  721.     have been C, otherwise an error message will be generated and this 
  722.     tracepoint discarded. 
  723.  
  724.     When the RETEP is used, the name must be a valid entry point to a 
  725.     procedure. 
  726.  
  727. Note:  For ASM functions to accomplish tracing, a label must be made public to 
  728. have a tracepoint applied.  Therefore, to accomplish "POST" tracing, a label 
  729. must be made public at the return statement. 
  730.  
  731. Partial examples of Pre/Post tracing of DosOpen follows: 
  732.  
  733.       TRACE   MINOR=0x0001,
  734.               TP=.DosOpen,.....            /* Pre-invocation tracing */
  735.  
  736.       TRACE   MINOR=0x8001,
  737.               TP=.DosOpen,RETEP,.....      /* Post-invocation tracing */
  738.  
  739. Note:  It is not possible to set dynamic tracepoints on the following machine 
  740.        instructions: 
  741.  
  742. 0x9C  PUSHF 
  743. 0xCC  INT 3 
  744. 0xCD  INT n 
  745. 0xCE  INTO 
  746. 0x62  BOUND 
  747. 0x69  IMUL 
  748. 0x6B  IMUL 
  749. 0xF6  DIV, IDIV, MUL, IMUL, NEG, NOT, TEST (immediate) 
  750. 0xF7  DIV, IDIV, MUL, IMUL, NEG, NOT, TEST (immediate) 
  751.  
  752. TRCUST gives an error for these opcodes and the tracepoint is rejected. 
  753.  
  754. Note:  In all cases, two tracepoints cannot be applied at the same address. 
  755.  
  756.  
  757. ΓòÉΓòÉΓòÉ 1.3.5.3. OPCODE Keyword ΓòÉΓòÉΓòÉ
  758.  
  759. The OPCODE parameter is an optional keyword parameter. 
  760.  
  761.  
  762.         OPCODE=0xnn,
  763.  
  764. where: 
  765.  
  766. nn 
  767.  
  768.     is the expected one byte hex opcode to be found at the tracepoint address 
  769.     and TRCUST verifies the value with that in the module. The opcode of the 
  770.     instruction being traced must be the same as this value or an error message 
  771.     is issued and the tracepoint is rejected. This may be used to verify the 
  772.     opcode expected at the address specified by the TP parameter. This may be 
  773.     useful when using TP = @filename,linenum to ensure the requested 
  774.     instruction is traced. 
  775.  
  776.  
  777. ΓòÉΓòÉΓòÉ 1.3.5.4. TYPE Keyword ΓòÉΓòÉΓòÉ
  778.  
  779. The TYPE parameter is an optional keyword parameter that defines the event 
  780. types of this tracepoint. For more description and examples of event types see 
  781. the online help for the trace command. 
  782.  
  783.  
  784.         TYPE=(typename[,typename...]),
  785.  
  786. where: 
  787.  
  788. typename 
  789.  
  790.     is an ASCII string specifying the type of this tracepoint. The typename 
  791.     symbol must have been previously defined by the TYPELIST statement. If an 
  792.     invalid typename is given, the tracepoint will be discarded and a message 
  793.     issued. 
  794.  
  795.     The final type value is obtained by logically combining each type name 
  796.     value using the OR operator.  If TYPE is omitted, the trace statement will 
  797.     have a typevalue of 0. 
  798.  
  799.  
  800. ΓòÉΓòÉΓòÉ 1.3.5.5. GROUP Keyword ΓòÉΓòÉΓòÉ
  801.  
  802. The GROUP parameter is an optional keyword parameter that defines the group 
  803. this tracepoint belongs to. For more description and examples of groups see the 
  804. online help for the trace command. 
  805.  
  806.  
  807.         GROUP=groupnam,
  808.  
  809. where: 
  810.  
  811. groupnam 
  812.  
  813.     is an ASCII string specifying which group this tracepoint belongs. The 
  814.     groupname symbol must have been previously defined by the GROUPLIST 
  815.     statement. If an invalid groupname is given, the tracepoint will be 
  816.     discarded and a message issued. 
  817.  
  818.     If GROUP is omitted, the trace statement will have a groupvalue of 0. 
  819.  
  820.  
  821. ΓòÉΓòÉΓòÉ 1.3.5.6. DESC Keyword ΓòÉΓòÉΓòÉ
  822.  
  823. The DESC parameter is used to produce a description for the tracepoint that is 
  824. output as the first line of formatted data. It should include the entry point 
  825. name of the procedure being traced and whether this is an entry or return 
  826. point. The descriptive string is enclosed in double quotes as for a C language 
  827. string. The DESC parameter is required if any FMT specifications are present. 
  828.  
  829. The recommended formats for such strings are as follows: 
  830.  
  831.         DESC="name Pre-Invocation",
  832.  
  833.         DESC="name Post-Invocation",
  834.  
  835. where: 
  836.  
  837. name 
  838.  
  839.     is the system component (in parentheses) followed by the entry point name 
  840.     of the procedure. 
  841.  
  842. Pre-Invocation 
  843.  
  844.     identifies this tracepoint as an entry point, i.e. before the function has 
  845.     been executed. 
  846.  
  847. Post-Invocation 
  848.  
  849.     identifies this tracepoint as a return point from the function. 
  850.  
  851. The words Pre-Invocation and Post-Invocation are not mandatory, merely 
  852. recommendations to be compatible with the base OS/2 tracepoints, when 
  853. formatted. If a tracepoint is inserted in the middle of a procedure it will be 
  854. appropriate to use different wording. The Trace Customizer does not check the 
  855. wording. 
  856.  
  857. An example of pre-invocation and post-invocation tracepoints follow: 
  858.  
  859.       TRACE  MINOR=0x0001,
  860.              TP=.DosOpen,
  861.              DESC="(OS) DosOpen    Pre-Invocation",.....
  862.  
  863.       TRACE  MINOR=0x8001,
  864.              TP=.DosOpen,RETEP,
  865.              DESC="(OS) DosOpen    Post-Invocation",.....
  866.  
  867.  
  868. ΓòÉΓòÉΓòÉ 1.3.5.7. FMT Keyword ΓòÉΓòÉΓòÉ
  869.  
  870. The optional FMT parameter is used to produce the formatting string for the 
  871. trace data. The developer should use these to control formatting the output 
  872. produced by the Trace Formatter.  Each FMT keyword causes CR/LF to be appended 
  873. to the format string. The formatting string is similar to a C library printf 
  874. string specification. It consists of ASCII characters and formatting controls 
  875. enclosed in double quotes as for a C language string. Each formatting primitive 
  876. describes the format of the data in the trace buffer at the formatting position 
  877. and must match the data stored in the trace buffer by the data statements 
  878. described later. See Formatting Trace Data for a description of how the data is 
  879. stored in the trace buffer and subsequently formatted. 
  880.  
  881. The formatting controls are as follows: 
  882.  
  883. %Innn Ignore nnn number of bytes in the trace buffer. 
  884.  
  885.     This tells the Trace Formatter to skip over the next nnn bytes in the 
  886.     current trace record. This could be used for example to skip over 
  887.     unimportant data, traced as a block, and only output the data of interest. 
  888.  
  889.     When using this control, nnn represents an ASCII decimal number and must be 
  890.     followed by a space. 
  891.  
  892.  
  893.                 statement: FMT = "ignore ten bytes %I10 here",
  894.                            FMT = "       and two more %I2 here",
  895.  
  896.                 generates: ignore ten bytes here
  897.                                   and two more here
  898.  
  899. %P  Process the data prefix bytes associated with the trace data. 
  900.  
  901.     This tells the Trace Formatter that the next bytes in the trace record are 
  902.     the prefix or header bytes for data logged by the dynamic tracing 
  903.     mechanism. This is required to precede any format control describing data 
  904.     logged from memory.  Do not use this before data that was logged from a 
  905.     register and never use with static tracepoints. See Formatting Trace Data 
  906.     for a description of how the data is stored in the trace buffer and the use 
  907.     of this control. 
  908.  
  909.  
  910.                 statements: FMT="memory byte = %P%B",
  911.  
  912.                 generates:  memory byte = C2
  913.  
  914. %B  Output a byte of data. 
  915.  
  916.  
  917.                 statement: FMT = "memory byte = %P%B"
  918.  
  919.                 generates: memory byte = 01
  920.  
  921. %W  Output a word of data. 
  922.  
  923.  
  924.                 statement: FMT = "register word = %W"
  925.  
  926.                 generates: register word = 0001
  927.  
  928.  
  929.                 statement: FMT = "memory word = %P%W"
  930.  
  931.                 generates: memory word = 0001
  932.  
  933. %D  Output a double word of data. 
  934.  
  935.  
  936.                 statement: FMT = "double word EAX = %D"
  937.  
  938.                 generates: double word EAX = 0000 4B2C
  939.  
  940.  
  941.                 statement: FMT = "double memory word = %P%D"
  942.  
  943.                 generates: double memory word = 0000 4B2C
  944.  
  945. %F  Output a Flat (0:32 bit) address. 
  946.  
  947.  
  948.                 statement: FMT = "flat address EAX = %F"
  949.  
  950.                 generates: flat address EAX = 00004B2C
  951.  
  952. %Q  Output a quad word of data. 
  953.  
  954.  
  955.                 statement: FMT = "quad word from regs EAX and EBX = %Q"
  956.  
  957.                 generates: quad word from regs EAX and EBX = 00004B2C 00000001
  958.  
  959. %A  Output a segmented (16:16 bit) address. 
  960.  
  961.  
  962.                 statement: FMT = "segmented address in SS:SP = %A"
  963.  
  964.                 generates: segmented address in SS:SP = 00B7:0001
  965.  
  966.  
  967.                 statement: FMT = "segmented address in memory = %P%A"
  968.  
  969.                 generates: segmented address in memory = 00B7:0001
  970.  
  971. %R  Repeat the following format control for the rest of the memory that was 
  972.     logged. 
  973.  
  974.     This is used for formatting variable length records.  Use this in place of 
  975.     the prefix parameter %P to log the rest of the record in the format 
  976.     specified following the repeat code. 
  977.  
  978.  
  979.            statement: FMT = "log a variable number of words from memory = %R%W"
  980.  
  981.            generates: log a variable number of words from memory = 0001 0004
  982.  
  983. %S  Output an ASCIIZ string. 
  984.  
  985.     The prefix formatting control should always precede this for dynamic 
  986.     tracepoints because the data was logged from memory. 
  987.  
  988.     Note:  If the tracepoint is static, then %P should not be used because the 
  989.     string is terminated with a null byte. 
  990.  
  991.  
  992.                 statement: FMT = "string = %P%S"
  993.  
  994.                 generates: string = c:\os2\os2.ini
  995.  
  996. %U  Format the remainder of the trace record as a sequence of bytes. 
  997.  
  998.     This will output the remaining of the traced data, including any prefix 
  999.     bytes. 
  1000.  
  1001.  
  1002.                 statement: FMT = "garbage = %U"
  1003.  
  1004.                 generates: garbage = 00 00 00 03 c2 c1 c4 ff 04 00 09 c0 18
  1005.  
  1006. %X  Output the major event code. 
  1007.  
  1008.  
  1009.                 statement: FMT = "major code = %X"
  1010.  
  1011.                 generates: major code = 00C2
  1012.  
  1013. %Y  Output the minor event code. 
  1014.  
  1015.  
  1016.                 statement: FMT = "minor code = %Y"
  1017.  
  1018.                 generates: minor code = 0081
  1019.  
  1020.  
  1021. Note:  To avoid conflicts with source file control information, all formatting 
  1022.        specifications can be in upper or lower case. Also, prefix format 
  1023.        specifications may be combined with data format specifications. For 
  1024.        example, the following create the same format controls in the TFF: 
  1025.  
  1026.  
  1027.         FMT = "%P%W here"
  1028.         FMT = "%p%w here"
  1029.         FMT = " %P %W here"
  1030.  
  1031.  
  1032. ΓòÉΓòÉΓòÉ 1.3.5.8. LEN Keyword ΓòÉΓòÉΓòÉ
  1033.  
  1034. The LEN parameter is an optional keyword parameter that defines the length of 
  1035. the variable length record that will follow in the next MEM or MEM32 statement. 
  1036.  
  1037.  
  1038.         LEN=(length_spec,flag),
  1039.  
  1040. where: 
  1041.  
  1042. length_spec 
  1043.  
  1044.     is an address specification that points to the one word length field of the 
  1045.     next memory specification. This format can be symbolic_name+nnnnnnnn where 
  1046.     symbolic_name is a symbolic memory location and nnnnnnnn is the offset from 
  1047.     that symbolic address. The length_spec can also be Flat Register Form. or 
  1048.     Segment Register Form. 
  1049.  
  1050. flag 
  1051.  
  1052.     is a mandatory parameter that identifies the level of indirection to be 
  1053.     used on the length_spec. It is one of: 
  1054.  
  1055.    D[IRECT] 
  1056.    I[NDIRECT][*[{+|-}iiiiiiii]]... 
  1057.  
  1058. DIRECT implies that the length_spec specifies a memory location that contains 
  1059. the length of the variable length record. INDIRECT means that the length_spec 
  1060. contains an address and is dereferenced to obtain the memory location.  The 
  1061. optional asterisks denote the level of indirection, one for each level.  The 
  1062. indirect offsets iiiiiiii are added to or subtracted from the value found at 
  1063. the given level of indirection. 
  1064.  
  1065. The following are example LEN statements followed by the memory statement whose 
  1066. length they describe. 
  1067.  
  1068.  
  1069.     TRACE MINOR=.....,
  1070.           /* Symbol vrecord is a record whose first field is a one */
  1071.           /* word value that is the total length of the entire     */
  1072.           /* variable length record.                               */
  1073.           LEN=(vrecord,DIRECT),
  1074.           MEM=(.vrecord,DIRECT,LEN),
  1075.  
  1076.           /* Symbol vrec_ptr is a pointer to a variable length record */
  1077.           /* and vend_ptr is a pointer to the end of the same record. */
  1078.           /* The second field (10 bytes from end of record) is  total */
  1079.           /* length of the variable length record.                    */
  1080.           LEN=(vend_ptr,INDIRECT*-10),
  1081.           MEM=(.vrec_ptr,INDIRECT,LEN),
  1082.  
  1083.           /* Symbol vrec_ptr is a pointer to a variable length record.*/
  1084.           /* The second field (2 bytes from beginning of record) is   */
  1085.           /* total length of the variable length record.              */
  1086.           LEN=(vrec_ptr,INDIRECT*+2),
  1087.           MEM=(.vrec_ptr,INDIRECT,LEN),
  1088.  
  1089.           /* Symbol ind_ptr is a pointer to a structure.  The third   */
  1090.           /* field in the structure (6 bytes from beginning) is a     */
  1091.           /* pointer to a variable record.  The fourth field in the   */
  1092.           /* variable length record (8 bytes from beginning) is the   */
  1093.           /* total length of this variable length record.             */
  1094.           LEN=(ind_ptr,INDIRECT*+6*+8),
  1095.           MEM=(.ind_ptr,INDIRECT*+6*,LEN),
  1096.  
  1097.           /* If DS:DI contains the address of ind_ptr, to perform */
  1098.           /* the above logging, the statements would be:              */
  1099.           LEN=(RDS+DI,INDIRECT*+6*+8),
  1100.           MEM=(RDS+DI,INDIRECT*+6*,LEN)
  1101.  
  1102.  
  1103. ΓòÉΓòÉΓòÉ 1.3.5.9. DATA_STMT ΓòÉΓòÉΓòÉ
  1104.  
  1105. There are three types of data that may be traced as part of the optional 
  1106. DATA_STMT section of the TRACE statement. 
  1107.  
  1108. Registers 
  1109. Memory 
  1110. ASCIIZ strings 
  1111.  
  1112. More than one keyword is permitted in a tracepoint definition. The order of the 
  1113. statements defines the order in which the data is inserted into the trace 
  1114. buffer. 
  1115.  
  1116. The combined amount of data to be traced for a single tracepoint cannot exceed 
  1117. MAXDATALENGTH.  If TRCUST determines that the maximum data size might be 
  1118. exceeded, a warning message is issued but the tracepoint definition will remain 
  1119. valid. 
  1120.  
  1121. The keywords for tracing the three types of data are REGS, MEM32, MEM, 
  1122. ASCIIZ32, and ASCIIZ. 
  1123.  
  1124. The REGS keyword identifies which registers are to be recorded in the trace 
  1125. buffer. 
  1126.  
  1127. The MEM32 keyword is used to record sections of memory in the trace buffer. 
  1128. Access to this memory location is through 32-bit flat addresses from functions 
  1129. compiled using 32-bit addressing. Several MEM32 parameters may be coded at any 
  1130. one tracepoint if several different memory areas are to be traced. 
  1131.  
  1132. The MEM keyword is also used to record sections of memory in the trace buffer, 
  1133. but access to this memory is through a segment:offset pair.  This is used for 
  1134. functions compiled using 16-bit addressing with segment registers. Several MEM 
  1135. parameters may be coded at any one tracepoint if several different memory areas 
  1136. are to be traced. 
  1137.  
  1138. The ASCIIZ32 keyword is used to record an ASCIIZ string in the trace buffer. 
  1139. This is a special form of the MEM32 keyword and there may be more than one 
  1140. ASCIIZ32 parameter coded for a single tracepoint. 
  1141.  
  1142. The ASCIIZ keyword is used to record an ASCIIZ string in the trace buffer. This 
  1143. is a special form of the MEM keyword and there may be more than one ASCIIZ 
  1144. parameter coded for a single tracepoint. 
  1145.  
  1146.  
  1147. ΓòÉΓòÉΓòÉ 1.3.5.10. REGS Keyword ΓòÉΓòÉΓòÉ
  1148.  
  1149. This is coded as: 
  1150.  
  1151.  
  1152.         REGS=(register[,register]...),
  1153.  
  1154. where: 
  1155.  
  1156. register 
  1157.  
  1158.     is one of the following to support OS/2 versions 1.1 and 1.2: 
  1159.  
  1160.       CS,DS,SS,ES,AX,BX,CX,DX,SP,BP,SI,DI,IP,FLAGS 
  1161.  
  1162.     with the addition of the following to support OS/2 version 2.0: 
  1163.  
  1164.       EAX,EBX,ECX,EDX,ESP,EBP,ESI,EDI,EFLAGS,EIP,FS,GS 
  1165.  
  1166.     or the symbolic name of a C language variable declared with the register 
  1167.     storage-class specifier as: 
  1168.  
  1169.       .symbolic_name 
  1170.  
  1171.     The same register may appear multiple times in the register list. It will 
  1172.     be traced as many times as it appears. Extended registers (E) are 32 bits 
  1173.     and logged as two words. All other registers are 16 bits and logged as one 
  1174.     word. 
  1175.  
  1176. Note:  To log a C language variable declared with the register storage class, 
  1177. debug information must exist and the variable name is case sensitive.  When 
  1178. formatting the data logged from a register variable, remember that there are no 
  1179. memory prefix bytes put into the log buffer. 
  1180.  
  1181. Example of the REGS statement follows: 
  1182.  
  1183.      /* Given the following declaration in a C language source file: */
  1184.      register int ret_code;
  1185.  
  1186.      /* To log registers AX, CX and the register variable ret_code: */
  1187.      TRACE MINOR=.....
  1188.            REGS=(AX,CX,.ret_code),
  1189.            FMT="AX=%W  CX=%W  ret_code=%W"
  1190.  
  1191.  
  1192. ΓòÉΓòÉΓòÉ 1.3.5.11. MEM32 Keyword ΓòÉΓòÉΓòÉ
  1193.  
  1194. This is used to log memory in a function compiled using 32-bit flat addressing 
  1195. and is coded as: 
  1196.  
  1197.  
  1198.         MEM32=(address_spec,flag,{length|LEN}),
  1199.  
  1200. where: 
  1201.  
  1202. address_spec 
  1203.  
  1204.     is a flat memory address specification as described in Address 
  1205.     Specification. 
  1206.  
  1207. flag 
  1208.  
  1209.     is a mandatory parameter that identifies the level of indirection to be 
  1210.     used on the address. It is one of: 
  1211.  
  1212.    D[IRECT] 
  1213.    I[NDIRECT][*[{+|-}iiiiiiii]]... 
  1214.    IS 
  1215.  
  1216. DIRECT implies that the address specifies a memory location to be saved in the 
  1217. trace buffer. 
  1218.  
  1219. INDIRECT means that the address contains a flat address and is dereferenced to 
  1220. obtain the memory location. The optional asterisks denote the level of 
  1221. indirection, one for each level.  The indirect offsets iiiiiiii are added to or 
  1222. subtracted from the value found at the given level of indirection. 
  1223.  
  1224. IS (Indirect Segmented) means that the address contains a segmented address 
  1225. that is dereferenced to obtain the memory location. 
  1226.  
  1227. length 
  1228.  
  1229.     is the number of bytes at the memory location to be saved in the trace 
  1230.     buffer. If length is too big, a warning message will be given, and length 
  1231.     will be set to MAXDATALENGTH. If length is 0 an error message will be 
  1232.     given, and this tracepoint will be ignored. 
  1233.  
  1234. LEN 
  1235.  
  1236.     specifies that this is a variable length record to log and the length was 
  1237.     specified by the preceding LEN statement.  If there was no preceding LEN 
  1238.     statement, this tracepoint is rejected. Either length or LEN must be 
  1239.     specified, but not both. 
  1240.  
  1241. Example of the MEM32 statement follows: 
  1242.  
  1243.      TRACE MINOR=.....
  1244.            /* To log retcode enter the following: */
  1245.            MEM32=(.retcode,DIRECT,2),
  1246.  
  1247.            /* s_ptr is a pointer to a structure, log it for 4 bytes. */
  1248.            MEM32=(.s_ptr,INDIRECT,4),
  1249.  
  1250.            /* Field 6 bytes into structure pointed at by s_ptr is a     */
  1251.            /*  pointer to a structure, log 8 bytes past begin of struct.*/
  1252.            MEM32=(.s_ptr,INDIRECT*+6*+8,10),  /* logs ten bytes */
  1253.  
  1254.            /* s_ptr points to a variable length record, second field */
  1255.            /*  is the record length (offset 4 from record beginning).*/
  1256.            LEN=(s_ptr,INDIRECT*+4),
  1257.            MEM32=(.s_ptr,INDIRECT,LEN)
  1258.  
  1259.            /* s_end points to the end of same variable length record,*/
  1260.            /*  second field is the record length (offset -6 from     */
  1261.            /*  record beginning).                                    */
  1262.            LEN=(s_end,INDIRECT*-6),
  1263.            MEM32=(.s_ptr,INDIRECT,LEN)
  1264.  
  1265.  
  1266. ΓòÉΓòÉΓòÉ 1.3.5.12. MEM Keyword ΓòÉΓòÉΓòÉ
  1267.  
  1268. This is used to log memory in a function compiled using 16-bit segment:offset 
  1269. addressing and is coded as: 
  1270.  
  1271.  
  1272.  
  1273.         MEM=(address_spec,flag,{length|LEN}),
  1274.  
  1275. where: 
  1276.  
  1277. address_spec 
  1278.  
  1279.     is a segmented memory address specification as described in Address 
  1280.     Specification. 
  1281.  
  1282. flag 
  1283.  
  1284.     is a mandatory parameter that identifies the level of indirection to be 
  1285.     used on the address. It is one of: 
  1286.  
  1287.    D[IRECT] 
  1288.    I[NDIRECT][*[{+|-}iiiiiiii]]... 
  1289.    IF 
  1290.  
  1291. DIRECT implies that the address specifies a memory location to be saved in the 
  1292. trace buffer. 
  1293.  
  1294. INDIRECT means that the address contains a segmented address and is 
  1295. dereferenced to obtain the memory location. The optional asterisks denote the 
  1296. level of indirection, one for each level.  The indirect offsets iiiiiiii are 
  1297. added to or subtracted from the value found at the given level of indirection. 
  1298.  
  1299. IF (Indirect Flat) means that the address contains a flat address that is 
  1300. dereferenced to obtain the memory location. 
  1301.  
  1302. Only far pointers may be dereferenced when using segmented addressing. 
  1303.  
  1304. length 
  1305.  
  1306.     is the number of bytes at the memory location to be saved in the trace 
  1307.     buffer. If length is too big, a warning message will be given, and length 
  1308.     will be set to MAXDATALENGTH. If length is 0 an error message will be 
  1309.     given, and this tracepoint will be ignored. 
  1310.  
  1311. LEN 
  1312.  
  1313.     specifies that this is a variable length record to log and the length was 
  1314.     specified by the preceding LEN statement.  If there was no preceding LEN 
  1315.     statement, this tracepoint is rejected. Either length or LEN must be 
  1316.     specified, but not both. 
  1317.  
  1318.  
  1319. ΓòÉΓòÉΓòÉ 1.3.5.13. ASCIIZ32 Keyword ΓòÉΓòÉΓòÉ
  1320.  
  1321. This is used to log a string in a function compiled using 32-bit flat 
  1322. addressing and is coded as: 
  1323.  
  1324.  
  1325.         ASCIIZ32=(address_spec,flag,maxlength),
  1326.  
  1327. where: 
  1328.  
  1329. address_spec 
  1330.  
  1331.     is a 0:32 bit flat memory address specification as described in Address 
  1332.     Specification. 
  1333.  
  1334. flag 
  1335.  
  1336.     is a mandatory parameter that identifies the level of indirection to be 
  1337.     used on the address. It is one of: 
  1338.  
  1339.    D[IRECT] 
  1340.    I[NDIRECT][*[{+|-}iiiiiiii]]... 
  1341.    IS 
  1342.  
  1343. DIRECT implies that the address points to a memory location, the contents of 
  1344. which are to be saved in the trace buffer. 
  1345.  
  1346. INDIRECT means that the address points to a flat address pointer which is 
  1347. dereferenced to obtain the target location to save in the trace buffer. The 
  1348. optional asterisks denote the level of indirection, one for each level.  The 
  1349. indirect offsets iiiiiiii are added to or subtracted from the value found at 
  1350. the given level of indirection. 
  1351.  
  1352. IS (Indirect Segmented) means that the address points to a segmented address 
  1353. pointer which is dereferenced to obtain the target location to save in the 
  1354. trace buffer. 
  1355.  
  1356. maxlength 
  1357.  
  1358.     is the maximum length of the string that will be saved in the trace buffer. 
  1359.     It should be no greater than MAXDATALENGTH. The actual length to be traced 
  1360.     will depend on where the zero terminating byte is found. 
  1361.  
  1362.     If maxlength is 0 an error message will be given, and this tracepoint will 
  1363.     be ignored. 
  1364.  
  1365.     Note:  When using dynamic tracing, the OS/2 kernel does not place the 
  1366.     terminating null byte into the trace buffer; therefore the prefix byte must 
  1367.     be used by the Trace Formatter to obtain the length of the string. 
  1368.  
  1369.  
  1370. ΓòÉΓòÉΓòÉ 1.3.5.14. ASCIIZ Keyword ΓòÉΓòÉΓòÉ
  1371.  
  1372. This is used to log a string in a function compiled using 16-bit segment:offset 
  1373. addressing and is coded as: 
  1374.  
  1375.  
  1376.         ASCIIZ=(address_spec,flag,maxlength),
  1377.  
  1378. where: 
  1379.  
  1380. address_spec 
  1381.  
  1382.     is a segmented memory address specification as described in Address 
  1383.     Specification. 
  1384.  
  1385. flag 
  1386.  
  1387.     is a mandatory parameter that identifies the level of indirection to be 
  1388.     used on the address. It is one of: 
  1389.  
  1390.    D[IRECT] 
  1391.    I[NDIRECT][*[{+|-}iiiiiiii]]... 
  1392.    IF 
  1393.  
  1394. DIRECT implies that the address points to a memory location, the contents of 
  1395. which are to be saved in the trace buffer. 
  1396.  
  1397. INDIRECT means that the address points to a far pointer which is a segmented 
  1398. address that is dereferenced to obtain the target location to save in the trace 
  1399. buffer. The optional asterisks denote the level of indirection, one for each 
  1400. level.  The indirect offsets iiiiiiii are added to or subtracted from the value 
  1401. found at the given level of indirection. 
  1402.  
  1403. IF (Indirect Flat) means that the address points to a far pointer which is is a 
  1404. flat address that is dereferenced to obtain the target location to save in the 
  1405. trace buffer. Only far pointers may be dereferenced using segmented addresses. 
  1406.  
  1407. maxlength 
  1408.  
  1409.     is the maximum length of the string that will be saved in the trace buffer. 
  1410.     It should be no greater than MAXDATALENGTH. The actual length to be traced 
  1411.     will depend on where the zero terminating byte is found. 
  1412.  
  1413.     If maxlength is 0 an error message will be given, and this tracepoint will 
  1414.     be ignored. 
  1415.  
  1416.     Note:  When using dynamic tracing, the OS/2 kernel does not place the 
  1417.     terminating null byte into the trace buffer; therefore the prefix byte must 
  1418.     be used by the Trace Formatter to obtain the length of the string. 
  1419.  
  1420.  
  1421. ΓòÉΓòÉΓòÉ 1.3.5.15. Address Specification ΓòÉΓòÉΓòÉ
  1422.  
  1423. The syntax for specifying a memory address given here applies to the MEM32, 
  1424. MEM, ASCIIZ32 and ASCIIZ keywords above. 
  1425.  
  1426. An address is specified in one of the following forms: 
  1427.  
  1428.  1. Symbolic name form (can be used for MEM32, MEM, ASCIIZ32, and ASCIIZ). 
  1429.  2. Flat register form (can be used only for MEM32 and ASCIIZ32). 
  1430.  3. Segment register form (can be used only for MEM and ASCIIZ). 
  1431.  
  1432.  
  1433. ΓòÉΓòÉΓòÉ 1.3.5.15.1. Symbolic Name Form ΓòÉΓòÉΓòÉ
  1434.  
  1435. This is coded as: 
  1436.  
  1437.  
  1438.         .name[{+|-}nnnnnnnn]...[{+|-}(iiiiiiii)],
  1439.  
  1440. where: 
  1441.  
  1442. name 
  1443.  
  1444.     is a symbolic name of a memory location.  The "." is required before the 
  1445.     name. The debug information in the module is checked for the name and if 
  1446.     not found and a MAP was given, the MAP is checked. An error message is 
  1447.     output by the Trace Customizer if the symbol is not found and the trace 
  1448.     definition is ignored. 
  1449.  
  1450.     The name is case sensitive except under the conditions that follow. 
  1451.  
  1452.     If the procedure containing name was not compiled with debug option then if 
  1453.     name is a C language symbolic name it will be case sensitive and begin with 
  1454.     an underscore "_" character unless it was declared with the Pascal naming 
  1455.     convention, in which case the underscore is omitted and name is 
  1456.     capitalized. 
  1457.  
  1458. nnnnnnnn (optional) 
  1459.  
  1460.     is a displacement from the symbolic address. If hex the syntax is 
  1461.     0xnnnnnnnn. 
  1462.  
  1463. iiiiiiii (optional) 
  1464.  
  1465.     is a displacement from the indirect address. If hex the syntax is 
  1466.     0xiiiiiiii. This specifies a displacement from the final address when using 
  1467.     INDIRECT, IF (Indirect Flat) or IS (Indirect Segmented) addressing. 
  1468.  
  1469.  
  1470. ΓòÉΓòÉΓòÉ 1.3.5.15.2. Flat Register Form ΓòÉΓòÉΓòÉ
  1471.  
  1472. This is coded as: 
  1473.  
  1474.  
  1475.         Fbreg[{+|-}ireg]...[{+|-}nnnnnnnn]...[{+|-}(iiiiiiii)],
  1476.  
  1477. where: 
  1478.  
  1479. breg 
  1480.  
  1481.     is a flat model (0:32 bit) base register and is one of: 
  1482.  
  1483.     EAX,EBX,ECX,EDX,ESP,EBP,ESI,EDI 
  1484.  
  1485. ireg (optional) 
  1486.  
  1487.     is an extended data, base or index register. More than one ireg may be used 
  1488.     to define a displacement from the flat register value to the memory 
  1489.     location. It may be one of: 
  1490.  
  1491.     EAX,EBX,ECX,EDX,EBP,ESI,EDI 
  1492.  
  1493. nnnnnnnn (optional) 
  1494.  
  1495.     is an optional fixed displacement to be added to the address calculated in 
  1496.     the registers.  If hex the format is 0xnnnnnnnn. 
  1497.  
  1498. iiiiiiii (optional) 
  1499.  
  1500.     is a displacement from the indirect address. If hex the syntax is 
  1501.     0xiiiiiiii. This specifies a displacement from the final address when using 
  1502.     INDIRECT or IS (Indirect Segmented) addressing. 
  1503.  
  1504. This form of address is calculated at run time. 
  1505.  
  1506.  
  1507. ΓòÉΓòÉΓòÉ 1.3.5.15.3. Segment Register Form ΓòÉΓòÉΓòÉ
  1508.  
  1509. This is coded as: 
  1510.  
  1511.  
  1512.         Rsreg[{+|-}dreg]...[{+|-}nnnnn]...[{+|-}(iiiii)],
  1513.  
  1514. where: 
  1515.  
  1516. sreg 
  1517.  
  1518.     is a segment register and is one of: 
  1519.  
  1520.     CS,DS,SS,ES,FS,GS 
  1521.  
  1522. dreg (optional) 
  1523.  
  1524.     is a data, base or index register. More than one dreg may be used to define 
  1525.     a displacement from the segment register value to the memory location. It 
  1526.     is one of: 
  1527.  
  1528.     BP,SP,SI,DI,AX,BX,CX,DX 
  1529.  
  1530. nnnnn (optional) 
  1531.  
  1532.     is an optional fixed displacement to be added to the address calculated in 
  1533.     the registers.  If hex the syntax is 0xnnnn. 
  1534.  
  1535. iiiii (optional) 
  1536.  
  1537.     is a displacement from the indirect address. If hex the syntax is 0xiiii. 
  1538.     This specifies a displacement from the final address when using INDIRECT or 
  1539.     IF (Indirect Flat) addressing. 
  1540.  
  1541. This form of address is calculated at run time. 
  1542.  
  1543.  
  1544. ΓòÉΓòÉΓòÉ 1.4. Formatting Trace Data ΓòÉΓòÉΓòÉ
  1545.  
  1546. This section gives a brief description of the formatting process as an aid to 
  1547. generating correct formatting strings. 
  1548.  
  1549. Each trace record stored in the RAS buffer consists of a header followed by a 
  1550. number of variable length trace data records. The header identifies the major 
  1551. and minor code, time stamp, process ID, etc., and the total length of the trace 
  1552. data for that trace record. 
  1553.  
  1554. Each MEM32, MEM, ASCIIZ32, or ASCIIZ data statement, coded in the trace source 
  1555. file for a tracepoint, produces an associated data record to be stored in the 
  1556. trace buffer. The data records consist of a 3-byte prefix followed by the trace 
  1557. data. This prefix consists of a status byte followed by the length of the data 
  1558. for that statement. The status byte indicates whether valid data has been 
  1559. traced. 
  1560.  
  1561. Dynamic trace can only trace data that is resident in memory at the time that 
  1562. the tracepoint is executed. Data may not be able to be traced for two reasons: 
  1563. it resides in a page that is currently paged out or the address specified is 
  1564. invalid. This latter case usually occurs due to tracing indirectly via invalid 
  1565. pointer variables. In either of these two cases dynamic trace sets the status 
  1566. byte accordingly and stores the pointer in the place of the wanted data. No 
  1567. more data is attempted to be traced for this invocation of the tracepoint, but 
  1568. tracing will resume the next time this tracepoint is encountered. 
  1569.  
  1570. Since the position of these prefix bytes, within a trace record, is dependent 
  1571. on the data being traced and the number of MEM32, MEM, ASCIIZ32, or ASCIIZ 
  1572. statements, the Trace Formatter must be told when to expect the prefix in the 
  1573. trace record. This is the purpose of the %P formatting control. It must be 
  1574. coded in the formatting string at every place a data record is expected. 
  1575.  
  1576. Note:  With ASCIIZ and ASCIIZ32 commands, the prefix must be used to obtain the 
  1577. length of the string since the string is not null terminated. 
  1578.  
  1579.  
  1580. ΓòÉΓòÉΓòÉ 1.5. Sample Trace Source Files ΓòÉΓòÉΓòÉ
  1581.  
  1582. This section gives four sample TSF files. The first is for a module written in 
  1583. a mix of C and MASM and compiled with 16:16 segmented addressing.  The second 
  1584. was compiled with 0:32 flat addressing.  The third module consists of routines, 
  1585. some which were compiled using 16-bit segmented addressing and some that were 
  1586. compiled using 32-bit flat addressing. The fourth is for monitoring function 
  1587. references in a module. 
  1588.  
  1589.  
  1590. ΓòÉΓòÉΓòÉ 1.5.1. TSF Using 16-bit Segmented Addressing ΓòÉΓòÉΓòÉ
  1591.  
  1592. ;  Trace source file for the xxx dynalink.  Compiled with 16-bit offsets.
  1593.  
  1594.      MODNAME=\c\src\xxx.dll
  1595.      MAJOR=0xC5
  1596.      MAXDATALEN=200
  1597. ;  We will want to trace up to 200 bytes in any one trace call.
  1598.  
  1599.      TYPELIST NAME=API,ID=08,
  1600.               NAME=SYS,ID=04,
  1601.               NAME=PRE,ID=02,
  1602.               NAME=POST,ID=64
  1603.  
  1604.      GROUPLIST NAME=MEM,ID=1,
  1605.                NAME=FS,ID=3
  1606.  
  1607.               /* The following tracepoint does not need debug info,
  1608.                  only a MAP file is necessary with label xxalloc
  1609.                  public in it.  The program must be compiled in 16-bit
  1610.                  mode because segmented addressing is used (ASCIIZ
  1611.                  instead of ASCIIZ32).
  1612.                  This logs the word registers AX and BX and the string
  1613.                  pointed at by DS:DI for a max of 20 bytes. */
  1614.  
  1615.      TRACE    MINOR=25, TP=.xxalloc,
  1616.               OPCODE=0x8B,    /* the opcode is optional */
  1617.               TYPE=(API,PRE),
  1618.               GROUP=MEM,
  1619.               DESC="(OS) xxalloc Pre-Invocation",
  1620.               FMT ="                             AX = %W ",
  1621.               FMT ="                             upper BX = %B",
  1622.               FMT ="                             lower BX = %B",
  1623.               FMT ="                             param = %P%S",
  1624.               REGS=(AX,BX),
  1625.               ASCIIZ=(RDS+DI,DIRECT,20)
  1626.  
  1627.  
  1628.               /* This defines a tracepoint at Foo label.  The ten words
  1629.                  to log are found indirectly through SS:SP.  Note that
  1630.                  each word needs a format control but since only one
  1631.                  memory access was done,  one prefix control is needed. */
  1632.  
  1633.       TRACE   MINOR=0xB0, TP=.Foo,
  1634.               TYPE=(SYS),
  1635.               GROUP=FS,
  1636.               DESC="(OS) Foo Pre-Invocation",
  1637.               FMT="                     First Five words = %P%W%W%W%W%W",
  1638.               FMT="                     Three words ignored %I6",
  1639.               FMT="                     Last Two Words = %W%W",
  1640.               MEM=(RSS+SP,INDIRECT,20)
  1641.  
  1642.  
  1643.               /* This defines a tracepoint at Goo label.  DS:DI points
  1644.                  to a structure whose second field is a pointer to an
  1645.                  ASCIIZ string.  The offset from the first field in the
  1646.                  structure is 4 bytes. Max string size to log is 40 bytes. */
  1647.  
  1648.       TRACE   MINOR=0xB1, TP=.Goo,
  1649.               TYPE=(SYS),
  1650.               GROUP=FS,
  1651.               DESC="(OS) Goo Pre-Invocation",
  1652.               FMT="          Second field in struct points to %P%S",
  1653.               ASCIIZ=(RDS+DI+4,INDIRECT,40)
  1654.  
  1655.  
  1656.               /* This defines a tracepoint at Hoo label.  DS:DI points to
  1657.                  memory that contains a pointer to a structure. We want to
  1658.                  log the third field in the structure (offset 6 from begin
  1659.                  of structure). */
  1660.  
  1661.       TRACE   MINOR=0xB2, TP=.Hoo,
  1662.               TYPE=(SYS),
  1663.               GROUP=FS,
  1664.               DESC="(OS) Hoo Pre-Invocation",
  1665.               FMT="          Third field in struct is doubleword = %P%D",
  1666.               MEM=(RDS+DI,INDIRECT*+6,4)
  1667.  
  1668.  
  1669.               /* This defines a tracepoint at Zoo label.  DS:DI points to
  1670.                  memory that contains a pointer to end of a structure. We
  1671.                  want to log the last field in the structure(offset -2 from
  1672.                  end of structure). */
  1673.  
  1674.       TRACE   MINOR=0xB3, TP=.Zoo,
  1675.               TYPE=(SYS),
  1676.               GROUP=FS,
  1677.               DESC="(OS) Zoo Pre-Invocation",
  1678.               FMT="          Last field in struct is word = %P%W",
  1679.               MEM=(RDS+DI,INDIRECT*-2,2)
  1680.  
  1681.  
  1682.               /* This defines a tracepoint at procedure CheckIT.  This
  1683.                  is a C routine compiled with debug information.  The
  1684.                  data to log is an ASCIIZ string called NameIt.  */
  1685.  
  1686.       TRACE   MINOR=0xB3, TP=.CheckIt,
  1687.               TYPE=(PRE),
  1688.               GROUP=FS,
  1689.               DESC="(OS) CheckIt Pre-Invocation",
  1690.               FMT="              NameIt = %P%S",
  1691.               ASCIIZ=(.NameIt,DIRECT,64)
  1692.  
  1693.  
  1694.               /* This defines a tracepoint at the return point of the
  1695.                  procedure CheckIt, a C routine compiled with debug.
  1696.                  Status_Rec is a record variable. We want to log the
  1697.                  age field (four bytes from the begin of Status_Rec),
  1698.                  the name (six bytes from Status_Rec that points to
  1699.                  an ASCIIZ string), the age of the next Status_Rec
  1700.                  (a pointer to the next Status_Rec is ten bytes from
  1701.                  the begin of Status_Rec, the age is four bytes from
  1702.                  the begin of the next Status_Rec). */
  1703.  
  1704.       TRACE   MINOR=0x80B3, TP=.CheckIt,RETEP,
  1705.               TYPE=(POST),
  1706.               GROUP=FS,
  1707.               DESC="(OS) CheckIt Post-Invocation",
  1708.               FMT="              Status_Rec.age = %P%W",
  1709.               FMT="              Status_Rec.name = %P%S",
  1710.               FMT="              Status_Rec.next->age = %P%W",
  1711.               MEM=(.Status_Rec+4,DIRECT,2),
  1712.               ASCIIZ=(.Status_Rec+6,INDIRECT,64),
  1713.               MEM=(.Status_Rec+10,INDIRECT*+4,2)
  1714.  
  1715.  
  1716.               /* This defines a tracepoint at line 58 in the source
  1717.                  file check.c   Debug info is needed to use this
  1718.                  type of tracepoint. v_ptr is a pointer to a variable
  1719.                  sized record.  The length is 4 bytes past the
  1720.                  beginning of the record.  Log that record. */
  1721.  
  1722.       TRACE   MINOR=0x71B4, TP=@check.c,58,
  1723.               TYPE=(SYS),
  1724.               GROUP=FS,
  1725.               DESC="(OS) CheckIt   before allocation",
  1726.               FMT="              Variant Record = %P%W%D%U",
  1727.               LEN=(v_ptr,INDIRECT*+4),
  1728.               MEM=(.v_ptr,INDIRECT,LEN)
  1729.  
  1730.  
  1731.               /* This does not define a tracepoint, it only defines a
  1732.                  trace formatting string for minor code 181 (B5 hex). */
  1733.  
  1734.       TRACE   MINOR=0xB5, TP=@STATIC,
  1735.               DESC="(OS) StaticProcedure Pre-Invocation",
  1736.               FMT="                 DI = %W FLAGS = %W"
  1737.  
  1738.  
  1739.               /* This defines a tracepoint at routine LookUp, but no
  1740.                  data is to be logged, only the DESC will show up
  1741.                  in the Trace log when the tracepoint is formatted. */
  1742.  
  1743.       TRACE   MINOR=0xB6, TP=.LookUp,
  1744.               TYPE=(SYS),
  1745.               GROUP=FS,
  1746.               DESC="(APP) LookUp  Pre-Invocation",
  1747.  
  1748.  
  1749.  
  1750. ΓòÉΓòÉΓòÉ 1.5.2. TSF Using 32-bit Addressing ΓòÉΓòÉΓòÉ
  1751.  
  1752.  
  1753. ;  Trace source file for the NEW dynalink.  Compiled with 32-bit offsets.
  1754.  
  1755.      MODNAME=NEWCALLS.DLL
  1756.      MAJOR=241
  1757.      MAXDATALEN=200
  1758. ;  We will want to trace up to 200 bytes in any one trace call.
  1759.  
  1760.      TYPELIST NAME=API,ID=08,
  1761.               NAME=SYS,ID=04,
  1762.               NAME=PRE,ID=02,
  1763.               NAME=POST,ID=64
  1764.  
  1765.      GROUPLIST NAME=MEM,ID=1,
  1766.                NAME=FS,ID=3
  1767.  
  1768.               /* The following tracepoint does not need debug info,
  1769.                  only a MAP file is necessary with label NewAllocSeg
  1770.                  public in it.  The program must be compiled in 32-bit
  1771.                  mode because flat addressing is used (ASCIIZ32 instead
  1772.                  of ASCIIZ).
  1773.                  This logs lower word of EAX, the double word of EBX
  1774.                  and the string at the address specified by ESP with
  1775.                  offset ESI. */
  1776.  
  1777.      TRACE    MINOR=45, TP=.NewAllocSeg,
  1778.               TYPE=(API,PRE),
  1779.               GROUP=MEM,
  1780.               DESC="(NEW) NewAllocSeg Pre-Invocation",
  1781.               FMT ="                             AX = %W ",
  1782.               FMT ="                             EBX = %F",
  1783.               FMT ="                             param = %P%S",
  1784.               REGS=(AX,EBX),
  1785.               ASCIIZ32=(FESP+ESI,DIRECT,20)
  1786.  
  1787.               /* This defines a tracepoint at Foo label.  The ten words
  1788.                  to log are found indirectly by using EBP with offset
  1789.                  EDI. Note that each value logged needs a format control. */
  1790.  
  1791.       TRACE   MINOR=0xD0, TP=.Foo,
  1792.               TYPE=(SYS),
  1793.               GROUP=FS,
  1794.               DESC="(NEW) Foo Pre-Invocation",
  1795.               FMT="                     First Five words = %P%W%W%W%W%W",
  1796.               FMT="                     Three words ignored %I6",
  1797.               FMT="                     Last Two Words = %W%W",
  1798.               MEM32=(FEBP+EDI,INDIRECT,20)
  1799.  
  1800.  
  1801.               /* This defines a tracepoint at Goo label. EAX + EDI points
  1802.                  to a structure whose second field is a pointer to an
  1803.                  ASCIIZ string.  The offset from the first field in the
  1804.                  structure is 4 bytes. Max string size to log is 40 bytes.*/
  1805.  
  1806.       TRACE   MINOR=0xD1, TP=.Goo,
  1807.               TYPE=(SYS),
  1808.               GROUP=FS,
  1809.               DESC="(NEW) Goo Pre-Invocation",
  1810.               FMT="           Second field in struct points to %P%S",
  1811.               ASCIIZ32=(FEAX+EDI+4,INDIRECT,40)
  1812.  
  1813.  
  1814.               /* This defines a tracepoint at Hoo label.  EBP + EDI points
  1815.                  to memory that contains a pointer to a structure. We want
  1816.                  to log the third field in the structure (offset 6 from
  1817.                  begin of structure). */
  1818.  
  1819.       TRACE   MINOR=0xD2, TP=.Hoo,
  1820.               TYPE=(SYS),
  1821.               GROUP=FS,
  1822.               DESC="(NEW) Hoo Pre-Invocation",
  1823.               FMT="           Third field in struct is doubleword = %P%D",
  1824.               MEM32=(FEBP+EDI,INDIRECT*+6,4)
  1825.  
  1826.  
  1827.               /* This defines a tracepoint at Zoo label.  EAX + EDI points
  1828.                  to memory that contains a pointer to end of a structure. We
  1829.                  want to log the last field in the structure (offset -2 from
  1830.                  end of structure). */
  1831.  
  1832.       TRACE   MINOR=0xD3, TP=.Zoo,
  1833.               TYPE=(SYS),
  1834.               GROUP=FS,
  1835.               DESC="(OS) Zoo Pre-Invocation",
  1836.               FMT="          Last field in struct is word = %P%W",
  1837.               MEM=(FEAX+EDI,INDIRECT*-2,2)
  1838.  
  1839.  
  1840.               /* This defines a tracepoint at procedure CheckIT.  This is
  1841.                  a C routine compiled with debug information.  The
  1842.                  data to log is an ASCIIZ string called NameIt. */
  1843.  
  1844.       TRACE   MINOR=0xD3, TP=.CheckIt,
  1845.               TYPE=(PRE),
  1846.               GROUP=FS,
  1847.               DESC="(NEW) CheckIt Pre-Invocation",
  1848.               FMT="              NameIt = %P%S",
  1849.               ASCIIZ32=(.NameIt,DIRECT,64)
  1850.  
  1851.  
  1852.               /* This defines a tracepoint at the return point of the
  1853.                  procedure CheckIt, a C routine compiled with debug.
  1854.                  Status_Rec is a record variable. We want to log the
  1855.                  age field (four bytes from the begin of Status_Rec)
  1856.                  the name (six bytes from Status_Rec that points to
  1857.                  an ASCIIZ string) and the age of the next Status_Rec
  1858.                  (a pointer to the next Status_Rec is ten bytes from
  1859.                  the begin of Status_Rec, the age is four bytes from
  1860.                  the begin of the next Status_Rec). */
  1861.  
  1862.       TRACE   MINOR=0x80D3, TP=.CheckIt,RETEP,
  1863.               TYPE=(POST),
  1864.               GROUP=FS,
  1865.               DESC="(NEW) CheckIt Post-Invocation",
  1866.               FMT="              Status_Rec.age = %P%W",
  1867.               FMT="              Status_Rec.name = %P%S",
  1868.               FMT="              Status_Rec.next->age = %P%W",
  1869.               MEM32=(.Status_Rec+4,DIRECT,2),
  1870.               ASCIIZ32=(.Status_Rec+6,INDIRECT,64),
  1871.               MEM32=(.Status_Rec+10,INDIRECT*+4,2)
  1872.  
  1873.  
  1874.               /* This does not define a tracepoint, it only defines a
  1875.                  trace formatting string for minor code 223 (DF hex). */
  1876.  
  1877.       TRACE   MINOR=0xDF, TP=@STATIC,
  1878.               DESC="(NEW) StaticProcedure Pre-Invocation",
  1879.               FMT="                 DI = %W FLAGS = %W"
  1880.  
  1881.  
  1882.               /* This defines a tracepoint at routine LookUp, but no
  1883.                  data is to be logged, only the DESC will show up
  1884.                  in the Trace log when the tracepoint is formatted.
  1885.                  LookUp is a C language routine not compiled with
  1886.                  debug and not declared with Pascal
  1887.                  calling conventions; the underscore is needed for
  1888.                  this label. */
  1889.  
  1890.       TRACE   MINOR=0xE0, TP=._LookUp,
  1891.               TYPE=(SYS),
  1892.               GROUP=FS,
  1893.               DESC="(NEW) LookUp  Pre-Invocation"
  1894.  
  1895.  
  1896. ΓòÉΓòÉΓòÉ 1.5.3. TSF Using Mix of 16-bit and 32-bit Addressing ΓòÉΓòÉΓòÉ
  1897.  
  1898.  
  1899. ;  Trace source file for the MIXED dynalink.
  1900. ;    Parts were compiled with 16-bit compiler, some with 32-bit compiler.
  1901. ;    The developer must know how the parameters being sent in are
  1902. ;    to be addressed, whether they are segmented or flat addresses.
  1903.  
  1904.      MODNAME=MIXCALLS.DLL
  1905.      MAJOR=250
  1906.      MAXDATALEN=200
  1907. ;  We will want to trace up to 200 bytes in any one trace call.
  1908.  
  1909.      TYPELIST NAME=API,ID=08,
  1910.               NAME=SYS,ID=04,
  1911.               NAME=PRE,ID=02,
  1912.               NAME=POST,ID=64
  1913.  
  1914.      GROUPLIST NAME=MEM,ID=1,
  1915.                NAME=FS,ID=3
  1916.  
  1917.               /* The following tracepoint is for the routine MixStub.
  1918.                  This was compiled using segmented addressing and
  1919.                  one of the parameters to it is a pointer to a control
  1920.                  block called mix_ctrl.  This pointer, found at SS:SP,
  1921.                  is a flat address because the routine that sent it was
  1922.                  compiled with the flat addressing specification.
  1923.                  This logs the mix_ctrl block for 6 bytes. */
  1924.  
  1925.      TRACE    MINOR=95, TP=.MixStub,
  1926.               TYPE=(API,PRE),
  1927.               GROUP=MEM,
  1928.               DESC="(OS) MixStub     Pre-Invocation",
  1929.               FMT ="                             mix_ctrl = %P%W %W %W",
  1930.               MEM=(RSS+SP,IF,6)    /* is an indirect flat address */
  1931.  
  1932.  
  1933.               /* The following is for the routine FlatStub.  This was
  1934.                  compiled using 32-bit flat addresses.  A parameter to
  1935.                  flatstub is a pointer called p_seg_info.  This
  1936.                  pointer is a segmented address because the routine
  1937.                  calling flatstub was compiled using 16-bit segmented
  1938.                  addressing.  Log where p_seg_info points for 2 bytes. */
  1939.  
  1940.       TRACE   MINOR=0xf0, TP=.FlatStub,
  1941.               TYPE=(SYS),
  1942.               GROUP=FS,
  1943.               DESC="(OS) FlatStub Pre-Invocation",
  1944.               FMT="                     seg_info = %P%W",
  1945.               MEM32=(.p_seg_info,IS,2)   /* value p_seg_info is a 16-bit */
  1946.                                          /*  segmented address           */
  1947.  
  1948.  
  1949. ΓòÉΓòÉΓòÉ 1.6. Trace Customizer Messages ΓòÉΓòÉΓòÉ
  1950.  
  1951. The messages generated by the Trace Customizer are given below. In addition to 
  1952. the message itself, the source line in error is displayed. 
  1953.  
  1954. Errors in the FATAL and SEVERE category will cause the compiler to abort 
  1955. immediately. 
  1956.  
  1957. ERROR messages will normally cause a tracepoint definition to be discarded and 
  1958. processing continues with the next definition. 
  1959.  
  1960. WARNING messages will allow a valid tracepoint definition to be produced, and 
  1961. the results will normally be as expected. 
  1962.  
  1963.  
  1964. ΓòÉΓòÉΓòÉ 1.6.1. External Messages ΓòÉΓòÉΓòÉ
  1965.  
  1966. Msg No.   Message Text 
  1967.  
  1968. TCU0001I: TRCUST Version %1 
  1969.  
  1970. TCU0002I: created TDF file %1 
  1971.  
  1972. TCU0004I: error detected, TRCUST aborted 
  1973.  
  1974. TCU0005E: unrecognized executable header in %1 
  1975.  
  1976. TCU0006E: invalid command line parameter %1 
  1977.  
  1978. TCU0007E: unable to access %1 
  1979.  
  1980. TCU0008E: unable to open %1 
  1981.  
  1982. TCU0009E: unable to read from %1 
  1983.  
  1984. TCU0010E: unable to write to %1 
  1985.  
  1986. TCU0011E: unable to find %1 or access denied 
  1987.  
  1988. TCU0012E: out of memory 
  1989.  
  1990. TCU0013E: symbolic information not given for %1 
  1991.  
  1992. TCU0014E: invalid quoted string encountered in %1 
  1993.  
  1994. TCU0015E: too many tracepoints in %1 
  1995.  
  1996. TCU0016E: unexpected end-of-file encountered in %1 
  1997.  
  1998. TCU0017I: error detected, tracepoint ignored 
  1999.  
  2000. TCU0018W: %1 (%2): invalid object number %3 in executable file 
  2001.  
  2002. TCU0019W: %1 (%2): invalid offset for object number %3 in executable file 
  2003.  
  2004. TCU0020W: %1 (%2): invalid page for tracepoint application 
  2005.  
  2006. TCU0021W: %1 (%2): unable to find %3 in CodeView information 
  2007.  
  2008. TCU0022W: %1 (%2): invalid line number in %3 
  2009.  
  2010. TCU0023W: %1 (%2): invalid opcode for tracing 
  2011.  
  2012. TCU0024W: %1 (%2): unable to find %3 symbol 
  2013.  
  2014. TCU0025W: %1: duplicate %3 in tracepoint starting at line %2 
  2015.  
  2016. TCU0026W: %1 (%2): index too large, high word ignored 
  2017.  
  2018. TCU0027W: %1 (%2): invalid %3 syntax 
  2019.  
  2020. TCU0028W: %1 (%2): %3 not specified 
  2021.  
  2022. TCU0029W: %1 (%2): %3 redefinition 
  2023.  
  2024. TCU0030W: %1 (%2): unable to find line number, %3 used 
  2025.  
  2026. TCU0031W: %1 (%2): CodeView information does not exist for %3 
  2027.  
  2028. TCU0032W: %1 (%2): tracing opcode defined after %3 
  2029.  
  2030. TCU0033W: %1 (%2): %3 out of range, default assumed 
  2031.  
  2032. TCU0034W: %1 (%2): syntax error, %3 unrecognized 
  2033.  
  2034. TCU0035W: %1 (%2): RPN command record exceeds maximum limit 
  2035.  
  2036.  
  2037. ΓòÉΓòÉΓòÉ 1.6.2. Internal Messages ΓòÉΓòÉΓòÉ
  2038.  
  2039. Internal format messages produced by TRCUST are of the form: 
  2040.  
  2041.         TRCUST(n) severity: message_text
  2042.  
  2043. where: 
  2044.  
  2045.           n
  2046.           is the line number of the tsf in error or (1) if the command syntax 
  2047.           is in error. 
  2048.  
  2049.           severity
  2050.           is the message severity and may take one of the following values: 
  2051.  
  2052.    o FATAL 
  2053.  
  2054.    o SEVERE 
  2055.  
  2056.    o ERROR 
  2057.  
  2058.    o WARNING 
  2059.  
  2060.           message_text
  2061.           is the text of the message. 
  2062.  
  2063.  
  2064. ΓòÉΓòÉΓòÉ 1.6.2.1. Fatal Messages ΓòÉΓòÉΓòÉ
  2065.  
  2066. Msg No.   Message Text 
  2067.  
  2068. 1         TSF file not specified 
  2069.  
  2070. 2         file not found or access denied : %s 
  2071.  
  2072. 3         cannot open file : %s 
  2073.  
  2074. 4         error accessing file : %s 
  2075.  
  2076. 5         error writing to file : %s 
  2077.  
  2078. 6         unable to allocate more memory 
  2079.  
  2080. 7         too many tracepoints in file 
  2081.  
  2082. 8         error reading file: %s, Rc = %s 
  2083.  
  2084. 9         changing file pointer for: %s, Rc = %s 
  2085.  
  2086. 10        unknown EXE header type for: %s 
  2087.  
  2088. 11        invalid path specified in combine file 
  2089.  
  2090. 12        max TFF files to combine is 50 
  2091.  
  2092. 13        all TFFs not have same major code, file: %s 
  2093.  
  2094. 14        invalid MAP file extension given in: %s 
  2095.  
  2096. 15        TCF file not specified 
  2097.  
  2098. 16        filename to long: %s 
  2099.  
  2100. 17        token in TSF file exceeds %s bytes 
  2101.  
  2102.  
  2103. ΓòÉΓòÉΓòÉ 1.6.2.2. Severe Messages ΓòÉΓòÉΓòÉ
  2104.  
  2105. Msg No.   Message Text 
  2106.  
  2107. 33        module name not specified 
  2108.  
  2109. 34        premature end of file encountered 
  2110.  
  2111. 35        syntax error : missing '%s' before '%s' 
  2112.  
  2113. 36        new line in literal 
  2114.  
  2115. 37        NULL in literal 
  2116.  
  2117. 38        keyword '%s' expected, '%s' found 
  2118.  
  2119. 39        symbolic info not given for %s 
  2120.  
  2121. 40        MAJOR redefinition 
  2122.  
  2123. 41        TDFID redefinition 
  2124.  
  2125. 42        MAXDATALENGTH redefinition 
  2126.  
  2127. 43        line too long in input file: %s 
  2128.  
  2129.  
  2130. ΓòÉΓòÉΓòÉ 1.6.2.3. Error Messages ΓòÉΓòÉΓòÉ
  2131.  
  2132. Msg No.   Message Text 
  2133.  
  2134. 65        number expected, '%s' found 
  2135.  
  2136. 66        unexpected: %s, ignored 
  2137.  
  2138. 67        minor code not specified 
  2139.  
  2140. 68        minor code out of range 
  2141.  
  2142. 69        TYPELIST redefinition, ignored 
  2143.  
  2144. 70        GROUPLIST redefinition, ignored 
  2145.  
  2146. 71        TP redefinition, tracepoint ignored 
  2147.  
  2148. 72        MINOR redefinition, tracepoint ignored 
  2149.  
  2150. 73        OPCODE redefinition, tracepoint ignored 
  2151.  
  2152. 74        syntax error: missing '%s' before '%s' 
  2153.  
  2154. 75        opcode: %s out of range 
  2155.  
  2156. 76        opcode at TP address cannot be traced 
  2157.  
  2158. 77        opcode mismatch at address to apply TP 
  2159.  
  2160. 78        register expected, '%s' found 
  2161.  
  2162. 79        symbol not found: %s 
  2163.  
  2164. 80        address not found 
  2165.  
  2166. 81        segment register expected, '%s' found 
  2167.  
  2168. 82        trace record incomplete, '%s' required 
  2169.  
  2170. 83        RPN command record exceeds 255 bytes 
  2171.  
  2172. 84        invalid parameter: '%s', ignored 
  2173.  
  2174. 85        invalid ID: %s, ignored 
  2175.  
  2176. 86        group/type redefinition: %s, ignored 
  2177.  
  2178. 87        typeid redefinition: %s, ignored 
  2179.  
  2180. 88        groupid redefinition: %s, ignored 
  2181.  
  2182. 89        invalid address specified: %s 
  2183.  
  2184. 90        line number past end of code for file %s 
  2185.  
  2186. 91        Debug info does not exist for: %s 
  2187.  
  2188. 92        line number missing or invalid: %s 
  2189.  
  2190. 93        filename %s not found in Debug info 
  2191.  
  2192. 94        duplicate minor code = %s, ignored 
  2193.  
  2194. 95        duplicate minor code = %s in file %s, ignored 
  2195.  
  2196. 96        variable LEN parameter not preceding 
  2197.  
  2198. 97        RPN stack limit of 16 exceeded 
  2199.  
  2200. 98        invalid flat register specified: %s 
  2201.  
  2202. 99        total FMT format specs above 4096 bytes 
  2203.  
  2204. 100       zero length specified, tracepoint ignored 
  2205.  
  2206. 101       ORBIT redefinition, tracepoint ignored 
  2207.  
  2208. 102       invalid ORBIT value, tracepoint ignored 
  2209.  
  2210. 103       opcode defined after ABORT 
  2211.  
  2212. 104       opcode defined after REMOVE 
  2213.  
  2214. 105       duplicate TP address, ignored 
  2215.  
  2216. 106       /D not allowed with /C, ignored 
  2217.  
  2218.  
  2219. ΓòÉΓòÉΓòÉ 1.6.2.4. Warning Messages ΓòÉΓòÉΓòÉ
  2220.  
  2221. Msg No.   Message Text 
  2222.  
  2223. 129       MAXDATALENGTH out of range, 512 used 
  2224.  
  2225. 130       typename unknown: %s, ignored 
  2226.  
  2227. 131       groupname unknown: %s, ignored 
  2228.  
  2229. 132       file: %s, extension invalid, using: %s 
  2230.  
  2231. 133       '%s' expected before '%s', one assumed 
  2232.  
  2233. 134       too many %s, first 16 types, 48 groups used 
  2234.  
  2235. 135       name too long: %s, first 8 characters used 
  2236.  
  2237. 136       linenum in file: %s not found, using #%s 
  2238.  
  2239. 137       bad object number: %s used for file %s 
  2240.  
  2241. 138       offset %s is invalid for object number %s 
  2242.  
  2243. 139       page tracepoint to be applied at not valid 
  2244.  
  2245. 140       MAXDATALENGTH to log could be exceeded 
  2246.  
  2247. 141       MAJOR out of range, 1 used 
  2248.  
  2249. 142       TDFID out of range, 0 used 
  2250.  
  2251. 143       index too large, high word ignored 
  2252.