+1999-06-22  Ian Lance Taylor  <ian@zembu.com>
+
+       From Franz Sirl <Franz.Sirl-kernel@lauterbach.com>:
+       * elf32-ppc.c (ppc_elf_size_dynamic_sections): Set unused dynindx
+       field to 0, not -1.
+       (ppc_elf_finish_dynamic_sections): Check for positive section
+       dynindx field, rather than comparing against -1.
+       (ppc_elf_relocate_section): Only return false if undefined_symbol
+       or reloc_overflow fail, not always upon encountering an error.
+
 1999-06-22  Mark Mitchell  <mark@codesourcery.com>
 
        * elflink.h (link_read_relocs): Explicitly cast external_relocs to
 
          if ((s->flags & SEC_LINKER_CREATED) != 0
              || (s->flags & SEC_ALLOC) == 0)
            {
-             elf_section_data (s)->dynindx = -1;
+             elf_section_data (s)->dynindx = 0;
              continue;
            }
 
 
          indx = elf_section_data (s)->this_idx;
          dindx = elf_section_data (s)->dynindx;
-         if (dindx != -1)
+         if (dindx > 0)
            {
              BFD_ASSERT(indx > 0);
              BFD_ASSERT(dindx > 0);
            relocation = 0;
          else
            {
-             (*info->callbacks->undefined_symbol)(info,
-                                                  h->root.root.string,
-                                                  input_bfd,
-                                                  input_section,
-                                                  rel->r_offset);
-             ret = false;
+             if (! (*info->callbacks->undefined_symbol)(info,
+                                                        h->root.root.string,
+                                                        input_bfd,
+                                                        input_section,
+                                                        rel->r_offset))
+               return false;
+             relocation = 0;
              continue;
            }
        }
                  || h->root.type == bfd_link_hash_defweak)
              && sec->output_section == NULL)
            {
-             (*info->callbacks->undefined_symbol) (info,
-                                                   h->root.root.string,
-                                                   input_bfd,
-                                                   input_section,
-                                                   rel->r_offset);
-             ret = false;
+             if (! (*info->callbacks->undefined_symbol) (info,
+                                                         h->root.root.string,
+                                                         input_bfd,
+                                                         input_section,
+                                                         rel->r_offset))
+               return false;
              continue;
            }
          break;
                name = bfd_section_name (input_bfd, sec);
            }
 
-         (*info->callbacks->reloc_overflow)(info,
-                                            name,
-                                            howto->name,
-                                            (bfd_vma) 0,
-                                            input_bfd,
-                                            input_section,
-                                            offset);
-         ret = false;
+         if (! (*info->callbacks->reloc_overflow)(info,
+                                                  name,
+                                                  howto->name,
+                                                  (bfd_vma) 0,
+                                                  input_bfd,
+                                                  input_section,
+                                                  offset))
+           return false;
        }
       else
        ret = false;