home *** CD-ROM | disk | FTP | other *** search
/ Amiga Developer CD v1.2 / amidev_cd_12.iso / devcon / milan_1991 / devcon91.3 / debug / monitor / wedge.doc < prev   
Text File  |  1992-09-01  |  21KB  |  543 lines

  1.  
  2.                 WEDGE
  3.  
  4. Format: WEDGE <library> <offset> [regs ptrs] [opt fklnprasxz u t=<tasklist>
  5.         b=<baud> c=<comment> d=<n>]
  6.     or  WEDGE LIST
  7.     or  WEDGE KILLALL
  8.  
  9. Template: WEDGE "LIBRARY,OFFSET,REGS/K,PTRS/K,OPT/S,T=/K,B=/K,C=/K,D=/K"
  10.  
  11. Purpose: To monitor calls to any library function.
  12.  
  13. Specification:
  14.  
  15. WEDGE allows you to monitor the library function calls of system and
  16. application tasks.  This is useful for both debugging and the optimization
  17. of software. WEDGE reports the name and address of the task calling the
  18. function, the Forbid/Disable status, the register contents, data pointed to
  19. by registers, stack, and the function return value.
  20.  
  21. You can restrict reporting to a list of tasks, and you can also exclude a
  22. list of tasks from reporting.  When in serial mode, Debug (ROMWACK) can be
  23. invoked either before or after the WEDGEd function.
  24.  
  25.  
  26. NOTE - The new Software Tools LVO command has a "wedgeline" option which
  27. can be used with the Amiga FD files to automatically create command lines
  28. for WEDGE.  This is the easiest way to create a basic command line for
  29. WEDGE - much easier than figuring out the register bit patterns yourself.
  30. See the final section on creating your own wedges for more information.
  31.  
  32.  
  33. EXPLANATION OF WEDGE ARGUMENTS
  34.  
  35. In this section, the CLI argument is listed followed by the Workbench TOOL
  36. TYPE enclosed in parentheses.  If an example is included to illustrate an
  37. argument, the example shows both the CLI argument and the corresponding TOOL
  38. TYPE.
  39.  
  40.  
  41. Required Arguments (ToolTypes shown in parentheses)
  42.  
  43. NOTE - All command line options should be lower-case
  44.  
  45. <library> (LIBRARY=)    Specifies any run-time library (without the
  46.             ".library" suffix).
  47.  
  48.             Example:    exec        (LIBRARY=exec)
  49.  
  50.  
  51. <offset>  (OFFSET=)    Specifies the library base offset of the function
  52.             being WEDGEd.  It must be expressed as a negative
  53.             offset in hexadecimal form.
  54.  
  55.             Example:    0xff28    (OFFSET=0xff28)
  56.  
  57.  
  58. Optional Argument Pair
  59.  
  60. NOTE:  REGS and PTRS must be used in conjunction with each other.  If you
  61.        supply one option, you MUST supply the other.  They cannot be used
  62.        alone.
  63.  
  64. REGS      (REGS=)    Hexadecimal word (format 0xHHHH) representing the
  65.             registers that should be reported.  Each bit set in
  66.             the word represents a 68000 register, with the bits
  67.             from right to left, representing d0 through d7 then
  68.             a0 through a7.
  69.  
  70.             Example: To monitor d0, d1, a0 and a6, the bit
  71.                  pattern would be:
  72.  
  73.                                          a6        a0    d1  d0
  74.                                           \        /      \  /
  75.                                  Binary:  0100 0001 0000 0011
  76.  
  77.                              Then convert binary nibbles to hexadecimal:
  78.  
  79.                                   Binary<>Hex Conversion Table
  80.  
  81.                                  0000=0  0100=4  1000=8  1100=C
  82.                                  0001=1  0101=5  1001=9  1101=D
  83.                                  0010=2  0110=6  1010=A  1110=E
  84.                                  0011=3  0111=7  1011=B  1111=F
  85.  
  86.                  This example converted to hex is
  87.  
  88.                                               HEX 4 1 0 3
  89.  
  90.                                  The regs argument would be:
  91.  
  92.                  0x4103        (REGS=0x4103)
  93.  
  94.  
  95. PTRS    (PTRS=)        The hex word (format 0xHHHH) representing the
  96.             monitored registers that point to the data you want
  97.             reported.  This is especially useful for monitoring
  98.             text strings passed as function arguments. The first
  99.             16 bytes of the data will be reported in both hex
  100.             and ASCII.  The hex word is formed the same way as
  101.             for the REGS option.
  102.  
  103.             Example:  If d1 and a0 are pointers:
  104.                     0x0102    (PTRS=0x0102)
  105.  
  106.  
  107.  
  108. f      (FORBID=TRUE)    Causes WEDGE to Forbid() before calling the WEDGEd
  109.             function.  WEDGE will not call Permit() until Result
  110.             is returned.  This flag is only meaningful if Result
  111.             reporting is in effect.  When you are monitoring
  112.             tasks that are calling the same functions, this flag
  113.             can help to synchronize Result reports with other
  114.             WEDGE output by attempting to prevent multitasking
  115.             until the function returns.  Functions that Wait()
  116.             and local output will break this Forbid().
  117.  
  118.  
  119. k    (KILL=TRUE)    Kills this WEDGE.  Use KILL=TRUE for a kill-only
  120.             icon.  Use KILL=FALSE for an install-only icon.  If
  121.             a KILL TOOL TYPE is not present, the icon will
  122.             toggle WEDGE in and out.)
  123.  
  124.  
  125. l      (LOCAL=TRUE)    Selects studio reporting.  In this mode, WEDGE can
  126.             only report the function calls of non-FORBIDden
  127.             processes with available stack of at least 1800
  128.             bytes.  (Only 300 bytes are needed for serial or
  129.             parallel output.)  In addition, function calls made
  130.             by the Local output handler will not be reported.
  131.             (The Local output handler is usually a window, but
  132.             it may be another handler if CLI output redirection
  133.             was used.)
  134.  
  135.             In all output modes, WEDGE will bypass reporting if
  136.             the caller's available stack is too low for safe
  137.             execution of the output function.  All unreported
  138.             calls are tallied, and a count is presented at the
  139.             next report. The available stack safety feature may
  140.             be turned off (at your own risk) with the UNSAFE
  141.             TOOL TYPE or with the CLI 'U' flag.
  142.  
  143.  
  144. n    (NOISY=TRUE)    Notifies user of WEDGE installation and removal.
  145.  
  146.  
  147. p    (PARALLEL=TRUE) Selects parallel reporting, instead of serial.  By
  148.             default, all debugging output is directed to the
  149.             serial port and may be received by a terminal,
  150.             serial printer or a second computer running terminal
  151.             software.  Optionally, the output can be directed to
  152.             the parallel port or displayed locally.
  153.  
  154.  
  155. r    (RESULT=TRUE)   Monitors the return value of reported functions. An
  156.             Id number is assigned to each reported function
  157.             call.  That call's Return value report is tagged
  158.             with the same Id number. This allows you to match
  159.             calls and return values, even if multitasking causes
  160.             other WEDGE reports to be output in between them.
  161.  
  162. a    (RESULT=TRUE)    Monitors what the result points to.
  163.  
  164.  
  165. s    (STACK=TRUE)    Monitors stack limits and pointer.
  166.  
  167.  
  168. x    (EXCLUDE=TRUE)    Excludes tasks in the tasklist from reporting.
  169.  
  170.  
  171. u    (UNSAFE=TRUE)    Reports regardless of the available stack.  Use this
  172.             option at your own risk.  When WEDGE is run from the
  173.             CLI, the U flag may not be grouped with other flags
  174.             (there must be a space before it).
  175.  
  176.  
  177. z    (ZAP=TRUE)    When used in conjunction with the k option, z lets
  178.             you force the unloading of a WEDGE that is still in
  179.             use.  Generally this is a very dangerous thing to
  180.             do.  But, occasionally, it is necessary because a
  181.             WEDGE that is unWEDGEd with kill will not be
  182.             unloaded if there is still an "occupant" in the
  183.             WEDGE. This can occur if you have WEDGEd Wait() with
  184.             Result reporting, and a task calls Wait(0), which
  185.             will never Return.  In this case, you can use the z
  186.             option to force the unloading of the Wait() WEDGE.
  187.             Note:  A new WEDGE may not be installed in a
  188.             function if an old one has not been unloaded.
  189.  
  190.                 Usage -- CLI:  Opt KZ
  191.                          TOOL TYPES:    KILL=TRUE
  192.                               ZAP=TRUE
  193.  
  194.  
  195. "b=rate"  (BAUD=RATE)    Sets the serial hardware baud rate.  This option is
  196.             ignored if Parallel or Local output is requested.
  197.             The baud rate is determined by the last value stored
  198.             in the serper register. When you boot your system,
  199.             the hard ware is set to 9600 baud.  If you use the
  200.             serial.device or SER: before using WEDGE, the serper
  201.             (serial period) register may contain a different
  202.             rate.  Use this option to reset the baud rate for
  203.             WEDGE.  If run from CLI, the b option without a
  204.             specified rate will set 9600 baud.  If you also use
  205.             the d option to enter ROMWACK, you must use 9600
  206.             baud since ROMWACK forces 9600.  Use quotes if you
  207.             are passing this parameter to a script.
  208.  
  209.  
  210. "c=text" (COMMENT="text") Allows you to include a comment with each report.
  211.              The comment is generally the name and register
  212.              argument descriptions for the function being
  213.              WEDGEd.  From CLI, quotes must be used around the
  214.              entire C= string if the comment contains spaces.
  215.              If entered from the Workbench, everything to the
  216.              right of the = sign should be in quotes.  The WEDGE
  217.              comments are displayed when you do a WEDGE List. If
  218.              a WEDGE has no comment, its offset and library will
  219.              be listed.
  220.  
  221.                               Usage -- CLI:       "c=AvailMem d1=Type"
  222.                                        TOOL TYPE: COMMENT="AvailMem d1=Type"
  223.  
  224.  
  225. d=n    (DEBUG=n)    Causes a call to Debug() on the nth reported call of
  226.             the WEDGEd function.  (This option is only valid in
  227.             a serial WEDGE.)  By default, Debug() invokes the
  228.             system's built-in 9600 baud serial debugger ROMWACK.
  229.             Since ROMWACK forces 9600 baud, you should only use
  230.             this option in a 9600 baud WEDGE (unless you have a
  231.             resident serial debugger that works at other baud
  232.             rates).
  233.  
  234.             If Result reporting (opt r) is in effect, the call
  235.             to Debug() will be made AFTER the WEDGEd function
  236.             has been called and its result reported.  If Result
  237.             reporting is not on, Debug() will be called after
  238.             the normal WEDGE report and immediately before WEDGE
  239.             actually calls the function.  This allows you to
  240.             enter the debugger either before or after the WEDGEd
  241.             function has been called.  In both cases, you will
  242.             enter the debugger with all of the function caller's
  243.             registers intact, except for a6 which will contain
  244.             ExecBase.  The first two values on the stack will be
  245.             the return address for Debug() and the caller's a6.
  246.  
  247.             When you exit the debugger, you will be prompted
  248.             "Debug again <y or n>?" at the serial terminal.  By
  249.             entering 'y', you can Debug successive calls to the
  250.             WEDGEd function.  Note that Debug will not be
  251.             invoked if the caller is running on the system stack
  252.             because the caller may be an interrupt.
  253.  
  254.             You will also be asked whether you wish to Wait
  255.             the calling task.  If you say yes, the calling task
  256.             will be placed in a  Wait for CTRL-C.  You can
  257.             then use local debugging tools to examine memory.
  258.             When you are ready to restart the calling task,
  259.             you can use BREAK to restart the task (if it
  260.             was started from CLI) or the Software Tools
  261.             "breaktask" command to send a CTRL-C to any
  262.             named Exec task or CLI command.
  263.  
  264.             When run from the CLI, the d option used without an
  265.             argument is equivalent to "d=1."
  266.  
  267.                 Usage -- CLI:          "d=6" or opt d
  268.                                             TOOL TYPE:    DEBUG=1
  269.  
  270.  
  271. "t=tasklist"        Limits reporting to the tasks named in Tasklist.
  272. (TASKS="tasklist")      This is useful for monitoring the function calls of
  273.             a particular task or group of tasks.  If the x
  274.             option (EXCLUDE) is used, the tasks in the tasklist
  275.             are instead excluded from reporting.  This is
  276.             useful for screening out any Amiga OS tasks that
  277.             make heavy use of the function being monitored.
  278.  
  279.             The tasklist should be in quotes, and multiple task
  280.             names should be separated by a vertical bar.  WEDGE
  281.             will compare the tasklist names against both Task
  282.             node names and the command name of any CLI invoked
  283.             command which calls the WEDGEd function.
  284.  
  285.             WEDGE also recognizes two special task names:
  286.  
  287.                 System: Matches any code running on system
  288.                     stack (interrupts, etc.).
  289.  
  290.                 All: If this is the only task name in the
  291.                      list, the list is ignored.  This allows
  292.                      you to disable the TASKS TOOL TYPE
  293.                      without removing it from the .info file.
  294.  
  295.                 Usage -- CLI:          "t=System|CON|wedge"
  296.                              TOOL TYPE: TASKS="System|CON|wedge"
  297.  
  298.  
  299. RUNNING WEDGE FROM THE WORKBENCH
  300.  
  301. There are eight icons in the Wedge drawer.  The Wedge (function) icon is the
  302. actual WEDGE tool; the other icons (FunctionName.w) either contain scripts
  303. for wedging common system functions or sample projects for starting similar
  304. WEDGEs from the Workbench.  New scripts and icons can be easily created
  305. using the offset and register lists in the back of the Addison-Wesley ROM
  306. Kernel Reference Manual: Exec.  (DOS offsets are incorrect.  See "Creating
  307. Your Own WEDGE Scripts and Icons," later in this chapter.)
  308.  
  309. When WEDGE is run directly from the Workbench, the TOOL TYPES entries in the
  310. icon's INFO window determine which library and offset to monitor and which
  311. options are enabled/disabled.  To change an entry or add an option that is
  312. not listed, use the Workbench INFO function.  To bring up the INFO window,
  313. select a Wedge icon, then select the INFO option in the Workbench's first
  314. menu (the Workbench menu).  Use the scroll arrows, the add/delete gadgets,
  315. and the key board to add, delete or modify the icon's TOOL TYPE entries.
  316.  
  317. The acceptable format for TOOL TYPES entries was included in the explanation
  318. of each option.  The TOOL TYPES default to:
  319.  
  320.     AmigaDOS argument        TOOL TYPE Default
  321.  
  322.     <regs>                 REGS=0x0000
  323.     <ptrs>                PTRS=0x0000
  324.     l                LOCAL=FALSE
  325.     p                PARALLEL=FALSE
  326.     s                STACK=FALSE
  327.     x                EXCLUDE=FALSE
  328.     "t=tasklist"            TASKS=ALL
  329.  
  330. There are no default values for the library and offset arguments. These
  331. values MUST be supplied.
  332.  
  333.  
  334.  
  335. SPECIAL WEDGE FUNCTIONS
  336.  
  337. The following functions can be specified with a single CLI argument, a TOOL
  338. TYPES entry, or simply by double-clicking on the corresponding icon in the
  339. WEDGE window.
  340.  
  341. CLI Command        TOOL TYPES    Icon        Function
  342.  
  343. WEDGE help        HELP=TRUE    Wedge.Help    Lists WEDGE
  344.                             arguments, TOOL
  345.                             TYPES, and notes.
  346.  
  347. WEDGE killall        KILLALL=TRUE    Wedge.KillAll    Signals all WEDGEs
  348.                             to remove
  349.                             themselves. If no
  350.                             WEDGEs are currently
  351.                             installed, this
  352.                             option will remove
  353.                             and deallocate the
  354.                             resident
  355.                             "WedgeMaster"
  356.                             Message Port which
  357.                             holds some global
  358.                             information for the
  359.                             WEDGEs.
  360.  
  361. WEDGE list        LIST=TRUE    Wedge.List    Lists all WEDGEs
  362.                             currently installed.
  363.  
  364.  
  365. WEDGE LIMITATIONS
  366.  
  367. Due to the need for WEDGE to be fast and small and to call as few library
  368. functions as possible, there are certain arbitrary limitations.
  369.  
  370. 1.  The Exec functions RawIOInit, RawDoFmt, RawMayGetChar, and RawPutChar()
  371.     may not be WEDGEd because they are called indirectly by the WEDGE itself.
  372.     If these functions were WEDGEd, a recursive loop would occur.  WEDGE
  373.     caches pointers to Forbid and Permit.  Installed WEDGEs call these
  374.     functions using these pointers, so these functions may be WEDGEd.
  375.  
  376. 2.  To help prevent such recursive loops in Local mode, function calls made
  377.     by the Local output handler are not reported.  Unless CLI output
  378.     redirection has been used, the Local handler is a CON: window.  All
  379.     function calls made by the standard Amiga Exec devices are automatically
  380.     screened out in Local mode, since our devices are not Processes.
  381.     However, be warned that if you redirect Local output to a third party
  382.     handler or device, a recursive loop (and big crash) can occur.
  383.  
  384. 3.  There are size limits for several WEDGE arguments:
  385.  
  386.         tasklist    31 task names; 319 characters
  387.         library        39 characters
  388.         comment        79 characters
  389.  
  390. 4.  The maximum size for KILLALL and LIST is 127 WEDGEs.
  391.  
  392. 5.  The CLI command names specified in the tasklist option must be 16
  393.     characters or less.  If you want to monitor or exclude a command with a
  394.     larger name, rename it.  There is no limit on the size of normal Exec
  395.     Task names in the tasklist.
  396.  
  397.  
  398.  
  399. WARNINGS
  400.  
  401. 1.  In some cases, the caller of a WEDGEd function may have so little
  402.     available stack that the WEDGE code to save the caller's registers and
  403.     to check his stack may overrun it.  If this happens, severe crashes can
  404.     occur. Use the tasklist to screen out tasks with tiny stacks.
  405.  
  406. 2.  WEDGE contains a number of safety features to prevent recursion.
  407.     However, the possibility of recursive crashes still exists, most notably
  408.     in Local mode.  See the note on Local recursion in "WEDGE Limitations."
  409.  
  410. 3.  When creating masks for REGS and PTRS, do not indiscriminately specify
  411.     registers as pointers.  Only specify a register as a pointer if the
  412.     address of a string, structure, buffer, etc. is actually passed in that
  413.     register. If a register is specified as a pointer, its contents will be
  414.     used as an ad dress and the data at that address will be read.  If the
  415.     register actually contains flags or other non-address data, you could
  416.     end up reading registers which are reset by a read.  This could cause a
  417.     crash.
  418.  
  419. 4.  If you WEDGE common Exec functions, such as AllocMem() and Signal(),
  420.     with out excluding low level OS tasks such as input.device and
  421.     trackdisk.device, the system will slow to a crawl.  It is strongly
  422.     suggested that you do not write to disks while an intensive WEDGE is
  423.     running.  (It would take forever anyway.)
  424.  
  425.  
  426.  
  427. SAMPLE WEDGE COMMANDS AND RESULTING OUTPUT
  428.  
  429. NOTE:  Normally you would set up a ".w" script and/or icon to install a
  430.        WEDGE.
  431.  
  432. Example 1.
  433.  
  434. WEDGE exec.library AvailMem function (oxff28) with Stack reporting (OPT S).
  435. Only report on calls made by Workbench or the CLI command AVAIL.
  436.  
  437. Enter:
  438.  
  439. 1> run Toolkit:Debug/Wedge/WEDGE exec 0xff28 opt s "c=AvailMem d1=Type"
  440. "t=Workbench|Avail"
  441.  
  442. Sample WEDGE Output:
  443.  
  444. ----------------------------------------------------------------------------
  445. AvailMem d1=Type
  446. COMMAND: Avail    PROCESS: Initial CLI ($203798) [F]
  447. Pre-wedge a7=$232D7C  Task Stack:  Lower=$203854, Upper=$203E94
  448. Command Stack: Base at startup=$232DF8, Size=10000
  449.  
  450. AvailMem d1=Type
  451. PROCESS:  Workbench ($20FB40)
  452. Pre-wedge a7=$210F14   Task Stack: Lower=$20FBFC, Upper=$210F84
  453. ----------------------------------------------------------------------------
  454.  
  455. When a CLI command calls the WEDGEd function, the COMMAND name is reported.
  456. In addition, if Stack reporting has been requested, both the PROCESS and the
  457. separate COMMAND stack are reported.  Also note the "[F]" in one of the
  458. reports.  This means the task calling the function had a Forbid() in effect.
  459. A Disable() would have been reported as "[D]", both as "[FD]".
  460.  
  461.  
  462. Example 2
  463.  
  464. WEDGE dos.library Open function (offset 0xffe2), report registers d1 and d2
  465. (0x0006).  Report what d1 points at (0x0002), and report both Result (opt r)
  466. and Stack (opt s).
  467.  
  468. Enter:
  469.  
  470. 1> run Toolkit:Debug/Wedge/WEDGE dos 0xffe2 0x0006 0x0002 opt rs "c=Open
  471. d1=Name d2=Mode"
  472.  
  473. Sample WEDGE Output when Workbench calls Open (".info",MODE_NEWFILE):
  474.  
  475. ----------------------------------------------------------------------------
  476. Open d1=Name d2=Mode
  477. PROCESS: Workbench ($20FB40)
  478. d1 $00FECD60 ->  $2E696E66  6F005359   533A5379  7374656D .info.SYS:System
  479. d2 $000003EE
  480. Pre-wedge a7=$210DFC   Task Stack: Lower=$20FBFC, Upper=$210F04
  481. Result ID=6
  482. Result: $86EB9  (ID=6)
  483. ----------------------------------------------------------------------------
  484.  
  485. In the ASCII dump at the right, all unprintable values, such as the 0
  486. terminating the ".info" filename, are printed as a period (".").  All
  487. output lines except the "PROCESS" line are optional and are requested via
  488. CLI arguments or TOOL TYPES.
  489.  
  490. The OpenWindow.w, Open.w, and AvailMem.w icons have been provided for
  491. wedging common system functions.  OpenWindow.w installs a WEDGE into $FF34
  492. of the intuition.library; Open.w installs a WEDGE into $FFE2 of the
  493. dos.library; and AvailMem.w installs a WEDGE into $FF28 of the exec.library.
  494. These projects can be run through the Workbench.  To change any of the
  495. parameters, change the TOOL TYPES entries in the icon's Info window.
  496.  
  497. The icons are set up for Local output.  The scripts are set up for default
  498. (serial) output with no baud rate specified.  To use serial scripts for
  499. Local or Parallel debugging, pass the appropriate flag when you execute the
  500. script.  In order for Execute to find the scripts, you must cd where they
  501. are or copy them to your s: directory.  Here are some examples of passing
  502. options to the AvailMem.w script:
  503.  
  504. execute AvailMem.w prs    (prs = Parallel, Result reports, Stack reports)
  505. execute AvailMem.w l    (l = Local)
  506. execute AvailMem.w dr    (dr = Debug on first call, Result reports)
  507.  
  508.  
  509.  
  510. CREATING YOUR OWN WEDGE SCRIPTS AND ICONS
  511.  
  512. NEW - The new LVO command's "wedgeline" option can be used with the Amiga
  513. FD files to automatically create command lines for WEDGE.  This is the
  514. easiest way to create a basic command line for WEDGE - much easier than
  515. figuring out the register bit patterns yourself.  Use LVO to create and
  516. redirect a basic wedge line to a file, then edit the file to change or
  517. add additional options.  LVO requires the assignment FD: to where you have
  518. stored the FD files.
  519.  
  520. Example:  LVO >s:availmem.w exec AvailMem wedgeline
  521.           will create a script called availmem.w which contains:
  522. run wedge exec 0xff28 0x8002 0x8000 opt r   "c=AvailMem(requirements)(d1)"
  523.  
  524. By executing the above script, you will wedge into the exec
  525. AvailMem function for all tasks, default serial output, with
  526. result values (opt r) shown.
  527.  
  528. To create additional WEDGE icons, duplicate an existing icon, then go into
  529. the icon's INFO window to modify the TOOL TYPES arguments.
  530.  
  531. Each icon is attached to a ".w" script file, so you should use ED or MEMACS
  532. to modify the script file attached to your icon.  If you do not, the script
  533. file will not install the desired WEDGE from CLI since it will be a
  534. duplicate of the script attached to the icon you copied.
  535.  
  536. Offsets for all system library functions may be found in the Addison-Wesley
  537. ROM Kernel Reference Manual:  Includes and Autodocs.  The manual contains
  538. several representations of each offset.  Use the hex form that starts with
  539. "0xf".  Or use the LVO command with the FD files to automatically
  540. generate LVO's or WEDGE command lines.
  541.  
  542.  
  543.