Changeset View
Changeset View
Standalone View
Standalone View
sys/kern/link_elf_obj.c
Show First 20 Lines • Show All 125 Lines • ▼ Show 20 Lines | |||||
static int link_elf_link_preload(linker_class_t cls, | static int link_elf_link_preload(linker_class_t cls, | ||||
const char *, linker_file_t *); | const char *, linker_file_t *); | ||||
static int link_elf_link_preload_finish(linker_file_t); | static int link_elf_link_preload_finish(linker_file_t); | ||||
static int link_elf_load_file(linker_class_t, const char *, linker_file_t *); | static int link_elf_load_file(linker_class_t, const char *, linker_file_t *); | ||||
static int link_elf_lookup_symbol(linker_file_t, const char *, | static int link_elf_lookup_symbol(linker_file_t, const char *, | ||||
c_linker_sym_t *); | c_linker_sym_t *); | ||||
static int link_elf_lookup_debug_symbol(linker_file_t, const char *, | static int link_elf_lookup_debug_symbol(linker_file_t, const char *, | ||||
c_linker_sym_t *); | c_linker_sym_t *); | ||||
static int link_elf_lookup_debug_symbol_ctf(linker_file_t lf, | |||||
const char *name, c_linker_sym_t *sym, linker_ctf_t *lc); | |||||
static int link_elf_symbol_values(linker_file_t, c_linker_sym_t, | static int link_elf_symbol_values(linker_file_t, c_linker_sym_t, | ||||
linker_symval_t *); | linker_symval_t *); | ||||
static int link_elf_debug_symbol_values(linker_file_t, c_linker_sym_t, | static int link_elf_debug_symbol_values(linker_file_t, c_linker_sym_t, | ||||
linker_symval_t *); | linker_symval_t *); | ||||
static int link_elf_search_symbol(linker_file_t, caddr_t value, | static int link_elf_search_symbol(linker_file_t, caddr_t value, | ||||
c_linker_sym_t *sym, long *diffp); | c_linker_sym_t *sym, long *diffp); | ||||
static void link_elf_unload_file(linker_file_t); | static void link_elf_unload_file(linker_file_t); | ||||
Show All 12 Lines | |||||
#endif | #endif | ||||
static int elf_obj_lookup(linker_file_t lf, Elf_Size symidx, int deps, | static int elf_obj_lookup(linker_file_t lf, Elf_Size symidx, int deps, | ||||
Elf_Addr *); | Elf_Addr *); | ||||
static kobj_method_t link_elf_methods[] = { | static kobj_method_t link_elf_methods[] = { | ||||
KOBJMETHOD(linker_lookup_symbol, link_elf_lookup_symbol), | KOBJMETHOD(linker_lookup_symbol, link_elf_lookup_symbol), | ||||
KOBJMETHOD(linker_lookup_debug_symbol, link_elf_lookup_debug_symbol), | KOBJMETHOD(linker_lookup_debug_symbol, link_elf_lookup_debug_symbol), | ||||
KOBJMETHOD(linker_lookup_debug_symbol_ctf, link_elf_lookup_debug_symbol_ctf), | |||||
KOBJMETHOD(linker_symbol_values, link_elf_symbol_values), | KOBJMETHOD(linker_symbol_values, link_elf_symbol_values), | ||||
KOBJMETHOD(linker_debug_symbol_values, link_elf_debug_symbol_values), | KOBJMETHOD(linker_debug_symbol_values, link_elf_debug_symbol_values), | ||||
KOBJMETHOD(linker_search_symbol, link_elf_search_symbol), | KOBJMETHOD(linker_search_symbol, link_elf_search_symbol), | ||||
KOBJMETHOD(linker_unload, link_elf_unload_file), | KOBJMETHOD(linker_unload, link_elf_unload_file), | ||||
KOBJMETHOD(linker_load_file, link_elf_load_file), | KOBJMETHOD(linker_load_file, link_elf_load_file), | ||||
KOBJMETHOD(linker_link_preload, link_elf_link_preload), | KOBJMETHOD(linker_link_preload, link_elf_link_preload), | ||||
KOBJMETHOD(linker_link_preload_finish, link_elf_link_preload_finish), | KOBJMETHOD(linker_link_preload_finish, link_elf_link_preload_finish), | ||||
KOBJMETHOD(linker_lookup_set, link_elf_lookup_set), | KOBJMETHOD(linker_lookup_set, link_elf_lookup_set), | ||||
KOBJMETHOD(linker_each_function_name, link_elf_each_function_name), | KOBJMETHOD(linker_each_function_name, link_elf_each_function_name), | ||||
KOBJMETHOD(linker_each_function_nameval, link_elf_each_function_nameval), | KOBJMETHOD(linker_each_function_nameval, link_elf_each_function_nameval), | ||||
KOBJMETHOD(linker_ctf_get, link_elf_ctf_get), | KOBJMETHOD(linker_ctf_get, link_elf_ctf_get), | ||||
KOBJMETHOD(linker_ctf_lookup_typename, link_elf_ctf_lookup_typename), | |||||
KOBJMETHOD(linker_symtab_get, link_elf_symtab_get), | KOBJMETHOD(linker_symtab_get, link_elf_symtab_get), | ||||
KOBJMETHOD(linker_strtab_get, link_elf_strtab_get), | KOBJMETHOD(linker_strtab_get, link_elf_strtab_get), | ||||
#ifdef VIMAGE | #ifdef VIMAGE | ||||
KOBJMETHOD(linker_propagate_vnets, link_elf_propagate_vnets), | KOBJMETHOD(linker_propagate_vnets, link_elf_propagate_vnets), | ||||
#endif | #endif | ||||
KOBJMETHOD_END | KOBJMETHOD_END | ||||
}; | }; | ||||
▲ Show 20 Lines • Show All 1,287 Lines • ▼ Show 20 Lines | return (link_elf_lookup_symbol1(lf, name, sym, | ||||
link_elf_obj_leak_locals)); | link_elf_obj_leak_locals)); | ||||
} | } | ||||
static int | static int | ||||
link_elf_lookup_debug_symbol(linker_file_t lf, const char *name, | link_elf_lookup_debug_symbol(linker_file_t lf, const char *name, | ||||
c_linker_sym_t *sym) | c_linker_sym_t *sym) | ||||
{ | { | ||||
return (link_elf_lookup_symbol1(lf, name, sym, true)); | return (link_elf_lookup_symbol1(lf, name, sym, true)); | ||||
} | |||||
static int | |||||
link_elf_lookup_debug_symbol_ctf(linker_file_t lf, const char *name, | |||||
c_linker_sym_t *sym, linker_ctf_t *lc) | |||||
{ | |||||
if (link_elf_lookup_debug_symbol(lf, name, sym)) | |||||
return (ENOENT); | |||||
return (link_elf_ctf_get_ddb(lf, lc)); | |||||
} | } | ||||
static int | static int | ||||
link_elf_symbol_values1(linker_file_t lf, c_linker_sym_t sym, | link_elf_symbol_values1(linker_file_t lf, c_linker_sym_t sym, | ||||
linker_symval_t *symval, bool see_local) | linker_symval_t *symval, bool see_local) | ||||
{ | { | ||||
elf_file_t ef; | elf_file_t ef; | ||||
const Elf_Sym *es; | const Elf_Sym *es; | ||||
▲ Show 20 Lines • Show All 405 Lines • Show Last 20 Lines |