PR ld/15323
authorAlan Modra <amodra@gmail.com>
Sat, 30 Mar 2013 10:14:15 +0000 (10:14 +0000)
committerAlan Modra <amodra@gmail.com>
Sat, 30 Mar 2013 10:14:15 +0000 (10:14 +0000)
bfd/
* elf-m10300.c (mn10300_elf_check_relocs): Set non_ir_ref for
global symbols referenced by relocs.
* elf32-arm.c (elf32_arm_check_relocs): Likewise.
* elf32-bfin.c (bfin_check_relocs): Likewise.
* elf32-cr16.c (cr16_elf_check_relocs): Likewise.
* elf32-cris.c (cris_elf_check_relocs): Likewise.
* elf32-d10v.c (elf32_d10v_check_relocs): Likewise.
* elf32-dlx.c (elf32_dlx_check_relocs): Likewise.
* elf32-fr30.c (fr30_elf_check_relocs): Likewise.
* elf32-frv.c (elf32_frv_check_relocs): Likewise.
* elf32-hppa.c (elf32_hppa_check_relocs): Likewise.
* elf32-i370.c (i370_elf_check_relocs): Likewise.
* elf32-iq2000.c (iq2000_elf_check_relocs): Likewise.
* elf32-lm32.c (lm32_elf_check_relocs): Likewise.
* elf32-m32c.c (m32c_elf_check_relocs): Likewise.
* elf32-m32r.c (m32r_elf_check_relocs): Likewise.
* elf32-m68hc1x.c (elf32_m68hc11_check_relocs): Likewise.
* elf32-m68k.c (elf_m68k_check_relocs): Likewise.
* elf32-mcore.c (mcore_elf_check_relocs): Likewise.
* elf32-metag.c (elf_metag_check_relocs): Likewise.
* elf32-microblaze.c (microblaze_elf_check_relocs): Likewise.
* elf32-moxie.c (moxie_elf_check_relocs): Likewise.
* elf32-msp430.c (elf32_msp430_check_relocs): Likewise.
* elf32-mt.c (mt_elf_check_relocs): Likewise.
* elf32-nios2.c (nios2_elf32_check_relocs): Likewise.
* elf32-openrisc.c (openrisc_elf_check_relocs): Likewise.
* elf32-ppc.c (ppc_elf_check_relocs): Likewise.
* elf32-rl78.c (rl78_elf_check_relocs): Likewise.
* elf32-s390.c (elf_s390_check_relocs): Likewise.
* elf32-score.c (s3_bfd_score_elf_check_relocs): Likewise.
* elf32-score7.c (s7_bfd_score_elf_check_relocs): Likewise.
* elf32-sh.c (sh_elf_check_relocs): Likewise.
* elf32-tic6x.c (elf32_tic6x_check_relocs): Likewise.
* elf32-tilepro.c (tilepro_elf_check_relocs): Likewise.
* elf32-v850.c (v850_elf_check_relocs): Likewise.
* elf32-vax.c (elf_vax_check_relocs): Likewise.
* elf32-xstormy16.c (xstormy16_elf_check_relocs): Likewise.
* elf32-xtensa.c (elf_xtensa_check_relocs): Likewise.
* elf64-aarch64.c (elf64_aarch64_check_relocs): Likewise.
* elf64-alpha.c (elf64_alpha_check_relocs): Likewise.
* elf64-hppa.c (elf64_hppa_check_relocs): Likewise.
* elf64-ia64-vms.c (elf64_ia64_check_relocs): Likewise.
* elf64-mmix.c (mmix_elf_check_relocs): Likewise.
* elf64-ppc.c (ppc64_elf_check_relocs): Likewise.
* elf64-s390.c (elf_s390_check_relocs): Likewise.
* elf64-sh64.c (sh_elf64_check_relocs): Likewise.
* elfnn-ia64.c (elfNN_ia64_check_relocs): Likewise.
* elfxx-sparc.c (_bfd_sparc_elf_check_relocs): Likewise.
* elfxx-tilegx.c (tilegx_elf_check_relocs): Likewise.
* elfxx-mips.c (_bfd_mips_elf_check_relocs): Likewise.  Don't
test indirect/warning links for NULL.
ld/testsuite/
* ld-plugin/lto.exp (pr15323a.c): Compile without -flto rather
than using -r to effectively strip out lto info.

52 files changed:
bfd/ChangeLog
bfd/elf-m10300.c
bfd/elf32-arm.c
bfd/elf32-bfin.c
bfd/elf32-cr16.c
bfd/elf32-cris.c
bfd/elf32-d10v.c
bfd/elf32-dlx.c
bfd/elf32-fr30.c
bfd/elf32-frv.c
bfd/elf32-hppa.c
bfd/elf32-i370.c
bfd/elf32-iq2000.c
bfd/elf32-lm32.c
bfd/elf32-m32c.c
bfd/elf32-m32r.c
bfd/elf32-m68hc1x.c
bfd/elf32-m68k.c
bfd/elf32-mcore.c
bfd/elf32-metag.c
bfd/elf32-microblaze.c
bfd/elf32-moxie.c
bfd/elf32-msp430.c
bfd/elf32-mt.c
bfd/elf32-nios2.c
bfd/elf32-openrisc.c
bfd/elf32-ppc.c
bfd/elf32-rl78.c
bfd/elf32-s390.c
bfd/elf32-score.c
bfd/elf32-score7.c
bfd/elf32-sh.c
bfd/elf32-tic6x.c
bfd/elf32-tilepro.c
bfd/elf32-v850.c
bfd/elf32-vax.c
bfd/elf32-xstormy16.c
bfd/elf32-xtensa.c
bfd/elf64-aarch64.c
bfd/elf64-alpha.c
bfd/elf64-hppa.c
bfd/elf64-ia64-vms.c
bfd/elf64-mmix.c
bfd/elf64-ppc.c
bfd/elf64-s390.c
bfd/elf64-sh64.c
bfd/elfnn-ia64.c
bfd/elfxx-mips.c
bfd/elfxx-sparc.c
bfd/elfxx-tilegx.c
ld/testsuite/ChangeLog
ld/testsuite/ld-plugin/lto.exp

index ec62d9128d30749daf4e26c7d93337a6424bb530..ddb4577872e4187c8773bb2773619e1dca7da51f 100644 (file)
@@ -1,8 +1,63 @@
+2013-03-30  Alan Modra  <amodra@gmail.com>
+
+       PR ld/15323
+       * elf-m10300.c (mn10300_elf_check_relocs): Set non_ir_ref for
+       global symbols referenced by relocs.
+       * elf32-arm.c (elf32_arm_check_relocs): Likewise.
+       * elf32-bfin.c (bfin_check_relocs): Likewise.
+       * elf32-cr16.c (cr16_elf_check_relocs): Likewise.
+       * elf32-cris.c (cris_elf_check_relocs): Likewise.
+       * elf32-d10v.c (elf32_d10v_check_relocs): Likewise.
+       * elf32-dlx.c (elf32_dlx_check_relocs): Likewise.
+       * elf32-fr30.c (fr30_elf_check_relocs): Likewise.
+       * elf32-frv.c (elf32_frv_check_relocs): Likewise.
+       * elf32-hppa.c (elf32_hppa_check_relocs): Likewise.
+       * elf32-i370.c (i370_elf_check_relocs): Likewise.
+       * elf32-iq2000.c (iq2000_elf_check_relocs): Likewise.
+       * elf32-lm32.c (lm32_elf_check_relocs): Likewise.
+       * elf32-m32c.c (m32c_elf_check_relocs): Likewise.
+       * elf32-m32r.c (m32r_elf_check_relocs): Likewise.
+       * elf32-m68hc1x.c (elf32_m68hc11_check_relocs): Likewise.
+       * elf32-m68k.c (elf_m68k_check_relocs): Likewise.
+       * elf32-mcore.c (mcore_elf_check_relocs): Likewise.
+       * elf32-metag.c (elf_metag_check_relocs): Likewise.
+       * elf32-microblaze.c (microblaze_elf_check_relocs): Likewise.
+       * elf32-moxie.c (moxie_elf_check_relocs): Likewise.
+       * elf32-msp430.c (elf32_msp430_check_relocs): Likewise.
+       * elf32-mt.c (mt_elf_check_relocs): Likewise.
+       * elf32-nios2.c (nios2_elf32_check_relocs): Likewise.
+       * elf32-openrisc.c (openrisc_elf_check_relocs): Likewise.
+       * elf32-ppc.c (ppc_elf_check_relocs): Likewise.
+       * elf32-rl78.c (rl78_elf_check_relocs): Likewise.
+       * elf32-s390.c (elf_s390_check_relocs): Likewise.
+       * elf32-score.c (s3_bfd_score_elf_check_relocs): Likewise.
+       * elf32-score7.c (s7_bfd_score_elf_check_relocs): Likewise.
+       * elf32-sh.c (sh_elf_check_relocs): Likewise.
+       * elf32-tic6x.c (elf32_tic6x_check_relocs): Likewise.
+       * elf32-tilepro.c (tilepro_elf_check_relocs): Likewise.
+       * elf32-v850.c (v850_elf_check_relocs): Likewise.
+       * elf32-vax.c (elf_vax_check_relocs): Likewise.
+       * elf32-xstormy16.c (xstormy16_elf_check_relocs): Likewise.
+       * elf32-xtensa.c (elf_xtensa_check_relocs): Likewise.
+       * elf64-aarch64.c (elf64_aarch64_check_relocs): Likewise.
+       * elf64-alpha.c (elf64_alpha_check_relocs): Likewise.
+       * elf64-hppa.c (elf64_hppa_check_relocs): Likewise.
+       * elf64-ia64-vms.c (elf64_ia64_check_relocs): Likewise.
+       * elf64-mmix.c (mmix_elf_check_relocs): Likewise.
+       * elf64-ppc.c (ppc64_elf_check_relocs): Likewise.
+       * elf64-s390.c (elf_s390_check_relocs): Likewise.
+       * elf64-sh64.c (sh_elf64_check_relocs): Likewise.
+       * elfnn-ia64.c (elfNN_ia64_check_relocs): Likewise.
+       * elfxx-sparc.c (_bfd_sparc_elf_check_relocs): Likewise.
+       * elfxx-tilegx.c (tilegx_elf_check_relocs): Likewise.
+       * elfxx-mips.c (_bfd_mips_elf_check_relocs): Likewise.  Don't
+       test indirect/warning links for NULL.
+
 2013-03-29  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR ld/15323
        * elf32-i386.c (elf_i386_check_relocs): Set non_ir_ref if a
-       symbol is referenced by a non-shared object. 
+       symbol is referenced by a non-shared object.
        * elf64-x86-64.c (elf_x86_64_check_relocs): Likewise.
 
 2013-03-28  Joe Seymour  <jseymour@codesourcery.com>
index ffd873d7b3d24e4b422d1f6b4eb5616bf9e70084..c0a9309b7fff2c1800890e2a6941ff06f049140c 100644 (file)
@@ -1084,6 +1084,10 @@ mn10300_elf_check_relocs (bfd *abfd,
          while (h->root.type == bfd_link_hash_indirect
                 || h->root.type == bfd_link_hash_warning)
            h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         h->root.non_ir_ref = 1;
        }
 
       r_type = ELF32_R_TYPE (rel->r_info);
index 8e335e745bddace271a24b6b078ca886cb3af922..9fff630d6b07d135020a1e2a4919125b1e414fb8 100644 (file)
@@ -12465,6 +12465,10 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info,
              while (h->root.type == bfd_link_hash_indirect
                     || h->root.type == bfd_link_hash_warning)
                h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+             /* PR15323, ref flags aren't set for references in the
+                same object.  */
+             h->root.non_ir_ref = 1;
            }
        }
 
index d956da65a52ede0e120082e351ac4abaf5e4a6ab..d3d0f1c86ddfd25eb7e0fa52ee65b69d2605db70 100644 (file)
@@ -1187,7 +1187,13 @@ bfin_check_relocs (bfd * abfd,
       if (r_symndx < symtab_hdr->sh_info)
        h = NULL;
       else
-       h = sym_hashes[r_symndx - symtab_hdr->sh_info];
+       {
+         h = sym_hashes[r_symndx - symtab_hdr->sh_info];
+
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         h->root.non_ir_ref = 1;
+       }
 
       switch (ELF32_R_TYPE (rel->r_info))
        {
index 656caffb330ee8bd5b5521151d29c6b2b5a26781..8ed5af1c1b575460b4a77dd1903546abccb1f550 100644 (file)
@@ -725,6 +725,10 @@ cr16_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec,
           while (h->root.type == bfd_link_hash_indirect
                  || h->root.type == bfd_link_hash_warning)
             h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         h->root.non_ir_ref = 1;
         }
 
       /* Some relocs require a global offset table.  */
index ff2dfe336842c27d270e00f2f67021d33be4b81b..f40a07963be1a943a827fd4a1f4649b222ec058f 100644 (file)
@@ -3177,6 +3177,10 @@ cris_elf_check_relocs (bfd *abfd,
          while (h->root.type == bfd_link_hash_indirect
                 || h->root.type == bfd_link_hash_warning)
            h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         h->root.non_ir_ref = 1;
        }
 
       r_type = ELF32_R_TYPE (rel->r_info);
index 246e5f51650c4b3f0f8049f9bc5d8b0ddc34ed4c..f75c16ae7eca9d2a403740997e76e21003642082 100644 (file)
@@ -287,6 +287,10 @@ elf32_d10v_check_relocs (bfd *abfd,
          while (h->root.type == bfd_link_hash_indirect
                 || h->root.type == bfd_link_hash_warning)
            h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         h->root.non_ir_ref = 1;
        }
 
       switch (ELF32_R_TYPE (rel->r_info))
index 29b89104e9e776eb3e81985d7bb88eaff073b8f8..1379d3d788f980a7e5e6a8acb677839290a5dad4 100644 (file)
@@ -451,6 +451,10 @@ elf32_dlx_check_relocs (bfd *abfd,
          while (h->root.type == bfd_link_hash_indirect
                 || h->root.type == bfd_link_hash_warning)
            h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         h->root.non_ir_ref = 1;
        }
 
       switch (ELF32_R_TYPE (rel->r_info))
index fe7cf92152ce72cf6add72f3b172bc2d0bf615d4..3aed435dd951ed99fc85659a5dd20c8a724032ba 100644 (file)
@@ -671,6 +671,10 @@ fr30_elf_check_relocs (bfd *abfd,
          while (h->root.type == bfd_link_hash_indirect
                 || h->root.type == bfd_link_hash_warning)
            h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         h->root.non_ir_ref = 1;
        }
 
       switch (ELF32_R_TYPE (rel->r_info))
index efe731c3f3bf17f94f6690e0df534f35267f27e2..788c2997e8deb07c06d2c0055b620d87ea039887 100644 (file)
@@ -6046,6 +6046,10 @@ elf32_frv_check_relocs (bfd *abfd,
          while (h->root.type == bfd_link_hash_indirect
                 || h->root.type == bfd_link_hash_warning)
            h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         h->root.non_ir_ref = 1;
        }
 
       switch (ELF32_R_TYPE (rel->r_info))
index 8d21cee53d82abdb39106a50e70a5b2ec7cf81b8..4ffa3d2a78f818126281d47fa4c8d702c31ecbb9 100644 (file)
@@ -1169,6 +1169,10 @@ elf32_hppa_check_relocs (bfd *abfd,
          while (hh->eh.root.type == bfd_link_hash_indirect
                 || hh->eh.root.type == bfd_link_hash_warning)
            hh = hppa_elf_hash_entry (hh->eh.root.u.i.link);
+
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         hh->eh.root.non_ir_ref = 1;
        }
 
       r_type = ELF32_R_TYPE (rela->r_info);
index 5998db755a6290f2151ba666c4ab76e0e4707331..48e25f228afbd7b31471ee3a1117f36dd0cfe97b 100644 (file)
@@ -825,6 +825,10 @@ i370_elf_check_relocs (bfd *abfd,
          while (h->root.type == bfd_link_hash_indirect
                 || h->root.type == bfd_link_hash_warning)
            h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         h->root.non_ir_ref = 1;
        }
 
       if (info->shared)
index 8cf47758e3099415c0b06e6eb0e216b747b0473f..3a90a996982b9a297d55b810ba0996d9231bb25e 100644 (file)
@@ -478,6 +478,10 @@ iq2000_elf_check_relocs (bfd *abfd,
          while (h->root.type == bfd_link_hash_indirect
                 || h->root.type == bfd_link_hash_warning)
            h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         h->root.non_ir_ref = 1;
        }
 
       switch (ELF32_R_TYPE (rel->r_info))
index 6bbbec8a811c5d216942ed3ae84d774637306d67..df6f346467d5f2507639f48db005ea67cb3c3de5 100644 (file)
@@ -1305,6 +1305,10 @@ lm32_elf_check_relocs (bfd *abfd,
          while (h->root.type == bfd_link_hash_indirect
                 || h->root.type == bfd_link_hash_warning)
            h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         h->root.non_ir_ref = 1;
        }
 
       /* Some relocs require a global offset table.  */
index 88b8dacac18f62e2999e6e54d9e9e34f87a77941..5205b7b7ce5950bf8eb8a24a1522caa50bbf4179 100644 (file)
@@ -621,6 +621,10 @@ m32c_elf_check_relocs
          while (h->root.type == bfd_link_hash_indirect
                 || h->root.type == bfd_link_hash_warning)
            h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         h->root.non_ir_ref = 1;
        }
 
       switch (ELF32_R_TYPE (rel->r_info))
index 385f4cc87baa856c13b7aa59a6334a6fcdff6339..789a456ff14a424a66893734a5d43a7d32cc8b4a 100644 (file)
@@ -3746,6 +3746,10 @@ m32r_elf_check_relocs (bfd *abfd,
          while (h->root.type == bfd_link_hash_indirect
                 || h->root.type == bfd_link_hash_warning)
            h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         h->root.non_ir_ref = 1;
        }
 
       /* Some relocs require a global offset table.  */
index 98c2994462168fe182338a3abc06180cc32a42fb..427e3cd2d93906136dfad7e41a3e25709bfda594 100644 (file)
@@ -871,6 +871,10 @@ elf32_m68hc11_check_relocs (bfd *abfd, struct bfd_link_info *info,
          while (h->root.type == bfd_link_hash_indirect
                 || h->root.type == bfd_link_hash_warning)
            h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         h->root.non_ir_ref = 1;
        }
 
       switch (ELF32_R_TYPE (rel->r_info))
index 01b5d67d68ddda48d00d0aa3bb08ec4b089be1c7..b72bc83cd6adc19bad0d95613c29816921ea1a09 100644 (file)
@@ -2584,6 +2584,10 @@ elf_m68k_check_relocs (bfd *abfd,
          while (h->root.type == bfd_link_hash_indirect
                 || h->root.type == bfd_link_hash_warning)
            h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         h->root.non_ir_ref = 1;
        }
 
       switch (ELF32_R_TYPE (rel->r_info))
index 288394f783e6bbbbd37da52aed0eed6d4ecb925d..28ee2c49cf532d76c325f04e797d9a4db603d807 100644 (file)
@@ -613,6 +613,10 @@ mcore_elf_check_relocs (bfd * abfd,
          while (h->root.type == bfd_link_hash_indirect
                 || h->root.type == bfd_link_hash_warning)
            h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         h->root.non_ir_ref = 1;
        }
 
       switch (ELF32_R_TYPE (rel->r_info))
index 8f08bf6cf948dfcea5b4a5090b62599e0307da0d..8851845384b050a629935c00cc9e381e62d9e788 100644 (file)
@@ -2141,6 +2141,10 @@ elf_metag_check_relocs (bfd *abfd,
          while (hh->eh.root.type == bfd_link_hash_indirect
                 || hh->eh.root.type == bfd_link_hash_warning)
            hh = (struct elf_metag_link_hash_entry *) hh->eh.root.u.i.link;
+
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         hh->eh.root.non_ir_ref = 1;
        }
 
       /* Some relocs require a global offset table.  */
index 8aafe72da25e44a91e5467be0581e30de4ce029c..4a5e80dd86debb87c64ad1670105a3684b6eff7c 100644 (file)
@@ -2348,7 +2348,13 @@ microblaze_elf_check_relocs (bfd * abfd,
       if (r_symndx < symtab_hdr->sh_info)
         h = NULL;
       else
-        h = sym_hashes [r_symndx - symtab_hdr->sh_info];
+       {
+         h = sym_hashes [r_symndx - symtab_hdr->sh_info];
+
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         h->root.non_ir_ref = 1;
+       }
 
       switch (r_type)
         {
index 9a031b498f6efe29e3795de73b12f8fde34e6364..d0cbb0fab43973aa8e53753ba3aba2ab87bb6ec0 100644 (file)
@@ -356,6 +356,10 @@ moxie_elf_check_relocs (bfd *abfd,
          while (h->root.type == bfd_link_hash_indirect
                 || h->root.type == bfd_link_hash_warning)
            h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         h->root.non_ir_ref = 1;
        }
     }
 
index c08f596d1ac211ebb89f3b82df672e3c6d6fdf9d..b46e72ce0569485f710c192a945de210bef78da4 100644 (file)
@@ -266,6 +266,10 @@ elf32_msp430_check_relocs (bfd * abfd, struct bfd_link_info * info,
          while (h->root.type == bfd_link_hash_indirect
                 || h->root.type == bfd_link_hash_warning)
            h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         h->root.non_ir_ref = 1;
        }
     }
 
index ded95c94dfb852ee9f31fc9392353b4948528f5a..ea05c9117e4086eb321766a0941851f6e1819664 100644 (file)
@@ -453,6 +453,10 @@ mt_elf_check_relocs
          while (h->root.type == bfd_link_hash_indirect
                 || h->root.type == bfd_link_hash_warning)
            h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         h->root.non_ir_ref = 1;
        }
     }
 
index 91cbce43e861369c3fb79da883ad1a27ea61c307..eb472c16dc2cb8e04257ea33c5864f1484c8b33b 100644 (file)
@@ -2601,6 +2601,10 @@ nios2_elf32_check_relocs (bfd *abfd, struct bfd_link_info *info,
          while (h->root.type == bfd_link_hash_indirect
                 || h->root.type == bfd_link_hash_warning)
            h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         h->root.non_ir_ref = 1;
        }
 
       r_type = ELF32_R_TYPE (rel->r_info);
index 2b002abcc73b8c8e559e605eac4f8c83d19b2dc6..7abc938bc9792962c9698cb1db521696e14b786a 100644 (file)
@@ -486,6 +486,10 @@ openrisc_elf_check_relocs (bfd *abfd,
          while (h->root.type == bfd_link_hash_indirect
                 || h->root.type == bfd_link_hash_warning)
            h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         h->root.non_ir_ref = 1;
        }
 
       switch (ELF32_R_TYPE (rel->r_info))
index c1b53146a37c8b9178607886b468274ad6f6f9b0..f356c959fd6bbfe67850734579ff096330e3cb71 100644 (file)
@@ -3911,6 +3911,10 @@ ppc_elf_check_relocs (bfd *abfd,
          while (h->root.type == bfd_link_hash_indirect
                 || h->root.type == bfd_link_hash_warning)
            h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         h->root.non_ir_ref = 1;
        }
 
       /* If a relocation refers to _GLOBAL_OFFSET_TABLE_, create the .got.
index ea9a0760d58ca570687fc7b10a2397689244ae0b..2130311059001c591dde56e11585a610311f2449 100644 (file)
@@ -1198,6 +1198,10 @@ rl78_elf_check_relocs
          while (h->root.type == bfd_link_hash_indirect
                 || h->root.type == bfd_link_hash_warning)
            h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         h->root.non_ir_ref = 1;
        }
 
       switch (ELF32_R_TYPE (rel->r_info))
index fae222eefd9c19cd562127ae73454a7b373f2737..52d4abcca5368e1a1bd164abcbf1a78cc28601cb 100644 (file)
@@ -1026,6 +1026,10 @@ elf_s390_check_relocs (bfd *abfd,
          while (h->root.type == bfd_link_hash_indirect
                 || h->root.type == bfd_link_hash_warning)
            h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         h->root.non_ir_ref = 1;
        }
 
       /* Create got section and local_got_refcounts array if they
index dae7f69b3ab766cf62e6afe77d7653f3f25857f3..47cc98733a09a6120c1fc23eea8291a37b0ede03 100644 (file)
@@ -2837,6 +2837,10 @@ s3_bfd_score_elf_check_relocs (bfd *abfd,
             {
               while (h->root.type == bfd_link_hash_indirect)
                 h = (struct elf_link_hash_entry *)h->root.u.i.link;
+
+             /* PR15323, ref flags aren't set for references in the
+                same object.  */
+             h->root.non_ir_ref = 1;
             }
         }
 
index b9b9f30c7f5bb16f7c6bd5f98cd9637f9692d7b1..c75c7038489371eb776311d030f34e341dd11471 100644 (file)
@@ -2641,6 +2641,10 @@ s7_bfd_score_elf_check_relocs (bfd *abfd,
             {
               while (h->root.type == bfd_link_hash_indirect)
                 h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+             /* PR15323, ref flags aren't set for references in the
+                same object.  */
+             h->root.non_ir_ref = 1;
             }
         }
 
index a4c987ff4508b5fd3cf61cb1893f307a5f08d288..86fe1b3377e8e1bb9c85e8c5d9ea1fd9a665cdc5 100644 (file)
@@ -6031,6 +6031,10 @@ sh_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec,
 #endif
              h = (struct elf_link_hash_entry *) h->root.u.i.link;
            }
+
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         h->root.non_ir_ref = 1;
        }
 
       r_type = sh_elf_optimized_tls_reloc (info, r_type, h == NULL);
index 8f03003e2fadcfd2d4e618c9209035f8512377e3..04ef708b76ee6310408af1984ab0232abf3b45c8 100644 (file)
@@ -2832,6 +2832,10 @@ elf32_tic6x_check_relocs (bfd *abfd, struct bfd_link_info *info,
          while (h->root.type == bfd_link_hash_indirect
                 || h->root.type == bfd_link_hash_warning)
            h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         h->root.non_ir_ref = 1;
        }
 
       switch (r_type)
index 4f13241138ec9f9f9b7db4023e90af3332fafb20..62b95536478dbe4cd9ecaaeb989db4c3a0866fe5 100644 (file)
@@ -1521,6 +1521,10 @@ tilepro_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
          while (h->root.type == bfd_link_hash_indirect
                 || h->root.type == bfd_link_hash_warning)
            h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         h->root.non_ir_ref = 1;
        }
 
       r_type = tilepro_elf_tls_transition (info, r_type, h == NULL);
index 4590c61755aaa1dfa62ddd502e3ce1be6b790f79..c0c649874d852e91eceea78fe5bbc038160ce07b 100644 (file)
@@ -83,6 +83,10 @@ v850_elf_check_relocs (bfd *abfd,
          while (h->root.type == bfd_link_hash_indirect
                 || h->root.type == bfd_link_hash_warning)
            h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         h->root.non_ir_ref = 1;
        }
 
       r_type = ELF32_R_TYPE (rel->r_info);
index 1208d431e50e6abf303734205d377d74c649608f..f13ec1b78a0293aff54603903534af8a0761d262 100644 (file)
@@ -585,6 +585,10 @@ elf_vax_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec,
          while (h->root.type == bfd_link_hash_indirect
                 || h->root.type == bfd_link_hash_warning)
            h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         h->root.non_ir_ref = 1;
        }
 
       switch (ELF32_R_TYPE (rel->r_info))
index c657b84a46c9572d999207c1ad99a95cb85793a3..851ebbc631e06c8dfcfe1888d761d46b2d562d95 100644 (file)
@@ -437,6 +437,10 @@ xstormy16_elf_check_relocs (bfd *abfd,
          while (h->root.type == bfd_link_hash_indirect
                 || h->root.type == bfd_link_hash_warning)
            h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         h->root.non_ir_ref = 1;
        }
 
       switch (ELF32_R_TYPE (rel->r_info))
index b397422994ceb3ad944aeb92a2a54fd898aaec75..28ed9aa907d04f7fb62089c39850ef3f3e7ee44c 100644 (file)
@@ -1007,6 +1007,10 @@ elf_xtensa_check_relocs (bfd *abfd,
          while (h->root.type == bfd_link_hash_indirect
                 || h->root.type == bfd_link_hash_warning)
            h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         h->root.non_ir_ref = 1;
        }
       eh = elf_xtensa_hash_entry (h);
 
index feb1a006ff198cc6e8bb21b6071eceff85c31c90..c3b9fc855c22b0725d3c62c8eeeecc3a64d253d8 100644 (file)
@@ -5192,6 +5192,10 @@ elf64_aarch64_check_relocs (bfd *abfd, struct bfd_link_info *info,
          while (h->root.type == bfd_link_hash_indirect
                 || h->root.type == bfd_link_hash_warning)
            h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         h->root.non_ir_ref = 1;
        }
 
       /* Could be done earlier, if h were already available.  */
index 81fe6c18b42f9fee8c355478e7fc695cce988c1b..b70505040f65c7cc87b1209f0f995655d3edd76c 100644 (file)
@@ -1812,6 +1812,9 @@ elf64_alpha_check_relocs (bfd *abfd, struct bfd_link_info *info,
                 || h->root.root.type == bfd_link_hash_warning)
            h = (struct alpha_elf_link_hash_entry *)h->root.root.u.i.link;
 
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         h->root.root.non_ir_ref = 1;
          h->root.ref_regular = 1;
        }
 
index b2f0ed150a386fcce41c7561b6eb974c1d0fbe2b..aff87f0d1787b8a1aa80a56d3fe031fc48af1444 100644 (file)
@@ -644,6 +644,9 @@ elf64_hppa_check_relocs (bfd *abfd,
                 || hh->eh.root.type == bfd_link_hash_warning)
            hh = hppa_elf_hash_entry (hh->eh.root.u.i.link);
 
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         hh->eh.root.non_ir_ref = 1;
          hh->eh.ref_regular = 1;
        }
       else
index 20b456e7f08de2ad6f9a72f454865275f7d161a4..102cdff8d97ebfc1a22363fd9acefa638e052c89 100644 (file)
@@ -2095,6 +2095,9 @@ elf64_ia64_check_relocs (bfd *abfd, struct bfd_link_info *info,
                 || h->root.type == bfd_link_hash_warning)
            h = (struct elf_link_hash_entry *) h->root.u.i.link;
 
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         h->root.non_ir_ref = 1;
          h->ref_regular = 1;
        }
       else
index 3195075f008e7e08b3f1843c7895b7fc118673ef..499bcd609ad0089aff9604bb0e1647cdebd27c13 100644 (file)
@@ -2009,6 +2009,10 @@ mmix_elf_check_relocs (bfd *abfd,
          while (h->root.type == bfd_link_hash_indirect
                 || h->root.type == bfd_link_hash_warning)
            h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         h->root.non_ir_ref = 1;
        }
 
       switch (ELF64_R_TYPE (rel->r_info))
index 2826d83f61f51d21ed0774b45a048258cd5b04a4..a4d483a9fa588f8320f5cbc9c158aaeef799d016 100644 (file)
@@ -5004,6 +5004,10 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
        {
          h = sym_hashes[r_symndx - symtab_hdr->sh_info];
          h = elf_follow_link (h);
+
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         h->root.non_ir_ref = 1;
        }
 
       tls_type = 0;
index d939a3d68b45687863e424fca65de49fb482c0cd..f2c396f5dd9bc548f8f6d9059f1342fbd5483d36 100644 (file)
@@ -950,6 +950,10 @@ elf_s390_check_relocs (bfd *abfd,
          while (h->root.type == bfd_link_hash_indirect
                 || h->root.type == bfd_link_hash_warning)
            h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         h->root.non_ir_ref = 1;
        }
 
       /* Create got section and local_got_refcounts array if they
index 7a9297cf329ff1fcf5aaccca3b01fd78fa6e5aad..e70887bdfc67346f73d015ee9eee1f0e25989a9d 100644 (file)
@@ -2424,6 +2424,10 @@ sh_elf64_check_relocs (bfd *abfd, struct bfd_link_info *info,
          while (h->root.type == bfd_link_hash_indirect
                 || h->root.type == bfd_link_hash_warning)
            h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         h->root.non_ir_ref = 1;
        }
 
       /* Some relocs require a global offset table.  */
index 8de94e4751a48695515ec1551ee7d66052cc40be..05c2f1b4db8e4c36e70d167fe61394f77c1270ba 100644 (file)
@@ -2352,6 +2352,9 @@ elfNN_ia64_check_relocs (bfd *abfd, struct bfd_link_info *info,
                 || h->root.type == bfd_link_hash_warning)
            h = (struct elf_link_hash_entry *) h->root.u.i.link;
 
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         h->root.non_ir_ref = 1;
          h->ref_regular = 1;
        }
       else
index a5ad454a79bfec131e3ae547338e6e481b33adea..317e7b254fa02582910be93d1afae54a5b471587 100644 (file)
@@ -7814,10 +7814,16 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
       else
        {
          h = sym_hashes[r_symndx - extsymoff];
-         while (h != NULL
-                && (h->root.type == bfd_link_hash_indirect
-                    || h->root.type == bfd_link_hash_warning))
-           h = (struct elf_link_hash_entry *) h->root.u.i.link;
+         if (h != NULL)
+           {
+             while (h->root.type == bfd_link_hash_indirect
+                    || h->root.type == bfd_link_hash_warning)
+               h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+             /* PR15323, ref flags aren't set for references in the
+                same object.  */
+             h->root.non_ir_ref = 1;
+           }
        }
 
       /* Set CAN_MAKE_DYNAMIC_P to true if we can convert this
index 596c8384bbeb16c167b274317009e2d373e2e058..ba001056af9bdfce634c09966abd90cc084ab580 100644 (file)
@@ -1450,6 +1450,10 @@ _bfd_sparc_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
          while (h->root.type == bfd_link_hash_indirect
                 || h->root.type == bfd_link_hash_warning)
            h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         h->root.non_ir_ref = 1;
        }
 
       if (h && h->type == STT_GNU_IFUNC)
index accf34b33cedf09da28ca80f191b415593c4c904..74afdf8774639a89f51423e967418319864a2957 100644 (file)
@@ -1738,6 +1738,10 @@ tilegx_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
          while (h->root.type == bfd_link_hash_indirect
                 || h->root.type == bfd_link_hash_warning)
            h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+         /* PR15323, ref flags aren't set for references in the same
+            object.  */
+         h->root.non_ir_ref = 1;
        }
 
       r_type = tilegx_elf_tls_transition (info, r_type, h == NULL,
index a4b272f330c32bcfb0a30dc75faddcd36b63b108..869bb70c9b6ef9e76219b2481c76c422ce3f6763 100644 (file)
@@ -1,3 +1,9 @@
+2013-03-30  Alan Modra  <amodra@gmail.com>
+
+       PR ld/15323
+       * ld-plugin/lto.exp (pr15323a.c): Compile without -flto rather
+       than using -r to effectively strip out lto info.
+
 2013-03-29  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR ld/15323
index cf1ddf3c3a93319cc85c48e6993ecf3a89a2220a..7ffe955409cd20f942d6d5d86a3a321e27290f1a 100644 (file)
@@ -144,8 +144,8 @@ set lto_link_tests {
    "-flto -fuse-linker-plugin -Wl,--as-needed" "-flto"
    {pr13287.cc} {} "pr13287.exe" "c++"}
   {"PR ld/15323"
-   "-O2 -flto -fuse-linker-plugin -r -nostdlib" "-O2 -flto"
-   {pr15323a.c} {} "pr15323a-r.o" "c"}
+   "" "-O2"
+   {pr15323a.c} {} "libdummy.a" "c"}
 }
 
 # Generate input files for complex LTO tests for ELF.
@@ -270,7 +270,7 @@ set lto_run_tests {
    "-O2 -flto -fuse-linker-plugin -Wl,--as-needed tmpdir/pr13201.o -lm" ""
    {dummy.c} "pr13201.exe" "pr13201.out" "" "c"}
   {"PR ld/15323"
-   "-O2 -flto -fuse-linker-plugin -Wl,--as-needed tmpdir/pr15323a-r.o" ""
+   "-O2 -flto -fuse-linker-plugin tmpdir/pr15323a.o" ""
    {pr15323b.c} "pr15323.exe" "pr15323.out" "-flto -O2" "c"}
 }