Allegro Consultants, Inc.
Avatar
Allegro Home
About Us
Products
Downloads
Books & Papers
Links
Contact Us

Hp3000

AVATAR

AVATAR is a disassembler/patcher/code-explorer for 32-bit code on PA-RISC based HP-UX systems.


NOTE: AVATAR does NOT work on Intel x86 code!


NOTE: AVATAR does NOT work with 64-bit ("wide") PA-RISC code!


NOTE: AVATAR does NOT work well with PA-RISC 2.0 code! (It's an old product :)


NOTE: AVATAR on HP-UX has problems, and may find it difficult to locate procedures in your program by name. (Did we mention that it's an old product?) (The main development thrust of AVATAR has been MPE/iX.)


A semi-functional demo version (20051129) is available by clicking: here . That version displays about 50% of all assembler opcodes as "xxx". (It also truncates the source files names in the COMPILER command's output.) ((uncompressed version))


Things AVATAR can do:

  • disassemble (sample)
  • re-assemble (mini-assembler built in)
  • code patch
  • data patch
  • extract into .S (assembler source) (sample)
  • search for symbols (sample)
  • display SOM info
  • display compiler info (sample)
  • display procedure header information (when available)
    (see the "look" command in the attached sample output)
  • display who calls a particular routine (sample)
  • display what routines a particular routine calls
  • patch kernel (create a patched copy of /hp-ux)

  • [MPE] patch kernel "in-place" (i.e., can edit NL.PUB.SYS)
  • [MPE] extract from PDC into .S file (assembly source)
  • [MPE] build a file of caller/callee data for analysis by a separate tool

The relatively crude help file (for HP-UX version) is attached after the sample output below.


AVATAR is US$2000, which includes the first year of support. An MPE/iX version of AVATAR is also available.


For more information, contact Stan Sieler (sieler@allegro.com).


---------------------------------cut here -----------------------------
Sample AVATAR session, decompiling /hp-ux on HP-UX A.09.00 (9000/720):


AVATAR 95A                        Copyright (c) 1995 Allegro Consultants, Inc.
Email: support@allegro.com; WWW: ; Voice: (408) 252-2330

For help, type: HELP

AVATAR: open /hp-ux

opening file: /hp-ux ...
FILE TYPE : non-sharable, executable SOM
Found 4035 unwind entries.
Searching 10753 symbol dictionary entries
Sorting 10753 symbols

Sample of a disassemble (Display Code) command:
AVATAR[/hp-ux]:  dc netisr

netisr                            3 0 ENTRY     UNIVERSAL     6280    751c4
 
         ; *********************************************************************
[C]   751c4:      6bc23fd9 STW       2,-20(0,30)      ; $ffffffec, sp-20
[C]   751c8:      6fc30180 STWM      3,192(0,30)      ; $c0,       sp+192
[C]   751cc:      6bc43e89 STW       4,-188(0,30)     ; $ffffff44, sp-188
[C]   751d0:      6bc53e91 STW       5,-184(0,30)     ; $ffffff48, sp-184
[C]   751d4:      6bc63e99 STW       6,-180(0,30)     ; $ffffff4c, sp-180
[C]   751d8:      6bc73ea1 STW       7,-176(0,30)     ; $ffffff50, sp-176
[C]   751dc:      6bc83ea9 STW       8,-172(0,30)     ; $ffffff54, sp-172
[C]   751e0: +`   2b600000 ADDIL     $0,27
[C]   751e4:      08010245 COPY      1,5
[C]   751e8:      342403a0 LDO       464(1),4
[C]   751ec: +`   2b600000 ADDIL     $0,27
[C]   751f0:      08010243 COPY      1,3
[C]   751f4:      487803c8 LDW       484(0,3),24
[C]   751f8:      37190002 LDO       1(24),25
[C]   751fc:      687903c8 STW       25,484(0,3)
[C]   75200:      8f222252 COMIB,<>,N 1,25,.+0x130    ; 75330
[C]   75204: +`   2b600000 ADDIL     $0,27
[C]   75208:      483a03d0 LDW       488(0,1),26      ; $1e8,      dp+488
[C]   7520c:      8f42201a COMIB,<>,N 1,26,.+0x14     ; 75220
[C]   75210:      e8420fbc BL        netmp_go_excl_tho,2 ; 7a9f4

AVATAR can search for symbols, by name and/or type:
AVATAR[/hp-ux]: find open, entry

Module:
Symbol                            X P Symbol    Symbol
Name                                  Type      Scope      Address    Value
-------                           - - ------    ------    -------- --------
openp_wait_send                   3 0 ENTRY     UNIVERSAL     3ecc    70584
openp_wait_recv                   3 0 ENTRY     UNIVERSAL     3ee0    7058c
tape0_open                        3 0 ENTRY     UNIVERSAL     4200    707ac
lan2_open                         3 0 ENTRY     UNIVERSAL     86c0    8f428
lanc_lla_open                     3 0 ENTRY     UNIVERSAL     879c    8f934
ni_open                           3 0 ENTRY     UNIVERSAL     b4c4    ac274
openp                             3 0 ENTRY     UNIVERSAL     c9dc    ba62c
openp_wait                        3 0 ENTRY     UNIVERSAL     ca04    ba71c
ufs_open                          3 0 ENTRY     UNIVERSAL     cce8    bb844
openi                             3 0 ENTRY     UNIVERSAL     ccfc    bbab4
nfs_open                          3 0 ENTRY     UNIVERSAL     df44    c76c4
spec_open                         3 0 ENTRY     UNIVERSAL     f86c    d2034
fifo_open                         3 0 ENTRY     UNIVERSAL     fc18    d2fa4
cdfs_open                         3 0 ENTRY     UNIVERSAL    10d34    d812c
dmem_open                         3 0 ENTRY     UNIVERSAL    16ea0    e75d4
eeprom_open                       3 0 ENTRY     UNIVERSAL    19b3c    fc0e0
audio_open                        3 0 ENTRY     UNIVERSAL    1a35c    ffbdc
new_cn_open                       3 0 ENTRY     UNIVERSAL    1a7e4   104eb8
cn_open                           3 0 ENTRY     UNIVERSAL    1a80c   104ef4
diag1_open                        3 0 ENTRY     UNIVERSAL    1a974   10511c
iomap_open                        3 0 ENTRY     UNIVERSAL    1ab54   105d94
tty_open                          3 0 ENTRY     UNIVERSAL    1ac6c   1063bc
asio0_open                        3 0 ENTRY     UNIVERSAL    1ae10   1066ec
pty1_open                         3 0 ENTRY     UNIVERSAL    1b040   10893c
pty_opentty                       3 0 ENTRY     UNIVERSAL    1b068   108b0c
pty0_open                         3 0 ENTRY     UNIVERSAL    1b0f4   109748
sdisk_open                        3 0 ENTRY     UNIVERSAL    1b360   10b6e0
sd_open                           3 0 ENTRY     UNIVERSAL    1b388   10b728
sds_open                          3 0 ENTRY     UNIVERSAL    1b860   10e414
s2tape_open                       3 0 ENTRY     UNIVERSAL    1baa4   10ede4
stape_open                        3 0 ENTRY     UNIVERSAL    1bb58   10f18c
st_open                           3 0 ENTRY     UNIVERSAL    1bb6c   10f1f0
scsi_bus_open                     3 0 ENTRY     UNIVERSAL    1c2d8   117ccc
scsi_tgt_open                     3 0 ENTRY     UNIVERSAL    1c33c   1185b8
scsi_lun_open                     3 0 ENTRY     UNIVERSAL    1c350   1189a0
sctl_open                         3 0 ENTRY     UNIVERSAL    1c6c0   11e610
c700_open                         3 0 ENTRY     UNIVERSAL    1cda0   127968
c700_lun_first_open               3 0 ENTRY     UNIVERSAL    1cdb4   1283ac
c700_bus_first_open               3 0 ENTRY     UNIVERSAL    1cdc8   127a98
c700_tgt_first_open               3 0 ENTRY     UNIVERSAL    1cdf0   128368
CharDrv_open                      3 0 ENTRY     UNIVERSAL    1cf94   12b380
unit_opened                       3 0 ENTRY     UNIVERSAL    1d520   12e168
unit_open                         3 0 ENTRY     UNIVERSAL    1d534   12e1d8
cs80_open                         3 0 ENTRY     UNIVERSAL    1d598   12e794
framebuf_open                     3 0 ENTRY     UNIVERSAL    1d728   12f880
r8042_open                        3 0 ENTRY     UNIVERSAL    1dfc0   135124
hil_open                          3 0 ENTRY     UNIVERSAL    1e038   1357ac
nimitz_open                       3 0 ENTRY     UNIVERSAL    1e0d8   135f80
ite_open                          3 0 ENTRY     UNIVERSAL    1e204   136404
dconfig_open                      3 0 ENTRY     UNIVERSAL    1ed6c   13b5cc
netdiag1_open                     3 0 ENTRY     UNIVERSAL    1f028   13cc90
ki_open                           3 0 ENTRY     UNIVERSAL    225c0   153f60
sy_open                           3 0 ENTRY     UNIVERSAL    22a20   157000
pre_open                          3 0 ENTRY     UNIVERSAL    23420   15b81c
devtovp_open                      3 0 ENTRY     UNIVERSAL    23754   15ce64
vn_open                           3 0 ENTRY     UNIVERSAL    23efc   16196c
vns_open                          3 0 ENTRY     UNIVERSAL    23f38   161ae8
vns_copen                         3 0 ENTRY     UNIVERSAL    23f4c   161ba4
openforwrite                      3 0 ENTRY     UNIVERSAL    251e4   16b164
opendq                            3 0 ENTRY     UNIVERSAL    25a68   16fcf4
mnt_opendq                        3 0 ENTRY     UNIVERSAL    25b30   1705d8
opend                             3 0 ENTRY     UNIVERSAL    25d74   171364
nm_open                           3 0 ENTRY     UNIVERSAL    26634   174da0
iodc_open                         3 0 ENTRY     LOCAL        293ac   1865e8
ttopen                            3 0 ENTRY     UNIVERSAL    2b170   18eee4
tty_open_TO                       3 0 ENTRY     UNIVERSAL    2b60c   194e0c
ttycomn_open                      3 0 ENTRY     UNIVERSAL    2b670   195628
tty_CCITT_open                    3 0 ENTRY     UNIVERSAL    2b684   195eb8
tty_simple_open                   3 0 ENTRY     UNIVERSAL    2b698   195a8c
sds_lif_open                      3 0 ENTRY     LOCAL        2b79c   196b24
proc_open                         3 0 ENTRY     UNIVERSAL    2d4c0   1a7cb8
dbopencleanup                     3 0 ENTRY     UNIVERSAL    2d4d4   1a7fe8
open                              3 0 ENTRY     UNIVERSAL    2f694   1b4058
copen                             3 0 ENTRY     UNIVERSAL    2f6a8   1b40ec

AVATAR[/hp-ux]:  dc open 20

open                              3 0 ENTRY     UNIVERSAL    2f694   1b4058
 
         ; *********************************************************************
[C]  1b4058:      6bc23fd9 STW       2,-20(0,30)      ; $ffffffec, sp-20
[C]  1b405c:      37de0080 LDO       64(30),30        ; $40,       sp+64
[C]  1b4060:      0f40109f LDWS      0(0,26),31
[C]  1b4064:      0f481097 LDWS      4(0,26),23
[C]  1b4068:      36f90002 LDO       1(23),25
[C]  1b406c:      0f501098 LDWS      8(0,26),24
[C]  1b4070:      e84000e8 BL        copen,2          ; 1b40ec
[C]  1b4074:      081f025a COPY      31,26
 
[C]  1b4078:      2b681000 ADDIL     $10800,27
[C]  1b407c:      483800d0 LDW       104(0,1),24      ; $10868,    dp+67688
[C]  1b4080:      671c0624 STH       28,786(0,24)
[C]  1b4084:      4bc23f59 LDW       -84(0,30),2      ; $ffffffac, sp-84
[C]  1b4088:      e840c000 BV        0(2)
[C]  1b408c:      37de3f81 LDO       -64(30),30       ; $ffffffc0, sp-64
         ;    ---------------------------------------------------------------
 
 
creat                             3 0 ENTRY     UNIVERSAL    2f6bc   1b4090
 
         ; *********************************************************************
[C]  1b4090:      6bc23fd9 STW       2,-20(0,30)      ; $ffffffec, sp-20
[C]  1b4094:      37de0080 LDO       64(30),30        ; $40,       sp+64
[C]  1b4098:      0f40109f LDWS      0(0,26),31
[C]  1b409c:      34190604 LDI       770,25
[C]  1b40a0:      0f481098 LDWS      4(0,26),24
[C]  1b40a4:      e8400080 BL        copen,2          ; 1b40ec


AVATAR can report what calls a particular routine makes:
AVATAR[/hp-ux]: calls open

searching [$1b4058..$1b4090]...
open                              3 0 ENTRY     UNIVERSAL    2f694   1b4058
  1b4070: BL        copen,2          ; 1b40ec

Checked 14 locations; found 1 calls and 0 stmnts.

Here is a sample of the LOOK command:

AVATAR[/hp-ux]: look open

symbol name         : open
  address           : 2f694
  symbol_type       : any program entry point
  symbol_scope      : exported symbol for other SOMs
  check_level       : 0
  must_qualify      : 0
  initially_frozen  : 0
  memory_resident   : 0
  is_common         : 0
  duplicate_common  : 0
  xleast            : 3
  privilege level   : 0
  code offset       : 169058  -  16908c    (14 instructions)
  parameter #1     : argument register
  parameter #2     : do not relocate
  parameter #3     : do not relocate
  parameter #4     : do not relocate
  function return   : argument register

AVATAR[/hp-ux]: look openp

symbol name         : openp
  address           : c9dc
  symbol_type       : any program entry point
  symbol_scope      : exported symbol for other SOMs
  check_level       : 0
  must_qualify      : 0
  initially_frozen  : 0
  memory_resident   : 0
  is_common         : 0
  duplicate_common  : 0
  xleast            : 3
  privilege level   : 0
  code offset       : 6f62c  -  6f710    (58 instructions)
  parameter #1     : argument register
  parameter #2     : argument register
  parameter #3     : do not relocate
  parameter #4     : do not relocate
  function return   : argument register

AVATAR[/hp-ux]: look rfi

symbol name         : rfi
  address           : 9ac
  symbol_type       : any program entry point
  symbol_scope      : exported symbol for other SOMs
  check_level       : 0
  must_qualify      : 0
  initially_frozen  : 0
  memory_resident   : 0
  is_common         : 0
  duplicate_common  : 0
  xleast            : 3
  privilege level   : 3
  code offset       : 1f000  -  1f040    (17 instructions)
  parameter #1     : do not relocate
  parameter #2     : do not relocate
  parameter #3     : do not relocate
  parameter #4     : do not relocate
  function return   : do not relocate

AVATAR[/hp-ux]:  dc rfi 20

rfi                               3 3 ENTRY     UNIVERSAL      9ac    6a003
[C]   6a000:      01c008b6 MFCTL     14,22
[C]   6a004:      4ad53f99 LDW       -52(0,22),21
[C]   6a008:      0aba0255 OR        26,21,21
[C]   6a00c:      0b350015 ANDCM     21,25,21
[C]   6a010:      22884018 LDIL      $c50000,20
[C]   6a014:      36940000 LDO       0(20),20         ; $c50000,   12910592
[C]   6a018:      0ab40214 AND       20,21,20
[C]   6a01c:      6ad43f99 STW       20,-52(0,22)
[C]   6a020:      001f0e60 RSM       31,0
[C]   6a024:      02d51840 MTCTL     21,22
[C]   6a028:      34160000 LDI       0,22
[C]   6a02c:      02361840 MTCTL     22,17
[C]   6a030:      02361840 MTCTL     22,17
[C]   6a034:      02421840 MTCTL     2,18
[C]   6a038:      34420008 LDO       4(2),2
[C]   6a03c:      02421840 MTCTL     2,18
[C]   6a040:      00000c00 RFI       
 
$restore_ss                       0 0 CODE      UNIVERSAL      9c0    6a044
[C]   6a044:      001f0e60 RSM       31,0
[C]   6a048:      4bd63ba1 LDW       -560(0,30),22    ; $fffffdd0, sp-560
[C]   6a04c:      c7964012 BB,<,N    22,28,notthelast ; 6a05c

AVATAR can display information about the compiler(s) used to generate the modules in a SOM/program:
AVATAR[/hp-ux]: compiler

system_id           : 20b
a_magic             : 107
version_id          : 5124000

source_file_name    :
language_name       : HPC
product_id          : HP92453-01
version_id          : A.09.34

source_file_name    : uipc_init
language_name       : HP-C
cc options =  +O2 +Hx0 +XixdUV +R25 +XiUVx -E1.0 -F1.0 -Ac
product_id          : HP92453-01
version_id          : A.08.81

source_file_name    : sys_socket
language_name       : HP-C
cc options =  +O2 +Hx0 +XixdUV +R25 +XiUVx -E1.0 -F1.0 -Ac
product_id          : HP92453-01
version_id          : A.08.81

[...]

source_file_name    : eisa_sysbrd
language_name       : HP-C
cc options =  +O2 +Hx0 +XixdUV +R25 +XiUVx -E1.0 -F1.0 -Ac
product_id          : HP92453-01
version_id          : A.08.81

[...]

source_file_name    : iodc_llio.o
language_name       : HPUX Precision Architecture vers PA2.0 assembler
product_id          : 92453
version_id          : A.08.12 (sllic PA1.1)

source_file_name    : virt_phys.o
language_name       : HPUX Precision Architecture vers PA2.0 assembler
product_id          : 92453
version_id          : A.08.12 (sllic PA1.1)

[...]

source_file_name    : sysV_map
language_name       : HP-C
cc options =  +O2 +Hx0 +XixdUV +R25 +XiUVx -E1.0 -F1.0 -Ac
product_id          : HP92453-01
version_id          : A.08.81

source_file_name    : LIBC//Mshfadrs.o
language_name       : HPUX Precision Architecture vers PA2.0 assembler
product_id          : 92453
version_id          : A.08.12 (sllic PA1.1)

[...]

The following shows a sample EXTRACT command, and the resulting output file:
AVATAR[/hp-ux]: extract open.s open
extraction complete, 23 lines.

Here is the output file, open.s:

        .space $PRIVATE$,sort=4096
        .subspa $DATA$,quad=1,align=4096,access=31
open
        .export open,ENTRY
 
         ; *********************************************************************
        STW       2,-20(0,30)      ; $ffffffec, sp-20
        LDO       64(30),30        ; $40,       sp+64
        LDWS      0(0,26),31
        LDWS      4(0,26),23
        LDO       1(23),25
        LDWS      8(0,26),24
        BL        copen,2
        COPY      31,26
 
        ADDIL     L%0x10800,27
        LDW       104(0,1),24      ; $10868,    dp+67688
        STH       28,786(0,24)
        LDW       -84(0,30),2      ; $ffffffac, sp-84
        BV        0(2)
        LDO       -64(30),30       ; $ffffffc0, sp-64
         ;    ---------------------------------------------------------------

----------------------cut here------------------------------------------
AVATAR help file:

\\! AVATAR.HELP  94/05/07
\SUMMARY
The AVATAR Nugget is used to view the contents of an HP-UX SOM
file (SOM = Software Object Module).  This includes program executables
and object (.o) files.  There are a variety of commands that
enable you to view the contents in many different ways.

The following list shows all the commands and a brief description
of each command.  For a more detailed command description, enter
"HELP" followed by the command name (e.g.,: HELP OPEN).

   =           calculate a value from an expression
   ASM         shows the machine code for an assembler instruction
   AUX         prints the auxiliary headers
   CALLee      lists all calls to a given object from a code range
   CALLS       lists all call objects from a code range
   CHECKSUM    compute a new SOM checksum value
   CLOSE       closes a SOM file
   COMPILER    display compiler information
   COUNT       count all symbol types
   DC          display data at a code address
   DD          display data at a data address
   DEBUG       enters the system debugger
   DISASM      shows the assembler instruction for a binary machine code
   DP          display data starting at a procedure
   DR          display real memory, use with extreme caution
   DV          display data at a file offset
   EXIT        get out
   EXTRACT     extracts a portion of code into an assembler source file
   FIND        find a symbol in the current SOM
   FINDALL     find a symbol in all SOMs in the current .a file
   FIXUP       display fixup information
   FORMAT      format data at a file offset
   HELP        display this
   INIT        display initialization record information
   LOOK        look at a symbols attributes
   LST         select a module
   MC          modify data at a code address
   MD          modify data at a data address
   MV          modify data at a file offset
   NEXT        display more data, after a DC, DD, DP or DV command
   OPEN        opens a SOM file for processsing
   QUIT        terminate this program
   RADIX       changes the default radix
   SEARCH      search for a value in the SOM file
   SPACE       display space header information
   SUBSPACE    display subspace header information
   SYMFormat   format options for SYMOS information display
   SYMOpen     used to open a SYMOS file for examination
   SYN         sets up synonyms for registers
   UNCALLED    displays entry points that are never called
   UNWIND      display unwind descriptors

Most commands may be abbreviated somewhat.

Although most of the AVATAR commands require that a SOM file be
open, the DV and MV commands can be used after OPENing any kind
of file.

\EXPRESSION
----------------------------------------------------------------------
Expressions are used in many of the commands.

Syntax:

<expression> ::= <term> [ + <term> ]
                        [ -        ]

<term> ::= <factor> [ * <factor> ]
                    [ /          ]

<factor> ::= [ + ] <primary>
             [ - ]

<primary> ::= ( <expression> )
           or ` <assembler instruction> `
           or <number>
           or SOM_HEADER
           or LST_HEADER
           or AUX_HEADER
           or SPACE_DICT
           or SUBSPACE_DICT
           or LOADER_FIXUP
           or SPACE_STRINGS
           or INIT_ARRAY
           or COMPILER_DICT
           or SYMBOL_DICT
           or FIXUP
           or SYMBOL_STRINGS
           or UNL_SPACE
           or PROCTIME
           or <symbol>
           or " <symbol> "

<assembler instruction> is a valid assembler instruction.  Note that
                        the instruction is enclosed in back-quotes.

<number> ::= $ <hexadecimal digits>
          or % <octal digits>
          or # <decimal digits>
          or <digits in current radix>

<symbol> is the value of any symbol defined in the current SOM.
         If the symbol is not enclosed in quotes, then it can not
         be one of the previously defined words (e.g. PROCTIME) and
         it can only contain characters from the set 'A'..'Z', 'a'..'z',
         '0'..'9', '_', '$', '#', '%'.

         If the name of the symbol is preceded with a ? then the value
         of a stub with that name is used.

Strings are also used in many commands.  Strings can be given as a simple
string or as a compound string.  A simple string is 'zero or more characters
enclosed in double-quotes'.
A compound string is a list of substrings, enclosed in braces ({}).
A substring can be a string enclosed in double-quotes or a number
representing the value of one byte.

Example:
"This is a string"
{"This is a string with a new-line character" $a}

\ASM
----------------------------------------------------------------------
The ASM command shows the binary machine code for an assembler
instruction.

Syntax:

ASM <assembler instruction>

    <assembler instruction> = a valid assembler instruction.


Examples:

ASM ldo 1(0),31
ASM bl $$lr_unk_unk,31

\AUX, SOM
----------------------------------------------------------------------
The AUX command prints all the auxiliary headers from the current SOM.
The format will depend on the actual header type of each header.

AUX only works for program files, not .o or .a files.

Syntax:

AUX

\CALCULATE, =
----------------------------------------------------------------------
The = command will evaluate an expression and display the
resultant value in hexadecimal and decimal.

Syntax:

= <expression>

   <expression>   =  an arithmetic expression

All calculations are done using 32-bit integer arithmetic

Examples:

= 5+20-$15
= FOPEN

\CALLEE
----------------------------------------------------------------------
The CALLEE command will check a range of instructions for calls to a
given procedure.

Syntax:

CALLee <calleename> <procedurename>

  or

CALLee <calleename> <startoffset> <endoffset>

   <calleename>    = The name of the callee to be searched.

   <procedurename> = The procedure in which the calls must occur.
                     If neither a procedure name nor a range is given,
                     then the whole som will be searched.

   <startoffset>   = The starting point from where searching
                     begins.

   <endoffset>     = The ending point of the search.

Example:

CALLEE fwrite
CALLEE fwrite myprocedure
CALLEE fwrite myprocedure+$b myprocedure+1000

\CALLS
----------------------------------------------------------------------
The CALLS command will check a range of instructions for calls to any
procedure.

Syntax:

CALLS <procedurename>

  or

CALLS <startoffset> <endoffset>

   <procedurename> = The procedure in which the calls must occur.
                     If neither a procedure name nor a range is given,
                     then the whole som will be searched.

   <startoffset>   = The starting point from where searching begins.

   <endoffset>     = The ending point of the search.

Example:

CALLS
CALLS myprocedure
CALLS myprocedure+$b myprocedure+1000

\CHECKSUM, SOM
----------------------------------------------------------------------
The CHECKSUM command will calculate the checksum for the currently
opened SOM file and replace the existing value with the new one.  This
is necessary if you have modified the first 124 bytes of the SOM file.

Syntax:

CHECKSUM

\CLOSE
----------------------------------------------------------------------
The CLOSE command will close the currently opened SOM file.  This really
isnt necessary because the OPEN command will close any opened SOM file.

Syntax:

CLOSE

\COMPILER, SOM
----------------------------------------------------------------------
The COMPILER command will display the compiler dependent information
about the current module of the opened SOM file.  Information display
includes the name of compiler, version number, source file name, and
product id.

Syntax:

COMPILER

\COUNT, SOM
----------------------------------------------------------------------
The COUNT command displays occurrence counter for each symbol type and
scope.

Syntax:

COUNT

\DC
----------------------------------------------------------------------
The DC command will display data at a given code address.  The data will
be displayed in assembler format by default, but other formats may be
specified.

Syntax:

DC <code offset> [<display format>] [<numlines>]

   <code offset>     = an expression giving the offset to the start of
                       the current code module, where data to display
                       starts.

   <display format>  = either C or D.  Default is C.  If D is specified
                       then data is displayed in hex and ascii format.
                       If C is specified then data is displayed as
                       disassembled code.
                       The default value is C.

   <numlines>        = a decimal number, indicating the number of lines
                       to show.
                       The default value is to keep on displaying until
                       the next control-y or '/' reply.

Example:

DC my_procedure_name
DC proc + $15 D 12

\DD
----------------------------------------------------------------------
The DD command will display values (data) from an initialised block
within the current module of the opened som file.  Data will be
displayed in hexadecimal and ASCII formats by default.

Syntax:

DD <data offset> [<display format>]  [<numlines>]

   <data offset>     = an expression giving the start within an initialised
                       block, where display starts.

   <display format>  = either C or D.  Default is D.  If D is specified
                       then data is displayed in hex and ascii format.
                       If C is specified then data is displayed as
                       disassembled code.
                       The default value is D.

   <numlines>        = a decimal number, indicating the number of lines
                       to show.
                       The default value is to keep on displaying until
                       the next control-y or '/' reply.

Examples:

DD $40000008
DD dl_area 20

\DEBUG
----------------------------------------------------------------------
The DEBUG command invokes the system debugger

Syntax:

DEBUG

\DISASM
----------------------------------------------------------------------
The DISASM command shows the assembler instruction corresponding to a
machine code.

Syntax:

DISASM <expression>

Examples:

DISASM $8000240
DISASM `nop`
  Note that the assembler instruction is enclosed in back-quotes.

\DP
----------------------------------------------------------------------
The DP command will display code for a given procedure.  The data will
be displayed in assembler format.

Syntax:

DP <procedure>

   <procedure name>  = any procedure that has been defined in the
                       current module of the opened SOM file.


Example:

DP my_procedure_name

\DR
----------------------------------------------------------------------
The DR command will display real memory starting at the physical
address given by expression.

Syntax:

DR <expression>

   <expression> defines a physical address

\DV
----------------------------------------------------------------------
The DV command will display values (data) from within the current som
file.  Data will be displayed in hexadecimal and ASCII formats by default.

Syntax:

DV <data offset> [<display format>]  [<numlines>]

   <data offset>     = an expression giving the offset from the start of
                       the file, where display starts.

   <display format>  = either C or D.  Default is D.  If D is specified
                       then data is displayed in hex and ascii format.
                       If C is specified then data is displayed as
                       disassembled code.
                       The default value is D.

   <numlines>        = a decimal number, indicating the number of lines
                       to show.
                       The default value is to keep on displaying until
                       the next control-y or '/' reply.

Examples:

DV $100          Displays data starting at address hex 100
DV 5+20-$15 c    display lines at address 4, disasembled as code

\EXIT
----------------------------------------------------------------------
The EXIT command terminates AVATAR.

Syntax:

EXIT

\EXTRACT
----------------------------------------------------------------------
The EXTRACT commands extracts a portion of code into an ASCII file.
This file can be used as input to the ASSEMBLER.

Syntax:

EXTRACT <file name> <start> [<end>]

   <file name>   the name of a file to be created.  The file may not
                 exist.

   <start>       The starting point from which extraction begins

   <end>         The last instruction to be extracted.
                 If omitted, AVATAR tries to extract to the end
                 of the procedure referred to in <start>.

Example:

EXTRACT file1 $1000 $2000
EXTRACT file2 my_proc my_proc+1000
EXTRACT foo fopen_nm

\FIND, SOM
----------------------------------------------------------------------
The FIND command will find all entries in the symbol dictionary
that have a name that matches or partially matches the provided
string.  Entries in the symbol dictionary include all procedures,
global data items, intrinsics, etc.  The search is limited to the
current module of the opened SOM file.  The FINDALL command
searches through all modules.

Syntax:

FIND <string> <filter>
FIND <symbol> <filter>

   <string>  = any string of ASCII characters enclosed in double quotes.

   <symbol>  = any string of valid symbol characters.

   <filter>    = a symbol type to be filtered out.  The default is
                 that all symbols are listed.
                 The possible values are:
                          UNSAT
                          LOCAL
                          EXTERNAL
                          UNIVERSAL
                          NULL
                          ABSOLUTE
                          DATA
                          CODE
                          PRI_PROG
                          SEC_PROG
                          ENTRY
                          STORAGE
                          STUB
                          MODULE
                          SYM_EXT
                          ARG_EXT
                          MILLICODE
                          PLABEL
                          OCT_DIS
                          MILLI_EXT

Examples:

FIND time        find any entries that includes the string time in the name.
FIND $$divoI millicode

\FINDALL, SOM
----------------------------------------------------------------------
The FINDALL command will find all entries in the .a file that have a
name that matches or partially matches the provided string.  
Entries in the symbol dictionary include all
procedures, global data items, intrinsics, etc.  The search will
include all modules in the currently opened SOM file, unlike the
FIND command (which searches only the current module).

Syntax:

FINDALL <string> <filter>
        <symbol> <filter>

   <string>  = any string of ASCII characters

   <symbol>  = any string of valid symbol characters.

   <filter>    = a symbol type to be filtered out.  The default is
                 that all symbols are listed.
                 The possible values are:
                          UNSAT
                          LOCAL
                          EXTERNAL
                          UNIVERSAL
                          NULL
                          ABSOLUTE
                          DATA
                          CODE
                          PRI_PROG
                          SEC_PROG
                          ENTRY
                          STORAGE
                          STUB
                          MODULE
                          SYM_EXT
                          ARG_EXT
                          MILLICODE
                          PLABEL
                          OCT_DIS
                          MILLI_EXT

Examples:

FIND time        find any entries that includes the string time in the name.

\FIXUP, SOM
----------------------------------------------------------------------
The FIXUP command displays the fixup records from an object file.
Currently only fixups generated by the ASSEMBLER are correctly
recognised.

Syntax:

FIXUP

\FORMAT, SOM
----------------------------------------------------------------------
The FORMAT command allows to display data relative to the start of the
SOM file in one of many different formats.

Syntax:

FORMAT <data offset> <format> <count>

   <data offset>     = an expression giving the offset from the start of
                         the file, where formatting starts.

   <format>          = the format specifier. It can be any off:
                                LST_HEADER
                                LST_BITS
                                LST_SYMBOL
                                SOM_HEADER
                                AUX_HEADER_ID
                                SPACE_REC
                                SUBSPACE_BITS
                                SUBSPACE_REC
                                COMPILER_REC
                                FIXUP_BITS
                                FIXUP_REC
                                INIT_REC
                                SYMBOL_DICT_BITS
                                ARG_DESCRIPTOR
                                SYMBOL_DICT_REC
                                SYMDICT_EXT_REC
                                SYMDICT_ARG_REC
                                UNWIND_DESCRIPT
                                UNWIND_ENTRY
   <count>      = an integer giving the number of elements to format.

Example:

FORMAT LST_HEADER LST_HEADER

   Note that the first LST_HEADER is an expression, giving an offset in
   the file to where tje LST HEADER starts, While the second one is
   a format specifier.

\INIT, SOM
----------------------------------------------------------------------
The INIT command will display all the compiler init entries for the
current module of the opened SOM file.

Syntax:

INIT

\LOOK, SOM
----------------------------------------------------------------------
The LOOK command will display all the available information about a
given entry in the symbol dictionary.  See the FIND command.  For
example, this command can be used to find the argument types and order
for any procedure, anywhere.

Syntax:

LOOK <string>
     <symbol>

   <string>  = any string of ASCII characters

   <symbol>  = any string of valid symbol characters.

Examples:

LOOK HPFOPEN     display all information for the
                 intrinsic HPFOPEN.

\LST, SOM
----------------------------------------------------------------------
The LST command will display all the available modules in the
currently opened SOM file and allow you to select a module.

Syntax:

LST

\MC
----------------------------------------------------------------------
The MC command will modify data at a given code address.

Syntax:

MC <expression> <value>

   <expression>   =  an arithmetic expression that represents an offset
                     to the start of the current module.

   <value>        =  an expression representing the new data.

Examples:

MC my_proc+$100 `LDW -4(0,30),2`
MC my_proc + $200 `BL FOPEN,2`
  Note that the assembler instruction is enclosed in back-quotes.

MC $1200 8004000

\MD
----------------------------------------------------------------------
The MD command will modify values from an initialized block
within the current module of the opened som file.

Syntax:

MD <expression> <value>

   <expression>   =  an arithmetic expression that represents an offset
                     an initialised area in the current module.

   <value>        =  an expression representing the new data.

Examples:

MD db_area+#100 $5078

\MV
----------------------------------------------------------------------
The MV command will modify values (data) within the current som file.

Syntax:

MV <expression> <value>

   <expression>   =  an arithmetic expression that represents an offset
                     to the start of the current file.
   <value>        =  an expression representing the new data.

Examples:

MV $100 $5078    change the data at address hex 100 to hex 5078

\NEXT
----------------------------------------------------------------------
The NEXT command repeats the last DV, DC or DD command starting from the
point where it left off.

Note that a MC, MV of MD command will reposition the pointer as well.
The NEXT command is optional, a mere <cr> will do.

Syntax:

NEXT

\OPEN
----------------------------------------------------------------------
OPEN filename [READ]

The OPEN command opens *ANY* file, but it is usually used
to open program files, .o files, and .a files.

   If READ is specified, then the som file is opened for read only.  The
   MC, MV and MD commands are then disabled.

Examples:

OPEN myprog
OPEN myprog READ

\QUIT
----------------------------------------------------------------------
The QUIT command will terminate this program.

Syntax:

QUIT

\RADIX
----------------------------------------------------------------------
The RADIX command will change the default radix, which is the base
that all input is assumed to be.

Syntax:

RADIX <mnemonic>

   <mnemonic>           =  DECIMAL
                           HEX
                           OCTAL

Examples:

RADIX HEX
RADIX DECIMAL
RADIX OCTAL

\SEARCH
----------------------------------------------------------------------
The SEARCH command will search the entire opened SOM file an look for
a given value.  If the value is found, a line of data is displayed.

Syntax:

SEARCH <expression>
       <string>

   <expression >    = an expression that result in an integer value to
                      be searched in the file.

   <string>         = a quoted string to be searched in the file.

Examples:

SEARCH $8861
SEARCH "A string"
SEARCH `LDIL $1000,0`

\SPACE, SOM
----------------------------------------------------------------------
The SPACE command will display the space and subspace information
about the current module of the opened SOM file.

Syntax:

SPACE

\SUBSPACE, SOM
----------------------------------------------------------------------
The SUBSPACE command will display the subspace information about the
current module of the opened SOM file.

Syntax:

SUBSPACE

\SYMFORMAT, SYMOS
----------------------------------------------------------------------
The SYMFORMAT command is used to format and display various
portions of a SYMOS file. Using this command requires an
expert-level knowledge of the HP-UX operating system.

Syntax:

SYMFORMAT < HEADER | GNTT | LNTT | SLT | VT >

where
     HEADER is used to format and display header information.
     GNTT   not implemented
     LNTT   is used to format and display LNTT information.
     SLT    is used to format and display SLT information.
     VT     is used to format and display VT information.

\SYMOPEN
----------------------------------------------------------------------
The SYMOPEN command is used to open a SYMOS file for examination.
Using this command requires an expert-level knowledge of the
HP-UX operating system.

Syntax:

SYMOPEN <symos filename>

\SYN
----------------------------------------------------------------------
The SYN command sets up synonyms for the general registers and
the special registers.  These synonyms will be shown in the
disassembled format of any instruction.

Syntax:

SYN SPLASH
    SYSTEM
    NONE
    R
    REG <general register number> <synonym>
    CR <control register number> <synonym>

    <general register number> is a number between 0 and 31 inclusive,
                              designating the general register for wich
                              a synonym is set up

    <special register number> is a number between 0 and 31 inclusive,
                              designating the special register for wich
                              a synonym is set up

    <synonym>                 is any name, to be used as a synonym.

    NONE     resets all synonyms.
    R        precedes every register number by the letter 'r' in
             generated assembly language.
    SYSTEM   sets synonyms to reflect the normal system usage for
             registers.
    SPLASH   sets synonyms to reflect the normal SPLash! usage for
             synonyms.

\UNCALLED
----------------------------------------------------------------------
The UNCALLED command lists all code entry points that are called less than
a specified number of times from within the same SOM.

Syntax:

UNCALLED [<expression>]

   <expression>   = the maximum number of times that an entry point
                    may be called to be listed.
                    Default is 0.

Example:

UNCALLED 3

\UNWIND, SOM
----------------------------------------------------------------------
The UNWIND commands produces a formatted listing of the unwind descriptor
entries from the current SOM.

Syntax:

UNWIND
\
----------------------------------------------------------------------
Updated: 1997-08-04