mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-17 10:26:15 +00:00
742fe6de5d
elf{32,64}_xlateto[fm]() translation functions. This change makes our libelf compatible with other ELF(3) implementations. [1] - Update manual page to reflect this change. - Style fixes: wrap a long line. Submitted by: jb [1]
248 lines
6.7 KiB
Groff
248 lines
6.7 KiB
Groff
.\" Copyright (c) 2006 Joseph Koshy. All rights reserved.
|
|
.\"
|
|
.\" 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$
|
|
.\"
|
|
.Dd July 24, 2006
|
|
.Os
|
|
.Dt GELF_XLATETOF 3
|
|
.Sh NAME
|
|
.Nm elf32_xlate ,
|
|
.Nm elf64_xlate ,
|
|
.Nm gelf_xlate
|
|
.Nd translate data between files and memory
|
|
.Sh LIBRARY
|
|
.Lb libelf
|
|
.Sh SYNOPSIS
|
|
.In libelf.h
|
|
.Ft "Elf_Data *"
|
|
.Fn elf32_xlatetof "Elf_Data *dst" "Elf_Data *src" "unsigned int encode"
|
|
.Ft "Elf_Data *"
|
|
.Fn elf32_xlatetom "Elf_Data *dst" "Elf_Data *src" "unsigned int encode"
|
|
.Ft "Elf_Data *"
|
|
.Fn elf64_xlatetof "Elf_Data *dst" "Elf_Data *src" "unsigned int encode"
|
|
.Ft "Elf_Data *"
|
|
.Fn elf64_xlatetom "Elf_Data *dst" "Elf_Data *src" "unsigned int encode"
|
|
.In gelf.h
|
|
.Ft "Elf_Data *"
|
|
.Fo gelf_xlatetof
|
|
.Fa "Elf *elf"
|
|
.Fa "Elf_Data *dst"
|
|
.Fa "Elf_Data *src"
|
|
.Fa "unsigned int encode"
|
|
.Fc
|
|
.Ft "Elf_Data *"
|
|
.Fo gelf_xlatetom
|
|
.Fa "Elf *elf"
|
|
.Fa "Elf_Data *dst"
|
|
.Fa "Elf_Data *src"
|
|
.Fa "unsigned int encode"
|
|
.Fc
|
|
.Sh DESCRIPTION
|
|
These functions translate between the file and memory representations
|
|
of ELF data structures.
|
|
The in-memory representation of an ELF data structure would confirm to
|
|
the byte ordering and data alignment restrictions dictated by the host
|
|
processor.
|
|
A file representation of the same data structure could use a non-native byte
|
|
ordering and in addition may be laid out differently with the file.
|
|
.Pp
|
|
Functions
|
|
.Fn elf32_xlatetom ,
|
|
.Fn elf64_xlatetom ,
|
|
and
|
|
.Fn gelf_xlatetom
|
|
translate data from file representations to native, in-memory representations.
|
|
Functions
|
|
.Fn elf32_xlatetof ,
|
|
.Fn elf64_xlatetof ,
|
|
and
|
|
.Fn gelf_xlatetof
|
|
translate data from in-memory representations to file representations.
|
|
.Pp
|
|
Argument
|
|
.Ar src
|
|
denotes an
|
|
.Vt Elf_Data
|
|
descriptor describing the source to be translated.
|
|
The following elements of the descriptor need to be set before
|
|
invoking these functions:
|
|
.Bl -hang -offset indent
|
|
.It Va d_buf
|
|
Set to a valid pointer value denoting the beginning of the data area
|
|
to be translated.
|
|
.It Va d_size
|
|
Set to the total size in bytes of the source data area to be
|
|
translated.
|
|
.It Va d_type
|
|
Set to the type of the source data being translated.
|
|
This value is one of the values defined in the
|
|
.Vt Elf_Type
|
|
enumeration.
|
|
The
|
|
.Vt Elf_Type
|
|
enumeration is described in
|
|
.Xr elf 3 .
|
|
.It Va d_version
|
|
Set to the version number of the ELF data structures being
|
|
translated.
|
|
Currently only version
|
|
.Dv EV_CURRENT
|
|
is supported.
|
|
.El
|
|
.Pp
|
|
Argument
|
|
.Ar dst
|
|
describes the destination buffer.
|
|
The following elements of the
|
|
.Vt Elf_Data
|
|
descriptor need to be set before invoking these functions:
|
|
.Bl -hang -offset indent
|
|
.It Va d_buf
|
|
Set to a valid pointer value that denotes the start of the destination
|
|
buffer that will hold translated data.
|
|
This value may be the same as that of the source buffer, in which case
|
|
an in-place conversion will be attempted.
|
|
.It Va d_size
|
|
Set to the size of the destination buffer in bytes.
|
|
This value will be modified if the function call succeeds.
|
|
.It Va d_version
|
|
Set to the desired version number of the destination.
|
|
Currently only version
|
|
.Dv EV_CURRENT
|
|
is supported.
|
|
.El
|
|
.Pp
|
|
These translations routines allow the source and destination buffers
|
|
to coincide, in which case an in-place translation will be done
|
|
if the destination is large enough to hold the translated data.
|
|
Other kinds of overlap between the source and destination buffers
|
|
are not permitted.
|
|
.Pp
|
|
On successful completion of the translation request the following
|
|
fields of the
|
|
.Ar dst
|
|
descriptor would be modified:
|
|
.Bl -hang -offset indent
|
|
.It Va d_size
|
|
Set to the size in bytes of the translated data.
|
|
.It Va d_type
|
|
Set to the
|
|
.Va d_type
|
|
value of the source data descriptor.
|
|
.El
|
|
.Pp
|
|
Argument
|
|
.Ar encode
|
|
specifies the encoding in which the file objects are represented.
|
|
It must be one of:
|
|
.Bl -hang -offset indent
|
|
.It Dv ELFDATANONE
|
|
File objects use the library's native byte ordering.
|
|
.It Dv ELFDATA2LSB
|
|
File objects use a little-endian ordering.
|
|
.It Dv ELFDATA2MSB
|
|
File objects use a big-endian ordering.
|
|
.El
|
|
.Pp
|
|
The functions
|
|
.Fn gelf_xlatetof
|
|
and
|
|
.Fn gelf_xlatetom
|
|
select the appropriate 32 or 64 bit translations based on the class of argument
|
|
.Ar elf .
|
|
.Sh RETURN VALUES
|
|
These functions return argument
|
|
.Ar dst
|
|
if successful, or NULL in case of an error.
|
|
.Sh EXAMPLES
|
|
TODO
|
|
.Sh ERRORS
|
|
These functions may fail with the following errors:
|
|
.Bl -tag -width "[ELF_E_RESOURCE]"
|
|
.It Bq Er ELF_E_ARGUMENT
|
|
One of arguments
|
|
.Ar src ,
|
|
.Ar dst
|
|
or
|
|
.Ar elf
|
|
was NULL.
|
|
.It Bq Er ELF_E_ARGUMENT
|
|
Arguments
|
|
.Ar src
|
|
and
|
|
.Ar dst
|
|
were equal.
|
|
.It Bq Er ELF_E_ARGUMENT
|
|
The desired encoding parameter was not one of
|
|
.Dv ELFDATANONE ,
|
|
.Dv ELFDATA2LSB
|
|
or
|
|
.Dv ELFDATA2MSB .
|
|
.It Bq Er ELF_E_ARGUMENT
|
|
The
|
|
.Ar d_type
|
|
field of argument
|
|
.Ar src
|
|
specified an unsupported type.
|
|
.It Bq Er ELF_E_DATA
|
|
The
|
|
.Ar src
|
|
argument specified a buffer size that was not an integral multiple of
|
|
its underlying type.
|
|
.It Bq Er ELF_E_DATA
|
|
The
|
|
.Ar dst
|
|
argument specified a buffer size that was too small.
|
|
.It Bq Er ELF_E_DATA
|
|
Argument
|
|
.Ar dst
|
|
specified a destination buffer that overlaps with the source
|
|
buffer.
|
|
.It Bq Er ELF_E_DATA
|
|
The destination buffer for a conversion to memory had an alignment
|
|
inappropriate for the underlying ELF type.
|
|
.It Bq Er ELF_E_DATA
|
|
The source buffer for a conversion to file had an alignment
|
|
inappropriate for the underlying ELF type.
|
|
.It Bq Er ELF_E_UNIMPL
|
|
The version numbers for arguments
|
|
.Ar dst
|
|
and
|
|
.Ar src
|
|
were not identical.
|
|
.It Bq Er ELF_E_UNIMPL
|
|
The argument
|
|
.Ar src
|
|
requested conversion for a type which is not currently
|
|
supported.
|
|
.It Bq Er ELF_E_VERSION
|
|
Argument
|
|
.Ar src
|
|
specified an unsupported version number.
|
|
.El
|
|
.Sh SEE ALSO
|
|
.Xr elf 3 ,
|
|
.Xr elf_getdata 3 ,
|
|
.Xr gelf 3
|