/ external / libelf / gelf_xlatetof.3
gelf_xlatetof.3
  1  .\" Copyright (c) 2006,2008 Joseph Koshy.  All rights reserved.
  2  .\"
  3  .\" Redistribution and use in source and binary forms, with or without
  4  .\" modification, are permitted provided that the following conditions
  5  .\" are met:
  6  .\" 1. Redistributions of source code must retain the above copyright
  7  .\"    notice, this list of conditions and the following disclaimer.
  8  .\" 2. Redistributions in binary form must reproduce the above copyright
  9  .\"    notice, this list of conditions and the following disclaimer in the
 10  .\"    documentation and/or other materials provided with the distribution.
 11  .\"
 12  .\" This software is provided by Joseph Koshy ``as is'' and
 13  .\" any express or implied warranties, including, but not limited to, the
 14  .\" implied warranties of merchantability and fitness for a particular purpose
 15  .\" are disclaimed.  in no event shall Joseph Koshy be liable
 16  .\" for any direct, indirect, incidental, special, exemplary, or consequential
 17  .\" damages (including, but not limited to, procurement of substitute goods
 18  .\" or services; loss of use, data, or profits; or business interruption)
 19  .\" however caused and on any theory of liability, whether in contract, strict
 20  .\" liability, or tort (including negligence or otherwise) arising in any way
 21  .\" out of the use of this software, even if advised of the possibility of
 22  .\" such damage.
 23  .\"
 24  .\" $Id$
 25  .\"
 26  .Dd July 24, 2006
 27  .Os
 28  .Dt GELF_XLATETOF 3
 29  .Sh NAME
 30  .Nm elf32_xlate ,
 31  .Nm elf64_xlate ,
 32  .Nm gelf_xlate
 33  .Nd translate data between files and memory
 34  .Sh LIBRARY
 35  .Lb libelf
 36  .Sh SYNOPSIS
 37  .In libelf.h
 38  .Ft "Elf_Data *"
 39  .Fn elf32_xlatetof "Elf_Data *dst" "Elf_Data *src" "unsigned int encode"
 40  .Ft "Elf_Data *"
 41  .Fn elf32_xlatetom "Elf_Data *dst" "Elf_Data *src" "unsigned int encode"
 42  .Ft "Elf_Data *"
 43  .Fn elf64_xlatetof "Elf_Data *dst" "Elf_Data *src" "unsigned int encode"
 44  .Ft "Elf_Data *"
 45  .Fn elf64_xlatetom "Elf_Data *dst" "Elf_Data *src" "unsigned int encode"
 46  .In gelf.h
 47  .Ft "Elf_Data *"
 48  .Fo gelf_xlatetof
 49  .Fa "Elf *elf"
 50  .Fa "Elf_Data *dst"
 51  .Fa "Elf_Data *src"
 52  .Fa "unsigned int encode"
 53  .Fc
 54  .Ft "Elf_Data *"
 55  .Fo gelf_xlatetom
 56  .Fa "Elf *elf"
 57  .Fa "Elf_Data *dst"
 58  .Fa "Elf_Data *src"
 59  .Fa "unsigned int encode"
 60  .Fc
 61  .Sh DESCRIPTION
 62  These functions translate between the file and memory representations
 63  of ELF data structures.
 64  The in-memory representation of an ELF data structure would confirm to
 65  the byte ordering and data alignment restrictions dictated by the host
 66  processor.
 67  A file representation of the same data structure could use a non-native byte
 68  ordering and in addition may be laid out differently with the file.
 69  .Pp
 70  Functions
 71  .Fn elf32_xlatetom ,
 72  .Fn elf64_xlatetom ,
 73  and
 74  .Fn gelf_xlatetom
 75  translate data from file representations to native, in-memory representations.
 76  Functions
 77  .Fn elf32_xlatetof ,
 78  .Fn elf64_xlatetof ,
 79  and
 80  .Fn gelf_xlatetof
 81  translate data from in-memory representations to file representations.
 82  .Pp
 83  Argument
 84  .Ar src
 85  denotes an
 86  .Vt Elf_Data
 87  descriptor describing the source to be translated.
 88  The following elements of the descriptor need to be set before
 89  invoking these functions:
 90  .Bl -hang -offset indent
 91  .It Va d_buf
 92  Set to a valid pointer value denoting the beginning of the data area
 93  to be translated.
 94  .It Va d_size
 95  Set to the total size in bytes of the source data area to be
 96  translated.
 97  .It Va d_type
 98  Set to the type of the source data being translated.
 99  This value is one of the values defined in the
100  .Vt Elf_Type
101  enumeration.
102  The
103  .Vt Elf_Type
104  enumeration is described in
105  .Xr elf 3 .
106  .It Va d_version
107  Set to the version number of the ELF data structures being
108  translated.
109  Currently only version
110  .Dv EV_CURRENT
111  is supported.
112  .El
113  .Pp
114  Argument
115  .Ar dst
116  describes the destination buffer.
117  The following elements of the
118  .Vt Elf_Data
119  descriptor need to be set before invoking these functions:
120  .Bl -hang -offset indent
121  .It Va d_buf
122  Set to a valid pointer value that denotes the start of the destination
123  buffer that will hold translated data.
124  This value may be the same as that of the source buffer, in which case
125  an in-place conversion will be attempted.
126  .It Va d_size
127  Set to the size of the destination buffer in bytes.
128  This value will be modified if the function call succeeds.
129  .It Va d_version
130  Set to the desired version number of the destination.
131  Currently only version
132  .Dv EV_CURRENT
133  is supported.
134  .El
135  .Pp
136  These translations routines allow the source and destination buffers
137  to coincide, in which case an in-place translation will be done
138  if the destination is large enough to hold the translated data.
139  Other kinds of overlap between the source and destination buffers
140  are not permitted.
141  .Pp
142  On successful completion of the translation request the following
143  fields of the
144  .Ar dst
145  descriptor would be modified:
146  .Bl -hang -offset indent
147  .It Va d_size
148  Set to the size in bytes of the translated data.
149  .It Va d_type
150  Set to the
151  .Va d_type
152  value of the source data descriptor.
153  .El
154  .Pp
155  Argument
156  .Ar encode
157  specifies the encoding in which the file objects are represented.
158  It must be one of:
159  .Bl -hang -offset indent
160  .It Dv ELFDATANONE
161  File objects use the library's native byte ordering.
162  .It Dv ELFDATA2LSB
163  File objects use a little-endian ordering.
164  .It Dv ELFDATA2MSB
165  File objects use a big-endian ordering.
166  .El
167  .Pp
168  The functions
169  .Fn gelf_xlatetof
170  and
171  .Fn gelf_xlatetom
172  select the appropriate 32 or 64 bit translations based on the class of argument
173  .Ar elf .
174  .Sh RETURN VALUES
175  These functions return argument
176  .Ar dst
177  if successful, or NULL in case of an error.
178  .Sh EXAMPLES
179  TODO
180  .Sh ERRORS
181  These functions may fail with the following errors:
182  .Bl -tag -width "[ELF_E_RESOURCE]"
183  .It Bq Er ELF_E_ARGUMENT
184  One of arguments
185  .Ar src ,
186  .Ar dst
187  or
188  .Ar elf
189  was NULL.
190  .It Bq Er ELF_E_ARGUMENT
191  Arguments
192  .Ar src
193  and
194  .Ar dst
195  were equal.
196  .It Bq Er ELF_E_ARGUMENT
197  The desired encoding parameter was not one of
198  .Dv ELFDATANONE ,
199  .Dv ELFDATA2LSB
200  or
201  .Dv ELFDATA2MSB .
202  .It Bq Er ELF_E_ARGUMENT
203  The
204  .Ar d_type
205  field of argument
206  .Ar src
207  specified an unsupported type.
208  .It Bq Er ELF_E_DATA
209  The
210  .Ar src
211  argument specified a buffer size that was not an integral multiple of
212  its underlying type.
213  .It Bq Er ELF_E_DATA
214  The
215  .Ar dst
216  argument specified a buffer size that was too small.
217  .It Bq Er ELF_E_DATA
218  Argument
219  .Ar dst
220  specified a destination buffer that overlaps with the source
221  buffer.
222  .It Bq Er ELF_E_DATA
223  The destination buffer for a conversion to memory had an alignment
224  inappropriate for the underlying ELF type.
225  .It Bq Er ELF_E_DATA
226  The source buffer for a conversion to file had an alignment
227  inappropriate for the underlying ELF type.
228  .It Bq Er ELF_E_UNIMPL
229  The version numbers for arguments
230  .Ar dst
231  and
232  .Ar src
233  were not identical.
234  .It Bq Er ELF_E_UNIMPL
235  The argument
236  .Ar src
237  requested conversion for a type which is not currently
238  supported.
239  .It Bq Er ELF_E_VERSION
240  Argument
241  .Ar src
242  specified an unsupported version number.
243  .El
244  .Sh SEE ALSO
245  .Xr elf 3 ,
246  .Xr elf_getdata 3 ,
247  .Xr gelf 3