2004-06-29 H.J. Lu <hongjiu.lu@intel.com>
authorH.J. Lu <hjl.tools@gmail.com>
Wed, 30 Jun 2004 03:51:25 +0000 (03:51 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Wed, 30 Jun 2004 03:51:25 +0000 (03:51 +0000)
PR 240
* elfxx-ia64.c (elfNN_ia64_relax_section): Don't relax branch
in .init/.fini sections.

bfd/ChangeLog
bfd/elfxx-ia64.c

index 3c0e12a..78bcea5 100644 (file)
@@ -1,3 +1,9 @@
+2004-06-29  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR 240
+       * elfxx-ia64.c (elfNN_ia64_relax_section): Don't relax branch
+       in .init/.fini sections.
+
 2004-06-29  Bob Wilson  <bob.wilson@acm.org>
 
        * elf32-xtensa.c (elf_xtensa_relocate_section): Use
index 6f0c06e..d8c4b57 100644 (file)
@@ -943,6 +943,19 @@ elfNN_ia64_relax_section (abfd, sec, link_info, again)
        {
          bfd_signed_vma offset;
 
+         /* We can't put a trampoline in a .init/.fini section. Issue
+            an error.  */
+         if (strcmp (sec->output_section->name, ".init") == 0
+             || strcmp (sec->output_section->name, ".fini") == 0)
+           {
+             (*_bfd_error_handler)
+               (_("%s: Can't relax br at 0x%lx in section `%s'. Please use brl or indirect branch."),
+                bfd_archive_filename (sec->owner),
+                (unsigned long) roff, sec->name);
+             bfd_set_error (bfd_error_bad_value);
+             goto error_return;
+           }
+
          reladdr = (sec->output_section->vma
                     + sec->output_offset
                     + roff) & (bfd_vma) -4;