home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 1 / crawlyvol1.bin / program / compiler / szadb21b / source / doc / lpr / szadb.doc < prev   
Text File  |  1992-01-14  |  20KB  |  529 lines

  1.  
  2. NAME
  3.  
  4.     szadb - Sozobon debugger, version 2.1
  5.  
  6. USAGE
  7.  
  8.     szadb [[-nc] [-nb] [-k defs] [-om] [-os]] program [args]
  9.  
  10. where 'args' is an optional command line to be passed to 'program'.
  11.  
  12. SUMMARY
  13.  
  14. Szadb is a machine language debugger with symbols which is similar to
  15. the old UNIX 'adb' command.  Szadb is used to control and monitor
  16. another program.  This program is loaded into memory and relocated
  17. when szadb is first started.  Commands to szadb allow the user to
  18. examine and modify memory and machine registers, single step and set
  19. breakpoints.  Szadb was written as a companion debugger for Sozobon C
  20. compiler, but it can be used with other compilers which can produce a
  21. symbol table in the same format (Alcyon C, ST version of gcc with
  22. small modifications - c.f. "Primer" for details).  Version 1.2 also
  23. understands symbols created by Mark Williams C and attempts to adjust
  24. itself to this format automatically.  Use options -om and -os if the
  25. debugger got confused.  Version 1.3 adds a support for long symbols
  26. names in "GST format" which are produced by newer versions of gcc
  27. loader when -G flag is used.  Version 1.4 frees szadb from hardwired
  28. screen parameters which allows for use on TT in all screen
  29. resolutions.  This does not mean yet a support for non-68000
  30. instructions.  This would be pretty easy to add but is left for a
  31. person or persons with TT and necessary MC68020/30 references on hand.
  32. Version 1.4 allows also a use of szadb with Moniterm, but this
  33. requires an additional ST monitor connected in parallel, due to a way
  34. in which Moniterm driver operates.  Check details in "Primer".
  35. Version 2.1 adds support for extended Sozobon ("SozobonX") symbol
  36. table format.
  37.  
  38. Versions described in this document, although clearly derived from
  39. a debugger distributed with Sozobon compiler, are not created
  40. by a Sozobon team and differ from an original szadb both in its
  41. features and limitations.  See LEGALESE section below.
  42.  
  43. OPTIONS
  44.  
  45.     -nc  disallow commands stored with breakpoints; saves some
  46.          memory
  47.  
  48.     -nb  turn off buffering of output which goes to a trancript
  49.          file; saves memory but a usage of '$>file' request is
  50.          then not recommended
  51.  
  52.     -k   the following argument is a name of a file with function
  53.          key definitions; see FUNCTION KEYS for details.
  54.  
  55.     -om  'program' is an executable in MWC format
  56.  
  57.     -os  'program' is an executable in Sozobon C format
  58.  
  59.  
  60. WINDOWS
  61.  
  62. Szadb uses its own window or screen.  Thus commands and output will
  63. not interfere with the program's window.  In fact, szadb does output
  64. without using the BIOS so as not to confuse the program's cursor.
  65.  
  66. Use <cntl-w> to view the program's screen when you are in the szadb
  67. window.  Type another character to get back.
  68.  
  69.  
  70. ONLINE HELP
  71.  
  72. A summary of this manual is available by typing the 'help' key.  Use 'q'
  73. to get back to the szadb prompt.  Typing any other key will advance to the
  74. next help screen.
  75.  
  76. People in other countries are encouraged to come up with versions of szadb
  77. with the messages in their language.  You should only have to change the one
  78. file "lang.h".
  79.  
  80.  
  81. SYNTAX
  82.  
  83. In the following description of commands, certain syntactic abbreviations
  84. are used.
  85.  
  86.     {expr}   - any valid expression consisting of numbers, symbols and
  87.            operators.  See the section on EXPRESSIONS
  88.        ,{count}  - a repeat count for the command.  Can be any expression
  89.     {format} - a string of characters which specifies how values are
  90.            printed. See the section on FORMATS
  91.     {args}     - The arguments or parameters to be passed to the program
  92.     {value}  - an additional expression used by the command
  93.     {line}     - any string which will fit on a command line
  94.  
  95. FORMAT OF COMMANDS
  96.  
  97. The general format for command X is
  98.  
  99.     {expr},{count}X            for most commands
  100. or    {expr},{count}X{format}        for / or ? or =
  101. or    {expr},{count}X{args}        for :c
  102. or    {expr},{count}X{value}        for /w or /W
  103. or    {expr},{count}X{line}        for :b, :s, :n, :f
  104.  
  105. Spaces and tabs can be input to improve readability.  They are always
  106. ignored.
  107.  
  108. All fields are optional.  If {count} is missing, we do the command once.
  109. If {format} is missing we re-use the last {format}.  If {args} are missing,
  110. no parameters are passed.  If {values} are missing, nothing is written.
  111. There could be multiple commands on one input line if they are 
  112. separated by semicolon ';'.
  113.  
  114. Any string will be accepted as an argument {line} which occurs in a format
  115. for :b, :s, :n, and :f.  Stepping commands with non-empty argument do not
  116. step through any program instructions.  If -nc option is not used then the
  117. string {line} will be stored and later szadb will attempt to execute it when
  118. a breakpoint is hit or a stepping command with an empty argument is be
  119. called.  The user is solely responsible for makine a {line} into a string
  120. of valid szadb requests if (s)he wants to anything else but an error
  121. message.  Setting the same breakpoint or calling stepping command with a
  122. new argument will replace the stored line with a new one.
  123.  
  124. If {expr} is missing, we use the value of DOT.  DOT is set to the PC after
  125. we single step or hit a breakpoint.  DOT is set to {expr} by most commands.
  126. DOT is set to the next address after locations that were printed by
  127. the / or ? command.
  128.  
  129. If the command is missing, we use the last command.  Thus an empty line
  130. repeats the last command with DOT for the {expr} and 1 for the {count}
  131. (and {format} the same as before).
  132.  
  133.  
  134. THE ':' GROUP
  135.  
  136.     :s or :S
  137.  
  138.     This command is used to single step the program.  It will use the
  139.     trace bit of the 68000 to force a trap after one instruction.
  140.     We do not switch to the program window for single stepping.
  141.  
  142.     :c or :C
  143.  
  144.     This command is used to continue the program.  We will switch to
  145.     the program window and run at full speed until a breakpoint is
  146.     hit, a trap occurs or the program exits. 
  147.  
  148.     :n or :N
  149.  
  150.     Like :s, but the program does not descend into subroutines.
  151.     The command :c is used when a subroutine call encountered with
  152.     an automatic stop upon return to the caller.  If any breakpoints
  153.     were set inside of such subroutine they wll be obeyed.
  154.  
  155.     :j or :J
  156.  
  157.     A version of :n which will skip the next instruction if it is
  158.     a branch.  It reverts automatically to :n for purposes of
  159.     autorepeating.  An argument accepted will be also these one
  160.     for :n.  There is no check if an instructions which follows
  161.     a skipped branch can be actually reached.
  162.  
  163.     :f or :F
  164.  
  165.     Execute all command in the current subroutine and stop upon
  166.     return to the caller.  Any breakpoints found will be obeyed.
  167.  
  168.     The upper case versions of each command print all the machine
  169.     registers after running the program.
  170.  
  171.     If parameters of the program were not passed on a command
  172.     line then can be specified as a string {args} which follows
  173.     the first :c  executed in a debugging session.
  174.  
  175.     If an {expr} field is given to the :c or :s, the PC is set to
  176.     that value.  This should be used with care!
  177.  
  178.     :b  -  set a breakpoint at {expr}
  179.     :d  -  delete the breakpoint at {expr}
  180.     ::  -  control execution of commands attached to :b, :s, :n or :f;
  181.            see EXECUTION CONTROL
  182.  
  183. Note that the only way to re-start the program is to exit szadb and start
  184. over.
  185.  
  186. THE '$' GROUP
  187.  
  188.     $q    - quit szadb
  189.     $r    - print all register values
  190.     $e    - print all external symbols and their values
  191.           This display will stop at the bottom of every screen and
  192.           will wait for a keypress.  Keys 'q', 'Q' and ctrl-C will
  193.           terminate, any other key will continue.  Printing is done
  194.           when you will see back szadb prompt '> '.
  195.     $o    - use octal numbers
  196.     $x    - use hex numbers
  197.     $d    - use decimal numbers
  198.       $s    - set the maximum symbol offset to {expr}
  199.           When address are printed by szadb, they are printed as
  200.           symbol+offset if offset is <= to this value
  201.     $b    - print all breakpoints with their optional commands
  202.               and print active commands attached to stepping requests
  203.     $c    - print a stack backtrace
  204.     $C    - print a stack backtrace with arguments
  205.           If szadb cannot determine the number of arguments
  206.           (because there were none or because the optimizer was used),
  207.           it prints the location on the stack where they might be
  208.     $p    - print the basepage of the program
  209.     $><nam> - append all szadb output to a transcript file named '<nam>'
  210.           If a string '<nam>' is empty or different from the previosly
  211.           used then flush output buffers and close the transcript;
  212.           open a new one with a new name if '<nam>' non-empty.
  213.           Transcript output is internally buffered by default
  214.           unless -nb option is used.
  215.     $k    - display all function key definitions
  216.     $k<num> - if <num> is a decimal number between 1 and 20 execute
  217.           an associated function key definition as a sequence of
  218.           szadb commands
  219.  
  220.  
  221. THE '/' or '?' GROUP
  222.  
  223. UNIX adb uses '?' to examine a program file and '/' to look at running
  224. process's memory.  Since szadb only looks at memory, either can be used.
  225. We recommend using '/' since later versions of szadb may use '?' for files.
  226.  
  227.     /
  228.  
  229.     Print values from memory according to a format.  See FORMATS.
  230.     {expr} gives the starting address to fetch values from.
  231.     If there is more than one format character, we increment the
  232.     address used by the size of the value printed.
  233.  
  234.     /w    - Write a 2-byte value to memory at address {expr}
  235.     /W    - Write a 4-byte value to memory at address {expr}
  236.  
  237. THE '=' COMMAND
  238.  
  239.     =
  240.  
  241.     Print the value of {expr} according to a format.  See FORMATS.
  242.     If there is more than one format character, we print the same
  243.     value each time.
  244.  
  245. THE '>' GROUP
  246.  
  247. Register values can be changed using '>' followed by the register name.
  248. This sets that register to the value of {expr}.  See REGISTER NAMES
  249.  
  250. THE '<' GROUP
  251.  
  252. Register or a special variable value can be retrieved using '>' followed
  253. by the register or variable name.  See REGISTER NAMES and SPECIAL VARIABLES
  254.  
  255.  
  256. FORMATS
  257.  
  258. Formats are similar to printf() format strings.  They specify the way
  259. values are printed.  However, since we almost always want to print a
  260. value and not some literal string, the '%' before each format is missing.
  261. Also, we usually use upper case for long values instead of a leading 'l'.
  262. Thus %d%lx%o becomes dXo.
  263.  
  264.     d  - print 2-bytes as decimal
  265.     D  - print 4-bytes as decimal
  266.     x  - print 2-bytes as hex
  267.     X  - print 4-bytes as hex
  268.     o  - print 2-bytes as octal
  269.     O  - print 4-bytes as octal
  270.     c  - print a single character
  271.     b  - print 1-byte as octal
  272.     s  - print a string
  273.  
  274. In addition, we add the following non-printf-like formats:
  275.  
  276.     i  - print a single machine language instruction
  277.     S  - print a string with '.' for special characters
  278.     p  - print the current value of DOT as a symbol plus offset
  279.     a  - same as p except also print a ':' and tab
  280.     r  - print a space
  281.     n  - print a newline
  282.     t  - tab to the next tab stop of a given width (see below)
  283.  "string"  - print a literal string
  284.     +  - increment DOT (nothing printed)
  285.     -  - decrement DOT (nothing printed)
  286.     ^  - backup DOT by the last size printed
  287.  
  288. Formats can also be preceeded by a number in a current base.  This number
  289. is usually the repeat count for the next format.  Thus instead of saying
  290. main/iiiiXXXXXX you can say main/4i6X
  291.  
  292. The 't' format is always preceeded by a number.  This format advances to
  293. the next tab stop which a multiple of that number.  For example, 8t moves
  294. to the next 8-space tabstop.
  295.  
  296.  
  297. EXPRESSIONS
  298.  
  299.     Expressions are a lot like C expressions.  They include numbers
  300. and symbols with unary and binary operators.  Expressions are always
  301. evaluated using long (4-byte) arithmetic.  Parenthesis can be used for
  302. grouping.  There is no precedence among binary operators - evaluation is
  303. strictly left to right.
  304.  
  305.     NUMBERS
  306.  
  307.     Numbers can be entered in any base.  A base is specified using one
  308. of the following prefixes:
  309.  
  310.     0x - hex
  311.     0t - decimal
  312.     0o - octal
  313.  
  314.     If there is no such prefix, the default base will be used.  The
  315. default base when you start szadb is hex.  Use a leading 0 if you need
  316. to enter a hex number which starts with a letter.
  317.  
  318.     SYMBOLS
  319.  
  320.     If your program has a symbol table, these symbol names can be
  321. used in expressions.  The value of a symbol is the address of that
  322. variable or function.  Although the C compiler adds a leading '_' to
  323. all symbols, the symbol name will be found with or without the '_'.
  324.  
  325.     OTHER VALUES
  326.  
  327.     Character literals can be entered by enclosing one to four
  328. characters in single quotes.  Multi-character literals put the first
  329. character in the highest byte.
  330.  
  331.     The value of DOT can be used in an expression by typing "."
  332.  
  333.     Use "&" to represent the last typed {expr} field.  (DOT
  334. changes when you print with / or ?.  "&" does not.)
  335.  
  336.     UNARY OPERATORS
  337.  
  338.     -   unary minus (2-s complement)
  339.     ~   bitwise complement (1-s complement)
  340.     *   fetch of 4 bytes from an address
  341.     @   fetch of 2 bytes from an address
  342.  
  343.     BINARY OPERATORS
  344.  
  345.     +   addition
  346.     -   subtraction
  347.     *   multiplication
  348.     %   division (NOT '/' !)
  349.     &   bitwise and
  350.     |   bitwise or
  351.  
  352.  
  353. REGISTER NAMES
  354.  
  355. Szadb uses the standard Motorola register names with 'sp' for 'a7'.
  356. Actually, there are two stack pointers which Motorola calls 'usp' for
  357. the user stack pointer and 'ssp' for the supervisor stack pointer.
  358. Szadb calls the other stack pointer 'xsp'.  This will be 'ssp' if
  359. your program is running in user mode (as it usually is) or 'usp' if
  360. it is running in supervisor mode.
  361.  
  362.  
  363. SPECIAL VARIABLES
  364.  
  365. Szadb provides four special read only variables which describe
  366. a layout of the program in a memory.  They are 
  367.  
  368.         l       lowest text address
  369.         t       length of the text segment
  370.         b       start of the bss segment
  371.         d       length of the data segment
  372.  
  373.  
  374.  
  375. FUNCTION KEYS
  376.  
  377. Szadb recognizes twenty function keys with numbers from 1 to 20, where
  378. first ten numbers correspond to markings on a keyboard and other denote
  379. function keys pressed together with a "Shift" key.
  380.  
  381. One may optionally asign strings to functions keys by reading definitions
  382. from a file which name follows -k argument to szadb.  Every definition 
  383. should start in the first column with an uppercase 'F' followed by a key
  384. number and optional white space.  A trailing string will be stored as the
  385. key definition.  Definitions can be continued on the following lines if
  386. end-of-line character(s) are escaped with a '\' character.  All other
  387. lines and attemps of redefinition of already defined keys will be ignored.
  388. A maximal length of a definition is limited by quite generous (around
  389. 2K for this version).
  390.  
  391. When function key is pressed then as many characters from its definition
  392. string as it will fit will be appended to teh current szadb input line.
  393. The cursor will be put at the end and a resulting sequence of szadb
  394. commands can be edited.
  395.  
  396. An entire definition of a function key can be execucuted by usind $k
  397. request followed by a corresponding function key number (decimal).
  398. A request $k by itself will display a list of all function key definitions.
  399.  
  400.  
  401.  
  402. EXECUTION CONTROL
  403.  
  404. Commands attached to :b and stepping commands :s, :n and :f can be
  405. switched off and on without destroying a stored string.  A special form
  406. {expr}::b- turns off executions of a string stored with a breakpoint
  407. at an address {expr}.  To reverse that action use {expr}::b+.  A similar
  408. form works also for stepping commands.
  409.  
  410. A request :f has a special default action attached.  When overtyped
  411. or switched off can be always restored by a use of ::f` request.
  412.  
  413. Stepping commads :f and :n can also have their attached commands "shifted"
  414. by a use of ::f_ and ::n_ requests.  This will cause for :f a switch
  415. of attached command string to this for :n or :s (in that order) and for
  416. :n a switch to a strig for :s.  This switch only takes place if 
  417. corresponding command strings are defined and active.  Requests
  418. ::n+, ::f+ or ::f` will restore an original actions.  Status of all
  419. stepping commands is displayed after $b request.
  420.  
  421.  
  422.  
  423. SPECIAL CHARACTERS
  424.  
  425. When entering a command, use the left-arrow (backspace) to erase typed
  426. characters.  When a lot of output is being printed, you can use cntl-S
  427. to suspend output temporarily or cntl-C to stop the command.
  428.  
  429. Use the help key to get a summary of this document from within szadb.
  430.  
  431.  
  432. MAGIC STUFF
  433.  
  434. Szadb works by changing the trap vectors to point to itself.  If you
  435. try to debug any program which changes the trap vectors, szadb will not
  436. work.
  437.  
  438. Breakpoints cannot be set on ROM locations, but szadb will not give you
  439. an error if you try.
  440.  
  441. Various shells do funny things to parameters.  Szadb does not Upper-case
  442. arguments and does not pass more than 128 bytes of parameters (but
  443. see examples in "Primer" how to circumvent this limitation).
  444.  
  445. Programs compiled with the dLibs startup routine (e.g. most programs
  446. compiled with Sozobon C) do funny things to try to determine argv[0].
  447. In particular a pointer to the parent's basepage is followed.  Szadb
  448. does not set up this pointer, so argv[0] is not passed under szadb.
  449.  
  450. Programs compiled with other compilers, or written in assembler, may use
  451. different calling conventions and an organization of stack frames.
  452. This may cause difficulties to requests like $c and :f.  Use your better
  453. judgement.
  454.  
  455. Certain programs only work when loaded at a certain address (or only
  456. fail when loaded at a certain address).  Running a program under szadb
  457. changes where that program is loaded.  Thus behavior under szadb may
  458. be different from what happens otherwise.
  459.  
  460. Programs with bugs may modify random locations of memory.  If they 
  461. happen to modify a value that is part of szadb, szadb will probably
  462. die.  Unfortunately, this isn't UNIX.
  463.  
  464.  
  465. SEE ALSO
  466.     differs.doc, "SZADB Primer", the source
  467.  
  468. BUGS
  469.  
  470. Despite of a support for displays of different sizes a program input
  471. buffer is fixed and will accept upto 78 characters from a keyboard.
  472. This can be construed as a feature.
  473.  
  474. WHERE TO GET SOZOBON C
  475.  
  476. Sozobon C is freely distributed through many bulletin boards and computer
  477. networks worldwide.  If you cannot find it anywhere locally, you can
  478. always order the newest release from us directly.  Send $10 US to cover
  479. shipping, handling and floppies (add a couple $ for European orders) to
  480.  
  481.         Tony Andrews
  482.         5902E Gunbarrel Ave.
  483.         Boulder, Colorado USA  80301
  484.  
  485. After March 30, 1990 this will change to
  486.  
  487.         Tony Andrews
  488.         4704 Berkshire Court
  489.         Boulder, Colorado USA  80301
  490.  
  491. Make checks payable to Tony Andrews.  Specify single or double sided
  492. floppies (you will get double sided if you don't say anything).
  493.  
  494. If you don't need the release, but you want to encourage further product
  495. development from Sozobon Ltd, we will gladly accept money, ST software
  496. such as games you don't play anymore, freeware or shareware you have
  497. written with Sozobon and/or simple words of encouragement.
  498.  
  499.  
  500. LEGALESE
  501.  
  502. /* Copyright (c) 1990 by Sozobon, Limited.  Authors: Johann Ruegg, Don Dugger
  503.  * Modifications for version 1.2(mj+ach): Anthony Howe, Michal Jaegermann
  504.  * Versions 1.4, 2.1  with support for Moniterm, TT screens -
  505.  *     - Michal Jaegermann
  506.  *
  507.  * Permission is granted to anyone to use this software for any purpose
  508.  * on any computer system, and to redistribute it freely, with the
  509.  * following restrictions:
  510.  * 1) No charge may be made other than reasonable charges for reproduction.
  511.  * 2) Modified versions must be clearly marked as such.
  512.  * 3) The authors are not responsible for any harmful consequences
  513.  *    of using this software, even if they result from defects in it.
  514.  */
  515.  
  516. UNIX is a trademark of AT&T (it used to be a trademark of Bell Labs)
  517. Mark Williams C is a trademark of Mark Williams Company
  518.  
  519. AUTHORS
  520.  
  521.     original:
  522.     Johann Ruegg      uunet!dunike!onecom!wldrdg!hans
  523.     Don Dugger      uunet!dunike!onecom!wldrdg!n0ano
  524.     modifications for version 1.2:
  525.     Anthony Howe      ant@mks.com
  526.     Michal Jaegermann ntomczak@ualtavm.bitnet
  527.     updates for versions 1.3, 1.4, 2.1
  528.     Michal Jaegermann ntomczak@vm.ucs.ualberta.ca
  529.