glenda.party
term% ls -F
term% pwd
$home/manuals/unix_v8/1/adb
term% cat index.txt
ADB(1)                      General Commands Manual                     ADB(1)

NAME
       adb - debugger

SYNOPSIS
       adb [-w] [ objfil [ corfil ] ]

DESCRIPTION
       Adb  is a general purpose debugging program.  It may be used to examine
       files and to provide a controlled environment for the execution of UNIX
       programs.

       Objfil is normally an executable program file, preferably containing  a
       symbol  table;  if not then the symbolic features of adb cannot be used
       although the file can still be examined.  The  default  for  objfil  is
       ‘a.out'.  Corfil is assumed to be a core image file produced after exe‐
       cuting objfil; the default for corfil is ‘core'.

       Requests  to  adb are read from the standard input and responses are to
       the standard output.  If the -w flag is present then  both  objfil  and
       corfil  are  created if necessary and opened for reading and writing so
       that files can be modified using  adb.   Adb  ignores  QUIT;  INTERRUPT
       causes return to the next adb command.

       In general requests to adb have the form

                [address]  [, count] [command] [;]

       If address is present then dot is set to address.  Initially dot is set
       to  0.   For  most  commands count specifies how many times the command
       will be executed.  The default count is 1.  Address and count  are  ex‐
       pressions.

EXPRESSIONS
       .      The value of dot.

       +      The value of dot incremented by the current increment.

       ^      The value of dot decremented by the current increment.

       "      The last address typed.

       integer
              A number.  The prefixes 0o and 0O (zero oh) force interpretation
              in  octal  radix; the prefixes 0t and 0T force interpretation in
              decimal radix; the prefixes 0x and 0X or  a  leading  sharp-sign
              ‘#' force interpretation in hexadecimal radix.  Thus 0o20 = 0t16
              =  0x10 = sixteen.  If no prefix appears, then the default radix
              is used; see the $d command.  The  default  radix  is  initially
              hexadecimal.   The hexadecimal digits are 0123456789abcdefABCDEF
              with the obvious values.  Note that a hexadecimal  number  whose
              most  significant digit would otherwise be an alphabetic charac‐
              ter must have a 0x (or 0X) prefix (or a leading zero if the  de‐
              fault radix is hexadecimal).

       integer.fraction
              A 32 bit floating point number.

       ´cccc´ The  ASCII value of up to 4 characters.  \ may be used to escape
              a ´.

       < name The value of name, which is either a variable name or a register
              name.  Adb maintains a number of variables (see VARIABLES) named
              by single letters or digits.  If name is a  register  name  then
              the  value of the register is obtained from the system header in
              corfil.  The register names are those printed by the $r command.

       symbol A symbol is a sequence of upper or lower  case  letters,  under‐
              scores  or digits, not starting with a digit.  \f[R] may be used
              to escape other characters.  The value of the  symbol  is  taken
              from  the  symbol  table  in  objfil.  An initial _ or ~ will be
              prepended to symbol if needed.

       _ symbol
              In C, the ‘true name' of an external symbol begins with  _.   It
              may be necessary to utter this name to disinguish it from inter‐
              nal or hidden variables of a program.

       routine.name
              The  address  of  the  variable name in the specified C routine.
              Both routine and name are symbols.  If name is omitted the value
              is the address of the most recently activated C stack frame cor‐
              responding to routine; if routine is omitted, the active  proce‐
              dure is assumed.

       (exp)  The value of the expression exp.

       Monadic operators

       *exp   The contents of the location addressed by exp in corfil.

       @exp   The contents of the location addressed by exp in objfil.

       -exp   Integer negation.

       ~exp   Bitwise complement.'

       %exp   If  exp  is used as an address, it is in register space; see AD‐
              DRESSES .

       Dyadic operators are left associative and are less binding than monadic
       operators.

       e1+e2  Integer addition.

       e1-e2  Integer subtraction.

       e1*e2  Integer multiplication.

       e1%e2  Integer division.

       e1&e2  Bitwise conjunction.

       e1⎪e2  Bitwise disjunction.

       e1#e2  E1 rounded up to the next multiple of e2.

COMMANDS
       Most commands consist of a verb followed by a modifier or list of modi‐
       fiers.  The following verbs are available.  (The commands ‘?'  and  ‘/'
       may be followed by ‘*'; see ADDRESSES for further details.)

       ?f   Locations  starting  at address in objfil are printed according to
            the format f.  dot is incremented by the sum of the increments for
            each format letter (q.v.).

       /f   Locations starting at address in corfil are printed  according  to
            the format f and dot is incremented as for ‘?'.

       =f   The  value of address itself is printed in the styles indicated by
            the format f.  (For i format ‘?' is printed for the parts  of  the
            instruction that reference subsequent words.)

       A  format  consists  of  one or more characters that specify a style of
       printing.  Each format character may be preceded by a  decimal  integer
       that  is  a  repeat  count  for  the  format character.  While stepping
       through a format dot is incremented by the amount given for each format
       letter.  If no format is given then the last format is used.  The  for‐
       mat letters available are as follows.

              o 2    Print 2 bytes in octal.
              O 4    Print 4 bytes in octal.
              q 2    Print in signed octal.
              Q 4    Print long signed octal.
              d 2    Print in decimal.
              D 4    Print long decimal.
              x 2    Print 2 bytes in hexadecimal.
              X 4    Print 4 bytes in hexadecimal.
              u 2    Print unsigned decimal.
              U 4    Print long unsigned decimal.
              f 4    Print the 32 bit value as a floating point number.
              F 8    Print double floating point.
              b 1    Print the addressed byte in octal.
              c 1    Print the addressed character.
              C 1    Print  the  addressed character using the standard escape
                     convention where control characters are printed as ^X and
                     the delete character is printed as ^?.
              s n    Print the addressed characters until a zero character  is
                     reached.
              S n    Print  a  string  using  the  ^X escape convention (see C
                     above).  n is the length of the string including its zero
                     terminator.
              Y 4    Print 4 bytes in date format (see ctime(3)).
              i n    Print as VAX instructions.  n is the number of bytes  oc‐
                     cupied by the instruction.  This style of printing causes
                     variables  0,  (1, ...)  to be set to the offset parts of
                     the first (second, ...)  operand of the instruction.
              a 0    Print the value of dot in symbolic form.
              p 4    Print the addressed value in symbolic form using the same
                     rules for symbol lookup as a.
              t 0    When preceded by an integer tabs to the next  appropriate
                     tab  stop.  For example, 8t moves to the next 8-space tab
                     stop.
              r 0    Print a space.
              n 0    Print a newline.
              "..." 0
                     Print the enclosed string.
              ^      Dot is decremented by the current increment.  Nothing  is
                     printed.
              +      Dot is incremented by 1.  Nothing is printed.
              -      Dot is decremented by 1.  Nothing is printed.

       newline
              Repeat the previous command with a count of 1.

       [?/]l value mask
              Words  starting  at  dot  are masked with mask and compared with
              value until a match is found.  If L is used then  the  match  is
              for  4  bytes at a time instead of 2.  If no match is found then
              dot is unchanged; otherwise dot is set to the matched  location.
              If mask is omitted then -1 is used.

       [?/]w value ...
              Write the 2-byte value into the addressed location.  If the com‐
              mand is W, write 4 bytes.

       [?/]m b e f[?/]
              New  values  for  (b, e, f) in the first map entry are recorded.
              If less than three expressions are given then the remaining  map
              parameters are left unchanged.  The address type (instruction or
              data)  is  unchanged in any case.  If the ‘?' or ‘/' is followed
              by ‘*' then the second segment of the mapping  is  changed.   If
              the  list  is  terminated by ‘?' or ‘/' then the file (objfil or
              corfil respectively) is used for subsequent requests.  (So that,
              for example, ‘/m?' will cause ‘/' to refer to objfil.)

       >name  Dot is assigned to the variable or register named.

       !      A shell is called to read the rest of the line following ‘!'.

       $modifier
              Miscellaneous commands.  The available modifiers are:

              <f     Read commands from the file f.  If this command  is  exe‐
                     cuted  in  a  file,  further commands in the file are not
                     seen.  If f is omitted, the current input stream is  ter‐
                     minated.   If  a count is given, and is zero, the command
                     will be ignored.  The value of the count will  be  placed
                     in variable 9 before the first command in f is executed.
              <<f    Similar  to < except it can be used in a file of commands
                     without causing the file to be  closed.   Variable  9  is
                     saved  during the execution of this command, and restored
                     when it completes.  There is a (small)  finite  limit  to
                     the number of << files that can be open at once.
              >f     Append  output to the file f, which is created if it does
                     not exist.  If f is omitted, output is  returned  to  the
                     terminal.
              ?      Print  process  id,  the  signal which caused stopping or
                     termination, as well as the registers.  This is  the  de‐
                     fault if modifier is omitted.
              r      Print the general registers and the instruction addressed
                     by pc.  Dot is set to pc.
              R      Like  $r,  but  include  boring registers like the kernel
                     stack pointer.
              b      Print all breakpoints and  their  associated  counts  and
                     commands.
              c      C  stack backtrace.  If address is given then it is taken
                     as the address of the current frame (instead of fp).   If
                     C is used then the names and (32 bit) values of all para‐
                     meters,  automatic  and  static variables are printed for
                     each active function.  If count is given  then  only  the
                     first count frames are printed.
              d      Set  the  default  radix  to  address  and report the new
                     value.  Address  is  interpreted  in  the  (old)  current
                     radix;  ‘10$d'  never changes the default radix.  To make
                     decimal the default radix, use ‘0t10$d'.  A radix of zero
                     is a special case: input with a leading  zero  is  octal,
                     that  with a leading sharp-sign ‘#' is hexadecimal, other
                     numbers are decimal; output is  hexadecimal  by  default;
                     hex  and octal numbers are printed with a leading # and 0
                     respectively.
              e      The names and values of external variables are printed.
              w      Set the page width for output to address (default 80).
              s      Set the limit for  symbol  matches  to  address  (default
                     255).
              q      Exit from adb.
              v      Print all non zero variables in the current radix.
              m      Print the address maps.
              k      Simulated VAX memory management: set the system base reg‐
                     ister  pointer  to  address.  System space addresses will
                     hereafter be mapped according to the system  page  table.
                     If address is zero, mapping is turned off.
              p      Set  the PCB base pointer to address, which may be either
                     the physical address of a process control block (as found
                     in the PCBB register) or the system space  address  of  a
                     page  table  entry  which  points  to  a PCB (as found in
                     p_addr).  User space addresses will hereafter  be  trans‐
                     lated according to the user page tables pointed to by the
                     PCB.   Kernel mapping ($k) must already be in effect.  If
                     address is zero, user mapping is  turned  off;  addresses
                     less  than  0x80000000  will  be  treated as physical ad‐
                     dresses.
                     $k and $p are useful for system debugging.

       :modifier
              Manage a subprocess.  Available modifiers are:

              bc     Set breakpoint at address.  The  breakpoint  is  executed
                     count-1  times  before  causing  a  stop.   Each time the
                     breakpoint is encountered the command c is executed.   If
                     this  command  is  omitted  or  sets dot to zero then the
                     breakpoint causes a stop.
              d      Delete breakpoint at address.
              r      Run objfil as a subprocess.  If address is given  explic‐
                     itly then the program is entered at this point; otherwise
                     the  program  is  entered  at  its  standard entry point.
                     count specifies how many breakpoints are  to  be  ignored
                     before stopping.  Arguments to the subprocess may be sup‐
                     plied  on  the  same  line  as  the command.  An argument
                     starting with < or > causes the standard input or  output
                     to  be  established  for  the  command.   All signals are
                     turned on on entry to the subprocess.
              cs     The subprocess is continued.  If s is omitted or nonzero,
                     the subprocess is sent the signal that caused it to stop;
                     if 0 is specified, no signal is  sent.   Breakpoints  and
                     single-stepping don't count as signals.  Breakpoint skip‐
                     ping is the same as for r.
              ss     As  for  c  except  that the subprocess is single stepped
                     count times.  If a signal is sent, it is received  before
                     the  first  instruction is executed.  If there is no cur‐
                     rent subprocess then objfil is run as a subprocess as for
                     r.  In this case no signal can be sent; the remainder  of
                     the line is treated as arguments to the subprocess.
              k      The current subprocess, if any, is terminated.

VARIABLES
       Adb  provides a number of variables.  Named variables are set initially
       by adb but are not used subsequently.  Numbered variables are  reserved
       for communication as follows.

       0, 1, ...
              The offset parts of the first, second, ...  operands of the last
              instruction printed.  Meaningless if the operand was a register.
       9      The count on the last $< or $<< command.

       On  entry  the  following are set from the system header in the corfil.
       If corfil does not appear to be a core file then these values  are  set
       from objfil.

       b      The base address of the data segment.
       d      The data segment size.
       e      The entry point.
       m      The ‘magic' number (0407, 0410 or 0413).
       s      The stack segment size.
       t      The text segment size.

ADDRESSES
       The  address  in a file associated with a written address is determined
       by a mapping associated with that file.  Each mapping is represented by
       one or more quadruples (t, b, e, f), each mapping addresses of  type  t
       (instruction, data, user block) in the range b through e to the part of
       the file beginning at address f.  An address a of type t is mapped to a
       file  address  by  finding  a quadruple of type t, for which b≤a<e; the
       file address is address+f−b.  As a  special  case,  if  an  instruction
       space  address  is  not found, a second search is made for the same ad‐
       dress in data space.

       Typically, the text segment of  a  program  is  mapped  as  instruction
       space, the data and bss segments as data space.  If objfil is an a.out,
       or if corfil is a core image or process file, maps are set accordingly.
       Otherwise,  a  single  ‘data  space' map is set up, with b and f set to
       zero, and e set to a huge number; thus the entire file can be  examined
       without address translation.

       The ?  and / commands attempt to examine instruction and data space re‐
       spectively.  ?*  tries for data space (in objfil); /* accesses instruc‐
       tion space (in corfil).

       Registers in process and core images are a special case; they live in a
       special  ‘register'  address space.  The contents of register 0 are lo‐
       cated at address %0; register 1 at %4 (registers are 4 bytes long); and
       so on.  % addresses are  mapped  to  the  registers  for  the  ‘current
       frame,'  set  by  local variable references, and reset to the outermost
       frame (the ‘real' registers) whenever a process runs or a  stack  trace
       is requested.

       Simulated  memory  management translations (the $k and $p commands) are
       done before the mapping described above.

       So that adb may be used on large files all appropriate values are  kept
       as signed 32 bit integers.

FILES
       a.out
       core
       /usr/lib/adb/*  parameter files

SEE ALSO
       pi(9.1), sdb(1), proc(4), a.out(5), core(5)

DIAGNOSTICS
       ‘Adb' when there is no current command or format.  Comments about inac‐
       cessible  files,  syntax errors, abnormal termination of commands, etc.
       Exit status is 0, unless last command failed or returned  nonzero  sta‐
       tus.

BUGS
       Either  the  explanation or the implementation of register variables is
       too complex and arcane.

       0$d should probably be the default.

                                                                        ADB(1)