/* Copyright (c) 2024 Freya Murphy */ #ifndef __ELF32_H__ #define __ELF32_H__ #include #include "../gen.h" #include "../masm.h" /// /// ELF string table /// struct elf_str_table { // size of the ptr in bytes size_t size; // pointer that contains // the strings char *ptr; }; /* initalize a string table */ int strtab_init(struct elf_str_table *strtab); /* free a string table */ void strtab_free(struct elf_str_table *strtab); /* get a string form the string table */ int strtab_get_str(struct elf_str_table *strtab, const char *str, size_t *res); /* get or append a string into the string table */ int strtab_write_str(struct elf_str_table *strtab, const char *str, size_t *res); /// /// elf section /// /* holds a section of the asm file (i.e. .text, .bss, .data) */ struct elf_section { // section data *weak* pointer struct section *data; // index of the section in // the ELF shdr size_t shdr_idx; // relocation table size_t reltab_shidx; uint32_t reltab_len; Elf32_Rel *reltab; }; /// /// assembler /// struct elf_assembler { // arguments passed in struct arguments *args; // the code generator struct generator *gen; /// symbol table size_t symtab_shidx; size_t symtab_len; Elf32_Sym *symbols; // sh string table size_t strtab_shidx; struct elf_str_table strtab; // string table size_t shstrtab_shidx; struct elf_str_table shstrtab; /// sections uint32_t section_len; struct elf_section *sections; /// section header Elf32_Shdr *shdr; uint32_t shdr_len; }; int assemble_elf32(struct generator *gen, struct arguments *args); #endif /* __ELF32_H__ */