home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 1 / crawlyvol1.bin / program / compiler / sozobon / scdoc20 / sozobon.doc < prev    next >
Text File  |  1991-03-03  |  48KB  |  1,682 lines

  1.  
  2.  
  3.       
  4.  
  5.  
  6.  
  7.  
  8.  
  9.                            The Sozobon C Compiler
  10.  
  11.                           a freeware offering from
  12.  
  13.                               Sozobon, Limited
  14.  
  15.  
  16.                                 Tony Andrews
  17.                                 Johann Ruegg
  18.                                   Joe Treat
  19.  
  20.  
  21.                                User Reference
  22.  
  23.                                   3/1/91
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.       1. Introduction         
  32.  
  33.       The  Sozobon  C  Compiler  is  a complete implementation of the C
  34.       language  as  defined  by  Kernighan  &  Ritchie  and  prevailing
  35.       practice.    The   package   includes   a   compiler,  optimizer,
  36.       assembler,  and  linker,  as  well  as  several  other associated
  37.       utilities.   For  runtime  library  support,  version  1.2 of the
  38.       public  domain  dLibs routines are used.  Like the dLibs package,
  39.       source  code  and  executables  for all components of the Sozobon
  40.       compiler may be freely distributed.  
  41.  
  42.       This  document  describes the various components of the system in
  43.       detail.   Chapter  8  contains a convenient command reference for
  44.       the  various utilities included in the system.  Dale Schumacher's
  45.       documentation for the dLibs package is provided separately.  
  46.  
  47.       1.1 System Overview        
  48.  
  49.  
  50.       1.1.1 History            
  51.  
  52.       The  Sozobon  compiler  was  originally  written as a replacement
  53.       front-end  for  the  buggy  Alcyon  compiler.   Johann  had  been
  54.       working  on  the  compiler  for quite a while, and eventually got
  55.       the  rest  of  us interested in working on the other parts of the
  56.       system.   I  (Tony)  started  working  on  an  optimizer,  mainly
  57.       because  I hadn't written one before and it sounded like fun.  As
  58.  
  59.  
  60.                                     - 1 -
  61.  
  62.  
  63.       Sozobon C Compiler                                 User Reference
  64.  
  65.  
  66.       the  pieces  started  coming  together,  we discovered that there
  67.       weren't    any    public   domain   assemblers   that   generated
  68.       Alcyon-compatible  objects.   Joe  offered  to write one, filling
  69.       the last major hole in the project.  
  70.  
  71.       1.1.2 Distribution            
  72.  
  73.       The  Sozobon  C Compiler is distributed in both binary and source
  74.       form.   The  programs and code are copyrighted, but may be freely
  75.       distributed.  The only restrictions are: 
  76.  
  77.        1.  No  charge  may  be  made  other than reasonable charges for
  78.            reproduction.  
  79.  
  80.        2.  Modified versions must be clearly marked as such.  
  81.  
  82.        3.  The   authors   are   not   responsible   for   any  harmful
  83.            consequences  of  using  this  software, even if they result
  84.            from defects in it.  
  85.  
  86.       You  are  encouraged  to  make  copies  for friends, upload it to
  87.       bulletin  boards,  or  distribute it via networks.  This is not a
  88.       shareware  product.   We  wrote this compiler because it was fun,
  89.       not because we expected to make any money from it.  
  90.  
  91.       1.1.3 Obtaining the Source Code         
  92.  
  93.       If  you  received  only  a  binary release of the compiler (or if
  94.       your  binary  release  is  incomplete  or outdated), the complete
  95.       source distribution can be obtained by sending $10 ($12 overseas)
  96.       to:
  97.                    Tony Andrews
  98.            4704 Berkshire Court
  99.                    Boulder, CO  USA 80301
  100.  
  101.  
  102.       Be  sure  to  include  your return address, and specify single or
  103.       double-sided   floppies.   Checks  should  be  payable  to  "Tony
  104.       Andrews".   Feel  free  to  split the cost with as many people as
  105.       you  want.   We're interested in getting the compiler distributed
  106.       and used, not in spending our spare time writing floppies.  
  107.  
  108.       The  complete  release  comes on two single-sided floppies or one
  109.       double-sided floppy containing: 
  110.  
  111.          * all executables 
  112.  
  113.          * source code for the compiler 
  114.  
  115.          * source code for the utilities 
  116.  
  117.          * documentation 
  118.  
  119.  
  120.                                     - 2 -
  121.  
  122.  
  123.       Sozobon C Compiler                                 User Reference
  124.  
  125.  
  126.          * dLibs, version 1.2 (including source) 
  127.  
  128.       Most of this will be in lharc format to conserve space. Since the
  129.       compiler  can  compile  itself, you will have everything you need
  130.       to hack on any part of the package.  
  131.  
  132.       1.1.4 Performance            
  133.  
  134.       The  compiler  runs faster than Alcyon and generates code that is
  135.       generally  better  than Alcyon's.  The Alcyon compiler is smarter
  136.       about  register  allocation  and usage, but the Sozobon optimizer
  137.       makes  up  most  of  the  difference.  Our assembler is better at
  138.       generating  short forms of the branch instructions, so that helps
  139.       too.  
  140.  
  141.       The  code  generation  appears  to  be  quite solid.  None of the
  142.       problems  that  we  found  during  beta testing involved the code
  143.       generation of the compiler, optimizer, or assembler.  
  144.  
  145.       1.2 Acknowledgements         
  146.  
  147.       We'd  like to thank our beta testers for their help in completing
  148.       this  project.   Ian  Lepore, in Denver, was the first to dive in
  149.       and   start   using   the   compiler,   and   made  many  helpful
  150.       suggestions.   Dale  Schumacher  worked  long  hours to get a new
  151.       release  of  dLibs  ready  and pointed out several problems.  And
  152.       Steve  Yelvington  was  the  first  to  develop a GEM application
  153.       using the Sozobon compiler.  
  154.  
  155.       1.3 Support         
  156.  
  157.       We're  interested  in receiving bug reports from people using the
  158.       compiler.   We  use  this software every day, so we have a strong
  159.       interest  in  making  sure  it works right.  Feel free to mail us
  160.       bug  reports at the address listed above.  We can also be reached
  161.       at the following electronic addresses: 
  162.  
  163.            UUCP:     onecom!raid5!tony
  164.            Citadel:  Tony Andrews @ FWBBS
  165.  
  166.  
  167.       Bugs  will  be assigned priorities based roughly on the following
  168.       scale: 
  169.  
  170.        1.  Bug  reports with a fix included. If you give us the fix, it
  171.            will  almost  certainly show up in the next release.  You've
  172.            got the source; don't be afraid to use it.  
  173.  
  174.        2.  Bug  reports  with  a  good  description of the problem, the
  175.            environment  in  which it occurred, and a SMALL program that
  176.            reproduces the problem.  
  177.  
  178.  
  179.  
  180.                                     - 3 -
  181.  
  182.  
  183.       Sozobon C Compiler                                 User Reference
  184.  
  185.  
  186.        3.  All others.  
  187.  
  188.       Please   try  to  at  least  isolate  the  problem  to  a  small,
  189.       repeatable  example program.  If you can find the bug and fix it,
  190.       that's  wonderful,  but  at  least  give  us enough infomation to
  191.       duplicate the bug ourselves.  
  192.  
  193.  
  194.       2. Development Environment        
  195.  
  196.       This  section  describes  in  more  detail  the  operation of the
  197.       compiler  and  the relationship between parts of the compiler and
  198.       the corresponding pieces of the Alcyon compiler.  
  199.  
  200.       The  compiler  works  best  when  used with a shell like 'gulam'.
  201.       There  is currently little support for GEM, either in the runtime
  202.       libraries,  or  in the commands themselves.  None of the commands
  203.       pause  before  exiting,  yet.  Since none of us use GEM, we don't
  204.       have  a very good perspective on how a GEM user would want things
  205.       to  work.   If  you've  used  the  Alcyon  compiler with GEM, you
  206.       should  have  no trouble creating appropriate batch files for the
  207.       Sozobon compiler.  
  208.  
  209.       The  compiler should be usable on machines with 512K and a single
  210.       disk.  This  document  doesn't  describe  the  optimal layout for
  211.       various  ST  configurations, but you can probably figure out what
  212.       makes  the  most  sense  for  your  machine.   This will probably
  213.       involve  a  ram  disk,  and  some  arrangement  of  programs  and
  214.       libraries on one or more floppies.  
  215.  
  216.       2.1 Environment Variables        
  217.  
  218.       Several  environment variables may be used to alter the operation
  219.       of  the  compiler. The variables are used to specify the location
  220.       of  executables,  header  files,  libraries, and temporary files.
  221.       Each   variable  may  reference  a  list  of  directories  to  be
  222.       searched,  with  elements  of  the  list  separated  by commas or
  223.       semicolons.  The variables are: 
  224.  
  225.            PATH          executables
  226.            INCLUDE       header files
  227.            LIB           startup code and libraries
  228.            TMP           temporary files
  229.  
  230.  
  231.       The  "TMP"  variable  is currently only used by 'cc' to construct
  232.       the  object  file  list given to the loader.  Reasonable defaults
  233.       are   assumed  if  these  variables  aren't  set.   The  specific
  234.       defaults are described later in the command references.  
  235.  
  236.  
  237.  
  238.  
  239.  
  240.                                     - 4 -
  241.  
  242.  
  243.       Sozobon C Compiler                                 User Reference
  244.  
  245.  
  246.       2.2 Machine Dependencies        
  247.  
  248.       The supported data types and their sizes (in bytes) are: 
  249.  
  250.            char            1
  251.            short           2
  252.            int             2
  253.            long            4
  254.            unsigned char   1
  255.            unsigned short  2
  256.            unsigned int    2
  257.            unsigned long   4
  258.            float           4
  259.            double          4
  260.            POINTER         4
  261.  
  262.  
  263.       Floating  point  is  supported  using  the  "Fast Floating Point"
  264.       representation  documented  by  Motorola  and  implemented by the
  265.       Alcyon  compiler.  Both 'float' and 'double' types are supported,
  266.       but  are  actually  identical.   We'd  like  to  support the IEEE
  267.       format eventually, but this will have to do for now.  
  268.  
  269.       Any  of  the  basic  data  types  may  be  declared  as  register
  270.       variables.   Pointers occupy the A registers, all other types are
  271.       placed  in  D  registers.   Five data registers and three address
  272.       registers are available for use by register variables.  
  273.  
  274.       2.3 Compiler Limits        
  275.  
  276.       Some limits imposed by the Sozobon compiler are: 
  277.  
  278.          * Strings are limited to 256 characters in length 
  279.  
  280.          * Local  variables  are  limited to a total of 32K in size per
  281.            function.  
  282.  
  283.          * The size of a single structure or array may not exceed 32K.  
  284.  
  285.          * Include files may not be nested more than 8 deep.  
  286.  
  287.          * The  assembler  will  have  problems  with  extremely  large
  288.            source  files  that  produce  more  than  32K of code from a
  289.            single file.  
  290.  
  291.          * Identifiers internal to a file may be of any length.  
  292.  
  293.          * Only  the  first  7  characters  of external identifiers are
  294.            significant, and case is significant for all identifiers.  
  295.            (fixed in release 2.0 - hans)
  296.  
  297.  
  298.  
  299.  
  300.                                     - 5 -
  301.  
  302.  
  303.       Sozobon C Compiler                                 User Reference
  304.  
  305.  
  306.       2.4 Relationship to the Alcyon Compiler     
  307.  
  308.       The   components  of  the  Sozobon  compiler  were  developed  by
  309.       replacing  pieces  of  the  Alcyon compiler one by one.  For this
  310.       reason,  a  certain level of compatibility with the Alcyon system
  311.       was  inevitable.   While  the Alcyon system provided a convenient
  312.       way  to  bootstrap  a  new  compiler,  our  goal  was  not  to be
  313.       completely  compatible with Alcyon.  Compatibility is more in the
  314.       interfaces  between  pieces of the compiler than in their command
  315.       line options.  
  316.  
  317.       The  Sozobon  compiler program replaces the pre-processor and the
  318.       two  compiler  passes  of  the  Alcyon  system.  This  speeds  up
  319.       compilation  quite a bit.  The output of the compiler is suitable
  320.       for  input  to  other  compatible  assemblers  such  as  Alcyon's
  321.       assembler or the MadMac assembler.  
  322.  
  323.       The  optimizer is tuned in many ways to the output of the Sozobon
  324.       compiler  and could not (without some modifications) be used with
  325.       the Alcyon compiler, or with hand-written assembly code.  
  326.  
  327.       The  Sozobon  assembler  was  developed primarily to accept input
  328.       from  the Sozobon compiler (or optimizer) and doesn't support all
  329.       the  features  of  the  Alcyon  or  MadMac  assemblers.   It does
  330.       generate  compatible  object files, though, and generates smaller
  331.       code   since   it   uses  'short'  branch  instructions  wherever
  332.       possible.  
  333.  
  334.       The  Sozobon  loader  accepts  Alcyon object files and libraries.
  335.       The  function  of  the  'relmod' program is incorporated into the
  336.       loader, so a separate utility isn't needed.  
  337.  
  338.       The   other   Sozobon  utilities  all  operate  on  and  generate
  339.       Alcyon-compatible object files and libraries.  
  340.  
  341.  
  342.       3. Component Overviews        
  343.  
  344.       The  following  sections  describe  in  detail  the passes of the
  345.       compiler.  
  346.  
  347.       3.1 Compiler         
  348.  
  349.       The  compiler is essentially compatible with the Alcyon compiler,
  350.       but  is  stricter  about  type  checking  and will complain about
  351.       things  that  Alcyon permits.  The compiler implements the full C
  352.       language as described by K&R, with the usual extensions: 
  353.  
  354.          * bit fields 
  355.  
  356.          * enumerations 
  357.  
  358.  
  359.  
  360.                                     - 6 -
  361.  
  362.  
  363.       Sozobon C Compiler                                 User Reference
  364.  
  365.  
  366.          * structure assignment 
  367.  
  368.          * structure parameters 
  369.  
  370.          * structure return values 
  371.  
  372.          * assembly escapes 
  373.  
  374.       Most  of the features listed above are self-explanatory. Assembly
  375.       code can be embedded within C using the following syntax: 
  376.  
  377.            asm("assembly code");
  378.  
  379.  
  380.       The  string  within quotes is passed directly to the output file.
  381.       It  is  preceded  by  a  tab, and followed by a newline, so these
  382.       don't  need to be given in the string.  Extreme caution should be
  383.       used  when running the optimizer on C code that contains assembly
  384.       escapes.  
  385.  
  386.       The  compiler  has been tested with the "C Compiler Torture Test"
  387.       from   the   Austin   Code   Works.   This  tests  for  full  K&R
  388.       compatibility.   The  compiler has been used to compile itself as
  389.       well  as  many  other  programs  totaling  around 50,000 lines of
  390.       code.  
  391.  
  392.       The  compiler  uses  the  "normal"  68000  C calling conventions.
  393.       Register  A6  is  used  as  a  frame pointer, and function return
  394.       values  are  placed in D0.  Registers D3-D7 and A3-A5 are used to
  395.       hold register variables.  
  396.  
  397.       3.2 Optimizer         
  398.  
  399.       The  Sozobon  optimizer  accepts assembly language input from the
  400.       compiler  and generates optimized assembly output.  The optimizer
  401.       is  tuned  to  the  output of the compiler and should not be used
  402.       with  hand-written assembly code.  The optimizer performs several
  403.       kinds  of  optimizations.   Command  line  options can be used to
  404.       control  which  kinds  of  operations are performed on the source
  405.       file.  
  406.  
  407.       The   most   important   function  of  the  optimizer  is  branch
  408.       optimization.   The  compiler's code generation can be simplified
  409.       somewhat   if   an  optimizer  is  used  to  clean  up  redundant
  410.       branches.   Because  branch  optimization lays the foundation for
  411.       everything  else  the  optimizer does, this cannot be disabled on
  412.       the command line.  
  413.  
  414.       The   other   major  part  of  the  optimizer  performs  peephole
  415.       optimization   replacing   specific  instruction  sequences  with
  416.       shorter  or  faster  ones.   From  one  to three instructions are
  417.       re-written.  The  optimizer  is  able to ignore instructions that
  418.  
  419.  
  420.                                     - 7 -
  421.  
  422.  
  423.       Sozobon C Compiler                                 User Reference
  424.  
  425.  
  426.       don't   affect   the   validity   of  the  optimization,  so  the
  427.       instructions  aren't necessarily adjacent.  This process is aided
  428.       by   the   use  of  dataflow  analysis,  which  determines  which
  429.       registers are "live" at each point in a function.  
  430.  
  431.       This  part  of  the  optimizer  is  more  bug-prone,  and  can be
  432.       disabled  without  affecting  branch  optimization.   The current
  433.       optimizer  is  only  a  start;  the  dataflow  analysis  lays the
  434.       groundwork for many more peephole optimizations.  
  435.  
  436.       The  optimizer  appears  to be quite solid, and its use is highly
  437.       recommended.  The  compiler  depends pretty much on the optimizer
  438.       to  clean up useless branches, and this helps keep the compiler's
  439.       code generation simple.  
  440.  
  441.       3.3 Assembler         
  442.  
  443.       The   assembler   was   designed  to  support  the  compiler  and
  444.       optimizer.   It's  small  (about  half  the  size  of  the Alcyon
  445.       assembler)   and   quite   a   bit   faster.    If   you  want  a
  446.       "user-friendly"  assembler,  you're  probably  better off looking
  447.       elsewhere,  or  hacking  the features you want into our assembler
  448.       yourself.    Besides   being  smaller  and  faster,  the  Sozobon
  449.       assembler  does  a  better  job  of optimizing branch instruction
  450.       sizes.  
  451.  
  452.       3.4 Linker         
  453.  
  454.       The   linker   accepts   Alcyon-compatible   object   files   and
  455.       libraries.   It  incorporates the function of the Alcyon 'relmod'
  456.       program,  so a separate utility is not needed.  The linker can be
  457.       instructed  to  make  multiple  passes  over  libraries  if their
  458.       contents are not ordered by dependency.  
  459.  
  460.       3.5 Utilities         
  461.  
  462.       Besides  the primary programs, there are several useful utilities
  463.       provided.  
  464.  
  465.          * The  'cc' program is used to run the passes of the compiler,
  466.            avoiding the use of batch files.  
  467.  
  468.          * The  'nm'  program  dumps  the symbol table of object files,
  469.            libraries, and executables.  
  470.  
  471.          * The  'size'  utility  prints the size of text, data, and bss
  472.            for objects, libraries, and executables.  
  473.  
  474.          * The 'ar' program manages libraries of object modules.  
  475.  
  476.          * The  'globs'  program  isn't very useful unless you have the
  477.            Alcyon  compiler.  It  removes  local  symbols  from  object
  478.  
  479.  
  480.                                     - 8 -
  481.  
  482.  
  483.       Sozobon C Compiler                                 User Reference
  484.  
  485.  
  486.            modules  and libraries.  These aren't needed for linking and
  487.            take  up quite a bit of space.  If you have Alcyon libraries
  488.            that  you  use  frequently, 'globs' can reduce their size by
  489.            around 30%.  (No longer include in 2.0 - hans)
  490.  
  491.          * An  enhanced  version  of  a public-domain 'make' utility is
  492.            provided and documented in a separate file.  
  493.  
  494.       3.6 Library         
  495.  
  496.       The  dLibs  routines,  written by Dale Schumacher provide runtime
  497.       support  for  the  Sozobon  compiler.  We started our development
  498.       using  dLibs  version  1.1,  but  worked  closely with Dale as he
  499.       prepared  his  1.2  release to insure full compatibility with our
  500.       programs.    The   new  release  is  fully  compatible  with  our
  501.       compiler.  
  502.  
  503.       3.6.1 Startup Code           
  504.  
  505.       The dLibs C startup code is used to link programs.  
  506.  
  507.       3.6.2 C Runtime Library          
  508.  
  509.       The  dLibs  documentation is included in our release, since there
  510.       are no changes for use with the Sozobon compiler.  
  511.  
  512.       3.6.3 Floating Point Library          
  513.  
  514.       Our  floating  point code is included as a separate library.  One
  515.       traditional  problem  with C compilers and floating point is that
  516.       as  soon  as you call printf(), you wind up linking in a bunch of
  517.       floating  point  code  whether  you need it or not. To avoid this
  518.       problem   the  dLibs  package  and  our  floating  point  library
  519.       actually  contain  (slightly)  different  versions  of printf and
  520.       scanf.  The versions in the normal library contain no support for
  521.       floating  point.   The  versions in the floating point library do
  522.       support floating point.  
  523.  
  524.       If  the  "-f"  option  is  passed  to  "cc", the printf and scanf
  525.       routines  are  taken  from the floating point library. Otherwise,
  526.       the  versions  in  the  normal  library are used, and no floating
  527.       point  code gets linked at all, unless required by other parts of
  528.       your program.  
  529.  
  530.       We  make  no  claims  regarding  the  accuracy  or  speed  of the
  531.       floating  point  code.   This  code  was  thrown  together to get
  532.       something  into  this  release,  but  still needs plenty of work.
  533.       Only the basic operations are supported.  
  534.  
  535.       Those  of  you with the Alcyon compiler can use the fast floating
  536.       point  library  (libf)  in  place  of  our  routines.   Low level
  537.       conversion  routines between ASCII and floating point numbers are
  538.  
  539.  
  540.                                     - 9 -
  541.  
  542.  
  543.       Sozobon C Compiler                                 User Reference
  544.  
  545.  
  546.       available  in  libf,  or  printf and scanf can be used by linking
  547.       with the entire Alcyon runtime library.  
  548.  
  549.  
  550.  
  551.  
  552.  
  553.  
  554.  
  555.  
  556.  
  557.  
  558.  
  559.  
  560.  
  561.  
  562.  
  563.  
  564.  
  565.  
  566.  
  567.  
  568.  
  569.  
  570.  
  571.  
  572.  
  573.  
  574.  
  575.  
  576.  
  577.  
  578.  
  579.  
  580.  
  581.  
  582.  
  583.  
  584.  
  585.  
  586.  
  587.  
  588.  
  589.  
  590.  
  591.  
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598.  
  599.  
  600.                                    - 10 -
  601.  
  602.  
  603.       Sozobon C Compiler                                 User Reference
  604.  
  605.  
  606.       4. Known Shortcomings and Bugs      
  607.  
  608.       The  floating  point  code  needs more work.  Unfortunately, this
  609.       code  isn't  much  fun to work on, and since none of us have much
  610.       use   for   floating   point,  it  probably  won't  receive  much
  611.       attention.   If  anyone  has  access  to a public domain floating
  612.       point  library  (IEEE  preferred),  we'd be happy to look into it
  613.       for a future release.  
  614.  
  615.       More  optimization  work  is needed and many error cases could be
  616.       handled better.  
  617.  
  618.  
  619.       5. Next Release Plans       
  620.  
  621.       Several items are high on the wish list for the next release.  
  622.  
  623.          * A  port  of  the  compiler  to Minix-ST is already underway.
  624.            The  Minix  operating  system  comes  with  source  code for
  625.            everything  except  the  C compiler, so the Sozobon compiler
  626.            fills  a void there and already contains some features (e.g.
  627.            bit   fields,   floating   point)  absent  in  the  Minix  C
  628.            compiler.  
  629.  
  630.          * The  assembly  code produced by the compiler should refer to
  631.            parameters  and  locals  symbolically.  This  will  make  it
  632.            easier to use embedded assembly within C.  
  633.  
  634.          * Execution  profiling  is already well underway. This will be
  635.            an  option  that  adds instrumentation to the generated code
  636.            to  measure the number of calls made to each routine, and to
  637.            approximate  the  amount  of  time spent in each part of the
  638.            program.  This  can  be  extremely  useful  when  trying  to
  639.            improve the performance of a working program.  
  640.  
  641.  
  642.       6. Future Directions        
  643.  
  644.       The  compiler is quite usable and has already replaced Alcyon and
  645.       Megamax  as  our standard development environment.  Over time, we
  646.       plan  to move toward ANSI conformance. This is a very large task,
  647.       impacting the runtime library as well as the compiler itself.  
  648.  
  649.       Other possible projects: 
  650.  
  651.          * Dale  Shumacher has already done some work on a debugger, so
  652.            with  some  more  work,  that  would be a nice addition to a
  653.            future release.  
  654.  
  655.          * A port to the Amiga.  
  656.  
  657.          * A version for the 8086.  
  658.  
  659.  
  660.                                    - 11 -
  661.  
  662.  
  663.       Sozobon C Compiler                                 User Reference
  664.  
  665.  
  666.       7. Summary         
  667.  
  668.       We've  had  fun  creating  this compiler.  While we've been using
  669.       this  software  for  a  long  time ourselves, a lot of additional
  670.       work  went  into  making  a  release to the general public.  That
  671.       effort  will  have  been  well-spent if it encourages more people
  672.       like  us  to  continue  developing  software  for the ST or if it
  673.       helps more people learn C who might not have otherwise.  
  674.  
  675.       May the source be with you...  
  676.  
  677.                           Tony Andrews 
  678.                           Johann Ruegg 
  679.                           Joe Treat 
  680.  
  681.  
  682.  
  683.  
  684.  
  685.  
  686.  
  687.  
  688.  
  689.  
  690.  
  691.  
  692.  
  693.  
  694.  
  695.  
  696.  
  697.  
  698.  
  699.  
  700.  
  701.  
  702.  
  703.  
  704.  
  705.  
  706.  
  707.  
  708.  
  709.  
  710.  
  711.  
  712.  
  713.  
  714.  
  715.  
  716.  
  717.  
  718.  
  719.  
  720.                                    - 12 -
  721.  
  722.  
  723.       Sozobon C Compiler                                 User Reference
  724.  
  725.  
  726.       8. Command References        
  727.  
  728.  
  729.       8.1 cc         
  730.  
  731.       C Compiler driver program 
  732.  
  733.       8.1.1 Synopsis            
  734.  
  735.  
  736.            cc [ options ] file [ file ... ]
  737.  
  738.  
  739.       8.1.2 Description            
  740.  
  741.       The  cc  command  runs  the  passes  of the compiler as needed to
  742.       process  files  given  on the command line. Various options exist
  743.       to control the execution of cc or the compiler passes it runs.  
  744.  
  745.       Cc recognizes file names with the following suffixes: 
  746.  
  747.             .c     C source file
  748.             .s     Assembly language input
  749.             .o     Relocatable object module
  750.             .lib   Library module (.a is also recognized)
  751.  
  752.       Normally,  cc  tries  to form an executable image using the files
  753.       given  on  the  command  line.  C  source  files are compiled and
  754.       assembled;  assembly  language files are passed to the assembler,
  755.       and  the  resulting  object  modules  are  linked  with any other
  756.       object  files  or  libraries given to form an executable program.
  757.       The  name  of the executable is based on the first file name seen
  758.       on  the command line.  If the first file name was "foobar.c", the
  759.       executable would be named "foobar.ttp".  
  760.  
  761.       The  following options to the cc command may be used to alter the
  762.       default operation just described: 
  763.  
  764.            -c 
  765.                 Supress  the link phase. Leave generated object modules
  766.                 around.  
  767.  
  768.            -O 
  769.                 Run  the  assembly  optimizer  between the compiler and
  770.                 assembler.  
  771.  
  772.            -S 
  773.                 Compile  C  source  files leaving the assembly language
  774.                 output in the corresponding ".s" file.  
  775.  
  776.            -Ipath 
  777.                 Include  'path'  in  the  list  of  directories  to  be
  778.  
  779.  
  780.                                    - 13 -
  781.  
  782.  
  783.       Sozobon C Compiler                                 User Reference
  784.  
  785.  
  786.                 searched for header files (e.g. "-I\usr\include").  
  787.  
  788.            -Dname 
  789.            -Dname=value 
  790.                 Define  the  pre-processor macro 'name'. If no value is
  791.                 given the macro is defined as 1.  
  792.  
  793.            -Uname 
  794.                 Un-define  one  of  the  built-in macros. For a list of
  795.                 the built-in macros, see the 'hcc' reference section.  
  796.  
  797.            -o file 
  798.                 Put the generated executable in the named file.  
  799.  
  800.            -f 
  801.                 Include the floating point library when linking.  
  802.  
  803.            -m 
  804.                 Generate a load map during the link phase.  
  805.  
  806.            -t 
  807.                 Put a symbol table in the generated program.  
  808.  
  809.            -v 
  810.                 Show  the  passes  as  they are being executed, and the
  811.                 version of 'cc'.  
  812.  
  813.            -n 
  814.                 Like -v, but don't really execute anything.  
  815.  
  816.            -p 
  817.                 This  option  enables  runtime execution profiling. The
  818.                 compiler  generates  some  additional code to count the
  819.                 number  of  calls  to  each  function.  Also, different
  820.                 startup  code  and  runtime  libraries  are  used. This
  821.                 option  isn't  fully  supported yet. It's presence here
  822.                 will  allow  us to upgrade to support profiling without
  823.                 having to replace 'cc' and 'hcc'.  
  824.  
  825.       8.1.3 Files            
  826.  
  827.       Cc  assumes  that header files, libraries, and executables can be
  828.       found in the following locations: 
  829.  
  830.                                    Primary location        Alternate
  831.                    -------------------------------------------------
  832.                    header files    \sozobon\include        \include
  833.                    libraries       \sozobon\lib            \lib
  834.                    executables     \sozobon\bin            \bin
  835.  
  836.  
  837.  
  838.  
  839.  
  840.                                    - 14 -
  841.  
  842.  
  843.       Sozobon C Compiler                                 User Reference
  844.  
  845.  
  846.  
  847.       In  addition  to  the  above  locations,  cc also checks the root
  848.       directory   of   the   current  drive  as  well  as  the  current
  849.       directory.  
  850.  
  851.       If  you're running a command line interpreter like 'gulam' or the
  852.       Beckemeyer   C  Shell,  environment  variables  can  be  used  to
  853.       override  the  default  locations  listed  above.  The  variables
  854.       "INCLUDE",   "LIB",   and  "PATH"  may  contain  lists  of  paths
  855.       separated  by  commas  or  semicolons.  The  given  paths will be
  856.       searched,  in  order,  instead of the primary and alternate paths
  857.       shown above.  
  858.  
  859.  
  860.  
  861.  
  862.  
  863.  
  864.  
  865.  
  866.  
  867.  
  868.  
  869.  
  870.  
  871.  
  872.  
  873.  
  874.  
  875.  
  876.  
  877.  
  878.  
  879.  
  880.  
  881.  
  882.  
  883.  
  884.  
  885.  
  886.  
  887.  
  888.  
  889.  
  890.  
  891.  
  892.  
  893.  
  894.  
  895.  
  896.  
  897.  
  898.  
  899.  
  900.                                    - 15 -
  901.  
  902.  
  903.       Sozobon C Compiler                                 User Reference
  904.  
  905.  
  906.       8.2 hcc         
  907.  
  908.       Hans' C compiler 
  909.  
  910.       8.2.1 Synopsis            
  911.  
  912.  
  913.            hcc [ options ] file [ file ... ]
  914.  
  915.  
  916.       8.2.2 Description            
  917.  
  918.       The  hcc  command  accepts  C source files and generates assembly
  919.       language   output   to   the   corresponding   ".s"   files.  The
  920.       pre-processor  and all phases of the compiler are included within
  921.       this program.  
  922.  
  923.       The following options are accepted by hcc: 
  924.  
  925.            -Ipath 
  926.                 Include  'path'  in  the  list  of  directories  to  be
  927.                 searched for header files (e.g. "-I\usr\include").  
  928.  
  929.            -Dname 
  930.            -Dname=value 
  931.                 Define  the  pre-processor macro 'name'. If no value is
  932.                 given the macro is defined as 1.  
  933.  
  934.            -Uname 
  935.                 Un-define one of the built-in macros.  
  936.  
  937.            -V 
  938.                 Display version information.  
  939.  
  940.            -P 
  941.                 Instructs  the  compiler  to generate modified function
  942.                 entry  code that will count the number of calls to each
  943.                 function.   This  is  not  fully  implemented,  but  is
  944.                 provided  for  compatibility  with  a future release of
  945.                 the compiler.  
  946.  
  947.       Directories  listed  in  the  "INCLUDE"  environment variable are
  948.       added  to  the  list  of  standard  locations to check for header
  949.       files.  
  950.  
  951.       Several  macros  are  normally  pre-defined.  These are: MC68000,
  952.       mc68000, SOZOBON, ATARI_ST, and (as applicable) TOS or MINIX.  
  953.  
  954.  
  955.  
  956.  
  957.  
  958.  
  959.  
  960.                                    - 16 -
  961.  
  962.  
  963.       Sozobon C Compiler                                 User Reference
  964.  
  965.  
  966.       8.3 top         
  967.  
  968.       Tony's optimizer.  
  969.  
  970.       8.3.1 Synopsis            
  971.  
  972.  
  973.            top [ -vpbfd ] infile [ outfile ]
  974.  
  975.  
  976.       8.3.2 Description            
  977.  
  978.       Top  is  an assembly-code optimizer designed for use with hcc. It
  979.       accepts  as  input,  the  code  generated by hcc and generates an
  980.       optimized form of the assembly as output.  
  981.  
  982.       If  'outfile'  is  given,  the  optimized  code is written to the
  983.       named  file.   If  no  output  file is listed, the optimized code
  984.       replaces  the original code in the input file. Using the name "-"
  985.       for  the output file causes the output to be sent directly to the
  986.       screen.  
  987.  
  988.       The  optimizer is normally run by the cc command, but accepts the
  989.       following options when run manually: 
  990.  
  991.            -v 
  992.                 Display  statistics  about  optimizations  made  on the
  993.                 file, and the version information for 'top'.  
  994.  
  995.            -p 
  996.                 Disable peephole optimizations.  
  997.  
  998.            -b 
  999.                 Disable conditional branch reversals.  
  1000.  
  1001.            -f 
  1002.                 Disable    data-flow   analysis   (live-dead   register
  1003.                 analysis) and any optimizations depending on it.  
  1004.  
  1005.            -d 
  1006.                 Print detailed debugging information to stderr.  
  1007.  
  1008.       The  optimizer  performs  branch  optimization  as a minimum. The
  1009.       options  above  can  be  used  to  disable  everything  else. The
  1010.       optimizer  will  sometimes  reverse  the  sense  of a conditional
  1011.       branch  to  produce  shorter  code;  this  is  disabled by the -b
  1012.       options.  
  1013.  
  1014.       Data-flow  analysis  determines  which  machine registers contain
  1015.       useful  data  at  any  point  in  the code. This is used by other
  1016.       parts  of  the optimizer, but is also a likely source of bugs. It
  1017.       can be disabled with -f.  
  1018.  
  1019.  
  1020.                                    - 17 -
  1021.  
  1022.  
  1023.       Sozobon C Compiler                                 User Reference
  1024.  
  1025.  
  1026.  
  1027.       Peephole  optimizations  are  performed by looking at from one to
  1028.       three  instructions  at a time to see if a better sequence can be
  1029.       used.  Optimizations of this kind are disabled with -p.  
  1030.  
  1031.       If  a bug is found in the optimizer, the options -bfp can be used
  1032.       together  to eliminate more advanced features while still gaining
  1033.       the  benefit  of  the  more  reliable  (and  quite useful) branch
  1034.       optimizer.  
  1035.  
  1036.  
  1037.  
  1038.  
  1039.  
  1040.  
  1041.  
  1042.  
  1043.  
  1044.  
  1045.  
  1046.  
  1047.  
  1048.  
  1049.  
  1050.  
  1051.  
  1052.  
  1053.  
  1054.  
  1055.  
  1056.  
  1057.  
  1058.  
  1059.  
  1060.  
  1061.  
  1062.  
  1063.  
  1064.  
  1065.  
  1066.  
  1067.  
  1068.  
  1069.  
  1070.  
  1071.  
  1072.  
  1073.  
  1074.  
  1075.  
  1076.  
  1077.  
  1078.  
  1079.  
  1080.                                    - 18 -
  1081.  
  1082.  
  1083.       Sozobon C Compiler                                 User Reference
  1084.  
  1085.  
  1086.       8.4 jas         
  1087.  
  1088.       Joe's assembler.  
  1089.  
  1090.       8.4.1 Synopsis            
  1091.  
  1092.  
  1093.            jas [ -NVlu ] [ -s dir ] [ -Ln ] [ -o file ] file
  1094.  
  1095.  
  1096.       8.4.2 Description            
  1097.  
  1098.       The  jas  assembler is designed for compatibility with the Alcyon
  1099.       assembler.   It   doesn't  provide  many  features  the  assembly
  1100.       language  programmer  might want, but is intended more for use by
  1101.       a  compiler  front-end.  Jas generally produces smaller code than
  1102.       the  Alcyon  assembler  because  it  is  smarter about generating
  1103.       short  branch  instructions.   Also,  jas uses no temporary files
  1104.       and runs quite a bit faster than Alcyon.  
  1105.  
  1106.       Some  of  the command line options are accepted for compatibility
  1107.       with  the  Alcyon  assembler,  but  are  actually  ignored.   The
  1108.       following command line options are supported: 
  1109.  
  1110.            -N 
  1111.                 Don't generate 'short' branch instructions.  
  1112.  
  1113.            -V 
  1114.                 Print a version message.  
  1115.  
  1116.            -l 
  1117.            -u 
  1118.            -s dir 
  1119.                 Ignored.  
  1120.  
  1121.            -Ln 
  1122.                 By  default,  no local symbols are placed in the symbol
  1123.                 table  of  the output. This option instructs jas to put
  1124.                 all  symbols  into  the  symbol  table  if  n  is  2 or
  1125.                 greater.  If  the  option '-L1' is given, symbols whose
  1126.                 name  doesn't  start with 'L' are written to the symbol
  1127.                 table.  
  1128.  
  1129.            -o file 
  1130.                 Be  default,  the  assembler  replaces  the  '.s'  file
  1131.                 extension  of the input file with '.o' to form the name
  1132.                 of  the  output.   This option can be used to write the
  1133.                 output to any file.  
  1134.  
  1135.  
  1136.  
  1137.  
  1138.  
  1139.  
  1140.                                    - 19 -
  1141.  
  1142.  
  1143.       Sozobon C Compiler                                 User Reference
  1144.  
  1145.  
  1146.       8.5 ld         
  1147.  
  1148.       Loader 
  1149.  
  1150.       8.5.1 Synopsis            
  1151.  
  1152.  
  1153.            ld [ -mvnbp ] [ -f file ] [ -o output ] [ -u symbol ] ... file ...
  1154.  
  1155.  
  1156.       8.5.2 Description            
  1157.  
  1158.       The  ld  command  links  object  modules and libraries to form an
  1159.       executable  program.   Both  object  modules and libraries may be
  1160.       passed  to  ld  for linking.  Several options may be specified to
  1161.       alter the operation of the loader: 
  1162.  
  1163.            -m 
  1164.                 Generate a load map 
  1165.  
  1166.            -t 
  1167.                 Put a symbol table in the output file.  
  1168.  
  1169.            -p 
  1170.                 Make  multiple  passes  over each library until no more
  1171.                 references  can  be satisfied. If libraries are ordered
  1172.                 appropriately,  this  option  is not needed and linking
  1173.                 will be faster.  
  1174.  
  1175.            -b 
  1176.                 This  option can be used when linking large programs to
  1177.                 reduce  the  amount  of  memory used by the loader. The
  1178.                 loader  makes  more  disk  accesses when this option is
  1179.                 used.  
  1180.  
  1181.            -f file 
  1182.                 This  option  is  useful  when  many  files  are  to be
  1183.                 linked.  The loader reads the file name specified for a
  1184.                 list  of  object  modules  and  libraries to be linked.
  1185.                 Names  in  the  file should be separated by white space
  1186.                 or newlines.  
  1187.  
  1188.            -o file 
  1189.                 By  default, the name of the executable file created is
  1190.                 based  on  the  first  file  name  given on the command
  1191.                 line.  An  initial file name of "foobar.o" would result
  1192.                 in  a program named "foobar.ttp".  This option allows a
  1193.                 different name to be specified.  
  1194.  
  1195.            -u symbol 
  1196.                 The  given  symbol  is marked as undefined. This can be
  1197.                 useful  when  linking  from  libraries.  A symbol (e.g.
  1198.  
  1199.  
  1200.                                    - 20 -
  1201.  
  1202.  
  1203.       Sozobon C Compiler                                 User Reference
  1204.  
  1205.  
  1206.                 _main)  can  be  marked  as  undefined to force loading
  1207.                 from the library.  
  1208.  
  1209.            -v 
  1210.                 Tells  the  loader to be verbose about what it's doing,
  1211.                 and print version information.  
  1212.  
  1213.  
  1214.  
  1215.  
  1216.  
  1217.  
  1218.  
  1219.  
  1220.  
  1221.  
  1222.  
  1223.  
  1224.  
  1225.  
  1226.  
  1227.  
  1228.  
  1229.  
  1230.  
  1231.  
  1232.  
  1233.  
  1234.  
  1235.  
  1236.  
  1237.  
  1238.  
  1239.  
  1240.  
  1241.  
  1242.  
  1243.  
  1244.  
  1245.  
  1246.  
  1247.  
  1248.  
  1249.  
  1250.  
  1251.  
  1252.  
  1253.  
  1254.  
  1255.  
  1256.  
  1257.  
  1258.  
  1259.  
  1260.                                    - 21 -
  1261.  
  1262.  
  1263.       Sozobon C Compiler                                 User Reference
  1264.  
  1265.  
  1266.       8.6 size         
  1267.  
  1268.       Prints program sizes 
  1269.  
  1270.       8.6.1 Synopsis            
  1271.  
  1272.  
  1273.            size [ -oxV ] file ...
  1274.  
  1275.  
  1276.       8.6.2 Description            
  1277.  
  1278.       The  size command examines object modules or libraries and prints
  1279.       information  about  their  size.  By default, for each module (or
  1280.       member  of  a  library),  the  size  of  the  text, data, and bss
  1281.       sections  are printed in decimal.  The 'o' and 'x' options can be
  1282.       used  to  print  the  sizes in octal or hexadecimal respectively.
  1283.       If  the  'V'  option  is  given,  the version number of 'size' is
  1284.       printed.  
  1285.  
  1286.  
  1287.  
  1288.  
  1289.  
  1290.  
  1291.  
  1292.  
  1293.  
  1294.  
  1295.  
  1296.  
  1297.  
  1298.  
  1299.  
  1300.  
  1301.  
  1302.  
  1303.  
  1304.  
  1305.  
  1306.  
  1307.  
  1308.  
  1309.  
  1310.  
  1311.  
  1312.  
  1313.  
  1314.  
  1315.  
  1316.  
  1317.  
  1318.  
  1319.  
  1320.                                    - 22 -
  1321.  
  1322.  
  1323.       Sozobon C Compiler                                 User Reference
  1324.  
  1325.  
  1326.       8.7 nm         
  1327.  
  1328.       Prints symbol tables 
  1329.  
  1330.       8.7.1 Synopsis            
  1331.  
  1332.  
  1333.            nm [ -g ] file ...
  1334.  
  1335.  
  1336.       8.7.2 Description            
  1337.  
  1338.       The  nm  command  dumps  the  symbol  table  of all object files,
  1339.       libraries  or  executables given on the command line.  If the 'g'
  1340.       option  is  given,  only  information  about  global  symbols  is
  1341.       printed.  
  1342.  
  1343.  
  1344.  
  1345.  
  1346.  
  1347.  
  1348.  
  1349.  
  1350.  
  1351.  
  1352.  
  1353.  
  1354.  
  1355.  
  1356.  
  1357.  
  1358.  
  1359.  
  1360.  
  1361.  
  1362.  
  1363.  
  1364.  
  1365.  
  1366.  
  1367.  
  1368.  
  1369.  
  1370.  
  1371.  
  1372.  
  1373.  
  1374.  
  1375.  
  1376.  
  1377.  
  1378.  
  1379.  
  1380.                                    - 23 -
  1381.  
  1382.  
  1383.       Sozobon C Compiler                                 User Reference
  1384.  
  1385.  
  1386.       8.8 ar         
  1387.  
  1388.       Archive management program 
  1389.  
  1390.       8.8.1 Synopsis            
  1391.  
  1392.  
  1393.            ar -{drqtpmx}[vcV] afile [ file ... ]
  1394.  
  1395.  
  1396.       8.8.2 Description            
  1397.  
  1398.       The  ar  command  is used to maintain object module libraries. It
  1399.       can  perform  one  of  seven  basic  operations  as selected by a
  1400.       command  character.  The operation of the selected command can be
  1401.       modified by other option characters that may follow it.  
  1402.  
  1403.       The  name  of  the  archive  to be manipulated follows the option
  1404.       characters.  Some  commands  also require (or allow) the names of
  1405.       files  in  the  archive to follow the archive name on the command
  1406.       line.  The following commands are supported.  
  1407.  
  1408.            d 
  1409.                 Delete the named files from the archive.  
  1410.  
  1411.            r 
  1412.                 Replace  the  named files in the archive. New files are
  1413.                 placed at the end of the archive.  
  1414.  
  1415.            q 
  1416.                 Quickly  append  the  named  files  to  the  end of the
  1417.                 archive.  
  1418.  
  1419.            t 
  1420.                 Print  the  contents  of the archive. If file names are
  1421.                 given, only show those files.  
  1422.  
  1423.            p 
  1424.                 Print the named files to the standard output.  
  1425.  
  1426.            m 
  1427.                 Move the named files to the end of the archive.  
  1428.  
  1429.            x 
  1430.                 Extract  the named files from the archive, or all files
  1431.                 if none were listed on the command line.  
  1432.  
  1433.       The  following  characters  modify  the operation of the commands
  1434.       described above.  
  1435.  
  1436.            v 
  1437.                 Generally  show  more  information  about  what  ar  is
  1438.  
  1439.  
  1440.                                    - 24 -
  1441.  
  1442.  
  1443.       Sozobon C Compiler                                 User Reference
  1444.  
  1445.  
  1446.                 doing.   In a table of contents, show information about
  1447.                 the size, mode, etc.  
  1448.  
  1449.            c 
  1450.                 Suppress  the  message  normally  printed  when  a  new
  1451.                 archive is created.  
  1452.  
  1453.            V 
  1454.                 Prints version information.  
  1455.  
  1456.  
  1457.  
  1458.  
  1459.  
  1460.  
  1461.  
  1462.  
  1463.  
  1464.  
  1465.  
  1466.  
  1467.  
  1468.  
  1469.  
  1470.  
  1471.  
  1472.  
  1473.  
  1474.  
  1475.  
  1476.  
  1477.  
  1478.  
  1479.  
  1480.  
  1481.  
  1482.  
  1483.  
  1484.  
  1485.  
  1486.  
  1487.  
  1488.  
  1489.  
  1490.  
  1491.  
  1492.  
  1493.  
  1494.  
  1495.  
  1496.  
  1497.  
  1498.  
  1499.  
  1500.                                    - 25 -
  1501.  
  1502.  
  1503.       Sozobon C Compiler                                 User Reference
  1504.  
  1505.  
  1506.       8.9 globs         
  1507.  
  1508.       Remove non-global symbols 
  1509.  
  1510.       8.9.1 Synopsis            
  1511.  
  1512.  
  1513.            globs file ...
  1514.  
  1515.  
  1516.       8.9.2 Description            
  1517.  
  1518.       The  named  files (object modules or libraries) are compressed by
  1519.       removing  non-essential  symbols  from their symbol table.  Since
  1520.       the  Sozobon  assembler  does  this  by  default, this program it
  1521.       mostly useful to users with old Alcyon libraries.  
  1522.  
  1523.       This is no longer included with release 2.0.
  1524.  
  1525.  
  1526.  
  1527.  
  1528.  
  1529.  
  1530.  
  1531.  
  1532.  
  1533.  
  1534.  
  1535.  
  1536.  
  1537.  
  1538.  
  1539.  
  1540.  
  1541.  
  1542.  
  1543.  
  1544.  
  1545.  
  1546.  
  1547.  
  1548.  
  1549.  
  1550.  
  1551.  
  1552.  
  1553.  
  1554.  
  1555.  
  1556.  
  1557.  
  1558.  
  1559.  
  1560.                                    - 26 -
  1561.  
  1562.  
  1563.       
  1564.  
  1565.  
  1566.                               Table of Contents
  1567.  
  1568.  
  1569.          1. Introduction        .................................    1
  1570.  
  1571.             1.1 System Overview       ...........................    1
  1572.                1.1.1 History        .............................    1
  1573.                1.1.2 Distribution        ........................    2
  1574.                1.1.3 Obtaining the Source Code     ..............    2
  1575.                1.1.4 Performance        .........................    3
  1576.  
  1577.             1.2 Acknowledgements        .........................    3
  1578.  
  1579.             1.3 Support        ..................................    3
  1580.  
  1581.          2. Development Environment       .......................    4
  1582.  
  1583.             2.1 Environment Variables       .....................    4
  1584.  
  1585.             2.2 Machine Dependencies       ......................    5
  1586.  
  1587.             2.3 Compiler Limits       ...........................    5
  1588.  
  1589.             2.4 Relationship to the Alcyon Compiler    ..........    6
  1590.  
  1591.          3. Component Overviews       ...........................    6
  1592.  
  1593.             3.1 Compiler        .................................    6
  1594.  
  1595.             3.2 Optimizer        ................................    7
  1596.  
  1597.             3.3 Assembler        ................................    8
  1598.  
  1599.             3.4 Linker        ...................................    8
  1600.  
  1601.             3.5 Utilities        ................................    8
  1602.  
  1603.             3.6 Library        ..................................    9
  1604.                3.6.1 Startup Code       .........................    9
  1605.                3.6.2 C Runtime Library      .....................    9
  1606.                3.6.3 Floating Point Library      ................    9
  1607.  
  1608.          4. Known Shortcomings and Bugs     .....................   11
  1609.  
  1610.          5. Next Release Plans      .............................   11
  1611.  
  1612.          6. Future Directions       .............................   11
  1613.  
  1614.          7. Summary        ......................................   12
  1615.  
  1616.          8. Command References       ............................   13
  1617.  
  1618.  
  1619.  
  1620.                                     - I -
  1621.  
  1622.  
  1623.       
  1624.  
  1625.  
  1626.             8.1 cc        .......................................   13
  1627.                8.1.1 Synopsis        ............................   13
  1628.                8.1.2 Description        .........................   13
  1629.                8.1.3 Files        ...............................   14
  1630.  
  1631.             8.2 hcc        ......................................   16
  1632.                8.2.1 Synopsis        ............................   16
  1633.                8.2.2 Description        .........................   16
  1634.  
  1635.             8.3 top        ......................................   17
  1636.                8.3.1 Synopsis        ............................   17
  1637.                8.3.2 Description        .........................   17
  1638.  
  1639.             8.4 jas        ......................................   19
  1640.                8.4.1 Synopsis        ............................   19
  1641.                8.4.2 Description        .........................   19
  1642.  
  1643.             8.5 ld        .......................................   20
  1644.                8.5.1 Synopsis        ............................   20
  1645.                8.5.2 Description        .........................   20
  1646.  
  1647.             8.6 size        .....................................   22
  1648.                8.6.1 Synopsis        ............................   22
  1649.                8.6.2 Description        .........................   22
  1650.  
  1651.             8.7 nm        .......................................   23
  1652.                8.7.1 Synopsis        ............................   23
  1653.                8.7.2 Description        .........................   23
  1654.  
  1655.             8.8 ar        .......................................   24
  1656.                8.8.1 Synopsis        ............................   24
  1657.                8.8.2 Description        .........................   24
  1658.  
  1659.             8.9 globs        ....................................   26
  1660.                8.9.1 Synopsis        ............................   26
  1661.                8.9.2 Description        .........................   26
  1662.  
  1663.  
  1664.  
  1665.  
  1666.  
  1667.  
  1668.  
  1669.  
  1670.  
  1671.  
  1672.  
  1673.  
  1674.  
  1675.  
  1676.  
  1677.  
  1678.  
  1679.  
  1680.                                    - II -
  1681.  
  1682.