From e3d2e31377030e84066bed4bbc04bf6c56206305 Mon Sep 17 00:00:00 2001 From: Freya Murphy Date: Wed, 11 Sep 2024 12:06:09 -0400 Subject: refactor --- masm/reltab.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 masm/reltab.c (limited to 'masm/reltab.c') diff --git a/masm/reltab.c b/masm/reltab.c new file mode 100644 index 0000000..482ed44 --- /dev/null +++ b/masm/reltab.c @@ -0,0 +1,43 @@ +#include +#include +#include + +#include "asm.h" + +#define RELTAB_INIT_LEN 8 + +int reltab_init(struct relocation_table *reltab) +{ + reltab->size = RELTAB_INIT_LEN; + reltab->len = 0; + reltab->data = malloc(sizeof(Elf32_Rela) * RELTAB_INIT_LEN); + + if (reltab->data == NULL) { + ERROR("cannot alloc"); + return M_ERROR; + } + + return M_SUCCESS; +} + +void reltab_free(struct relocation_table *reltab) +{ + free(reltab->data); +} + +int reltab_push(struct relocation_table *reltab, const Elf32_Rela rel) +{ + if (reltab->len >= reltab->size) { + reltab->size *= 2; + reltab->data = realloc(reltab->data, sizeof(Elf32_Rela) + * reltab->size); + + if (reltab->data == NULL) { + ERROR("cannot realloc"); + return M_ERROR; + } + } + + reltab->data[reltab->len++] = rel; + return M_SUCCESS; +} -- cgit v1.2.3-freya