| .\" Copyright (c) 2008, Linux Foundation, written by Michael Kerrisk |
| .\" <mtk.manpages@gmail.com> |
| .\" |
| .\" %%%LICENSE_START(VERBATIM) |
| .\" Permission is granted to make and distribute verbatim copies of this |
| .\" manual provided the copyright notice and this permission notice are |
| .\" preserved on all copies. |
| .\" |
| .\" Permission is granted to copy and distribute modified versions of this |
| .\" manual under the conditions for verbatim copying, provided that the |
| .\" entire resulting derived work is distributed under the terms of a |
| .\" permission notice identical to this one |
| .\" |
| .\" Since the Linux kernel and libraries are constantly changing, this |
| .\" manual page may be incorrect or out-of-date. The author(s) assume no |
| .\" responsibility for errors or omissions, or for damages resulting from |
| .\" the use of the information contained herein. The author(s) may not |
| .\" have taken the same level of care in the production of this manual, |
| .\" which is licensed free of charge, as they might when working |
| .\" professionally. |
| .\" |
| .\" Formatted or processed versions of this manual, if unaccompanied by |
| .\" the source, must acknowledge the copyright and authors of this work. |
| .\" %%%LICENSE_END |
| .\" |
| .TH END 3 2008-07-17 "GNU" "Linux Programmer's Manual" |
| .SH NAME |
| etext, edata, end \- end of program segments |
| .SH SYNOPSIS |
| .nf |
| .BI extern " etext" ; |
| .BI extern " edata" ; |
| .BI extern " end" ; |
| .fi |
| .SH DESCRIPTION |
| The addresses of these symbols indicate the end of various program |
| segments: |
| .TP |
| .I etext |
| This is the first address past the end of the text segment |
| (the program code). |
| .TP |
| .I edata |
| This is the first address past the end of the |
| initialized data segment. |
| .TP |
| .I end |
| This is the first address past the end of the |
| uninitialized data segment (also known as the BSS segment). |
| .SH CONFORMING TO |
| Although these symbols have long been provided on most UNIX systems, |
| they are not standardized; use with caution. |
| .SH NOTES |
| The program must explicitly declare these symbols; |
| they are not defined in any header file. |
| |
| On some systems the names of these symbols are preceded by underscores, |
| thus: |
| .IR _etext , |
| .IR _edata , |
| and |
| .IR _end . |
| These symbols are also defined for programs compiled on Linux. |
| |
| At the start of program execution, |
| the program break will be somewhere near |
| .IR &end |
| (perhaps at the start of the following page). |
| However, the break will change as memory is allocated via |
| .BR brk (2) |
| or |
| .BR malloc (3). |
| Use |
| .BR sbrk (2) |
| with an argument of zero to find the current value of the program break. |
| .SH EXAMPLE |
| When run, the program below produces output such as the following: |
| .in +4n |
| .nf |
| |
| .RB "$" " ./a.out" |
| First address past: |
| program text (etext) 0x8048568 |
| initialized data (edata) 0x804a01c |
| uninitialized data (end) 0x804a024 |
| .fi |
| .in |
| .SS Program source |
| \& |
| .nf |
| #include <stdio.h> |
| #include <stdlib.h> |
| |
| extern char etext, edata, end; /* The symbols must have some type, |
| or "gcc \-Wall" complains */ |
| |
| int |
| main(int argc, char *argv[]) |
| { |
| printf("First address past:\\n"); |
| printf(" program text (etext) %10p\\n", &etext); |
| printf(" initialized data (edata) %10p\\n", &edata); |
| printf(" uninitialized data (end) %10p\\n", &end); |
| |
| exit(EXIT_SUCCESS); |
| } |
| .fi |
| .SH SEE ALSO |
| .BR objdump (1), |
| .BR readelf (1), |
| .BR sbrk (2), |
| .BR elf (5) |