minix/external/bsd/libelf/dist/elf_getdata.3

217 lines
5.6 KiB
Groff
Raw Normal View History

.\" $NetBSD: elf_getdata.3,v 1.3 2010/01/29 10:49:07 wiz Exp $
.\"
.\" Copyright (c) 2006,2008 Joseph Koshy. All rights reserved.
2011-05-21 19:11:59 +02:00
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\"
.\" This software is provided by Joseph Koshy ``as is'' and
.\" any express or implied warranties, including, but not limited to, the
.\" implied warranties of merchantability and fitness for a particular purpose
.\" are disclaimed. in no event shall Joseph Koshy be liable
.\" for any direct, indirect, incidental, special, exemplary, or consequential
.\" damages (including, but not limited to, procurement of substitute goods
.\" or services; loss of use, data, or profits; or business interruption)
.\" however caused and on any theory of liability, whether in contract, strict
.\" liability, or tort (including negligence or otherwise) arising in any way
.\" out of the use of this software, even if advised of the possibility of
.\" such damage.
.\"
.\" $FreeBSD: src/lib/libelf/elf_getdata.3,v 1.2.10.1.2.1 2009/10/25 01:10:29 kensmith Exp $
2011-05-21 19:11:59 +02:00
.\"
.Dd April 7, 2008
2011-05-21 19:11:59 +02:00
.Os
.Dt ELF_GETDATA 3
.Sh NAME
.Nm elf_getdata ,
.Nm elf_newdata ,
.Nm elf_rawdata
.Nd iterate through or allocate section data
.Sh LIBRARY
.Lb libelf
.Sh SYNOPSIS
.In libelf.h
.Ft "Elf_Data *"
.Fn elf_getdata "Elf_Scn *scn" "Elf_Data *data"
.Ft "Elf_Data *"
.Fn elf_newdata "Elf_Scn *scn"
.Ft "Elf_Data *"
.Fn elf_rawdata "Elf_Scn *scn" "Elf_Data *data"
.Sh DESCRIPTION
These functions are used to access and manipulate data descriptors
associated with section descriptors.
Data descriptors used by the ELF library are described in
.Xr elf 3 .
.Pp
Function
.Fn elf_getdata
will return the next data descriptor associated with section descriptor
.Ar scn .
The returned data descriptor will be setup to contain translated data.
Argument
.Ar data
may be
.Dv NULL ,
in which case the function returns the first data descriptor
2011-05-21 19:11:59 +02:00
associated with section
.Ar scn .
If argument
.Ar data
is not
.Dv NULL ,
it must be a pointer to a data descriptor associated with
2011-05-21 19:11:59 +02:00
section descriptor
.Ar scn ,
and function
.Fn elf_getdata
will return a pointer to the next data descriptor for the section,
or
.Dv NULL
when the end of the section's descriptor list is reached.
2011-05-21 19:11:59 +02:00
.Pp
Function
.Fn elf_newdata
will allocate a new data descriptor and append it to the list of data
descriptors associated with section descriptor
.Ar scn .
The new data descriptor will be initialized as follows:
.Bl -tag -width "d_version" -compact -offset indent
.It Va d_align
Set to 1.
.It Va d_buf
Initialized to
.Dv NULL .
2011-05-21 19:11:59 +02:00
.It Va d_off
Set to (off_t) -1.
This field is under application control if the
.Dv ELF_F_LAYOUT
flag was set on the ELF descriptor.
.It Va d_size
Set to zero.
.It Va d_type
Initialized to
.Dv ELF_T_BYTE .
.It Va d_version
Set to the current working version of the library, as set by
.Xr elf_version 3 .
.El
The application must set these values as appropriate before
calling
.Xr elf_update 3 .
Section
.Ar scn
must be associated with an ELF file opened for writing.
If the application has not requested full control of layout by
setting the
.Dv ELF_F_LAYOUT
flag on descriptor
.Ar elf ,
then the data referenced by the returned descriptor will be positioned
after the existing content of the section, honoring the file alignment
specified in member
.Va d_align .
On successful completion of a call to
.Fn elf_newdata ,
the ELF library will mark the section
.Ar scn
as
.Dq dirty .
.Pp
Function
.Fn elf_rawdata
is used to step through the data descriptors associated with
section
.Ar scn .
In contrast to function
.Fn elf_getdata ,
this function returns untranslated data.
If argument
.Ar data
is
.Dv NULL ,
the first data descriptor associated with section
2011-05-21 19:11:59 +02:00
.Ar scn
is returned.
If argument
.Ar data
is not
.Dv NULL ,
is must be a data descriptor associated with section
2011-05-21 19:11:59 +02:00
.Ar scn ,
and function
.Fn elf_rawdata
will return the next data descriptor in the list, or
.Dv NULL
2011-05-21 19:11:59 +02:00
if no further descriptors are present.
Function
.Fn elf_rawdata
always returns
.Vt Elf_Data
structures of type
.Dv ELF_T_BYTE .
.Ss Special handling of SHT_NOBITS sections
2011-05-21 19:11:59 +02:00
For sections of type
.Dv SHT_NOBITS ,
2011-05-21 19:11:59 +02:00
the functions
.Fn elf_getdata
and
.Fn elf_rawdata
return a pointer to a valid
.Vt Elf_Data
structure that has its
.Va d_buf
member set to
.Dv NULL
and its
2011-05-21 19:11:59 +02:00
.Va d_size
member set to the size of the section.
.Pp
If an application wishes to create a section of type
.Dv SHT_NOBITS ,
it should add a data buffer to the section using function
.Fn elf_newdata .
It should then set the
.Va d_buf
and
.Va d_size
members of the returned
.Vt Elf_Data
structure to
.Dv NULL
and the desired size of the section respectively.
2011-05-21 19:11:59 +02:00
.Sh RETURN VALUES
These functions return a valid pointer to a data descriptor if successful, or
.Dv NULL
if an error occurs.
2011-05-21 19:11:59 +02:00
.Sh ERRORS
These functions may fail with the following errors:
.Bl -tag -width "[ELF_E_RESOURCE]"
2011-05-21 19:11:59 +02:00
.It Bq Er ELF_E_ARGUMENT
Arguments
2011-05-21 19:11:59 +02:00
.Ar scn
was
.Dv NULL ,
or data descriptor
2011-05-21 19:11:59 +02:00
.Ar data
was not associated with section descriptor
2011-05-21 19:11:59 +02:00
.Ar scn .
.It Bq Er ELF_E_RESOURCE
An out of memory condition was detected.
.El
.Sh SEE ALSO
.Xr elf 3 ,
.Xr elf_flagdata 3 ,
.Xr elf_flagscn 3 ,
.Xr elf_getscn 3 ,
.Xr elf_getshdr 3 ,
.Xr elf_newscn 3 ,
.Xr elf_update 3 ,
.Xr elf_version 3 ,
.Xr gelf 3