2005-08-09 H.J. Lu <hongjiu.lu@intel.com>
authorH.J. Lu <hjl.tools@gmail.com>
Wed, 10 Aug 2005 04:32:49 +0000 (04:32 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Wed, 10 Aug 2005 04:32:49 +0000 (04:32 +0000)
* elfxx-ia64.c (elfNN_ia64_final_link): Reset gp.

bfd/ChangeLog
bfd/elfxx-ia64.c

index 875a2e9..97c62c7 100644 (file)
@@ -1,3 +1,7 @@
+2005-08-09  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * elfxx-ia64.c (elfNN_ia64_final_link): Reset gp.
+
 2005-08-09  Rodney Brown  <rbrown@bravurasolutions.com.au>
            Nick Clifton  <nickc@redhat.com>
 
index 85f715c..140a0c9 100644 (file)
@@ -3981,15 +3981,15 @@ elfNN_ia64_final_link (abfd, info)
   /* Make sure we've got ourselves a nice fat __gp value.  */
   if (!info->relocatable)
     {
-      bfd_vma gp_val = _bfd_get_gp_value (abfd);
+      bfd_vma gp_val;
       struct elf_link_hash_entry *gp;
 
-      if (gp_val == 0)
-       {
-         if (! elfNN_ia64_choose_gp (abfd, info))
-           return FALSE;
-         gp_val = _bfd_get_gp_value (abfd);
-       }
+      /* We assume after gp is set, section size will only decrease. We
+        need to adjust gp for it.  */
+      _bfd_set_gp_value (abfd, 0);
+      if (! elfNN_ia64_choose_gp (abfd, info))
+       return FALSE;
+      gp_val = _bfd_get_gp_value (abfd);
 
       gp = elf_link_hash_lookup (elf_hash_table (info), "__gp", FALSE,
                                 FALSE, FALSE);