2001-02-18 H.J. Lu <hjl@gnu.org>
authorH.J. Lu <hjl.tools@gmail.com>
Sun, 18 Feb 2001 22:04:08 +0000 (22:04 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Sun, 18 Feb 2001 22:04:08 +0000 (22:04 +0000)
* elflink.h (elf_link_input_bfd): Ignore invalid section symbol
index.

bfd/ChangeLog
bfd/elflink.h

index c07c5e51d2ee6a79f85ebc4370de2f602b56c7d6..945af2ad61b719b65a1984d71f716cf24fffeda2 100644 (file)
@@ -1,3 +1,8 @@
+2001-02-18  H.J. Lu  <hjl@gnu.org>
+
+       * elflink.h (elf_link_input_bfd): Ignore invalid section symbol
+       index.
+
 2001-02-18  Kazu Hirata  <kazu@hxi.com>
 
        * vms-misc.c: Fix formatting.
index 5cbbcbbe6c9d0c583b320845f86e73255fe39d86..8605c736ce68269163026ff9a7fe7fbb826f6527 100644 (file)
@@ -5515,14 +5515,24 @@ elf_link_input_bfd (finfo, input_bfd)
            }
        }
 
+      name = NULL;
       if (isym->st_shndx == SHN_UNDEF)
-       isec = bfd_und_section_ptr;
+        {
+         isec = bfd_und_section_ptr;
+         name = isec->name;
+       }
       else if (isym->st_shndx > 0 && isym->st_shndx < SHN_LORESERVE)
        isec = section_from_elf_index (input_bfd, isym->st_shndx);
       else if (isym->st_shndx == SHN_ABS)
-       isec = bfd_abs_section_ptr;
+       {
+         isec = bfd_abs_section_ptr;
+         name = isec->name;
+       }
       else if (isym->st_shndx == SHN_COMMON)
-       isec = bfd_com_section_ptr;
+       {
+         isec = bfd_com_section_ptr;
+         name = isec->name;
+       }
       else
        {
          /* Who knows?  */
@@ -5541,7 +5551,18 @@ elf_link_input_bfd (finfo, input_bfd)
 
          /* Save away all section symbol values.  */
          if (isec != NULL)
-           isec->symbol->value = isym->st_value;
+           {
+             if (name)
+               {
+                 if (isec->symbol->value != isym->st_value)
+                   (*_bfd_error_handler)
+                     (_("%s: invalid section symbol index 0x%x (%s) ingored"),
+                      bfd_get_filename (input_bfd), isym->st_shndx,
+                      name);
+                 continue;
+               }
+             isec->symbol->value = isym->st_value;
+           }
 
          /* If this is a discarded link-once section symbol, update
             it's value to that of the kept section symbol.  The