Browse Source
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.gdb-4_18-branch
4 changed files with 152 additions and 12 deletions
@ -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" |
|||
Loading…
Reference in new issue