cosmopolitan/libc/runtime/symbols.internal.h

40 lines
926 B
C

#ifndef COSMOPOLITAN_LIBC_SYMBOLS_H_
#define COSMOPOLITAN_LIBC_SYMBOLS_H_
#include "libc/elf/elf.h"
#include "libc/runtime/ezmap.internal.h"
#if !(__ASSEMBLER__ + __LINKER__ + 0)
COSMOPOLITAN_C_START_
struct Symbol {
unsigned addr_rva;
unsigned name_rva;
};
struct SymbolTable {
union {
struct MappedFile mf;
struct {
int64_t fd;
struct Elf64_Ehdr *elf;
size_t elfsize;
};
};
size_t scratch;
size_t count;
intptr_t addr_base;
intptr_t addr_end;
const char *name_base;
struct Symbol symbols[];
};
struct SymbolTable *GetSymbolTable(void);
const char *FindComBinary(void);
const char *FindDebugBinary(void);
struct SymbolTable *OpenSymbolTable(const char *) nodiscard;
int CloseSymbolTable(struct SymbolTable **);
void __hook(void (*)(void), struct SymbolTable *);
COSMOPOLITAN_C_END_
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
#endif /* COSMOPOLITAN_LIBC_SYMBOLS_H_ */