#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; }