+2013-03-23  Alan Modra  <amodra@gmail.com>
+
+       PR ld/15270
+       * elflink.c (elf_link_add_object_symbols): Don't set def_regular
+       or ref_regular for BFD_PLUGIN owned syms, or have them affect
+       def_dynamic/ref_dynamic.
+       (_bfd_elf_fix_symbol_flags): Don't set def_regular for BFD_PLUGIN
+       owned syms.
+
 2013-03-22  David S. Miller  <davem@davemloft.net>
 
        * elfxx-sparc.c (_bfd_sparc_elf_merge_private_bfd_data): Set type of
 
       && !h->def_regular
       && h->ref_regular
       && !h->def_dynamic
-      && (h->root.u.def.section->owner->flags & DYNAMIC) == 0)
+      && (h->root.u.def.section->owner->flags & (DYNAMIC | BFD_PLUGIN)) == 0)
     h->def_regular = 1;
 
   /* If -Bsymbolic was used (which means to bind references to global
             is one which is referenced or defined by both a regular
             object and a shared object.  */
          dynsym = FALSE;
-         if (! dynamic)
+
+         /* Plugin symbols aren't normal.  Don't set def_regular or
+            ref_regular for them, nor make them dynamic.  */
+         if ((abfd->flags & BFD_PLUGIN) != 0)
+           ;
+         else if (! dynamic)
            {
              if (! definition)
                {
          if (definition && (sec->flags & SEC_DEBUGGING) && !info->relocatable)
            dynsym = FALSE;
 
-         /* Nor should we make plugin symbols dynamic.  */
-         if ((abfd->flags & BFD_PLUGIN) != 0)
-           dynsym = FALSE;
-
          if (definition)
            {
              h->target_internal = isym->st_target_internal;