Collect dynamic symbols from patch
This commit is contained in:
@@ -1,20 +1,52 @@
|
||||
#ifndef SYMBOLS_H_
|
||||
#define SYMBOLS_H_
|
||||
|
||||
#include "memory.h"
|
||||
#include "array/array.h"
|
||||
#include "array/sc_array.h"
|
||||
#include "types.h"
|
||||
|
||||
#include <link.h>
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
typedef enum {
|
||||
HI_SYMBOL_BIND_LOCAL,
|
||||
HI_SYMBOL_BIND_GLOBAL,
|
||||
HI_SYMBOL_BIND_WEAK,
|
||||
} HiSymbolBind;
|
||||
|
||||
typedef struct {
|
||||
struct sc_array_str names;
|
||||
struct sc_array_ptr addresses;
|
||||
} SymbolInfos;
|
||||
typedef enum {
|
||||
HI_SYMBOL_TYPE_NOTYPE,
|
||||
HI_SYMBOL_TYPE_OBJECT,
|
||||
HI_SYMBOL_TYPE_FUNC,
|
||||
HI_SYMBOL_TYPE_SECTION,
|
||||
HI_SYMBOL_TYPE_FILE,
|
||||
HI_SYMBOL_TYPE_COMMON,
|
||||
HI_SYMBOL_TYPE_TLS,
|
||||
} HiSymbolType;
|
||||
|
||||
sc_array_def(SymbolInfos, syms);
|
||||
typedef struct HiSymbol {
|
||||
const char *name;
|
||||
HiSymbolBind binding;
|
||||
HiSymbolType type;
|
||||
void *address;
|
||||
} HiSymbol;
|
||||
sc_array_def(HiSymbol, sym);
|
||||
typedef struct sc_array_sym HiSymbols;
|
||||
|
||||
void hi_free_symbol_info(SymbolInfos *);
|
||||
static inline void symbol_free(HiSymbol *symbol) { free((char *)symbol->name); }
|
||||
|
||||
static inline void symbol_init_symbols(HiSymbols *symbols) {
|
||||
sc_array_init(symbols);
|
||||
}
|
||||
static inline void symbol_clear_symbols(HiSymbols *symbols) {
|
||||
for (size_t i = 0; i < sc_array_size(symbols); ++i) {
|
||||
symbol_free(&sc_array_at(symbols, i));
|
||||
}
|
||||
sc_array_clear(symbols);
|
||||
}
|
||||
|
||||
static inline void symbol_term_symbols(HiSymbols *symbols) {
|
||||
symbol_clear_symbols(symbols);
|
||||
sc_array_term(symbols);
|
||||
}
|
||||
|
||||
HiSymbolBind symbol_bind_from_efi(u32 efi_bind);
|
||||
HiSymbolType symbol_type_from_efi(u32 efi_type);
|
||||
#endif // SYMBOLS_H_
|
||||
|
||||
Reference in New Issue
Block a user