Collect dynamic symbols from patch
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user