unixdev.net


Switch to SpeakEasy.net DSL

The Modular Manual Browser

Home Page
Manual: (SunOS-4.1.3)
Page:
Section:
Apropos / Subsearch:
optional field

ADBGEN(8)                   System Manager's Manual                  ADBGEN(8)



NAME
       adbgen - generate adb script

SYNOPSIS
       /usr/lib/adb/adbgen filename.adb ...

DESCRIPTION
       adbgen  makes  it  possible to write adb(1) scripts that do not contain
       hard-coded dependencies on structure member offsets.  The input to adb-
       gen  is a file named filename.adb which contains adbgen header informa-
       tion, then a null line, then the name of a structure,  and  finally  an
       adb  script.  adbgen only deals with one structure per file; all member
       names are assumed to be in this structure.  The output of adbgen is  an
       adb  script  in  filename.   adbgen  operates by generating a C program
       which determines structure member offsets and sizes, which in turn gen-
       erates the adb script.

       The  header  lines,  up  to the null line, are copied verbatim into the
       generated C program.  Typically these include C #include statements  to
       include  the  header  files  containing the relevant structure declara-
       tions.

       The adb script part may contain any valid adb  commands  (see  adb(1)),
       and  may  also  contain adbgen requests, each enclosed in {}s.  Request
       types are:

       o  Print a structure member.   The  request  form  is  {member,format}.
          member  is  a member name of the structure given earlier, and format
          is any valid adb format request.  For example, to  print  the  p_pid
          field  of  the  proc  structure as a decimal number, you would write
          {p_pid,d}.

       o  Reference a structure member.  The request form  is  {*member,base}.
          member is the member name whose value is desired, and base is an adb
          register name which contains the base address of the structure.  For
          example, to get the p_pid field of the proc structure, you would get
          the proc structure address in an adb register,  say  <&lt;f,  and  write
          {*p_pid,<&lt;f}.

       o  Tell  adbgen  that  the offset is okay.  The request form is {OFFSE-
          TOK}.  This is useful after invoking another adb script which  moves
          the adb dot.

       o  Get  the size of the structure.  The request form is {SIZEOF}.  adb-
          gen replaces this request with the size of the structure.   This  is
          useful  in incrementing a pointer to step through an array of struc-
          tures.

       o  Calculate  an  arbitrary  C  expression.   The   request   form   is
          {EXPR,expression}.   adbgen  replaces this request with the value of
          the expression.  This is useful when  more  than  one  structure  is
          involved in the script.

       o  Get  the  offset  to  the end of the structure.  The request form is
          {END}.  This is useful at the end of the structure  to  get  adb  to
          align the dot for printing the next structure member.

       adbgen keeps track of the movement of the adb dot and emits adb code to
       move forward or backward as necessary  before  printing  any  structure
       member  in  a  script.   adbgen's model of the behavior of adb's dot is
       simple: it is assumed that the first line of the script is of the  form
       struct_address/adb text and that subsequent lines are of the form +/adb
       text.  The adb dot then moves in a sane fashion.  adbgen does not check
       the  script  to  ensure  that  these  limitations are met.  adbgen also
       checks the size of the structure member against the  size  of  the  adb
       format code and warns you if they are not equal.

EXAMPLES
       If there were an include file x.h which contained:
              struct x {
                     char *x_cp;
                     char x_c;
                     int  x_i;
              };

       Then an adbgen file (call it script.adb) to print it would be:
              #include "x.h"
              x
              ./"x_cp"16t"x_c"8t"x_i"n{x_cp,X}{x_c,C}{x_i,D}

       After running adbgen the output file script would contain:

              ./"x_cp"16t"x_c"8t"x_i"nXC+D

       To invoke the script you would type:

              x$<&lt;script

FILES
       /usr/lib/adb/*      adb scripts for debugging the kernel

SEE ALSO
       adb(1), kadb(8S)

BUGS
       adb syntax is ugly; there should be a higher level interface for gener-
       ating scripts.

       Structure members which are bit fields cannot be handled because C will
       not  give  the address of a bit field.  The address is needed to deter-
       mine the offset.

DIAGNOSTICS
       Warnings about structure member sizes not equal to adb format items and
       complaints about badly formatted requests.  The C compiler complains if
       you reference a structure member that does not  exist.   It  also  com-
       plains about & before array names; these complaints may be ignored.



                                  4 July 1990                        ADBGEN(8)