#include "symbols.h" #include "array/sc_array.h" #include #include HiSymbol *symbol_find(HiSymbols *symbols, HiSymbol *symbol) { size_t namelen = strlen(symbol->name); for (size_t i=0; i < sc_array_size(symbols); ++i) { HiSymbol *s = &sc_array_at(symbols, i); if (strcmp(s->name, symbol->name) == 0) { return s; } } return NULL; } HiSymbolBind symbol_bind_from_efi(u32 efi_bind) { // clang-format off switch (efi_bind) { case STB_LOCAL: return HI_SYMBOL_BIND_LOCAL; case STB_GLOBAL: return HI_SYMBOL_BIND_GLOBAL; case STB_WEAK: return HI_SYMBOL_BIND_WEAK; } // clang-format on return ~0u; } HiSymbolType symbol_type_from_efi(u32 efi_type) { // clang-format off switch (efi_type) { case STT_NOTYPE: return HI_SYMBOL_TYPE_NOTYPE; /* Symbol type is unspecified */ case STT_OBJECT: return HI_SYMBOL_TYPE_OBJECT; /* Symbol is a data object */ case STT_FUNC: return HI_SYMBOL_TYPE_FUNC; /* Symbol is a code object */ case STT_SECTION: return HI_SYMBOL_TYPE_SECTION; /* Symbol associated with a section */ case STT_FILE: return HI_SYMBOL_TYPE_FILE; /* Symbol's name is file name */ case STT_COMMON: return HI_SYMBOL_TYPE_COMMON; /* Symbol is a common data object */ case STT_TLS: return HI_SYMBOL_TYPE_TLS; /* Symbol is thread-local data object*/ } // clang-format on return ~0u; }