Sozobon C

From Atari Wiki
Revision as of 15:33, 13 October 2011 by Admin (talk | contribs)
Jump to navigation Jump to search


      





                           The Sozobon C Compiler

                          a freeware offering from

                              Sozobon, Limited


                                Tony Andrews
                                Johann Ruegg
                                  Joe Treat


                               User Reference

                                  3/1/91







      1. Introduction         

      The  Sozobon  C  Compiler  is  a complete implementation of the C
      language  as  defined  by  Kernighan  &  Ritchie  and  prevailing
      practice.    The   package   includes   a   compiler,  optimizer,
      assembler,  and  linker,  as  well  as  several  other associated
      utilities.   For  runtime  library  support,  version  1.2 of the
      public  domain  dLibs routines are used.  Like the dLibs package,
      source  code  and  executables  for all components of the Sozobon
      compiler may be freely distributed.  

      This  document  describes the various components of the system in
      detail.   Chapter  8  contains a convenient command reference for
      the  various utilities included in the system.  Dale Schumacher's
      documentation for the dLibs package is provided separately.  

      1.1 System Overview        


      1.1.1 History            

      The  Sozobon  compiler  was  originally  written as a replacement
      front-end  for  the  buggy  Alcyon  compiler.   Johann  had  been
      working  on  the  compiler  for quite a while, and eventually got
      the  rest  of  us interested in working on the other parts of the
      system.   I  (Tony)  started  working  on  an  optimizer,  mainly
      because  I hadn't written one before and it sounded like fun.  As


                                    - 1 -
�

      Sozobon C Compiler                                 User Reference


      the  pieces  started  coming  together,  we discovered that there
      weren't    any    public   domain   assemblers   that   generated
      Alcyon-compatible  objects.   Joe  offered  to write one, filling
      the last major hole in the project.  

      1.1.2 Distribution            

      The  Sozobon  C Compiler is distributed in both binary and source
      form.   The  programs and code are copyrighted, but may be freely
      distributed.  The only restrictions are: 

       1.  No  charge  may  be  made  other than reasonable charges for
           reproduction.  

       2.  Modified versions must be clearly marked as such.  

       3.  The   authors   are   not   responsible   for   any  harmful
           consequences  of  using  this  software, even if they result
           from defects in it.  

      You  are  encouraged  to  make  copies  for friends, upload it to
      bulletin  boards,  or  distribute it via networks.  This is not a
      shareware  product.   We  wrote this compiler because it was fun,
      not because we expected to make any money from it.  

      1.1.3 Obtaining the Source Code         

      If  you  received  only  a  binary release of the compiler (or if
      your  binary  release  is  incomplete  or outdated), the complete
      source distribution can be obtained by sending $10 ($12 overseas)
      to:
                   Tony Andrews
		   4704 Berkshire Court
                   Boulder, CO  USA 80301


      Be  sure  to  include  your return address, and specify single or
      double-sided   floppies.   Checks  should  be  payable  to  "Tony
      Andrews".   Feel  free  to  split the cost with as many people as
      you  want.   We're interested in getting the compiler distributed
      and used, not in spending our spare time writing floppies.  

      The  complete  release  comes on two single-sided floppies or one
      double-sided floppy containing: 

         * all executables 

         * source code for the compiler 

         * source code for the utilities 

         * documentation 


                                    - 2 -
�

      Sozobon C Compiler                                 User Reference


         * dLibs, version 1.2 (including source) 

      Most of this will be in lharc format to conserve space. Since the
      compiler  can  compile  itself, you will have everything you need
      to hack on any part of the package.  

      1.1.4 Performance            

      The  compiler  runs faster than Alcyon and generates code that is
      generally  better  than Alcyon's.  The Alcyon compiler is smarter
      about  register  allocation  and usage, but the Sozobon optimizer
      makes  up  most  of  the  difference.  Our assembler is better at
      generating  short forms of the branch instructions, so that helps
      too.  

      The  code  generation  appears  to  be  quite solid.  None of the
      problems  that  we  found  during  beta testing involved the code
      generation of the compiler, optimizer, or assembler.  

      1.2 Acknowledgements         

      We'd  like to thank our beta testers for their help in completing
      this  project.   Ian  Lepore, in Denver, was the first to dive in
      and   start   using   the   compiler,   and   made  many  helpful
      suggestions.   Dale  Schumacher  worked  long  hours to get a new
      release  of  dLibs  ready  and pointed out several problems.  And
      Steve  Yelvington  was  the  first  to  develop a GEM application
      using the Sozobon compiler.  

      1.3 Support         

      We're  interested  in receiving bug reports from people using the
      compiler.   We  use  this software every day, so we have a strong
      interest  in  making  sure  it works right.  Feel free to mail us
      bug  reports at the address listed above.  We can also be reached
      at the following electronic addresses: 

           UUCP:     onecom!raid5!tony
           Citadel:  Tony Andrews @ FWBBS


      Bugs  will  be assigned priorities based roughly on the following
      scale: 

       1.  Bug  reports with a fix included. If you give us the fix, it
           will  almost  certainly show up in the next release.  You've
           got the source; don't be afraid to use it.  

       2.  Bug  reports  with  a  good  description of the problem, the
           environment  in  which it occurred, and a SMALL program that
           reproduces the problem.  



                                    - 3 -
�

      Sozobon C Compiler                                 User Reference


       3.  All others.  

      Please   try  to  at  least  isolate  the  problem  to  a  small,
      repeatable  example program.  If you can find the bug and fix it,
      that's  wonderful,  but  at  least  give  us enough infomation to
      duplicate the bug ourselves.  


      2. Development Environment        

      This  section  describes  in  more  detail  the  operation of the
      compiler  and  the relationship between parts of the compiler and
      the corresponding pieces of the Alcyon compiler.  

      The  compiler  works  best  when  used with a shell like 'gulam'.
      There  is currently little support for GEM, either in the runtime
      libraries,  or  in the commands themselves.  None of the commands
      pause  before  exiting,  yet.  Since none of us use GEM, we don't
      have  a very good perspective on how a GEM user would want things
      to  work.   If  you've  used  the  Alcyon  compiler with GEM, you
      should  have  no trouble creating appropriate batch files for the
      Sozobon compiler.  

      The  compiler should be usable on machines with 512K and a single
      disk.  This  document  doesn't  describe  the  optimal layout for
      various  ST  configurations, but you can probably figure out what
      makes  the  most  sense  for  your  machine.   This will probably
      involve  a  ram  disk,  and  some  arrangement  of  programs  and
      libraries on one or more floppies.  

      2.1 Environment Variables        

      Several  environment variables may be used to alter the operation
      of  the  compiler. The variables are used to specify the location
      of  executables,  header  files,  libraries, and temporary files.
      Each   variable  may  reference  a  list  of  directories  to  be
      searched,  with  elements  of  the  list  separated  by commas or
      semicolons.  The variables are: 

           PATH          executables
           INCLUDE       header files
           LIB           startup code and libraries
           TMP           temporary files


      The  "TMP"  variable  is currently only used by 'cc' to construct
      the  object  file  list given to the loader.  Reasonable defaults
      are   assumed  if  these  variables  aren't  set.   The  specific
      defaults are described later in the command references.  





                                    - 4 -
�

      Sozobon C Compiler                                 User Reference


      2.2 Machine Dependencies        

      The supported data types and their sizes (in bytes) are: 

           char            1
           short           2
           int             2
           long            4
           unsigned char   1
           unsigned short  2
           unsigned int    2
           unsigned long   4
           float           4
           double          4
           POINTER         4


      Floating  point  is  supported  using  the  "Fast Floating Point"
      representation  documented  by  Motorola  and  implemented by the
      Alcyon  compiler.  Both 'float' and 'double' types are supported,
      but  are  actually  identical.   We'd  like  to  support the IEEE
      format eventually, but this will have to do for now.  

      Any  of  the  basic  data  types  may  be  declared  as  register
      variables.   Pointers occupy the A registers, all other types are
      placed  in  D  registers.   Five data registers and three address
      registers are available for use by register variables.  

      2.3 Compiler Limits        

      Some limits imposed by the Sozobon compiler are: 

         * Strings are limited to 256 characters in length 

         * Local  variables  are  limited to a total of 32K in size per
           function.  

         * The size of a single structure or array may not exceed 32K.  

         * Include files may not be nested more than 8 deep.  

         * The  assembler  will  have  problems  with  extremely  large
           source  files  that  produce  more  than  32K of code from a
           single file.  

         * Identifiers internal to a file may be of any length.  

         * Only  the  first  7  characters  of external identifiers are
           significant, and case is significant for all identifiers.  
           (fixed in release 2.0 - hans)




                                    - 5 -
�

      Sozobon C Compiler                                 User Reference


      2.4 Relationship to the Alcyon Compiler     

      The   components  of  the  Sozobon  compiler  were  developed  by
      replacing  pieces  of  the  Alcyon compiler one by one.  For this
      reason,  a  certain level of compatibility with the Alcyon system
      was  inevitable.   While  the Alcyon system provided a convenient
      way  to  bootstrap  a  new  compiler,  our  goal  was  not  to be
      completely  compatible with Alcyon.  Compatibility is more in the
      interfaces  between  pieces of the compiler than in their command
      line options.  

      The  Sozobon  compiler program replaces the pre-processor and the
      two  compiler  passes  of  the  Alcyon  system.  This  speeds  up
      compilation  quite a bit.  The output of the compiler is suitable
      for  input  to  other  compatible  assemblers  such  as  Alcyon's
      assembler or the MadMac assembler.  

      The  optimizer is tuned in many ways to the output of the Sozobon
      compiler  and could not (without some modifications) be used with
      the Alcyon compiler, or with hand-written assembly code.  

      The  Sozobon  assembler  was  developed primarily to accept input
      from  the Sozobon compiler (or optimizer) and doesn't support all
      the  features  of  the  Alcyon  or  MadMac  assemblers.   It does
      generate  compatible  object files, though, and generates smaller
      code   since   it   uses  'short'  branch  instructions  wherever
      possible.  

      The  Sozobon  loader  accepts  Alcyon object files and libraries.
      The  function  of  the  'relmod' program is incorporated into the
      loader, so a separate utility isn't needed.  

      The   other   Sozobon  utilities  all  operate  on  and  generate
      Alcyon-compatible object files and libraries.  


      3. Component Overviews        

      The  following  sections  describe  in  detail  the passes of the
      compiler.  

      3.1 Compiler         

      The  compiler is essentially compatible with the Alcyon compiler,
      but  is  stricter  about  type  checking  and will complain about
      things  that  Alcyon permits.  The compiler implements the full C
      language as described by K&R, with the usual extensions: 

         * bit fields 

         * enumerations 



                                    - 6 -
�

      Sozobon C Compiler                                 User Reference


         * structure assignment 

         * structure parameters 

         * structure return values 

         * assembly escapes 

      Most  of the features listed above are self-explanatory. Assembly
      code can be embedded within C using the following syntax: 

           asm("assembly code");


      The  string  within quotes is passed directly to the output file.
      It  is  preceded  by  a  tab, and followed by a newline, so these
      don't  need to be given in the string.  Extreme caution should be
      used  when running the optimizer on C code that contains assembly
      escapes.  

      The  compiler  has been tested with the "C Compiler Torture Test"
      from   the   Austin   Code   Works.   This  tests  for  full  K&R
      compatibility.   The  compiler has been used to compile itself as
      well  as  many  other  programs  totaling  around 50,000 lines of
      code.  

      The  compiler  uses  the  "normal"  68000  C calling conventions.
      Register  A6  is  used  as  a  frame pointer, and function return
      values  are  placed in D0.  Registers D3-D7 and A3-A5 are used to
      hold register variables.  

      3.2 Optimizer         

      The  Sozobon  optimizer  accepts assembly language input from the
      compiler  and generates optimized assembly output.  The optimizer
      is  tuned  to  the  output of the compiler and should not be used
      with  hand-written assembly code.  The optimizer performs several
      kinds  of  optimizations.   Command  line  options can be used to
      control  which  kinds  of  operations are performed on the source
      file.  

      The   most   important   function  of  the  optimizer  is  branch
      optimization.   The  compiler's code generation can be simplified
      somewhat   if   an  optimizer  is  used  to  clean  up  redundant
      branches.   Because  branch  optimization lays the foundation for
      everything  else  the  optimizer does, this cannot be disabled on
      the command line.  

      The   other   major  part  of  the  optimizer  performs  peephole
      optimization   replacing   specific  instruction  sequences  with
      shorter  or  faster  ones.   From  one  to three instructions are
      re-written.  The  optimizer  is  able to ignore instructions that


                                    - 7 -
�

      Sozobon C Compiler                                 User Reference


      don't   affect   the   validity   of  the  optimization,  so  the
      instructions  aren't necessarily adjacent.  This process is aided
      by   the   use  of  dataflow  analysis,  which  determines  which
      registers are "live" at each point in a function.  

      This  part  of  the  optimizer  is  more  bug-prone,  and  can be
      disabled  without  affecting  branch  optimization.   The current
      optimizer  is  only  a  start;  the  dataflow  analysis  lays the
      groundwork for many more peephole optimizations.  

      The  optimizer  appears  to be quite solid, and its use is highly
      recommended.  The  compiler  depends pretty much on the optimizer
      to  clean up useless branches, and this helps keep the compiler's
      code generation simple.  

      3.3 Assembler         

      The   assembler   was   designed  to  support  the  compiler  and
      optimizer.   It's  small  (about  half  the  size  of  the Alcyon
      assembler)   and   quite   a   bit   faster.    If   you  want  a
      "user-friendly"  assembler,  you're  probably  better off looking
      elsewhere,  or  hacking  the features you want into our assembler
      yourself.    Besides   being  smaller  and  faster,  the  Sozobon
      assembler  does  a  better  job  of optimizing branch instruction
      sizes.  

      3.4 Linker         

      The   linker   accepts   Alcyon-compatible   object   files   and
      libraries.   It  incorporates the function of the Alcyon 'relmod'
      program,  so a separate utility is not needed.  The linker can be
      instructed  to  make  multiple  passes  over  libraries  if their
      contents are not ordered by dependency.  

      3.5 Utilities         

      Besides  the primary programs, there are several useful utilities
      provided.  

         * The  'cc' program is used to run the passes of the compiler,
           avoiding the use of batch files.  

         * The  'nm'  program  dumps  the symbol table of object files,
           libraries, and executables.  

         * The  'size'  utility  prints the size of text, data, and bss
           for objects, libraries, and executables.  

         * The 'ar' program manages libraries of object modules.  

         * The  'globs'  program  isn't very useful unless you have the
           Alcyon  compiler.  It  removes  local  symbols  from  object


                                    - 8 -
�

      Sozobon C Compiler                                 User Reference


           modules  and libraries.  These aren't needed for linking and
           take  up quite a bit of space.  If you have Alcyon libraries
           that  you  use  frequently, 'globs' can reduce their size by
           around 30%.  (No longer include in 2.0 - hans)

         * An  enhanced  version  of  a public-domain 'make' utility is
           provided and documented in a separate file.  

      3.6 Library         

      The  dLibs  routines,  written by Dale Schumacher provide runtime
      support  for  the  Sozobon  compiler.  We started our development
      using  dLibs  version  1.1,  but  worked  closely with Dale as he
      prepared  his  1.2  release to insure full compatibility with our
      programs.    The   new  release  is  fully  compatible  with  our
      compiler.  

      3.6.1 Startup Code           

      The dLibs C startup code is used to link programs.  

      3.6.2 C Runtime Library          

      The  dLibs  documentation is included in our release, since there
      are no changes for use with the Sozobon compiler.  

      3.6.3 Floating Point Library          

      Our  floating  point code is included as a separate library.  One
      traditional  problem  with C compilers and floating point is that
      as  soon  as you call printf(), you wind up linking in a bunch of
      floating  point  code  whether  you need it or not. To avoid this
      problem   the  dLibs  package  and  our  floating  point  library
      actually  contain  (slightly)  different  versions  of printf and
      scanf.  The versions in the normal library contain no support for
      floating  point.   The  versions in the floating point library do
      support floating point.  

      If  the  "-f"  option  is  passed  to  "cc", the printf and scanf
      routines  are  taken  from the floating point library. Otherwise,
      the  versions  in  the  normal  library are used, and no floating
      point  code gets linked at all, unless required by other parts of
      your program.  

      We  make  no  claims  regarding  the  accuracy  or  speed  of the
      floating  point  code.   This  code  was  thrown  together to get
      something  into  this  release,  but  still needs plenty of work.
      Only the basic operations are supported.  

      Those  of  you with the Alcyon compiler can use the fast floating
      point  library  (libf)  in  place  of  our  routines.   Low level
      conversion  routines between ASCII and floating point numbers are


                                    - 9 -
�

      Sozobon C Compiler                                 User Reference


      available  in  libf,  or  printf and scanf can be used by linking
      with the entire Alcyon runtime library.  




















































                                   - 10 -
�

      Sozobon C Compiler                                 User Reference


      4. Known Shortcomings and Bugs      

      The  floating  point  code  needs more work.  Unfortunately, this
      code  isn't  much  fun to work on, and since none of us have much
      use   for   floating   point,  it  probably  won't  receive  much
      attention.   If  anyone  has  access  to a public domain floating
      point  library  (IEEE  preferred),  we'd be happy to look into it
      for a future release.  

      More  optimization  work  is needed and many error cases could be
      handled better.  


      5. Next Release Plans       

      Several items are high on the wish list for the next release.  

         * A  port  of  the  compiler  to Minix-ST is already underway.
           The  Minix  operating  system  comes  with  source  code for
           everything  except  the  C compiler, so the Sozobon compiler
           fills  a void there and already contains some features (e.g.
           bit   fields,   floating   point)  absent  in  the  Minix  C
           compiler.  

         * The  assembly  code produced by the compiler should refer to
           parameters  and  locals  symbolically.  This  will  make  it
           easier to use embedded assembly within C.  

         * Execution  profiling  is already well underway. This will be
           an  option  that  adds instrumentation to the generated code
           to  measure the number of calls made to each routine, and to
           approximate  the  amount  of  time spent in each part of the
           program.  This  can  be  extremely  useful  when  trying  to
           improve the performance of a working program.  


      6. Future Directions        

      The  compiler is quite usable and has already replaced Alcyon and
      Megamax  as  our standard development environment.  Over time, we
      plan  to move toward ANSI conformance. This is a very large task,
      impacting the runtime library as well as the compiler itself.  

      Other possible projects: 

         * Dale  Shumacher has already done some work on a debugger, so
           with  some  more  work,  that  would be a nice addition to a
           future release.  

         * A port to the Amiga.  

         * A version for the 8086.  


                                   - 11 -
�

      Sozobon C Compiler                                 User Reference


      7. Summary         

      We've  had  fun  creating  this compiler.  While we've been using
      this  software  for  a  long  time ourselves, a lot of additional
      work  went  into  making  a  release to the general public.  That
      effort  will  have  been  well-spent if it encourages more people
      like  us  to  continue  developing  software  for the ST or if it
      helps more people learn C who might not have otherwise.  

      May the source be with you...  

                          Tony Andrews 
                          Johann Ruegg 
                          Joe Treat 








































                                   - 12 -
�

      Sozobon C Compiler                                 User Reference


      8. Command References        


      8.1 cc         

      C Compiler driver program 

      8.1.1 Synopsis            


           cc [ options ] file [ file ... ]


      8.1.2 Description            

      The  cc  command  runs  the  passes  of the compiler as needed to
      process  files  given  on the command line. Various options exist
      to control the execution of cc or the compiler passes it runs.  

      Cc recognizes file names with the following suffixes: 

            .c     C source file
            .s     Assembly language input
            .o     Relocatable object module
            .lib   Library module (.a is also recognized)

      Normally,  cc  tries  to form an executable image using the files
      given  on  the  command  line.  C  source  files are compiled and
      assembled;  assembly  language files are passed to the assembler,
      and  the  resulting  object  modules  are  linked  with any other
      object  files  or  libraries given to form an executable program.
      The  name  of the executable is based on the first file name seen
      on  the command line.  If the first file name was "foobar.c", the
      executable would be named "foobar.ttp".  

      The  following options to the cc command may be used to alter the
      default operation just described: 

           -c 
                Supress  the link phase. Leave generated object modules
                around.  

           -O 
                Run  the  assembly  optimizer  between the compiler and
                assembler.  

           -S 
                Compile  C  source  files leaving the assembly language
                output in the corresponding ".s" file.  

           -Ipath 
                Include  'path'  in  the  list  of  directories  to  be


                                   - 13 -
�

      Sozobon C Compiler                                 User Reference


                searched for header files (e.g. "-I\usr\include").  

           -Dname 
           -Dname=value 
                Define  the  pre-processor macro 'name'. If no value is
                given the macro is defined as 1.  

           -Uname 
                Un-define  one  of  the  built-in macros. For a list of
                the built-in macros, see the 'hcc' reference section.  

           -o file 
                Put the generated executable in the named file.  

           -f 
                Include the floating point library when linking.  

           -m 
                Generate a load map during the link phase.  

           -t 
                Put a symbol table in the generated program.  

           -v 
                Show  the  passes  as  they are being executed, and the
                version of 'cc'.  

           -n 
                Like -v, but don't really execute anything.  

           -p 
                This  option  enables  runtime execution profiling. The
                compiler  generates  some  additional code to count the
                number  of  calls  to  each  function.  Also, different
                startup  code  and  runtime  libraries  are  used. This
                option  isn't  fully  supported yet. It's presence here
                will  allow  us to upgrade to support profiling without
                having to replace 'cc' and 'hcc'.  

      8.1.3 Files            

      Cc  assumes  that header files, libraries, and executables can be
      found in the following locations: 

                                   Primary location        Alternate
                   -------------------------------------------------
                   header files    \sozobon\include        \include
                   libraries       \sozobon\lib            \lib
                   executables     \sozobon\bin            \bin





                                   - 14 -
�

      Sozobon C Compiler                                 User Reference



      In  addition  to  the  above  locations,  cc also checks the root
      directory   of   the   current  drive  as  well  as  the  current
      directory.  

      If  you're running a command line interpreter like 'gulam' or the
      Beckemeyer   C  Shell,  environment  variables  can  be  used  to
      override  the  default  locations  listed  above.  The  variables
      "INCLUDE",   "LIB",   and  "PATH"  may  contain  lists  of  paths
      separated  by  commas  or  semicolons.  The  given  paths will be
      searched,  in  order,  instead of the primary and alternate paths
      shown above.  










































                                   - 15 -
�

      Sozobon C Compiler                                 User Reference


      8.2 hcc         

      Hans' C compiler 

      8.2.1 Synopsis            


           hcc [ options ] file [ file ... ]


      8.2.2 Description            

      The  hcc  command  accepts  C source files and generates assembly
      language   output   to   the   corresponding   ".s"   files.  The
      pre-processor  and all phases of the compiler are included within
      this program.  

      The following options are accepted by hcc: 

           -Ipath 
                Include  'path'  in  the  list  of  directories  to  be
                searched for header files (e.g. "-I\usr\include").  

           -Dname 
           -Dname=value 
                Define  the  pre-processor macro 'name'. If no value is
                given the macro is defined as 1.  

           -Uname 
                Un-define one of the built-in macros.  

           -V 
                Display version information.  

           -P 
                Instructs  the  compiler  to generate modified function
                entry  code that will count the number of calls to each
                function.   This  is  not  fully  implemented,  but  is
                provided  for  compatibility  with  a future release of
                the compiler.  

      Directories  listed  in  the  "INCLUDE"  environment variable are
      added  to  the  list  of  standard  locations to check for header
      files.  

      Several  macros  are  normally  pre-defined.  These are: MC68000,
      mc68000, SOZOBON, ATARI_ST, and (as applicable) TOS or MINIX.  







                                   - 16 -
�

      Sozobon C Compiler                                 User Reference


      8.3 top         

      Tony's optimizer.  

      8.3.1 Synopsis            


           top [ -vpbfd ] infile [ outfile ]


      8.3.2 Description            

      Top  is  an assembly-code optimizer designed for use with hcc. It
      accepts  as  input,  the  code  generated by hcc and generates an
      optimized form of the assembly as output.  

      If  'outfile'  is  given,  the  optimized  code is written to the
      named  file.   If  no  output  file is listed, the optimized code
      replaces  the original code in the input file. Using the name "-"
      for  the output file causes the output to be sent directly to the
      screen.  

      The  optimizer is normally run by the cc command, but accepts the
      following options when run manually: 

           -v 
                Display  statistics  about  optimizations  made  on the
                file, and the version information for 'top'.  

           -p 
                Disable peephole optimizations.  

           -b 
                Disable conditional branch reversals.  

           -f 
                Disable    data-flow   analysis   (live-dead   register
                analysis) and any optimizations depending on it.  

           -d 
                Print detailed debugging information to stderr.  

      The  optimizer  performs  branch  optimization  as a minimum. The
      options  above  can  be  used  to  disable  everything  else. The
      optimizer  will  sometimes  reverse  the  sense  of a conditional
      branch  to  produce  shorter  code;  this  is  disabled by the -b
      options.  

      Data-flow  analysis  determines  which  machine registers contain
      useful  data  at  any  point  in  the code. This is used by other
      parts  of  the optimizer, but is also a likely source of bugs. It
      can be disabled with -f.  


                                   - 17 -
�

      Sozobon C Compiler                                 User Reference



      Peephole  optimizations  are  performed by looking at from one to
      three  instructions  at a time to see if a better sequence can be
      used.  Optimizations of this kind are disabled with -p.  

      If  a bug is found in the optimizer, the options -bfp can be used
      together  to eliminate more advanced features while still gaining
      the  benefit  of  the  more  reliable  (and  quite useful) branch
      optimizer.  













































                                   - 18 -
�

      Sozobon C Compiler                                 User Reference


      8.4 jas         

      Joe's assembler.  

      8.4.1 Synopsis            


           jas [ -NVlu ] [ -s dir ] [ -Ln ] [ -o file ] file


      8.4.2 Description            

      The  jas  assembler is designed for compatibility with the Alcyon
      assembler.   It   doesn't  provide  many  features  the  assembly
      language  programmer  might want, but is intended more for use by
      a  compiler  front-end.  Jas generally produces smaller code than
      the  Alcyon  assembler  because  it  is  smarter about generating
      short  branch  instructions.   Also,  jas uses no temporary files
      and runs quite a bit faster than Alcyon.  

      Some  of  the command line options are accepted for compatibility
      with  the  Alcyon  assembler,  but  are  actually  ignored.   The
      following command line options are supported: 

           -N 
                Don't generate 'short' branch instructions.  

           -V 
                Print a version message.  

           -l 
           -u 
           -s dir 
                Ignored.  

           -Ln 
                By  default,  no local symbols are placed in the symbol
                table  of  the output. This option instructs jas to put
                all  symbols  into  the  symbol  table  if  n  is  2 or
                greater.  If  the  option '-L1' is given, symbols whose
                name  doesn't  start with 'L' are written to the symbol
                table.  

           -o file 
                Be  default,  the  assembler  replaces  the  '.s'  file
                extension  of the input file with '.o' to form the name
                of  the  output.   This option can be used to write the
                output to any file.  






                                   - 19 -
�

      Sozobon C Compiler                                 User Reference


      8.5 ld         

      Loader 

      8.5.1 Synopsis            


           ld [ -mvnbp ] [ -f file ] [ -o output ] [ -u symbol ] ... file ...


      8.5.2 Description            

      The  ld  command  links  object  modules and libraries to form an
      executable  program.   Both  object  modules and libraries may be
      passed  to  ld  for linking.  Several options may be specified to
      alter the operation of the loader: 

           -m 
                Generate a load map 

           -t 
                Put a symbol table in the output file.  

           -p 
                Make  multiple  passes  over each library until no more
                references  can  be satisfied. If libraries are ordered
                appropriately,  this  option  is not needed and linking
                will be faster.  

           -b 
                This  option can be used when linking large programs to
                reduce  the  amount  of  memory used by the loader. The
                loader  makes  more  disk  accesses when this option is
                used.  

           -f file 
                This  option  is  useful  when  many  files  are  to be
                linked.  The loader reads the file name specified for a
                list  of  object  modules  and  libraries to be linked.
                Names  in  the  file should be separated by white space
                or newlines.  

           -o file 
                By  default, the name of the executable file created is
                based  on  the  first  file  name  given on the command
                line.  An  initial file name of "foobar.o" would result
                in  a program named "foobar.ttp".  This option allows a
                different name to be specified.  

           -u symbol 
                The  given  symbol  is marked as undefined. This can be
                useful  when  linking  from  libraries.  A symbol (e.g.


                                   - 20 -
�

      Sozobon C Compiler                                 User Reference


                _main)  can  be  marked  as  undefined to force loading
                from the library.  

           -v 
                Tells  the  loader to be verbose about what it's doing,
                and print version information.  
















































                                   - 21 -
�

      Sozobon C Compiler                                 User Reference


      8.6 size         

      Prints program sizes 

      8.6.1 Synopsis            


           size [ -oxV ] file ...


      8.6.2 Description            

      The  size command examines object modules or libraries and prints
      information  about  their  size.  By default, for each module (or
      member  of  a  library),  the  size  of  the  text, data, and bss
      sections  are printed in decimal.  The 'o' and 'x' options can be
      used  to  print  the  sizes in octal or hexadecimal respectively.
      If  the  'V'  option  is  given,  the version number of 'size' is
      printed.  



































                                   - 22 -
�

      Sozobon C Compiler                                 User Reference


      8.7 nm         

      Prints symbol tables 

      8.7.1 Synopsis            


           nm [ -g ] file ...


      8.7.2 Description            

      The  nm  command  dumps  the  symbol  table  of all object files,
      libraries  or  executables given on the command line.  If the 'g'
      option  is  given,  only  information  about  global  symbols  is
      printed.  






































                                   - 23 -
�

      Sozobon C Compiler                                 User Reference


      8.8 ar         

      Archive management program 

      8.8.1 Synopsis            


           ar -{drqtpmx}[vcV] afile [ file ... ]


      8.8.2 Description            

      The  ar  command  is used to maintain object module libraries. It
      can  perform  one  of  seven  basic  operations  as selected by a
      command  character.  The operation of the selected command can be
      modified by other option characters that may follow it.  

      The  name  of  the  archive  to be manipulated follows the option
      characters.  Some  commands  also require (or allow) the names of
      files  in  the  archive to follow the archive name on the command
      line.  The following commands are supported.  

           d 
                Delete the named files from the archive.  

           r 
                Replace  the  named files in the archive. New files are
                placed at the end of the archive.  

           q 
                Quickly  append  the  named  files  to  the  end of the
                archive.  

           t 
                Print  the  contents  of the archive. If file names are
                given, only show those files.  

           p 
                Print the named files to the standard output.  

           m 
                Move the named files to the end of the archive.  

           x 
                Extract  the named files from the archive, or all files
                if none were listed on the command line.  

      The  following  characters  modify  the operation of the commands
      described above.  

           v 
                Generally  show  more  information  about  what  ar  is


                                   - 24 -
�

      Sozobon C Compiler                                 User Reference


                doing.   In a table of contents, show information about
                the size, mode, etc.  

           c 
                Suppress  the  message  normally  printed  when  a  new
                archive is created.  

           V 
                Prints version information.  













































                                   - 25 -
�

      Sozobon C Compiler                                 User Reference


      8.9 globs         

      Remove non-global symbols 

      8.9.1 Synopsis            


           globs file ...


      8.9.2 Description            

      The  named  files (object modules or libraries) are compressed by
      removing  non-essential  symbols  from their symbol table.  Since
      the  Sozobon  assembler  does  this  by  default, this program it
      mostly useful to users with old Alcyon libraries.  

      This is no longer included with release 2.0.




































                                   - 26 -
�

      


                              Table of Contents


         1. Introduction        .................................    1

            1.1 System Overview       ...........................    1
               1.1.1 History        .............................    1
               1.1.2 Distribution        ........................    2
               1.1.3 Obtaining the Source Code     ..............    2
               1.1.4 Performance        .........................    3

            1.2 Acknowledgements        .........................    3

            1.3 Support        ..................................    3

         2. Development Environment       .......................    4

            2.1 Environment Variables       .....................    4

            2.2 Machine Dependencies       ......................    5

            2.3 Compiler Limits       ...........................    5

            2.4 Relationship to the Alcyon Compiler    ..........    6

         3. Component Overviews       ...........................    6

            3.1 Compiler        .................................    6

            3.2 Optimizer        ................................    7

            3.3 Assembler        ................................    8

            3.4 Linker        ...................................    8

            3.5 Utilities        ................................    8

            3.6 Library        ..................................    9
               3.6.1 Startup Code       .........................    9
               3.6.2 C Runtime Library      .....................    9
               3.6.3 Floating Point Library      ................    9

         4. Known Shortcomings and Bugs     .....................   11

         5. Next Release Plans      .............................   11

         6. Future Directions       .............................   11

         7. Summary        ......................................   12

         8. Command References       ............................   13



                                    - I -
�

      


            8.1 cc        .......................................   13
               8.1.1 Synopsis        ............................   13
               8.1.2 Description        .........................   13
               8.1.3 Files        ...............................   14

            8.2 hcc        ......................................   16
               8.2.1 Synopsis        ............................   16
               8.2.2 Description        .........................   16

            8.3 top        ......................................   17
               8.3.1 Synopsis        ............................   17
               8.3.2 Description        .........................   17

            8.4 jas        ......................................   19
               8.4.1 Synopsis        ............................   19
               8.4.2 Description        .........................   19

            8.5 ld        .......................................   20
               8.5.1 Synopsis        ............................   20
               8.5.2 Description        .........................   20

            8.6 size        .....................................   22
               8.6.1 Synopsis        ............................   22
               8.6.2 Description        .........................   22

            8.7 nm        .......................................   23
               8.7.1 Synopsis        ............................   23
               8.7.2 Description        .........................   23

            8.8 ar        .......................................   24
               8.8.1 Synopsis        ............................   24
               8.8.2 Description        .........................   24

            8.9 globs        ....................................   26
               8.9.1 Synopsis        ............................   26
               8.9.2 Description        .........................   26


















                                   - II -