mips/masm/asm.h

55 lines
1.1 KiB
C

/* Copyright (c) 2024 Freya Murphy */
#ifndef __ASM_H__
#define __ASM_H__
#include <stddef.h>
#include "lex.h"
#include "parse.h"
struct str_table {
char *ptr;
size_t size;
};
/* initalize a string table */
int strtbl_init(struct str_table *str_tbl);
/* free a string table */
void strtbl_free(struct str_table *str_tbl);
/* get a string form the string table */
int strtbl_get_str(struct str_table *str_tbl, const char *str, size_t *res);
/* get or append a string into the string table */
int strtbl_write_str(struct str_table *str_tbl, const char *str, size_t *res);
struct section_meta {
void *reltbl;
uint32_t reltbl_len;
uint32_t reltbl_idx; // reltbl idx in shdr
uint32_t shdr_idx; // sec idx in shdr
uint32_t v_addr;
};
struct assembler {
struct lexer lexer;
struct parser parser;
struct str_table shstr_tbl;
struct str_table str_tbl;
struct section_meta *meta;
size_t shstrtbl_idx;
size_t strtbl_idx;
size_t symtbl_idx;
};
int assembler_init(struct assembler *asm, const char *path);
void assembler_free(struct assembler *asm);
/* assemble a mips32 file*/
int assemble_file_mips32(char *path);
#endif /* __ASM_H__ */