#include "unw_nto_internal.h"
#include <limits.h>
#include <stdio.h>
int unw_nto_get_proc_name (unw_addr_space_t as,
unw_word_t ip,
char *buf,
size_t buf_len,
unw_word_t *offp,
void *arg)
{
unw_nto_internal_t *uni = (unw_nto_internal_t *)arg;
char symbol[PATH_MAX] = {0};
size_t symbol_len = sizeof (symbol);
char path[PATH_MAX] = {0};
size_t path_len = sizeof (path);
int ret = -UNW_ENOINFO;
#if UNW_ELF_CLASS == UNW_ELFCLASS64
ret = _Uelf64_get_proc_name (as, uni->pid, ip, symbol, symbol_len, offp);
#elif UNW_ELF_CLASS == UNW_ELFCLASS32
ret = _Uelf32_get_proc_name (as, uni->pid, ip, symbol, symbol_len, offp);
#else
# error no valid ELF class defined
#endif
if (ret >= 0)
{
snprintf (buf, buf_len, "%s", symbol);
}
else if (path[0] != '\0')
{
snprintf (buf, buf_len, "%s:?????", path);
}
return ret;
}
int unw_nto_get_proc_ip_range (unw_addr_space_t as,
unw_word_t ip,
unw_word_t *start,
unw_word_t *end,
void *arg)
{
unw_nto_internal_t *uni = (unw_nto_internal_t *)arg;
int ret = -UNW_ENOINFO;
#if UNW_ELF_CLASS == UNW_ELFCLASS64
ret = _Uelf64_get_proc_ip_range (as, uni->pid, ip, start, end);
#elif UNW_ELF_CLASS == UNW_ELFCLASS32
ret = _Uelf32_get_proc_ip_range (as, uni->pid, ip, start, end);
#else
# error no valid ELF class defined
#endif
return ret;
}