COHERENT manpages

This page displays the COHERENT manpage for coff.h [Format for COFF objects].

List of available manpages
Index


coff.h -- Header File

Format for COFF objects
#include <coff.h>

coff.h describes the Common Object  File Format (COFF), which is the object
format used by COHERENT 386.

What Is COFF?

In brief, COFF is the UNIX  System V standard for file formats.  It defines
the formats  for relocatable object modules, for  executable files, and for
archives.

A COFF file is built around three sections, or segments:

text This  holds executable  machine code.   It is  write protected  -- the
     operating system is forbidden to overwrite it.  (This is why operating
     systems  that  use  COFF  or  similar  formats  are  said  to  run  in
     ``protected mode.'')

data This holds initialized data, that  is, the data that the program finds
     when it  begins execution.  The  program can read and  write into this
     segment.

bss  This segment  holds unitialized  data.  It is  simply a mass  of space
     that  is  initialized  to zeroes.   It  is  contiguous  with the  data
     segment.  The term bss from the old IBM mainframe days, and stands for
     ``block started by symbol''.

Not all  segments have to  be included in  every COFF file.   Further, some
implementations of  COFF define their own  segments that manipulate special
features of the operating system or hardware.

The following describes the structure of a COFF file.  The areas within the
file are described in the order in which they appear.

1. file header
     This holds information set when the file was created, such as the date
     and time it was created, the number of segments in the file, a pointer
     to the symbol table, and status flags.

2. optional header
     This gives  information set  at run-time, such  as the address  of the
     program entry point, and the size of the code and data segments.

3. segment headers
     The  next area  holds a  header for  each segment  in the  file.  Each
     header describes  its segment's characteristics  and contains pointers
     to  the   segment's  contents,  relocation   information,  line-number
     information, and other useful addresses.

4. segment contents
     The next area holds the contents of the segments used in this file.

5. relocation information
     The fifth  area gives relocation  information, one set  of information
     for each segment in the file.   The linker ld uses this information to
     generate the executable file at link time.

6. line-number information
     This area  holds debug  information, one  set of information  for each
     segment.  This area is optional.

7. symbol table
     This area holds information used by both the linker and the debugger.

8. string table
     This table holds very long names of variables.

Most of  this information is  irrelevant to the  average user, or  even the
average developer  of software.  To  the average user, COFF  is ``a machine
that would go of itself''; you can run or compile programs without worrying
what the  linker puts where, or  why.  These details, however,  can be very
important if you are writing  tools that manipulate the internals of files,
such as  archivers or debuggers.  If you need  detailed information on COFF
and  how  to manipulate  it,  see Understanding  and  Using COFF  (citation
appears below).

For more  information on  how the  COFF format affects  COHERENT's language
tools, see the Lexicon articles for ar, as, cc, db, and ld.

See Also

ar,
as,
cc,
cdmp,
coffnlist(),
file formats,
header files,
ld
Gircys, G.R.:  Understanding and Using COFF.   Sebastopol, Calif., O'Reilly
& Associates, Inc., 1988.