OSDN Git Service

2008-12-23 H.J. Lu <hongjiu.lu@intel.com>
authorH.J. Lu <hjl@lucon.org>
Tue, 23 Dec 2008 14:36:39 +0000 (14:36 +0000)
committerH.J. Lu <hjl@lucon.org>
Tue, 23 Dec 2008 14:36:39 +0000 (14:36 +0000)
PR ld/7036
* elfxx-ia64.c (elfNN_ia64_relax_section): Assume linker will
always insert 32byte between the .plt and .text sections after
the the first relaxation pass.

bfd/ChangeLog
bfd/elfxx-ia64.c

index 13d495d..8e71db7 100644 (file)
@@ -1,3 +1,10 @@
+2008-12-23  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR ld/7036
+       * elfxx-ia64.c (elfNN_ia64_relax_section): Assume linker will
+       always insert 32byte between the .plt and .text sections after
+       the the first relaxation pass.
+
 2008-12-23  Nick Clifton  <nickc@redhat.com>
 
        PR 7093
index d662c74..801c25b 100644 (file)
@@ -994,8 +994,20 @@ elfNN_ia64_relax_section (bfd *abfd, asection *sec,
                     + sec->output_offset
                     + roff) & (bfd_vma) -4;
 
+         /* The .plt section is aligned at 32byte and the .text section
+            is aligned at 64byte. The .text section is right after the
+            .plt section.  After the first relaxation pass, linker may
+            increase the gap between the .plt and .text sections up
+            to 32byte.  We assume linker will always insert 32byte
+            between the .plt and .text sections after the the first
+            relaxation pass.  */
+         if (tsec == ia64_info->plt_sec)
+           offset = -0x1000000 + 32;
+         else
+           offset = -0x1000000;
+
          /* If the branch is in range, no need to do anything.  */
-         if ((bfd_signed_vma) (symaddr - reladdr) >= -0x1000000
+         if ((bfd_signed_vma) (symaddr - reladdr) >= offset 
              && (bfd_signed_vma) (symaddr - reladdr) <= 0x0FFFFF0)
            {
              /* If the 60-bit branch is in 21-bit range, optimize it. */