MULTICS TECHNICAL BULLETIN                             MTB-761-00

To:       MTB Distribution

From:     Doug Robinson

Date:     January 5, 1987

Subject:  Multics C Overview

               -----------------------------------

This document  provides and overview  of the C  implementation on
Multics.  It also  serves as a directory to other  MTBs that deal
with specific topics to do with the implementation.

               -----------------------------------

Comments on this MTB should be sent to the author -

     via Multics mail to:

        DRobinson@System-M

     via telephone to:

        ACTC (403) 284-6400

_________________________________________________________________

Multics  project internal documentation;  no to be  reproduced or
distributed outside the Multics project.


Multics C Overview                                     MTB-761-00

                        TABLE OF CONTENTS

Section    Page  Subject
=======    ====  =======

1          1     Introduction
2          2     The Compiler
3          3     The C Execution Environment
4          4     The C Runtime Library
5          4     Hard Core
6          4     The Linkage Editor
7          4     ALM


Multics C Overview                                     MTB-761-00

1.  Introduction

This MTB  introduces the 'cc' command, outlines  the major facets
of  the  C  project,  and  directs  the  reader  to more detailed
information in other documents.

The Multics C compiler was  primarily developed to facilitate the
porting of third party software to Multics.  It is an unfortunate
fact of life  that most computer systems are  very different from
Multics,  which causes  much grief  during almost  any port.   In
order to help users with these problems, the following steps have
been taken:   the linkage- editor  (LE) was developed,  hard core
changes were affected, a C execution environment was built, the C
runtime package was written, and a few changes were made to ALM.

Please  note that  the Multics   C compiler  is to  be considered
third-party software.


MTB-761-00                                     Multics C Overview

2.  The Compiler

Syntax:  cc filename1, ..., filenameN {-control_args}

Function:
   "cc" is the Multics C compiler command.  It accepts as input C
   source  programs and/or  assembled or  compiled programs,  and
   creates one of various output file types.

Arguments:

filename
   Any filename with a suffix of '.c' is taken as a C source file
   and is compiled.  Any filename  suffixed with '.alm' is passed
   to  alm.  Any  filename suffixed   with '.cpp'  is taken  as a
   preprocessor output  file, and is  passed to the  parser.  All
   other filenames are given as input to the linkage editor.

Control arguments:

-brief, -bf
   suppresses printing of messages stating the current pass being
   performed.  (Default)

-definition args, -def args
   specifies  define names  to be   defined or  undefined in  the
   preprocessor.  "args"  is a list of define  names separated by
   commas with no spaces, in the following form:

                -def n,x=2,^y

   In this example, the first argument  specifies that n is to be
   defined as 1 (in the same way as '#define n' would define n to
   1).   The second argument  specifies that x  is to be  given a
   definition of 2,  and the last argument specifes that  y is to
   be undefined in the preprocessor.

-include paths, -incl paths
   specifies the  pathnames of include file  directories in which
   the preprocessor  will look for include  files.  All arguments
   up  to  the  next  control  argument  are  treated  as include
   directory pathnames.

-library paths, -lb paths
   specifies  the pathnames  of library  directories, archives or
   object  files for  the linkage  editor to  use when  resolving
   external  references.  All  arguments up  to the  next control
   argument are treated as include library pathnames.


Multics C Overview                                     MTB-761-00

-long, -lg
   specifies  that a  message  should  be printed  specifying the
   completion  of each  pass of  the compiler  for each specified
   filename.

-output_file pathname, -of pathname
   forces  the  output  to  be  placed  in  the  file  defined by
   pathname.

-stop_after pass, -spaf pass
   specifies  to  cc  to  stop  after  the  specified pass of the
   compiler.
   Valid values for pass are:

  preprocessor, pp  -generates a ".cpp" file which is the output
                     from the preprocessor.
  c                 -generates a ".alm" file which is the alm
                     source file output from the C compiler.
  alm               -generates a ".cob" file which is the
                     intermediate executable file generated from
                     the assembler.  This file is to be used as
                     input to the linkage editor.

3.  The C Execution Environment

The usual  computer upon which C  runs has the typical  'load and
go' style of  operating system.  Multics does not  normally use a
loader,  and  this  causes  some  problems  with  what a software
package  expects  to  happen  during  certain operations.  Please
examine the following MTBs for a complete explanation:

    MTB 691, Execution Environment, by Doug Howe (for information
        on main_).
    MTB 732, Hardcore  Changes, by Doug Howe  (for information on
        the heap manager).


MTB-761-00                                     Multics C Overview

4.  The C Runtime Library

The C runtime library consists of a group of subroutines selected
from those available on System V Unix, which have some meaning on
Multics and do  not conflict too badly with  what already exists.
For  further information,  please read  MTB 689,  Runtime MTB, by
Doug Howe.

5.  Hard Core

Some  of the  features of  'standard C'  cannot be  realized with
standard  Multics.  It was  felt from the  beginning that it  was
necessary  to provide  a 'standard'  environment, so  Multics was
extended.   The  extensions  are  detailed  in  MTB 732, Hardcore
Changes, and MTB 738, List Init Changes, both by Doug Howe.

6.  The Linkage Editor

Most operating systems  require the use of a  'linkage editor' to
resolve external references.  This is  not true of Multics.  This
difference  causes  some  problems  with  compatibility.  Some of
these problems are discussed in the following MTBs:

   MTB 711, Very Large Objects, by Dean Elhard
   MTB 718, Linkage Editor, by Dean Elhard

7.  ALM

Some changes were  required in ALM for C  support.  These changes
are documented in MTB 734, ALM (simple changes), by Rick Gray.