These names refer neither to routines nor to locations with interesting contents; only their addresses are meaningful.
The address of _etext is the first location after the program text.
The address of _edata is the first location after the initialized data region.
The address of _end is the first location after the uninitialized data region.
When execution begins, the program break (the first location beyond the data) coincides with _end , but the program break may be reset by the brk(2) , malloc(3C) , and the standard input/output library (see stdio(3C) ), functions by the profile (-p ) option of cc(1B) , and so on. Thus, the current value of the program break should be determined by sbrk ((char *)0) .
References to end , etext , and edata , without a preceding underscore will be aliased to the associated symbol that begins with the underscore.