From: Michael Urman Date: Sat, 2 Aug 2003 17:23:48 +0000 (-0000) Subject: Hide 386-specific constants from non-internal use. X-Git-Tag: v0.3.0~6^2~19 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e035663f6fe1246dc375fb0820bfcd6641bf7c8f;p=yasm Hide 386-specific constants from non-internal use. Change interface of elf_reloc_entry_new() to allow this. svn path=/trunk/yasm/; revision=1025 --- diff --git a/modules/objfmts/elf/elf-objfmt.c b/modules/objfmts/elf/elf-objfmt.c index 45beb26b..37e0853f 100644 --- a/modules/objfmts/elf/elf-objfmt.c +++ b/modules/objfmts/elf/elf-objfmt.c @@ -231,8 +231,6 @@ elf_objfmt_output_expr(yasm_expr **ep, unsigned char *buf, size_t destsize, } if (rel) { - reloc = elf_reloc_entry_new(sym, bc->offset + offset, R_386_PC32); - /* Need to reference to start of section, so add $$ in. */ *ep = yasm_expr_new(YASM_EXPR_ADD, yasm_expr_expr(*ep), yasm_expr_sym(yasm_symrec_define_label("$$", info->sect, @@ -243,9 +241,9 @@ elf_objfmt_output_expr(yasm_expr **ep, unsigned char *buf, size_t destsize, yasm_expr_int(yasm_intnum_new_uint(bc->offset + offset)), (*ep)->line); *ep = yasm_expr_simplify(*ep, yasm_common_calc_bc_dist); - } else - reloc = elf_reloc_entry_new(sym, bc->offset + offset, R_386_32); + } + reloc = elf_reloc_entry_new(sym, bc->offset + offset, rel); /* allocate .rel sections on a need-basis */ if (elf_secthead_append_reloc(info->shead, reloc)) elf_objfmt_parse_scnum++; diff --git a/modules/objfmts/elf/elf.c b/modules/objfmts/elf/elf.c index e6e99a16..106c5136 100644 --- a/modules/objfmts/elf/elf.c +++ b/modules/objfmts/elf/elf.c @@ -38,7 +38,7 @@ elf_reloc_entry * elf_reloc_entry_new(yasm_symrec *sym, elf_address addr, - elf_relocation_type rtype) + int rel) { elf_reloc_entry *entry = yasm_xmalloc(sizeof(elf_reloc_entry)); @@ -47,7 +47,7 @@ elf_reloc_entry_new(yasm_symrec *sym, entry->sym = sym; entry->addr = addr; - entry->rtype = rtype; + entry->rtype = rel ? R_386_PC32 : R_386_32; return entry; } diff --git a/modules/objfmts/elf/elf.h b/modules/objfmts/elf/elf.h index 17bab879..339aff65 100644 --- a/modules/objfmts/elf/elf.h +++ b/modules/objfmts/elf/elf.h @@ -1,4 +1,4 @@ -/* +/* $IdPath$ * ELF object format helpers * * Copyright (C) 2003 Michael Urman @@ -166,6 +166,13 @@ typedef enum { STN_UNDEF = 0 } elf_symbol_index; + +/* internal only object definitions */ +#ifdef YASM_OBJFMT_ELF_INTERNAL + +#define ELF32_ST_INFO(bind, type) (((bind) << 4) + ((type) & 0xf)) +#define ELF32_R_INFO(s,t) (((s)<<8)+(unsigned char)(t)) + /* elf relocation type - index of semantics */ typedef enum { R_386_NONE = 0, /* none */ @@ -181,13 +188,6 @@ typedef enum { R_386_GOTPC = 10 /* word, GOT + A - P */ } elf_relocation_type; - -/* internal only object definitions */ -#ifdef YASM_OBJFMT_ELF_INTERNAL - -#define ELF32_ST_INFO(bind, type) (((bind) << 4) + ((type) & 0xf)) -#define ELF32_R_INFO(s,t) (((s)<<8)+(unsigned char)(t)) - struct elf_secthead { elf_section_type type; elf_section_flags flags; @@ -265,7 +265,7 @@ struct elf_symtab_entry { /* reloc functions */ elf_reloc_entry *elf_reloc_entry_new(yasm_symrec *sym, elf_address addr, - elf_relocation_type rtype); + int rel); void elf_reloc_entry_delete(elf_reloc_entry *entry); elf_reloc_head *elf_relocs_new(void); void elf_reloc_delete(elf_reloc_head *head);