|
PatchworkOS
28a9544
A non-POSIX operating system.
|
#include <kernel/module/symbol.h>#include <kernel/log/log.h>#include <kernel/log/panic.h>#include <kernel/sync/rwlock.h>#include <errno.h>#include <stdint.h>#include <stdlib.h>#include <string.h>#include <sys/list.h>#include <sys/proc.h>Go to the source code of this file.
Functions | |
| symbol_group_id_t | symbol_generate_group_id (void) |
| Generate a unique symbol group identifier. | |
| static uint64_t | symbol_get_floor_index_for_addr (void *addr) |
| static symbol_addr_t * | symbol_insert_address (void *addr, symbol_group_id_t groupId, Elf64_Symbol_Binding binding, Elf64_Symbol_Type type, symbol_name_t *symbolName) |
| static uint64_t | symbol_resolve_addr_unlocked (symbol_info_t *outSymbol, void *addr) |
| static uint64_t | symbol_resolve_name_unlocked (symbol_info_t *outSymbol, const char *name) |
| uint64_t | symbol_add (const char *name, void *addr, symbol_group_id_t groupId, Elf64_Symbol_Binding binding, Elf64_Symbol_Type type) |
| Add a symbol to the kernel symbol table. | |
| void | symbol_remove_group (symbol_group_id_t groupId) |
| Remove all symbols from the kernel symbol table in the given group. | |
| uint64_t | symbol_resolve_addr (symbol_info_t *outSymbol, void *addr) |
| Resolve a symbol by address. | |
| uint64_t | symbol_resolve_name (symbol_info_t *outSymbol, const char *name) |
| Resolve a symbol by name. | |
Variables | |
| static symbol_addr_t ** | addrArray = NULL |
| static uint64_t | addrAmount = 0 |
| static uint64_t | addrCapacity = 0 |
| static map_t | nameMap = MAP_CREATE |
| static map_t | groupMap = MAP_CREATE |
| static rwlock_t | lock = RWLOCK_CREATE |
|
static |
Definition at line 31 of file symbol.c.
References addrAmount, addrArray, and NULL.
Referenced by symbol_resolve_addr_unlocked().
|
static |
Definition at line 59 of file symbol.c.
References symbol_addr_t::addr, addrAmount, addrArray, addrCapacity, symbol_name_t::addrs, symbol_addr_t::binding, symbol_addr_t::groupId, list_entry_init(), list_push_back(), malloc(), memmove_s(), symbol_addr_t::nameEntry, NULL, realloc(), and symbol_addr_t::type.
Referenced by symbol_add().
|
static |
Definition at line 110 of file symbol.c.
References symbol_addr_t::addr, symbol_info_t::addr, addrAmount, addrArray, symbol_addr_t::binding, symbol_info_t::binding, CONTAINER_OF, EINVAL, ENOENT, ERR, errno, symbol_addr_t::groupId, symbol_info_t::groupId, list_entry_t::list, symbol_name_t::name, symbol_info_t::name, symbol_addr_t::nameEntry, NULL, strncpy_s(), symbol_get_floor_index_for_addr(), SYMBOL_MAX_NAME, symbol_addr_t::type, and symbol_info_t::type.
Referenced by symbol_resolve_addr().
|
static |
Definition at line 138 of file symbol.c.
References symbol_addr_t::addr, symbol_info_t::addr, symbol_name_t::addrs, symbol_addr_t::binding, symbol_info_t::binding, CONTAINER_OF, CONTAINER_OF_SAFE, EINVAL, ENOENT, ERR, errno, symbol_addr_t::groupId, symbol_info_t::groupId, list_first(), list_is_empty(), map_get(), map_key_string(), symbol_name_t::name, symbol_info_t::name, nameMap, NULL, strncpy_s(), SYMBOL_MAX_NAME, symbol_addr_t::type, and symbol_info_t::type.
Referenced by symbol_add(), and symbol_resolve_name().
|
static |
Definition at line 15 of file symbol.c.
Referenced by symbol_get_floor_index_for_addr(), symbol_insert_address(), symbol_remove_group(), and symbol_resolve_addr_unlocked().
|
static |
Definition at line 14 of file symbol.c.
Referenced by symbol_get_floor_index_for_addr(), symbol_insert_address(), symbol_remove_group(), and symbol_resolve_addr_unlocked().
|
static |
Definition at line 16 of file symbol.c.
Referenced by symbol_insert_address(), and symbol_remove_group().
|
static |
Definition at line 20 of file symbol.c.
Referenced by symbol_add(), and symbol_remove_group().
|
static |
Definition at line 22 of file symbol.c.
Referenced by symbol_add(), symbol_remove_group(), symbol_resolve_addr(), and symbol_resolve_name().
|
static |
Definition at line 18 of file symbol.c.
Referenced by symbol_add(), symbol_remove_group(), and symbol_resolve_name_unlocked().