if it is in the *ABS* section.
+2005-07-29  David Daney  <ddaney@avtrex.com>
+
+       * elfxx-mips.c (_bfd_mips_elf_add_symbol_hook):  Ignore _gp_disp
+       if it is in the *ABS* section.
+
 2005-07-29  Paul Brook  <paul@codesourcery.com>
 
        * reloc.c: Add BFD_RELOC_ARM_T32_ADD_PC12.
 
       return TRUE;
     }
 
+  /* Shared objects may have a dynamic symbol '_gp_disp' defined as
+     a SECTION *ABS*.  This causes ld to think it can resolve _gp_disp
+     by setting a DT_NEEDED for the shared object.  Since _gp_disp is
+     a magic symbol resolved by the linker, we ignore this bogus definition
+     of _gp_disp.  New ABI objects do not suffer from this problem so this
+     is not done for them. */
+  if (!NEWABI_P(abfd)
+      && (sym->st_shndx == SHN_ABS)
+      && (strcmp (*namep, "_gp_disp") == 0))
+    {
+      *namep = NULL;
+      return TRUE;
+    }
+
   switch (sym->st_shndx)
     {
     case SHN_COMMON: