248 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			248 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
.\" Copyright (c) 2006,2008 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.
 | 
						|
.\"
 | 
						|
.\" $Id$
 | 
						|
.\"
 | 
						|
.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
 |