Collect dynamic symbols from patch

This commit is contained in:
2025-04-21 23:55:14 +03:00
parent 26752683a1
commit 57b47cec64
9 changed files with 269 additions and 52 deletions

View File

@@ -1,12 +1,29 @@
#include "symbols.h"
#include <stdlib.h>
#include <elf.h>
void hi_free_symbol_info(SymbolInfos *symbols) {
for (size_t i = 0; i < symbols->names.size; i++) {
free((void *)symbols->names.elems[i]);
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;
}
sc_array_term(&symbols->names);
sc_array_term(&symbols->addresses);
// 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;
}