From 5fa17e83985a0659427cd5e085ca4bd331c07f8c Mon Sep 17 00:00:00 2001 From: Cyrill Gorcunov Date: Fri, 16 Nov 2012 22:57:07 +0400 Subject: [PATCH] output: Add more Elf unification One day the elf output routines would be abstracted enough to be merged in one file. This patch simply removes some differences from elf32/64 code. Signed-off-by: Cyrill Gorcunov --- output/outelf32.c | 9 +++------ output/outelf64.c | 41 +++++++++++++++++++++-------------------- 2 files changed, 24 insertions(+), 26 deletions(-) diff --git a/output/outelf32.c b/output/outelf32.c index 9ef24577..00b3f5e5 100644 --- a/output/outelf32.c +++ b/output/outelf32.c @@ -664,8 +664,9 @@ static int32_t elf_add_gsym_reloc(struct Section *sect, s = sects[i]; break; } + if (!s) { - if (exact && offset != 0) + if (exact && offset) nasm_error(ERR_NONFATAL, "unable to find a suitable global symbol" " for this reference"); else @@ -1021,7 +1022,7 @@ static void elf_write(void) /* .shstrtab */ elf_section_header(p - shstrtab, SHT_STRTAB, 0, shstrtab, false, - shstrtablen, 0, 0, 1, 0); + shstrtablen, 0, 0, 1, 0); p += strlen(p) + 1; /* .symtab */ @@ -1266,10 +1267,6 @@ static struct SAA *elf_build_reltab(int32_t *len, struct Reloc *r) while (r) { int32_t sym = r->symbol; - /* - * Create a real symbol index; the +2 refers to the two special - * entries, the null entry and the filename entry. - */ if (sym >= GLOBAL_TEMP_BASE) sym += global_offset; diff --git a/output/outelf64.c b/output/outelf64.c index 5635761e..97769727 100644 --- a/output/outelf64.c +++ b/output/outelf64.c @@ -1406,6 +1406,7 @@ static void elf_sect_write(struct Section *sect, const void *data, size_t len) saa_wbytes(sect->data, data, len); sect->len += len; } + static void elf_sect_writeaddr(struct Section *sect, int64_t data, size_t len) { saa_writeaddr(sect->data, data, len); @@ -1444,7 +1445,7 @@ static int elf_directive(enum directives directive, char *value, int pass) switch (directive) { case D_OSABI: if (pass == 2) - return 1; /* ignore in pass 2 */ + return 1; /* ignore in pass 2 */ n = readnum(value, &err); if (err) { @@ -2058,26 +2059,26 @@ static void dwarf64_generate(void) /* build line section */ /* prolog */ plines = saa_init(1L); - saa_write8(plines,1); /* Minimum Instruction Length */ - saa_write8(plines,1); /* Initial value of 'is_stmt' */ - saa_write8(plines,line_base); /* Line Base */ - saa_write8(plines,line_range); /* Line Range */ - saa_write8(plines,opcode_base); /* Opcode Base */ + saa_write8(plines,1); /* Minimum Instruction Length */ + saa_write8(plines,1); /* Initial value of 'is_stmt' */ + saa_write8(plines,line_base); /* Line Base */ + saa_write8(plines,line_range); /* Line Range */ + saa_write8(plines,opcode_base); /* Opcode Base */ /* standard opcode lengths (# of LEB128u operands) */ - saa_write8(plines,0); /* Std opcode 1 length */ - saa_write8(plines,1); /* Std opcode 2 length */ - saa_write8(plines,1); /* Std opcode 3 length */ - saa_write8(plines,1); /* Std opcode 4 length */ - saa_write8(plines,1); /* Std opcode 5 length */ - saa_write8(plines,0); /* Std opcode 6 length */ - saa_write8(plines,0); /* Std opcode 7 length */ - saa_write8(plines,0); /* Std opcode 8 length */ - saa_write8(plines,1); /* Std opcode 9 length */ - saa_write8(plines,0); /* Std opcode 10 length */ - saa_write8(plines,0); /* Std opcode 11 length */ - saa_write8(plines,1); /* Std opcode 12 length */ - /* Directory Table */ - saa_write8(plines,0); /* End of table */ + saa_write8(plines,0); /* Std opcode 1 length */ + saa_write8(plines,1); /* Std opcode 2 length */ + saa_write8(plines,1); /* Std opcode 3 length */ + saa_write8(plines,1); /* Std opcode 4 length */ + saa_write8(plines,1); /* Std opcode 5 length */ + saa_write8(plines,0); /* Std opcode 6 length */ + saa_write8(plines,0); /* Std opcode 7 length */ + saa_write8(plines,0); /* Std opcode 8 length */ + saa_write8(plines,1); /* Std opcode 9 length */ + saa_write8(plines,0); /* Std opcode 10 length */ + saa_write8(plines,0); /* Std opcode 11 length */ + saa_write8(plines,1); /* Std opcode 12 length */ + /* Directory Table */ + saa_write8(plines,0); /* End of table */ /* File Name Table */ ftentry = dwarf_flist; for (indx = 0;indx