diff options
author | Freya Murphy <freya@freyacat.org> | 2024-09-09 20:48:08 -0400 |
---|---|---|
committer | Freya Murphy <freya@freyacat.org> | 2024-09-09 20:48:08 -0400 |
commit | 0ff948af3d65150f44c9fe801ada806ce0637fe1 (patch) | |
tree | ba766d33d12bf1063660c2144af2d5f5c36b4c87 /masm/asm.c | |
parent | i forgor syscall (diff) | |
download | mips-0ff948af3d65150f44c9fe801ada806ce0637fe1.tar.gz mips-0ff948af3d65150f44c9fe801ada806ce0637fe1.tar.bz2 mips-0ff948af3d65150f44c9fe801ada806ce0637fe1.zip |
relocation table hell
Diffstat (limited to 'masm/asm.c')
-rw-r--r-- | masm/asm.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/masm/asm.c b/masm/asm.c new file mode 100644 index 0000000..6e2a56c --- /dev/null +++ b/masm/asm.c @@ -0,0 +1,41 @@ +#include <merror.h> +#include <stdlib.h> + +#include "asm.h" + +int assembler_init(struct assembler *asm, const char *path) +{ + if (lexer_init(path, &asm->lexer)) + return M_ERROR; + + if (parser_init(&asm->lexer, &asm->parser)) { + lexer_free(&asm->lexer); + return M_ERROR; + } + + if (strtbl_init(&asm->shstr_tbl)) { + parser_free(&asm->parser); + lexer_free(&asm->lexer); + return M_ERROR; + } + + if (strtbl_init(&asm->str_tbl)) { + strtbl_free(&asm->shstr_tbl); + parser_free(&asm->parser); + lexer_free(&asm->lexer); + return M_ERROR; + } + + asm->meta = NULL; + + return M_SUCCESS; +} + +void assembler_free(struct assembler *asm) +{ + strtbl_free(&asm->str_tbl); + strtbl_free(&asm->shstr_tbl); + parser_free(&asm->parser); + lexer_free(&asm->lexer); + free(asm->meta); +} |