switch (which)
        {
        default:
-         (*_bfd_error_handler) (_("%s: Unknown special linker type %d"),
+         (*_bfd_error_handler) (_("%s: unknown special linker type %d"),
                                 bfd_get_filename (abfd),
                                 (int) which);
 
    copying dynamic variables from a shared lib into an app's dynbss
    section, and instead use a dynamic relocation to point into the
    shared lib.  */
-#define ELIMINATE_COPY_RELOCS 1
+#define ELIMINATE_COPY_RELOCS 0
 
 /* Adjust a symbol defined by a dynamic object and referenced by a
    regular object.  The current definition is in some section of the
                      {
                        bfd_vma value = relocation;
 
-                       if ((tls_ty & (TLS_GD | TLS_TPREL | TLS_DTPREL
-                                      | TLS_TPRELGD)) != 0)
+                       if (tls_ty == (TLS_TLS | TLS_LD))
+                         value = 1;
+                       else if (tls_ty != 0)
                          {
                            value -= htab->tls_sec->vma + DTP_OFFSET;
-                           if ((tls_ty & TLS_TPREL) != 0)
+                           if (tls_ty == (TLS_TLS | TLS_TPREL))
                              value += DTP_OFFSET - TP_OFFSET;
-                         }
 
-                       if (tls_ty == (TLS_TLS | TLS_GD))
-                         {
-                           bfd_put_32 (output_bfd, value,
-                                       htab->got->contents + off + 4);
-                           value = 1;
+                           if (tls_ty == (TLS_TLS | TLS_GD))
+                             {
+                               bfd_put_32 (output_bfd, value,
+                                           htab->got->contents + off + 4);
+                               value = 1;
+                             }
                          }
-                       else if (tls_ty == (TLS_TLS | TLS_LD))
-                         value = 1;
                        bfd_put_32 (output_bfd, value,
                                    htab->got->contents + off);
                      }
               got at entry m+n bears little relation to the entry m.  */
            if (addend != 0)
              (*_bfd_error_handler)
-               (_("%s(%s+0x%lx): non-zero addend on got reloc against `%s'"),
+               (_("%s(%s+0x%lx): non-zero addend on %s reloc against `%s'"),
                 bfd_archive_filename (input_bfd),
                 bfd_get_section_name (input_bfd, input_section),
                 (long) rel->r_offset,
+                howto->name,
                 sym_name);
          }
        break;
        case R_PPC_LOCAL24PC:
          /* It makes no sense to point a local relocation
             at a symbol not in this object.  */
-         if (h != NULL
-             && (h->root.type == bfd_link_hash_defined
-                 || h->root.type == bfd_link_hash_defweak)
-             && sec->output_section == NULL)
+         if (unresolved_reloc)
            {
              if (! (*info->callbacks->undefined_symbol) (info,
                                                          h->root.root.string,
 
              if (skip)
                memset (&outrel, 0, sizeof outrel);
-             /* h->dynindx may be -1 if this symbol was marked to
-                become local.  */
              else if (h != NULL
                       && !SYMBOL_REFERENCES_LOCAL (info, h))
                {
                   || (strncmp (name, ".sbss", 5) == 0
                       && (name[5] == 0 || name[5] == '.'))))
              {
-               (*_bfd_error_handler) (_("%s: The target (%s) of a %s relocation is in the wrong output section (%s)"),
+               (*_bfd_error_handler) (_("%s: the target (%s) of a %s relocation is in the wrong output section (%s)"),
                                       bfd_archive_filename (input_bfd),
                                       sym_name,
                                       howto->name,
            if (! (strncmp (name, ".sdata2", 7) == 0
                   || strncmp (name, ".sbss2", 6) == 0))
              {
-               (*_bfd_error_handler) (_("%s: The target (%s) of a %s relocation is in the wrong output section (%s)"),
+               (*_bfd_error_handler) (_("%s: the target (%s) of a %s relocation is in the wrong output section (%s)"),
                                       bfd_archive_filename (input_bfd),
                                       sym_name,
                                       howto->name,
 
            else
              {
-               (*_bfd_error_handler) (_("%s: The target (%s) of a %s relocation is in the wrong output section (%s)"),
+               (*_bfd_error_handler) (_("%s: the target (%s) of a %s relocation is in the wrong output section (%s)"),
                                       bfd_archive_filename (input_bfd),
                                       sym_name,
                                       howto->name,
        case R_PPC_EMB_RELST_HA:
        case R_PPC_EMB_BIT_FLD:
          (*_bfd_error_handler)
-           (_("%s: Relocation %s is not yet supported for symbol %s."),
+           (_("%s: relocation %s is not yet supported for symbol %s."),
             bfd_archive_filename (input_bfd),
             howto->name,
             sym_name);
        case R_PPC_EMB_NADDR16_HA:
        case R_PPC_EMB_RELST_HA:
          /* It's just possible that this symbol is a weak symbol
-            that's not actually defined anywhere. In that case,
+            that's not actually defined anywhere.  In that case,
             'sec' would be NULL, and we should leave the symbol
             alone (it will be set to zero elsewhere in the link).  */
          if (sec != NULL)
               && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0))
        {
          (*_bfd_error_handler)
-           (_("%s(%s+0x%lx): unresolvable relocation against symbol `%s'"),
+           (_("%s(%s+0x%lx): unresolvable %s relocation against symbol `%s'"),
             bfd_archive_filename (input_bfd),
             bfd_get_section_name (input_bfd, input_section),
             (long) rel->r_offset,
+            howto->name,
             sym_name);
          ret = FALSE;
        }
          else
            {
              (*_bfd_error_handler)
-               (_("%s(%s+0x%lx): reloc against `%s': error %d"),
+               (_("%s(%s+0x%lx): %s reloc against `%s': error %d"),
                 bfd_archive_filename (input_bfd),
                 bfd_get_section_name (input_bfd, input_section),
-                (long) rel->r_offset, sym_name, (int) r);
+                (long) rel->r_offset, howto->name, sym_name, (int) r);
              ret = FALSE;
            }
        }
 
    copying dynamic variables from a shared lib into an app's dynbss
    section, and instead use a dynamic relocation to point into the
    shared lib.  */
-#define ELIMINATE_COPY_RELOCS 1
+#define ELIMINATE_COPY_RELOCS 0
 
 /* Section name for stubs is the associated section name plus this
    string.  */
                else
                  {
                    relocation += rel->r_addend;
-                   if (tls_type != 0)
+                   if (tls_type == (TLS_TLS | TLS_LD))
+                     relocation = 1;
+                   else if (tls_type != 0)
                      {
                        relocation -= htab->tls_sec->vma + DTP_OFFSET;
-                       if ((tls_type & TLS_TPREL) != 0)
+                       if (tls_type == (TLS_TLS | TLS_TPREL))
                          relocation += DTP_OFFSET - TP_OFFSET;
-                     }
 
-                   if ((tls_type & TLS_GD) != 0)
-                     {
-                       bfd_put_64 (output_bfd, relocation,
-                                   htab->sgot->contents + off + 8);
-                       relocation = 1;
+                       if (tls_type == (TLS_TLS | TLS_GD))
+                         {
+                           bfd_put_64 (output_bfd, relocation,
+                                       htab->sgot->contents + off + 8);
+                           relocation = 1;
+                         }
                      }
-                   else if (tls_type == (TLS_TLS | TLS_LD))
-                     relocation = 1;
+
                    bfd_put_64 (output_bfd, relocation,
                                htab->sgot->contents + off);
                  }
          /* These ones haven't been implemented yet.  */
 
          (*_bfd_error_handler)
-           (_("%s: Relocation %s is not supported for symbol %s."),
+           (_("%s: relocation %s is not supported for symbol %s."),
             bfd_archive_filename (input_bfd),
             ppc64_elf_howto_table[(int) r_type]->name, sym_name);
 
               && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0))
        {
          (*_bfd_error_handler)
-           (_("%s(%s+0x%lx): unresolvable relocation against symbol `%s'"),
+           (_("%s(%s+0x%lx): unresolvable %s relocation against symbol `%s'"),
             bfd_archive_filename (input_bfd),
             bfd_get_section_name (input_bfd, input_section),
             (long) rel->r_offset,
+            ppc64_elf_howto_table[(int) r_type]->name,
             h->root.root.string);
          ret = FALSE;
        }
          else
            {
              (*_bfd_error_handler)
-               (_("%s(%s+0x%lx): reloc against `%s': error %d"),
+               (_("%s(%s+0x%lx): %s reloc against `%s': error %d"),
                 bfd_archive_filename (input_bfd),
                 bfd_get_section_name (input_bfd, input_section),
-                (long) rel->r_offset, sym_name, (int) r);
+                (long) rel->r_offset,
+                ppc64_elf_howto_table[(int) r_type]->name,
+                sym_name,
+                (int) r);
              ret = FALSE;
            }
        }