From: Ian Lance Taylor Date: Wed, 4 Aug 1993 16:36:10 +0000 (+0000) Subject: * coff-h8500.c (rtype2howto): Do an fprintf to stderr rather than X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=e4b6b3e71bd600c9ff393c9dd6d05379c7774082;p=binutils-gdb.git * coff-h8500.c (rtype2howto): Do an fprintf to stderr rather than using printf. * coff-z8k.c (rtype2howto): Likewise. * coffcode.h (dummy_reloc16_extra_cases): Likewise. * elf32-i386.c (TRACE): Likewise. * hp300hpux.c (convert_sym_type, swap_std_reloc_in): Likewise. * rs6000-core.c (rs6000coff_get_section_contents): Likewise. * coffgen.c (coff_print_symbol): Do an fprintf to the file argument rather than using printf. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index b1dbc7da88e..dfebb05696c 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,15 @@ +Wed Aug 4 08:33:55 1993 Ian Lance Taylor (ian@cygnus.com) + + * coff-h8500.c (rtype2howto): Do an fprintf to stderr rather than + using printf. + * coff-z8k.c (rtype2howto): Likewise. + * coffcode.h (dummy_reloc16_extra_cases): Likewise. + * elf32-i386.c (TRACE): Likewise. + * hp300hpux.c (convert_sym_type, swap_std_reloc_in): Likewise. + * rs6000-core.c (rs6000coff_get_section_contents): Likewise. + * coffgen.c (coff_print_symbol): Do an fprintf to the file + argument rather than using printf. + Tue Aug 3 18:17:25 1993 Ian Lance Taylor (ian@cygnus.com) * coffswap.h: Added macros used when accessing several fields; diff --git a/bfd/coffcode.h b/bfd/coffcode.h index 721a7e9dba3..e26f1be7f87 100644 --- a/bfd/coffcode.h +++ b/bfd/coffcode.h @@ -818,9 +818,9 @@ coff_set_arch_mach_hook(abfd, filehdr) switch (internal_f->f_magic) { #ifdef I386MAGIC case I386MAGIC: -#ifdef I386AIXMAGIC + case I386PTXMAGIC: case I386AIXMAGIC: /* Danbury PS/2 AIX C Compiler */ -#endif + case I386LYNXMAGIC: arch = bfd_arch_i386; machine = 0; break; @@ -2079,8 +2079,9 @@ SUBSUBSECTION #ifndef CALC_ADDEND #define CALC_ADDEND(abfd, ptr, reloc, cache_ptr) \ - if (ptr && bfd_asymbol_bfd(ptr) == abfd \ - && ((ptr->flags & BSF_OLD_COMMON)== 0)) \ + if (ptr && bfd_asymbol_bfd(ptr) == abfd \ + && !bfd_is_com_section(ptr->section) \ + && !(ptr->flags & BSF_OLD_COMMON)) \ { \ cache_ptr->addend = -(ptr->section->vma + ptr->value); \ } \ @@ -2251,7 +2252,7 @@ dummy_reloc16_extra_cases (abfd, seclet, reloc, data, src_ptr, dst_ptr) unsigned int *src_ptr; unsigned int *dst_ptr; { - printf("%s\n", reloc->howto->name); + fprintf(stderr, "%s\n", reloc->howto->name); abort (); } #endif diff --git a/bfd/coffgen.c b/bfd/coffgen.c index f86029d4929..dcdf9e90122 100644 --- a/bfd/coffgen.c +++ b/bfd/coffgen.c @@ -1173,12 +1173,12 @@ bfd *abfd) } internal_ptr->u.syment._n._n_n._n_offset = - (int) (string_table - 4 + + (long) (string_table - 4 + (internal_ptr+1)->u.auxent.x_file.x_n.x_offset); } else { /* ordinary short filename, put into memory anyway */ - internal_ptr->u.syment._n._n_n._n_offset = (int) + internal_ptr->u.syment._n._n_n._n_offset = (long) copy_name(abfd, (internal_ptr+1)->u.auxent.x_file.x_fname, FILNMLEN); } @@ -1203,7 +1203,7 @@ bfd *abfd) } /* on error */ memset(newstring, 0, i); strncpy(newstring, internal_ptr->u.syment._n._n_name, i-1); - internal_ptr->u.syment._n._n_n._n_offset = (int) newstring; + internal_ptr->u.syment._n._n_n._n_offset = (long int) newstring; internal_ptr->u.syment._n._n_n._n_zeroes = 0; } else if (!bfd_coff_symname_in_debug(abfd, &internal_ptr->u.syment)) { @@ -1211,7 +1211,7 @@ bfd *abfd) if (string_table == NULL) { string_table = build_string_table(abfd); } - internal_ptr->u.syment._n._n_n._n_offset = (int) + internal_ptr->u.syment._n._n_n._n_offset = (long int) (string_table - 4 + internal_ptr->u.syment._n._n_n._n_offset); } else { @@ -1219,7 +1219,7 @@ bfd *abfd) if (debug_section == NULL) { debug_section = build_debug_section(abfd); } - internal_ptr->u.syment._n._n_n._n_offset = (int) + internal_ptr->u.syment._n._n_n._n_offset = (long int) (debug_section + internal_ptr->u.syment._n._n_n._n_offset); } } @@ -1363,11 +1363,11 @@ coff_print_symbol (abfd, filep, symbol, how) if (l) { - printf ("\n%s :", l->u.sym->name); + fprintf (file, "\n%s :", l->u.sym->name); l++; while (l->line_number) { - printf ("\n%4d : 0x%x", + fprintf (file, "\n%4d : 0x%x", l->line_number, l->u.offset); l++; diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c new file mode 100644 index 00000000000..9ead8bf1b09 --- /dev/null +++ b/bfd/elf32-i386.c @@ -0,0 +1,127 @@ +/* Intel 80386/80486-specific support for 32-bit ELF + Copyright 1993 Free Software Foundation, Inc. + +This file is part of BFD, the Binary File Descriptor library. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ + +/* + * This file contains changes from the Open Software Foundation. + */ + +#include "bfd.h" +#include "sysdep.h" +#include "libbfd.h" +#include "libelf.h" + +#define USE_REL 1 /* 386 uses REL relocations instead of RELA */ + +enum reloc_type + { + R_386_NONE = 0, + R_386_32, R_386_PC32, + R_386_GOT32, R_386_PLT32, + R_386_COPY, + R_386_GLOB_DAT, R_386_JUMP_SLOT, + R_386_RELATIVE, + R_386_GOTOFF, R_386_GOTPC, + R_386_max + }; + +#if 0 +static CONST char *CONST reloc_type_names[] = +{ + "R_386_NONE", + "R_386_32", "R_386_PC32", + "R_386_GOT32", "R_386_PLT32", + "R_386_COPY", + "R_386_GLOB_DAT", "R_386_JUMP_SLOT", + "R_386_RELATIVE", + "R_386_GOTOFF", "R_386_GOTPC", +}; +#endif + + +static reloc_howto_type elf_howto_table[]= +{ + HOWTO(R_386_NONE, 0,0, 0,false,0, complain_overflow_dont, 0,"R_386_NONE", false,0x00000000,0x00000000,false), + HOWTO(R_386_32, 0,2,32,false,0, complain_overflow_bitfield, 0,"R_386_32", false,0xffffffff,0xffffffff,false), + HOWTO(R_386_PC32, 0,2,32,true, 0, complain_overflow_signed, 0,"R_386_PC32", false,0xffffffff,0xffffffff,false), + HOWTO(R_386_GOT32, 0,2,32,false,0, complain_overflow_bitfield, 0,"R_386_GOT32",false,0xffffffff,0xffffffff,false) +}; + +#ifdef DEBUG_GEN_RELOC +#define TRACE(str) fprintf (stderr, "i386 bfd reloc lookup %d (%s)\n", code, str) +#else +#define TRACE(str) +#endif + +static CONST struct reloc_howto_struct * +DEFUN (elf_i386_reloc_type_lookup, (abfd, code), + bfd *abfd AND + bfd_reloc_code_real_type code) +{ + switch (code) + { + case BFD_RELOC_NONE: + TRACE ("BFD_RELOC_NONE"); + return &elf_howto_table[ (int)R_386_NONE ]; + + case BFD_RELOC_32: + TRACE ("BFD_RELOC_32"); + return &elf_howto_table[ (int)R_386_32 ]; + + case BFD_RELOC_32_PCREL: + TRACE ("BFD_RELOC_PC32"); + return &elf_howto_table[ (int)R_386_PC32 ]; + + default: + abort (); + } + + TRACE ("Unknown"); + return 0; +} + +static void +DEFUN(elf_i386_info_to_howto, (abfd, cache_ptr, dst), + bfd *abfd AND + arelent *cache_ptr AND + Elf32_Internal_Rela *dst) +{ + BFD_ASSERT (ELF32_R_TYPE(dst->r_info) < R_386_GOT32); + + cache_ptr->howto = &elf_howto_table[ELF32_R_TYPE(dst->r_info)]; +} + +static void +DEFUN(elf_i386_info_to_howto_rel, (abfd, cache_ptr, dst), + bfd *abfd AND + arelent *cache_ptr AND + Elf32_Internal_Rel *dst) +{ + BFD_ASSERT (ELF32_R_TYPE(dst->r_info) < R_386_GOT32); + + cache_ptr->howto = &elf_howto_table[ELF32_R_TYPE(dst->r_info)]; +} + +#define TARGET_LITTLE_SYM bfd_elf32_i386_vec +#define TARGET_LITTLE_NAME "elf32-i386" +#define ELF_ARCH bfd_arch_i386 +#define elf_info_to_howto elf_i386_info_to_howto +#define elf_info_to_howto_rel elf_i386_info_to_howto_rel +#define bfd_elf32_bfd_reloc_type_lookup elf_i386_reloc_type_lookup + +#include "elf32-target.h"