summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAaron Merey <[email protected]>2025-06-02 21:22:45 -0400
committerAaron Merey <[email protected]>2025-06-06 14:09:42 -0400
commit3cc287a29294bec86380a93020de71d8e8c636ac (patch)
treea411249d4698f9d57c3bad0288936fe9608bfc2d
parent7857383e2e9e7f87c447562263a567e24d0718c1 (diff)
doc: Update elf_begin.3
Signed-off-by: Aaron Merey <[email protected]>
-rw-r--r--doc/elf_begin.3124
1 files changed, 99 insertions, 25 deletions
diff --git a/doc/elf_begin.3 b/doc/elf_begin.3
index 6a1d0c27..d753a2d3 100644
--- a/doc/elf_begin.3
+++ b/doc/elf_begin.3
@@ -1,37 +1,111 @@
-.\" Modified Thu Sep 5 2017 by Ben Woodard <[email protected]>
-.\"
-.TH ELF_BEGIN 3 2017-09-05 "Libelf" "Libelf Programmer's Manual"
+.TH ELF_BEGIN 3 2025-06-02 "Libelf" "Libelf Programmer's Manual"
+
.SH NAME
-elf_begin \- Return descriptor for ELF file.
-.nf
+elf_begin \- initialize an ELF descriptor
.SH SYNOPSIS
-.B #include <libelf.h>
-.sp
-.BI "Elf *elf_begin (int " filedes ", Elf_Cmd " cmd ", Elf *" ref ");"
-.BI "Elf *elf_clone (int " filedes ", Elf_Cmd " cmd ");"
-.BI "int elf_end (Elf *" elf ");"
+.nf
+#include <libelf.h>
+
+Elf *elf_begin(int fildes, Elf_Cmd cmd, Elf *ref);
.fi
.SH DESCRIPTION
-The
-.BR elf_begin ()
+Initialize and return a handle to an ELF file for use with the elfutils
+\fBlibelf\fP library and related elfutils libraries such as \fBlibdw\fP.
+
+The returned \fBElf\fP descriptor must be released using \fBelf_end(3)\fP.
+
+\fBelf_version(3)\fP must be called before using any \fBlibelf\fP library
+including \fBelf_begin(3)\fP.
+
+.SH PARAMETERS
+.TP
+\fIfildes\fP
+A file descriptor referring to an ELF object. The descriptor should be open
+for reading, and optionally for writing, depending on the intended operation.
+If \fIref\fP is non-NULL, then \fIfildes\fP must either be -1 or be set to the
+same file descriptor as the one associated with \fIref\fP.
+.TP
+\fIcmd\fP
+Specifies the action to perform. Common values include:
+.RS
+.TP
+\fBELF_C_NULL\fP
+Return a NULL pointer instead of initializing an ELF descriptor. Ignores
+\fIref\fP.
+.TP
+\fBELF_C_READ\fP
+Open an ELF descriptor for reading.
+.TP
+\fBELF_C_WRITE\fP
+Open an ELF descriptor for writing. The descriptor initially refers to an
+empty file.
+.TP
+\fBELF_C_RDWR\fP
+Open an ELF descriptor for reading and writing.
+.TP
+\fBELF_C_READ_MMAP\fP
+Open an ELF descriptor for reading using mmap, if available. The
+\fBELF_C_*_MMAP\fP commands are an elfutils libelf extension and may not be
+available in other libelf implementations. Once the mmap size is set attempts
+to extend the size may fail. Therefore, \fBELF_C_*_MMAP\fP commands tend to be
+more useful for in-place modifications or removal of data from an ELF
+descriptor.
+.TP
+\fBELF_C_WRITE_MMAP\fP
+Open an ELF descriptor for writing using mmap, if available. The descriptor
+initially refers to an empty file.
+.TP
+\fBELF_C_RDWR_MMAP\fP
+Open an ELF descriptor for reading and writing using mmap, if available.
+.TP
+\fBELF_C_READ_MMAP_PRIVATE\fP
+Open an ELF descriptor for reading using mmap, if available. This command
+invokes mmap with MAP_PRIVATE whereas the other \fBELF_C_*_MMAP\fP commands
+invoke mmap with MAP_SHARED. See \fBmmap(2)\fP for more information.
+.RE
+.TP
+\fIref\fP
+A reference to an existing Elf descriptor. If \fIref\fP refers to regular
+ELF binary (not an AR file), then \fBelf_begin\fP will duplicate \fIref\fP.
+The reference count associated with \fIref\fP will be incremented and
+\fBelf_end(3)\fP will need to be called an additional time to deallocate
+\fIref\fP. \fIref\fP must have been opened with read/write permissions
+consistent with \fIcmd\fP.
+
+If \fIref\fP refers to an AR file, then the ELF descriptor returned will be
+the first available object member of the archive (see \fBelf_next(3)\fP for
+more information).
+
+\fIref\fP may be NULL, in which case this argument is ignored.
+
.SH RETURN VALUE
-.SH ERRORS
-elf_begin ELF_E_NO_VERSION ELF_E_INVALID_FILE ELF_E_INVALID_CMD ELF_E_NOMEM
-elf_clone ELF_E_NOMEM
-elf_end
+On success, \fBelf_begin()\fP returns a pointer to a new Elf descriptor.
+If \fIcmd\fP is \fBELF_C_NULL\fP then NULL is returned. If \fIref\fP is
+non-NULL and isn't an AR file, then a copy of \fIref\fP is returned. On
+failure, \fBelf_begin()\fP returns NULL and sets an internal error
+state that can be retrieved with \fBelf_errmsg(3)\fP.
+
+.SH SEE ALSO
+.BR mmap (2),
+.BR elf_clone (3),
+.BR elf_end (3),
+.BR elf_next (3),
+.BR elf_rand (3),
+.BR libelf (3),
+.BR elf (5)
+
.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
.TS
allbox;
-lbw29 lb lb
+lbx lb lb
l l l.
-Interface Attribute Value
+Interface Attribute Value
T{
-.BR elf_begin (),
-.BR elf_clone (),
-.BR elf_end ()
-T} Thread safety MT-Safe
+.na
+.nh
+.BR elf_begin ()
+T} Thread safety MT-Safe
.TE
-.SH SEE ALSO
+.SH REPORTING BUGS
+Report bugs to <[email protected]> or https://sourceware.org/bugzilla/.