result = 0;
if (i < vec_len (ps.path))
- result = (char *) format (0, "%s/%s%c", ps.path[i], file);
+ result = (char *) format (0, "%s/%s%c", ps.path[i], file, 0);
path_search_free (&ps);
clib_elf_section_bounds_t *b;
/* Section name must begin with CLIB_ELF_SECTION key. */
- if (memcmp (name, section_name_start, section_name_start_len))
+ if (strcmp ((char *) name, section_name_start))
continue;
name += section_name_start_len;
error = clib_elf_parse_file (cem, name, addr);
if (error)
- clib_error_report (error);
+ {
+ /* Don't complain about 'linux-vdso.so.1' */
+ if (!is_main && name[0] != '/' && error->code == ENOENT)
+ clib_error_free (error);
+ else
+ clib_error_report (error);
+ }
if (is_main && name != cem->exec_path)
vec_free (name);
static clib_elf_main_t clib_elf_main;
-void
+__clib_export void
clib_elf_main_init (char *exec_path)
{
clib_elf_main_t *cem = &clib_elf_main;
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 *);
}
}
-u8 *
+__clib_export u8 *
format_clib_elf_symbol_with_address (u8 * s, va_list * args)
{
uword address = va_arg (*args, uword);