aboutsummaryrefslogtreecommitdiffstats
path: root/man/man3/end.3
diff options
context:
space:
mode:
authorAlejandro Colomar <alx.manpages@gmail.com>2022-09-05 23:03:38 +0200
committerAlejandro Colomar <alx.manpages@gmail.com>2022-09-05 23:03:47 +0200
commit70ac1c4785fc1e158ab2349a962dba2526bf4fbc (patch)
treebff270e2496dd284bccfc1271b43946f5d225224 /man/man3/end.3
parent5423a6f86b2b920a5f3e8cf8d759b513050f2d33 (diff)
downloadman-pages-70ac1c4785fc1e158ab2349a962dba2526bf4fbc.tar.gz
src.mk, All pages: Move man* to man/
The root of the repository is becoming a bit overpopulated and unorganized, due to the recent addition of more mandirs, and more informative and configuration files too. Let's create a specific mandir <man/> that contains the mandirs <man[1-8]*>. Signed-off-by: Alejandro Colomar <alx.manpages@gmail.com>
Diffstat (limited to 'man/man3/end.3')
-rw-r--r--man/man3/end.392
1 files changed, 92 insertions, 0 deletions
diff --git a/man/man3/end.3 b/man/man3/end.3
new file mode 100644
index 0000000000..ca9a5be117
--- /dev/null
+++ b/man/man3/end.3
@@ -0,0 +1,92 @@
+.\" Copyright (c) 2008, Linux Foundation, written by Michael Kerrisk
+.\" <mtk.manpages@gmail.com>
+.\"
+.\" SPDX-License-Identifier: Linux-man-pages-copyleft
+.\"
+.TH END 3 2020-06-09 "Linux man-pages (unreleased)"
+.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 STANDARDS
+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.
+.PP
+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.
+.PP
+At the start of program execution,
+the program break will be somewhere near
+.I &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 EXAMPLES
+When run, the program below produces output such as the following:
+.PP
+.in +4n
+.EX
+.RB "$" " ./a.out"
+First address past:
+ program text (etext) 0x8048568
+ initialized data (edata) 0x804a01c
+ uninitialized data (end) 0x804a024
+.EE
+.in
+.SS Program source
+\&
+.EX
+#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:\en");
+ printf(" program text (etext) %10p\en", &etext);
+ printf(" initialized data (edata) %10p\en", &edata);
+ printf(" uninitialized data (end) %10p\en", &end);
+
+ exit(EXIT_SUCCESS);
+}
+.EE
+.SH SEE ALSO
+.BR objdump (1),
+.BR readelf (1),
+.BR sbrk (2),
+.BR elf (5)