    END(III)                     4/28/75                     END(III)

    NAME
         end, etext, edata - last locations in program

    SYNOPSIS
         extern    end;
         extern    etext;
         extern    edata;

    DESCRIPTION
         These  names refer neither to routines nor to locations with
         interesting contents.   Instead,  their  addresses  coincide
         with  the  first  address  above  the  program  text  region
         (etext), above  the  initialized  data  region  (edata),  or
         uninitialized  data  region  (end).  The last is the same as
         the program break.  Values are given to these symbols by the
         link editor ld(I) when, and only when, they are referred to
         but not defined in the set of programs loaded.

         The usage of these symbols is rather  specialized,  but  one
         plausible possibility is

              extern end;
              ...
              ... = brk(&end+...);

         (see  break(II)).  The problem with this is that it ignores
         any other subroutines which may  want  to  extend  core  for
         their  purposes;  these include sbrk (see break(II)), alloc
         (III), and also secret subroutines invoked  by  the  profile
         (-p) option of cc.  Of course it was for the benefit of such
         systems that the symbols were invented, and  user  programs,
         unless  they  are  in firm control of their environment, are
         wise not to refer to the absolute symbols directly.

         One technique sometimes useful is to call sbrk(0), which re-
         turns the value of the current program break, instead of re-
         ferring to &end, which yields the program break at  the  in-
         stant execution started.

         These symbols are accessible from assembly language if it is
         remembered that they should be prefixed by `_'

    SEE ALSO
         break(II), alloc(III)

    BUGS

                                  - 1 -