+2012-04-24  Hans-Peter Nilsson  <hp@axis.com>
+
+       PR ld/13990
+       * elf32-arm.c (elf32_arm_gc_sweep_hook): Handle a forced-local
+       symbol, where PLT refcount is set to -1.
+
 2012-04-24  Alan Modra  <amodra@gmail.com>
 
        PR ld/13991
 
       if (may_need_local_target_p
          && elf32_arm_get_plt_info (abfd, eh, r_symndx, &root_plt, &arm_plt))
        {
-         BFD_ASSERT (root_plt->refcount > 0);
-         root_plt->refcount -= 1;
+         /* If PLT refcount book-keeping is wrong and too low, we'll
+            see a zero value (going to -1) for the root PLT reference
+            count.  */
+         if (root_plt->refcount >= 0)
+           {
+             BFD_ASSERT (root_plt->refcount != 0);
+             root_plt->refcount -= 1;
+           }
+         else
+           /* A value of -1 means the symbol has become local, forced
+              or seeing a hidden definition.  Any other negative value
+              is an error.  */
+           BFD_ASSERT (root_plt->refcount == -1);
 
          if (!call_reloc_p)
            arm_plt->noncall_refcount--;