Description

elf32_xlatetom() translates various data structures from their 32-bit class file representations to
their memory representations; elf32_xlatetof() provides the inverse. This conversion is particularly important
for cross development environments. src is a pointer to the source buffer
that holds the original data; dst is a pointer to a destination
buffer that will hold the translated copy. encode gives the byte encoding
in which the file objects are to be represented and must have one
of the encoding values defined for the ELF header's e_ident[EI_DATA] entry (see
elf_getident(3ELF)). If the data can be translated, the functions return dst. Otherwise, they
return NULL because an error occurred, such as incompatible types, destination buffer
overflow, etc.

elf_getdata(3ELF) describes the Elf_Data descriptor, which the translation routines use as follows:

d_buf

Both the source and destination must have valid buffer pointers.

d_type

This member's value specifies the type of the data to which d_buf points and the type of data to be created in the destination. The program supplies a d_type value in the source; the library sets the destination's d_type to the same value. These values are summarized below.

d_size

This member holds the total size, in bytes, of the memory occupied by the source data and the size allocated for the destination data. If the destination buffer is not large enough, the routines do not change its original contents. The translation routines reset the destination's d_size member to the actual size required, after the translation occurs. The source and destination sizes may differ.

d_version

This member holds the version number of the objects (desired) in the buffer. The source and destination versions are independent.

Translation routines allow the source and destination buffers to coincide. That is,
dst->d_buf may equal src->d_buf. Other cases where the source and destination buffers
overlap give undefined behavior.