2005-04-27 H.J. Lu <hongjiu.lu@intel.com>
authorH.J. Lu <hjl.tools@gmail.com>
Thu, 28 Apr 2005 02:41:40 +0000 (02:41 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Thu, 28 Apr 2005 02:41:40 +0000 (02:41 +0000)
* emultempl/elf32.em (gld${EMULATION_NAME}_provide_bound_symbols):
Use the first SEC_ALLOC section which isn't SEC_READONLY or the
last SEC_ALLOC section if such a section doesn't exist.

ld/ChangeLog
ld/emultempl/elf32.em

index 9e4e2593437dec4f1c60c96f3dfe9eb6046968ad..cd6e7ce17e54665964388929b8dd1896321d436e 100644 (file)
@@ -1,3 +1,9 @@
+2005-04-27  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * emultempl/elf32.em (gld${EMULATION_NAME}_provide_bound_symbols):
+       Use the first SEC_ALLOC section which isn't SEC_READONLY or the
+       last SEC_ALLOC section if such a section doesn't exist.
+
 2005-04-24  Mark Kettenis  <kettenis@gnu.org>
 
        * configure.host: Add *-*-openbsd support.
index 87edf6f0a456d0f56d32aeb6468d1f9a059f958e..9bcafef232961ae9ff6317490538c14228eec93e 100644 (file)
@@ -1457,8 +1457,21 @@ gld${EMULATION_NAME}_provide_bound_symbols (const char *sec,
     }
   else
     {
+      /* We have to choose those values very carefully.  Some targets,
+        like alpha, may have relocation overflow with 0.  We use the
+        first SEC_ALLOC section which isn't SEC_READONLY or the last
+        SEC_ALLOC section.   */
       start_val = 0;
-      end_val = 0;
+      for (s = output_bfd->sections; s != NULL; s = s->next)
+       {
+         if ((s->flags & SEC_ALLOC) != 0)
+           {
+             start_val = s->vma;
+             if ((s->flags & SEC_READONLY) == 0)
+               break;
+           }
+       }
+      end_val = start_val;
     }
   _bfd_elf_provide_symbol (&link_info, start, start_val);
   _bfd_elf_provide_symbol (&link_info, end, end_val);