diff options
Diffstat (limited to 'output')
-rw-r--r-- | output/outelf32.c | 32 |
1 files changed, 12 insertions, 20 deletions
diff --git a/output/outelf32.c b/output/outelf32.c index a85acf0..7feb802 100644 --- a/output/outelf32.c +++ b/output/outelf32.c @@ -300,25 +300,21 @@ static int elf_make_section(char *name, int type, int flags, int align) { struct Section *s; - s = nasm_malloc(sizeof(*s)); + s = nasm_zalloc(sizeof(*s)); if (type != SHT_NOBITS) s->data = saa_init(1L); - s->head = NULL; s->tail = &s->head; - s->len = s->size = 0; - s->nrelocs = 0; if (!strcmp(name, ".text")) s->index = def_seg; else s->index = seg_alloc(); add_sectname("", name); - s->name = nasm_malloc(1 + strlen(name)); - strcpy(s->name, name); - s->type = type; - s->flags = flags; - s->align = align; - s->gsyms = NULL; + + s->name = nasm_strdup(name); + s->type = type; + s->flags = flags; + s->align = align; if (nsects >= sectlen) sects = nasm_realloc(sects, (sectlen += SECT_DELTA) * sizeof(*sects)); @@ -606,16 +602,12 @@ static void elf_add_reloc(struct Section *sect, int32_t segment, int type) { struct Reloc *r; - r = *sect->tail = nasm_malloc(sizeof(struct Reloc)); + r = *sect->tail = nasm_zalloc(sizeof(struct Reloc)); sect->tail = &r->next; - r->next = NULL; r->address = sect->len; - if (segment == NO_SEG) - r->symbol = 0; - else { + if (segment != NO_SEG) { int i; - r->symbol = 0; for (i = 0; i < nsects; i++) if (segment == sects[i]->index) r->symbol = i + 2; @@ -691,11 +683,11 @@ static int32_t elf_add_gsym_reloc(struct Section *sect, r = *sect->tail = nasm_malloc(sizeof(struct Reloc)); sect->tail = &r->next; - r->next = NULL; - r->address = sect->len; - r->symbol = GLOBAL_TEMP_BASE + sym->globnum; - r->type = type; + r->next = NULL; + r->address = sect->len; + r->symbol = GLOBAL_TEMP_BASE + sym->globnum; + r->type = type; sect->nrelocs++; |