Handle R_X86_64_64 properly for x32
[deliverable/binutils-gdb.git] / bfd / elf32-frv.c
index f6975f3fba90c3f1484f01960f10768fcb4e1462..05e9c58b4af2944c050470ba0c7aa794c706a546 100644 (file)
@@ -1,5 +1,5 @@
 /* FRV-specific support for 32-bit ELF.
 /* FRV-specific support for 32-bit ELF.
-   Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+   Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
    Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
    Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -2812,16 +2812,9 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
          name = h->root.root.string;
        }
 
          name = h->root.root.string;
        }
 
-      if (sec != NULL && elf_discarded_section (sec))
-       {
-         /* For relocs against symbols from removed linkonce sections,
-            or sections discarded by a linker script, we just want the
-            section contents zeroed.  Avoid any special processing.  */
-         _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
-         rel->r_info = 0;
-         rel->r_addend = 0;
-         continue;
-       }
+      if (sec != NULL && discarded_section (sec))
+       RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+                                        rel, 1, relend, howto, 0, contents);
 
       if (info->relocatable)
        continue;
 
       if (info->relocatable)
        continue;
@@ -2891,8 +2884,9 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
                                                      osec, sym,
                                                      rel->r_addend))
            {
                                                      osec, sym,
                                                      rel->r_addend))
            {
-             (*_bfd_error_handler)
-               (_("%B(%A+0x%x): relocation to `%s+%x' may have caused the error above"),
+             info->callbacks->einfo
+               (_("%H: relocation to `%s+%v'"
+                  " may have caused the error above\n"),
                 input_bfd, input_section, rel->r_offset, name, rel->r_addend);
              return FALSE;
            }
                 input_bfd, input_section, rel->r_offset, name, rel->r_addend);
              return FALSE;
            }
@@ -2902,11 +2896,15 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
        default:
        non_fdpic:
          picrel = NULL;
        default:
        non_fdpic:
          picrel = NULL;
-         if (h && ! FRVFDPIC_SYM_LOCAL (info, h))
+         if (h
+             && ! FRVFDPIC_SYM_LOCAL (info, h)
+             && _bfd_elf_section_offset (output_bfd, info, input_section,
+                                         rel->r_offset) != (bfd_vma) -1)
            {
            {
-             info->callbacks->warning
-               (info, _("relocation references symbol not defined in the module"),
-                name, input_bfd, input_section, rel->r_offset);
+             info->callbacks->einfo
+               (_("%H: relocation references symbol"
+                  " not defined in the module\n"),
+                input_bfd, input_section, rel->r_offset);
              return FALSE;
            }
          break;
              return FALSE;
            }
          break;
@@ -2979,10 +2977,9 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
            /* Is this a call instruction?  */
            if ((insn & (unsigned long)0x01fc0000) != 0x003c0000)
              {
            /* Is this a call instruction?  */
            if ((insn & (unsigned long)0x01fc0000) != 0x003c0000)
              {
-               r = info->callbacks->warning
-                 (info,
-                  _("R_FRV_GETTLSOFF not applied to a call instruction"),
-                  name, input_bfd, input_section, rel->r_offset);
+               info->callbacks->einfo
+                 (_("%H: R_FRV_GETTLSOFF not applied to a call instruction\n"),
+                  input_bfd, input_section, rel->r_offset);
                return FALSE;
              }
 
                return FALSE;
              }
 
@@ -3021,10 +3018,10 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
            /* Is this an lddi instruction?  */
            if ((insn & (unsigned long)0x01fc0000) != 0x00cc0000)
              {
            /* Is this an lddi instruction?  */
            if ((insn & (unsigned long)0x01fc0000) != 0x00cc0000)
              {
-               r = info->callbacks->warning
-                 (info,
-                  _("R_FRV_GOTTLSDESC12 not applied to an lddi instruction"),
-                  name, input_bfd, input_section, rel->r_offset);
+               info->callbacks->einfo
+                 (_("%H: R_FRV_GOTTLSDESC12"
+                    " not applied to an lddi instruction\n"),
+                  input_bfd, input_section, rel->r_offset);
                return FALSE;
              }
 
                return FALSE;
              }
 
@@ -3092,10 +3089,10 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
            /* Is this a sethi instruction?  */
            if ((insn & (unsigned long)0x01ff0000) != 0x00f80000)
              {
            /* Is this a sethi instruction?  */
            if ((insn & (unsigned long)0x01ff0000) != 0x00f80000)
              {
-               r = info->callbacks->warning
-                 (info,
-                  _("R_FRV_GOTTLSDESCHI not applied to a sethi instruction"),
-                  name, input_bfd, input_section, rel->r_offset);
+               info->callbacks->einfo
+                 (_("%H: R_FRV_GOTTLSDESCHI"
+                    " not applied to a sethi instruction\n"),
+                  input_bfd, input_section, rel->r_offset);
                return FALSE;
              }
 
                return FALSE;
              }
 
@@ -3129,11 +3126,10 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
            /* Is this a setlo or setlos instruction?  */
            if ((insn & (unsigned long)0x01f70000) != 0x00f40000)
              {
            /* Is this a setlo or setlos instruction?  */
            if ((insn & (unsigned long)0x01f70000) != 0x00f40000)
              {
-               r = info->callbacks->warning
-                 (info,
-                  _("R_FRV_GOTTLSDESCLO"
-                    " not applied to a setlo or setlos instruction"),
-                  name, input_bfd, input_section, rel->r_offset);
+               info->callbacks->einfo
+                 (_("%H: R_FRV_GOTTLSDESCLO"
+                    " not applied to a setlo or setlos instruction\n"),
+                  input_bfd, input_section, rel->r_offset);
                return FALSE;
              }
 
                return FALSE;
              }
 
@@ -3177,10 +3173,10 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
            /* Is this an ldd instruction?  */
            if ((insn & (unsigned long)0x01fc0fc0) != 0x00080140)
              {
            /* Is this an ldd instruction?  */
            if ((insn & (unsigned long)0x01fc0fc0) != 0x00080140)
              {
-               r = info->callbacks->warning
-                 (info,
-                  _("R_FRV_TLSDESC_RELAX not applied to an ldd instruction"),
-                  name, input_bfd, input_section, rel->r_offset);
+               info->callbacks->einfo
+                 (_("%H: R_FRV_TLSDESC_RELAX"
+                    " not applied to an ldd instruction\n"),
+                  input_bfd, input_section, rel->r_offset);
                return FALSE;
              }
 
                return FALSE;
              }
 
@@ -3261,11 +3257,10 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
            /* Is this a calll or callil instruction?  */
            if ((insn & (unsigned long)0x7ff80fc0) != 0x02300000)
              {
            /* Is this a calll or callil instruction?  */
            if ((insn & (unsigned long)0x7ff80fc0) != 0x02300000)
              {
-               r = info->callbacks->warning
-                 (info,
-                  _("R_FRV_GETTLSOFF_RELAX"
-                    " not applied to a calll instruction"),
-                  name, input_bfd, input_section, rel->r_offset);
+               info->callbacks->einfo
+                 (_("%H: R_FRV_GETTLSOFF_RELAX"
+                    " not applied to a calll instruction\n"),
+                  input_bfd, input_section, rel->r_offset);
                return FALSE;
              }
 
                return FALSE;
              }
 
@@ -3316,10 +3311,10 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
            /* Is this an ldi instruction?  */
            if ((insn & (unsigned long)0x01fc0000) != 0x00c80000)
              {
            /* Is this an ldi instruction?  */
            if ((insn & (unsigned long)0x01fc0000) != 0x00c80000)
              {
-               r = info->callbacks->warning
-                 (info,
-                  _("R_FRV_GOTTLSOFF12 not applied to an ldi instruction"),
-                  name, input_bfd, input_section, rel->r_offset);
+               info->callbacks->einfo
+                 (_("%H: R_FRV_GOTTLSOFF12"
+                    " not applied to an ldi instruction\n"),
+                  input_bfd, input_section, rel->r_offset);
                return FALSE;
              }
 
                return FALSE;
              }
 
@@ -3346,10 +3341,10 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
            /* Is this a sethi instruction?  */
            if ((insn & (unsigned long)0x01ff0000) != 0x00f80000)
              {
            /* Is this a sethi instruction?  */
            if ((insn & (unsigned long)0x01ff0000) != 0x00f80000)
              {
-               r = info->callbacks->warning
-                 (info,
-                  _("R_FRV_GOTTLSOFFHI not applied to a sethi instruction"),
-                  name, input_bfd, input_section, rel->r_offset);
+               info->callbacks->einfo
+                 (_("%H: R_FRV_GOTTLSOFFHI"
+                    " not applied to a sethi instruction\n"),
+                  input_bfd, input_section, rel->r_offset);
                return FALSE;
              }
 
                return FALSE;
              }
 
@@ -3375,11 +3370,10 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
            /* Is this a setlo or setlos instruction?  */
            if ((insn & (unsigned long)0x01f70000) != 0x00f40000)
              {
            /* Is this a setlo or setlos instruction?  */
            if ((insn & (unsigned long)0x01f70000) != 0x00f40000)
              {
-               r = info->callbacks->warning
-                 (info,
-                  _("R_FRV_GOTTLSOFFLO"
-                    " not applied to a setlo or setlos instruction"),
-                  name, input_bfd, input_section, rel->r_offset);
+               info->callbacks->einfo
+                 (_("%H: R_FRV_GOTTLSOFFLO"
+                    " not applied to a setlo or setlos instruction\n"),
+                  input_bfd, input_section, rel->r_offset);
                return FALSE;
              }
 
                return FALSE;
              }
 
@@ -3406,10 +3400,10 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
            /* Is this an ld instruction?  */
            if ((insn & (unsigned long)0x01fc0fc0) != 0x00080100)
              {
            /* Is this an ld instruction?  */
            if ((insn & (unsigned long)0x01fc0fc0) != 0x00080100)
              {
-               r = info->callbacks->warning
-                 (info,
-                  _("R_FRV_TLSOFF_RELAX not applied to an ld instruction"),
-                  name, input_bfd, input_section, rel->r_offset);
+               info->callbacks->einfo
+                 (_("%H: R_FRV_TLSOFF_RELAX"
+                    " not applied to an ld instruction\n"),
+                  input_bfd, input_section, rel->r_offset);
                return FALSE;
              }
 
                return FALSE;
              }
 
@@ -3451,10 +3445,10 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
            /* Is this a sethi instruction?  */
            if ((insn & (unsigned long)0x01ff0000) != 0x00f80000)
              {
            /* Is this a sethi instruction?  */
            if ((insn & (unsigned long)0x01ff0000) != 0x00f80000)
              {
-               r = info->callbacks->warning
-                 (info,
-                  _("R_FRV_TLSMOFFHI not applied to a sethi instruction"),
-                  name, input_bfd, input_section, rel->r_offset);
+               info->callbacks->einfo
+                 (_("%H: R_FRV_TLSMOFFHI"
+                    " not applied to a sethi instruction\n"),
+                  input_bfd, input_section, rel->r_offset);
                return FALSE;
              }
 
                return FALSE;
              }
 
@@ -3478,11 +3472,10 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
            /* Is this a setlo or setlos instruction?  */
            if ((insn & (unsigned long)0x01f70000) != 0x00f40000)
              {
            /* Is this a setlo or setlos instruction?  */
            if ((insn & (unsigned long)0x01f70000) != 0x00f40000)
              {
-               r = info->callbacks->warning
-                 (info,
-                  _("R_FRV_TLSMOFFLO"
-                    " not applied to a setlo or setlos instruction"),
-                  name, input_bfd, input_section, rel->r_offset);
+               info->callbacks->einfo
+                 (_("R_FRV_TLSMOFFLO"
+                    " not applied to a setlo or setlos instruction\n"),
+                  input_bfd, input_section, rel->r_offset);
                return FALSE;
              }
 
                return FALSE;
              }
 
@@ -3600,9 +3593,10 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
                  {
                    if (addend)
                      {
                  {
                    if (addend)
                      {
-                       info->callbacks->warning
-                         (info, _("R_FRV_FUNCDESC references dynamic symbol with nonzero addend"),
-                          name, input_bfd, input_section, rel->r_offset);
+                       info->callbacks->einfo
+                         (_("%H: R_FRV_FUNCDESC references dynamic symbol"
+                            " with nonzero addend\n"),
+                          input_bfd, input_section, rel->r_offset);
                        return FALSE;
                      }
                    dynindx = h->dynindx;
                        return FALSE;
                      }
                    dynindx = h->dynindx;
@@ -3640,10 +3634,10 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
                                                       input_section
                                                       ->output_section))
                          {
                                                       input_section
                                                       ->output_section))
                          {
-                           info->callbacks->warning
-                             (info,
-                              _("cannot emit fixups in read-only section"),
-                              name, input_bfd, input_section, rel->r_offset);
+                           info->callbacks->einfo
+                             (_("%H: cannot emit fixups"
+                                " in read-only section\n"),
+                              input_bfd, input_section, rel->r_offset);
                            return FALSE;
                          }
 
                            return FALSE;
                          }
 
@@ -3671,10 +3665,10 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
                                                   input_section
                                                   ->output_section))
                      {
                                                   input_section
                                                   ->output_section))
                      {
-                       info->callbacks->warning
-                         (info,
-                          _("cannot emit dynamic relocations in read-only section"),
-                          name, input_bfd, input_section, rel->r_offset);
+                       info->callbacks->einfo
+                         (_("%H: cannot emit dynamic relocations"
+                            " in read-only section\n"),
+                          input_bfd, input_section, rel->r_offset);
                        return FALSE;
                      }
 
                        return FALSE;
                      }
 
@@ -3720,9 +3714,10 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
              {
                if (addend && r_type == R_FRV_FUNCDESC_VALUE)
                  {
              {
                if (addend && r_type == R_FRV_FUNCDESC_VALUE)
                  {
-                   info->callbacks->warning
-                     (info, _("R_FRV_FUNCDESC_VALUE references dynamic symbol with nonzero addend"),
-                      name, input_bfd, input_section, rel->r_offset);
+                   info->callbacks->einfo
+                     (_("%H: R_FRV_FUNCDESC_VALUE"
+                        " references dynamic symbol with nonzero addend\n"),
+                      input_bfd, input_section, rel->r_offset);
                    return FALSE;
                  }
                dynindx = h->dynindx;
                    return FALSE;
                  }
                dynindx = h->dynindx;
@@ -3761,10 +3756,9 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
                                                   input_section
                                                   ->output_section))
                      {
                                                   input_section
                                                   ->output_section))
                      {
-                       info->callbacks->warning
-                         (info,
-                          _("cannot emit fixups in read-only section"),
-                          name, input_bfd, input_section, rel->r_offset);
+                       info->callbacks->einfo
+                         (_("%H: cannot emit fixups in read-only section\n"),
+                          input_bfd, input_section, rel->r_offset);
                        return FALSE;
                      }
                    if (!h || h->root.type != bfd_link_hash_undefweak)
                        return FALSE;
                      }
                    if (!h || h->root.type != bfd_link_hash_undefweak)
@@ -3805,10 +3799,10 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
                                                   input_section
                                                   ->output_section))
                      {
                                                   input_section
                                                   ->output_section))
                      {
-                       info->callbacks->warning
-                         (info,
-                          _("cannot emit dynamic relocations in read-only section"),
-                          name, input_bfd, input_section, rel->r_offset);
+                       info->callbacks->einfo
+                         (_("%H: cannot emit dynamic relocations"
+                            " in read-only section\n"),
+                          input_bfd, input_section, rel->r_offset);
                        return FALSE;
                      }
 
                        return FALSE;
                      }
 
@@ -3964,10 +3958,10 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
          if (silence_segment_error == 1)
            silence_segment_error =
              (strlen (input_bfd->filename) == 6
          if (silence_segment_error == 1)
            silence_segment_error =
              (strlen (input_bfd->filename) == 6
-              && strcmp (input_bfd->filename, "crt0.o") == 0)
+              && filename_cmp (input_bfd->filename, "crt0.o") == 0)
              || (strlen (input_bfd->filename) > 6
              || (strlen (input_bfd->filename) > 6
-                 && strcmp (input_bfd->filename
-                            + strlen (input_bfd->filename) - 7,
+                 && filename_cmp (input_bfd->filename
+                                  + strlen (input_bfd->filename) - 7,
                             "/crt0.o") == 0)
              ? -1 : 0;
          if (!silence_segment_error
                             "/crt0.o") == 0)
              ? -1 : 0;
          if (!silence_segment_error
@@ -3976,16 +3970,9 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
              && !(picrel && picrel->symndx == -1
                   && picrel->d.h->root.type == bfd_link_hash_undefined))
            {
              && !(picrel && picrel->symndx == -1
                   && picrel->d.h->root.type == bfd_link_hash_undefined))
            {
-             if (info->shared || info->pie)
-               (*_bfd_error_handler)
-                 (_("%B(%A+0x%lx): reloc against `%s': %s"),
-                  input_bfd, input_section, (long)rel->r_offset, name,
-                  _("relocation references a different segment"));
-             else
-               info->callbacks->warning
-                 (info,
-                  _("relocation references a different segment"),
-                  name, input_bfd, input_section, rel->r_offset);
+             info->callbacks->einfo
+               (_("%H: reloc against `%s' references a different segment\n"),
+                input_bfd, input_section, rel->r_offset, name);
            }
          if (!silence_segment_error && (info->shared || info->pie))
            return FALSE;
            }
          if (!silence_segment_error && (info->shared || info->pie))
            return FALSE;
@@ -4133,9 +4120,9 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
 
          if (msg)
            {
 
          if (msg)
            {
-             (*_bfd_error_handler)
-               (_("%B(%A+0x%lx): reloc against `%s': %s"),
-                input_bfd, input_section, (long)rel->r_offset, name, msg);
+             info->callbacks->einfo
+               (_("%H: reloc against `%s': %s\n"),
+                input_bfd, input_section, rel->r_offset, name, msg);
              return FALSE;
            }
 
              return FALSE;
            }
 
@@ -5694,7 +5681,7 @@ frvfdpic_elf_discard_info (bfd *ibfd,
 
   /* Account for relaxation of .eh_frame section.  */
   for (s = ibfd->sections; s; s = s->next)
 
   /* Account for relaxation of .eh_frame section.  */
   for (s = ibfd->sections; s; s = s->next)
-    if (s->sec_info_type == ELF_INFO_TYPE_EH_FRAME)
+    if (s->sec_info_type == SEC_INFO_TYPE_EH_FRAME)
       {
        if (!_frvfdpic_check_discarded_relocs (ibfd, s, info, &changed))
          return FALSE;
       {
        if (!_frvfdpic_check_discarded_relocs (ibfd, s, info, &changed))
          return FALSE;
@@ -5889,8 +5876,8 @@ elf32_frvfdpic_finish_dynamic_sections (bfd *output_bfd,
              != (frvfdpic_gotfixup_section (info)->reloc_count * 4))
            {
            error:
              != (frvfdpic_gotfixup_section (info)->reloc_count * 4))
            {
            error:
-             (*_bfd_error_handler)
-               ("LINKER BUG: .rofixup section size mismatch");
+             info->callbacks->einfo
+               ("LINKER BUG: .rofixup section size mismatch\n");
              return FALSE;
            }
 
              return FALSE;
            }
 
@@ -6409,8 +6396,8 @@ elf32_frv_check_relocs (abfd, info, sec, relocs)
 
        default:
        bad_reloc:
 
        default:
        bad_reloc:
-         (*_bfd_error_handler)
-           (_("%B: unsupported relocation type %i"),
+         info->callbacks->einfo
+           (_("%B: unsupported relocation type %i\n"),
             abfd, ELF32_R_TYPE (rel->r_info));
          return FALSE;
         }
             abfd, ELF32_R_TYPE (rel->r_info));
          return FALSE;
         }
This page took 0.030156 seconds and 4 git commands to generate.