XLATE_ADDRESS(3E) XLATE_ADDRESS(3E)
xlate_address - do address translation
#include <elf.h>
#include <libelf.h>
#include <dwarf.h>
#include <libdwarf.h>
#include <cmplrs/xlate.h>
#include <libXlate.h>
int xlate_address(xlate_table_con con_table_ptr,
int is_new_address,
Elf64_Addr address_in,
Elf64_Addr *address_out,
xlate_block *range
);
xlate_address does the address translation needed by tools such as dbx(1)
and dis(1).
If address_in is an address that does not exist in the translation table
the identity translation is returned through the pointers and
XLATE_TB_STATUS_NO_ERROR is returned by the function.
The data structure xlate_block is defined to contain
Elf64_Addr xe_new_address;
Elf64_Xword xe_new_range;
Elf64_Addr xe_old_address;
Elf64_Xword xe_old_range;
This data structure is used for both 32 and 64 bit applications and DSOs.
xlate_address translates an individual address. Its arguments are:
con_table_ptr
must be a valid open translation table handle.
is_new_address
specifies which direction the translation is to be done. If
XLATE_ADDRESS_INPUT_NEW_ADDRESS (1), then the translation is done
from a new (translated) to an old (original, untranslated)
address. If XLATE_ADDRESS_INPUT_OLD_ADDRESS (0), then the
translation is done from an old (original, untranslated text)
address to a new (translated) address. Any value other than 0 or
1 passed in can produce invalid results (the library reserves all
other values for its own internal use).
Page 1
XLATE_ADDRESS(3E) XLATE_ADDRESS(3E)
address_in
is the input address. Addresses must be a multiple of 4. The
library does not check the alignment of the passed-in address.
address_out
is the output address (returned thru the pointer argument). The
output address value will be a multiple of 4.
range must be the NULL pointer (0) or a valid pointer to an xlate_block
structure provided by the caller. If range is 0 then it is
ignored. If range is non-0 then the structure pointed to is
filled in by xlate_address. In the filled-in structure
xe_new_address and xe_range always refer to the new (translated)
text and xe_old_address and xe_old_range always refer to the old
(untranslated) text regardless of the value of is_new_address .
All the xe_* values will be a multiple of 4.
/usr/include/libXlate.h
/usr/include/cmplrs/xlate.h
/usr/include/elf.h
/usr/include/dwarf.h
/usr/include/libdwarf.h
/usr/lib/libelfutil.a
Returns XLATE_TB_STATUS_NO_ERROR (0) on success. In case of error, a
negative number is returned indicating the error. In case of error,
nothing is returned thru the pointer arguments which would return values
on successful call (values might have been changed thru these pointers
but any such changes are not meaningful). Error codes that may be
returned are:
XLATE_TB_STATUS_INVALID_TABLE
means that the tab argument is not a valid open consumer table or
that the data pointed at has been corrupted by a malloc arena
corruption.
XLATE_TB_STATUS_BAD_BLOCK_INDEX
indicates that the library has somehow made an internal error
(should not happen unless a portion of memory was corrupted).
XLATE_TB_STATUS_NOT_YET_IMPLEMENT
means that a table kind that was thought not to exist has been
encountered. This should be impossible since it should have been
caught by a table initialization call (xlate_init_fd or
xlate_init_elf). Suggests that there was a memory corruption or
internal library logic error.
Page 2
XLATE_ADDRESS(3E) XLATE_ADDRESS(3E)
SEE ALSO
libelfutil(5), xlate(4), xlate_init_fd(3e), xlate_init_elf(3e),
xlate_finish(3e), xlate_pro_init(3e), xlate_pro_finish(3e)
PPPPaaaaggggeeee 3333 [ Back ]
|