X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=bfd%2Fcoff-or32.c;h=30801fba68ec0c3f8650a39493d930ff48492777;hb=1bce6bd86f99b05ddc311eb34545165983ff8ddc;hp=af30afdb7f009e0eaa8c1049722cd5640b259aee;hpb=dfeffb9fe1d18c568b06be976da294b928753821;p=binutils-gdb.git diff --git a/bfd/coff-or32.c b/bfd/coff-or32.c index af30afdb7f0..30801fba68e 100644 --- a/bfd/coff-or32.c +++ b/bfd/coff-or32.c @@ -1,12 +1,13 @@ /* BFD back-end for OpenRISC 1000 COFF binaries. - Copyright 2002, 2003 Free Software Foundation, Inc. + Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008 + Free Software Foundation, Inc. Contributed by Ivan Guzvinec 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 + the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, @@ -16,12 +17,13 @@ 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, + MA 02110-1301, USA. */ #define OR32 1 -#include "bfd.h" #include "sysdep.h" +#include "bfd.h" #include "libbfd.h" #include "coff/or32.h" #include "coff/internal.h" @@ -148,23 +150,14 @@ or32_reloc (abfd, reloc_entry, symbol_in, data, input_section, output_bfd, signed_value = 0; signed_value += sym_value + reloc_entry->addend; -#if 0 - if ((signed_value & ~0x3ffff) == 0) - { /* Absolute jmp/call. */ - insn |= (1<<24); /* Make it absolute. */ - /* FIXME: Should we change r_type to R_IABS. */ - } - else -#endif - { - /* Relative jmp/call, so subtract from the value the - address of the place we're coming from. */ - signed_value -= (reloc_entry->address - + input_section->output_section->vma - + input_section->output_offset); - if (signed_value > 0x7ffffff || signed_value < -0x8000000) - return bfd_reloc_overflow; - } + /* Relative jmp/call, so subtract from the value the + address of the place we're coming from. */ + signed_value -= (reloc_entry->address + + input_section->output_section->vma + + input_section->output_offset); + if (signed_value > 0x7ffffff || signed_value < -0x8000000) + return bfd_reloc_overflow; + signed_value >>= 2; insn = INSERT_JUMPTARG (insn, signed_value); bfd_put_32 (abfd, insn, hit_data); @@ -326,11 +319,7 @@ reloc_processing (relent,reloc, symbols, abfd, section) } else { - asymbol *ptr; relent->sym_ptr_ptr = symbols + obj_convert (abfd)[reloc->r_symndx]; - - ptr = *(relent->sym_ptr_ptr); - relent->addend = 0; relent->address-= section->vma; @@ -465,25 +454,15 @@ coff_or32_relocate_section (output_bfd, info, input_bfd, input_section, /* Determine the destination of the jump. */ signed_value += val; -#if 0 - if ((signed_value & ~0x3ffff) == 0) - { - /* We can use an absolute jump. */ - insn |= (1 << 24); - } - else -#endif - { - /* Make the destination PC relative. */ - signed_value -= (input_section->output_section->vma - + input_section->output_offset - + (rel->r_vaddr - input_section->vma)); - if (signed_value > 0x7ffffff || signed_value < - 0x8000000) - { - overflow = TRUE; - signed_value = 0; - } - } + /* Make the destination PC relative. */ + signed_value -= (input_section->output_section->vma + + input_section->output_offset + + (rel->r_vaddr - input_section->vma)); + if (signed_value > 0x7ffffff || signed_value < - 0x8000000) + { + overflow = TRUE; + signed_value = 0; + } /* Put the adjusted value back into the instruction. */ signed_value >>= 2; @@ -592,6 +571,10 @@ coff_or32_adjust_symndx (obfd, info, ibfd, sec, irel, adjustedp) #define coff_adjust_symndx coff_or32_adjust_symndx +#ifndef bfd_pe_print_pdata +#define bfd_pe_print_pdata NULL +#endif + #include "coffcode.h" const bfd_target or32coff_big_vec =