cosmopolitan/libc/runtime/symbols.internal.h
Justine Tunney ff250a0c10
Revert "Rewrite ZipOS"
This reverts commit b01282e23e. Some tests
are broken. It's not clear how it'll impact metal yet. Let's revisit the
memory optimization benefits of this change again sometime soon.
2023-10-03 14:40:03 -07:00

40 lines
1.4 KiB
C

#ifndef COSMOPOLITAN_LIBC_SYMBOLS_H_
#define COSMOPOLITAN_LIBC_SYMBOLS_H_
#if !(__ASSEMBLER__ + __LINKER__ + 0)
COSMOPOLITAN_C_START_
#define SYMBOLS_MAGIC 0x544d5953 /* SYMT */
#define SYMBOLS_ABI 1
struct Symbol {
unsigned x; /* start (relative to addr_base) */
unsigned y; /* start + size - 1 (inclusive) */
};
struct SymbolTable {
uint32_t magic; /* 0xFEEDABEE little endian */
uint32_t abi; /* 1 */
uint64_t count; /* of `symbols` */
uint64_t size; /* file size */
uint64_t mapsize; /* of this object */
int64_t addr_base; /* IMAGE_BASE_VIRTUAL */
int64_t addr_end; /* _end - 1 */
uint32_t *names; /* relative to `name_base` */
char *name_base; /* double-nul terminated w/ empty first */
uint32_t names_offset; /* for file loading */
uint32_t name_base_offset; /* for file loading */
struct Symbol symbols[]; /* sorted and non-overlapping intervals */
};
struct SymbolTable *GetSymbolTable(void);
const char *FindComBinary(void);
const char *FindDebugBinary(void);
struct SymbolTable *OpenSymbolTable(const char *);
int CloseSymbolTable(struct SymbolTable **);
int __hook(void *, struct SymbolTable *);
int __get_symbol(struct SymbolTable *, intptr_t);
char *__get_symbol_name(struct SymbolTable *, int);
COSMOPOLITAN_C_END_
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
#endif /* COSMOPOLITAN_LIBC_SYMBOLS_H_ */