diff options
Diffstat (limited to 'src/vppinfra')
-rw-r--r-- | src/vppinfra/elf_clib.c | 25 | ||||
-rw-r--r-- | src/vppinfra/elf_clib.h | 2 |
2 files changed, 21 insertions, 6 deletions
diff --git a/src/vppinfra/elf_clib.c b/src/vppinfra/elf_clib.c index d2865f800e3..d4d511e0fba 100644 --- a/src/vppinfra/elf_clib.c +++ b/src/vppinfra/elf_clib.c @@ -319,20 +319,33 @@ symbol_by_address_or_name (char *by_name, return 0; } -uword -clib_elf_symbol_by_name (char *by_name, clib_elf_symbol_t * s) +__clib_export uword +clib_elf_symbol_by_name (char *by_name, clib_elf_symbol_t *s) { return symbol_by_address_or_name (by_name, /* by_address */ 0, s); } -uword -clib_elf_symbol_by_address (uword by_address, clib_elf_symbol_t * s) +__clib_export uword +clib_elf_symbol_by_address (uword by_address, clib_elf_symbol_t *s) { return symbol_by_address_or_name ( /* by_name */ 0, by_address, s); } -u8 * -format_clib_elf_symbol (u8 * s, va_list * args) +__clib_export const char * +clib_elf_symbol_name (clib_elf_symbol_t *s) +{ + clib_elf_main_t *cem = &clib_elf_main; + elf_main_t *em; + elf_symbol_table_t *t; + + em = vec_elt_at_index (cem->elf_mains, s->elf_main_index); + t = vec_elt_at_index (em->symbol_tables, s->symbol_table_index); + + return (const char *) elf_symbol_name (t, &s->symbol); +} + +__clib_export u8 * +format_clib_elf_symbol (u8 *s, va_list *args) { clib_elf_main_t *cem = &clib_elf_main; clib_elf_symbol_t *sym = va_arg (*args, clib_elf_symbol_t *); diff --git a/src/vppinfra/elf_clib.h b/src/vppinfra/elf_clib.h index 25b928c22a5..4e5d4d72165 100644 --- a/src/vppinfra/elf_clib.h +++ b/src/vppinfra/elf_clib.h @@ -131,6 +131,8 @@ typedef struct uword clib_elf_symbol_by_name (char *name, clib_elf_symbol_t * result); uword clib_elf_symbol_by_address (uword address, clib_elf_symbol_t * result); +const char *clib_elf_symbol_name (clib_elf_symbol_t *result); + format_function_t format_clib_elf_symbol, format_clib_elf_symbol_with_address; #endif /* included_clib_elf_self_h */ |