Check corrupt VTENTRY entry in bfd_elf_gc_record_vtentry
Instead of BFD_ASSERT (h != NULL) with ld: BFD ... assertion fail .../bfd/elf64-x86-64.c:2562 ld: bad.o: invalid string offset 50331648 >= 371 for section `nterp' check corrupt VTENTRY entry in bfd_elf_gc_record_vtentry with ld: bad.o: section 'g': corrupt VTENTRY entry * elf-m10300.c (mn10300_elf_check_relocs): Remove BFD_ASSERT of "h != NULL". Don't check "h != NULL" before calling. bfd_elf_gc_record_vtentry. * elf32-arm.c (elf32_arm_check_relocs): Likewise. * elf32-bfin.c (bfin_check_relocs): Likewise. * elf32-cris.c (cris_elf_check_relocs): Likewise. * elf32-csky.c (csky_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-i386.c (elf_i386_check_relocs): Likewise. * elf32-iq2000.c (iq2000_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-or1k.c (or1k_elf_check_relocs): Likewise. * elf32-ppc.c (ppc_elf_check_relocs): Likewise. * elf32-s390.c (elf_s390_check_relocs): Likewise. * elf32-sh.c (sh_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-mmix.c (mmix_elf_check_relocs): Likewise. * elf64-ppc.c (ppc64_elf_check_relocs): Likewise. * elf64-s390.c (elf_s390_check_relocs): Likewise. * elf64-x86-64.c (elf_s390_check_relocs): Likewise. * elfxx-mips.c (_bfd_mips_elf_check_relocs): Likewise. * elfxx-sparc.c (_bfd_sparc_elf_check_relocs): Likewise. * elflink.c (bfd_elf_gc_record_vtinherit): Check for corrupt VTENTRY entry.
This commit is contained in:
parent
9bff840e8c
commit
a0ea3a14dc
@ -1,3 +1,41 @@
|
||||
2019-04-11 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* elf-m10300.c (mn10300_elf_check_relocs): Remove BFD_ASSERT of
|
||||
"h != NULL". Don't check "h != NULL" before calling.
|
||||
bfd_elf_gc_record_vtentry.
|
||||
* elf32-arm.c (elf32_arm_check_relocs): Likewise.
|
||||
* elf32-bfin.c (bfin_check_relocs): Likewise.
|
||||
* elf32-cris.c (cris_elf_check_relocs): Likewise.
|
||||
* elf32-csky.c (csky_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-i386.c (elf_i386_check_relocs): Likewise.
|
||||
* elf32-iq2000.c (iq2000_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-or1k.c (or1k_elf_check_relocs): Likewise.
|
||||
* elf32-ppc.c (ppc_elf_check_relocs): Likewise.
|
||||
* elf32-s390.c (elf_s390_check_relocs): Likewise.
|
||||
* elf32-sh.c (sh_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-mmix.c (mmix_elf_check_relocs): Likewise.
|
||||
* elf64-ppc.c (ppc64_elf_check_relocs): Likewise.
|
||||
* elf64-s390.c (elf_s390_check_relocs): Likewise.
|
||||
* elf64-x86-64.c (elf_s390_check_relocs): Likewise.
|
||||
* elfxx-mips.c (_bfd_mips_elf_check_relocs): Likewise.
|
||||
* elfxx-sparc.c (_bfd_sparc_elf_check_relocs): Likewise.
|
||||
* elflink.c (bfd_elf_gc_record_vtinherit): Check for corrupt
|
||||
VTENTRY entry.
|
||||
|
||||
2019-04-11 Alan Modra <amodra@gmail.com>
|
||||
|
||||
PR 24435
|
||||
|
@ -1136,9 +1136,7 @@ mn10300_elf_check_relocs (bfd *abfd,
|
||||
/* This relocation describes which C++ vtable entries are actually
|
||||
used. Record for later use during GC. */
|
||||
case R_MN10300_GNU_VTENTRY:
|
||||
BFD_ASSERT (h != NULL);
|
||||
if (h != NULL
|
||||
&& !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
goto fail;
|
||||
break;
|
||||
|
||||
|
@ -15380,9 +15380,7 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info,
|
||||
/* This relocation describes which C++ vtable entries are actually
|
||||
used. Record for later use during GC. */
|
||||
case R_ARM_GNU_VTENTRY:
|
||||
BFD_ASSERT (h != NULL);
|
||||
if (h != NULL
|
||||
&& !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
|
||||
if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
|
||||
return FALSE;
|
||||
break;
|
||||
}
|
||||
|
@ -1210,9 +1210,7 @@ bfin_check_relocs (bfd * abfd,
|
||||
/* This relocation describes which C++ vtable entries
|
||||
are actually used. Record for later use during GC. */
|
||||
case R_BFIN_GNU_VTENTRY:
|
||||
BFD_ASSERT (h != NULL);
|
||||
if (h != NULL
|
||||
&& !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
return FALSE;
|
||||
break;
|
||||
|
||||
|
@ -3485,9 +3485,7 @@ cris_elf_check_relocs (bfd *abfd,
|
||||
/* This relocation describes which C++ vtable entries are actually
|
||||
used. Record for later use during GC. */
|
||||
case R_CRIS_GNU_VTENTRY:
|
||||
BFD_ASSERT (h != NULL);
|
||||
if (h != NULL
|
||||
&& !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
return FALSE;
|
||||
break;
|
||||
|
||||
|
@ -2873,9 +2873,7 @@ csky_elf_check_relocs (bfd * abfd,
|
||||
/* This relocation describes which C++ vtable entries are actually
|
||||
used. Record for later use during GC. */
|
||||
case R_CKCORE_GNU_VTENTRY:
|
||||
BFD_ASSERT (h != NULL);
|
||||
if (h != NULL
|
||||
&& !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
return FALSE;
|
||||
break;
|
||||
}
|
||||
|
@ -308,9 +308,7 @@ elf32_d10v_check_relocs (bfd *abfd,
|
||||
/* This relocation describes which C++ vtable entries are actually
|
||||
used. Record for later use during GC. */
|
||||
case R_D10V_GNU_VTENTRY:
|
||||
BFD_ASSERT (h != NULL);
|
||||
if (h != NULL
|
||||
&& !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
|
||||
if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
|
||||
return FALSE;
|
||||
break;
|
||||
}
|
||||
|
@ -465,9 +465,7 @@ elf32_dlx_check_relocs (bfd *abfd,
|
||||
/* This relocation describes which C++ vtable entries are actually
|
||||
used. Record for later use during GC. */
|
||||
case R_DLX_GNU_VTENTRY:
|
||||
BFD_ASSERT (h != NULL);
|
||||
if (h != NULL
|
||||
&& !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
return FALSE;
|
||||
break;
|
||||
}
|
||||
|
@ -687,9 +687,7 @@ fr30_elf_check_relocs (bfd *abfd,
|
||||
/* This relocation describes which C++ vtable entries are actually
|
||||
used. Record for later use during GC. */
|
||||
case R_FR30_GNU_VTENTRY:
|
||||
BFD_ASSERT (h != NULL);
|
||||
if (h != NULL
|
||||
&& !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
return FALSE;
|
||||
break;
|
||||
}
|
||||
|
@ -6237,9 +6237,7 @@ elf32_frv_check_relocs (bfd *abfd,
|
||||
/* This relocation describes which C++ vtable entries are actually
|
||||
used. Record for later use during GC. */
|
||||
case R_FRV_GNU_VTENTRY:
|
||||
BFD_ASSERT (h != NULL);
|
||||
if (h != NULL
|
||||
&& !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
return FALSE;
|
||||
break;
|
||||
|
||||
|
@ -1273,9 +1273,7 @@ elf32_hppa_check_relocs (bfd *abfd,
|
||||
/* This relocation describes which C++ vtable entries are actually
|
||||
used. Record for later use during GC. */
|
||||
case R_PARISC_GNU_VTENTRY:
|
||||
BFD_ASSERT (hh != NULL);
|
||||
if (hh != NULL
|
||||
&& !bfd_elf_gc_record_vtentry (abfd, sec, &hh->eh, rela->r_addend))
|
||||
if (!bfd_elf_gc_record_vtentry (abfd, sec, &hh->eh, rela->r_addend))
|
||||
return FALSE;
|
||||
continue;
|
||||
|
||||
|
@ -1908,9 +1908,7 @@ do_size:
|
||||
/* This relocation describes which C++ vtable entries are actually
|
||||
used. Record for later use during GC. */
|
||||
case R_386_GNU_VTENTRY:
|
||||
BFD_ASSERT (h != NULL);
|
||||
if (h != NULL
|
||||
&& !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
|
||||
if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
|
||||
goto error_return;
|
||||
break;
|
||||
|
||||
|
@ -501,9 +501,7 @@ iq2000_elf_check_relocs (bfd *abfd,
|
||||
/* This relocation describes which C++ vtable entries
|
||||
are actually used. Record for later use during GC. */
|
||||
case R_IQ2000_GNU_VTENTRY:
|
||||
BFD_ASSERT (h != NULL);
|
||||
if (h != NULL
|
||||
&& !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
return FALSE;
|
||||
break;
|
||||
|
||||
|
@ -3807,15 +3807,11 @@ m32r_elf_check_relocs (bfd *abfd,
|
||||
/* This relocation describes which C++ vtable entries are actually
|
||||
used. Record for later use during GC. */
|
||||
case R_M32R_GNU_VTENTRY:
|
||||
BFD_ASSERT (h != NULL);
|
||||
if (h != NULL
|
||||
&& !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
|
||||
if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
|
||||
return FALSE;
|
||||
break;
|
||||
case R_M32R_RELA_GNU_VTENTRY:
|
||||
BFD_ASSERT (h != NULL);
|
||||
if (h != NULL
|
||||
&& !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
return FALSE;
|
||||
break;
|
||||
}
|
||||
|
@ -890,9 +890,7 @@ elf32_m68hc11_check_relocs (bfd *abfd, struct bfd_link_info *info,
|
||||
/* This relocation describes which C++ vtable entries are actually
|
||||
used. Record for later use during GC. */
|
||||
case R_M68HC11_GNU_VTENTRY:
|
||||
BFD_ASSERT (h != NULL);
|
||||
if (h != NULL
|
||||
&& !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
return FALSE;
|
||||
break;
|
||||
}
|
||||
|
@ -2801,9 +2801,7 @@ elf_m68k_check_relocs (bfd *abfd,
|
||||
/* This relocation describes which C++ vtable entries are actually
|
||||
used. Record for later use during GC. */
|
||||
case R_68K_GNU_VTENTRY:
|
||||
BFD_ASSERT (h != NULL);
|
||||
if (h != NULL
|
||||
&& !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
return FALSE;
|
||||
break;
|
||||
|
||||
|
@ -628,9 +628,7 @@ mcore_elf_check_relocs (bfd * abfd,
|
||||
/* This relocation describes which C++ vtable entries are actually
|
||||
used. Record for later use during GC. */
|
||||
case R_MCORE_GNU_VTENTRY:
|
||||
BFD_ASSERT (h != NULL);
|
||||
if (h != NULL
|
||||
&& !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
return FALSE;
|
||||
break;
|
||||
}
|
||||
|
@ -2374,9 +2374,7 @@ elf_metag_check_relocs (bfd *abfd,
|
||||
/* This relocation describes which C++ vtable entries are actually
|
||||
used. Record for later use during GC. */
|
||||
case R_METAG_GNU_VTENTRY:
|
||||
BFD_ASSERT (hh != NULL);
|
||||
if (hh != NULL
|
||||
&& !bfd_elf_gc_record_vtentry (abfd, sec, &hh->eh, rel->r_addend))
|
||||
if (!bfd_elf_gc_record_vtentry (abfd, sec, &hh->eh, rel->r_addend))
|
||||
return FALSE;
|
||||
break;
|
||||
}
|
||||
|
@ -1927,9 +1927,7 @@ or1k_elf_check_relocs (bfd *abfd,
|
||||
/* This relocation describes which C++ vtable entries are actually
|
||||
used. Record for later use during GC. */
|
||||
case R_OR1K_GNU_VTENTRY:
|
||||
BFD_ASSERT (h != NULL);
|
||||
if (h != NULL
|
||||
&& !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
return FALSE;
|
||||
break;
|
||||
|
||||
|
@ -3316,9 +3316,7 @@ ppc_elf_check_relocs (bfd *abfd,
|
||||
/* This relocation describes which C++ vtable entries are actually
|
||||
used. Record for later use during GC. */
|
||||
case R_PPC_GNU_VTENTRY:
|
||||
BFD_ASSERT (h != NULL);
|
||||
if (h != NULL
|
||||
&& !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
return FALSE;
|
||||
break;
|
||||
|
||||
|
@ -1366,9 +1366,7 @@ elf_s390_check_relocs (bfd *abfd,
|
||||
/* This relocation describes which C++ vtable entries are actually
|
||||
used. Record for later use during GC. */
|
||||
case R_390_GNU_VTENTRY:
|
||||
BFD_ASSERT (h != NULL);
|
||||
if (h != NULL
|
||||
&& !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
return FALSE;
|
||||
break;
|
||||
|
||||
|
@ -5570,9 +5570,7 @@ sh_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec,
|
||||
/* This relocation describes which C++ vtable entries are actually
|
||||
used. Record for later use during GC. */
|
||||
case R_SH_GNU_VTENTRY:
|
||||
BFD_ASSERT (h != NULL);
|
||||
if (h != NULL
|
||||
&& !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
return FALSE;
|
||||
break;
|
||||
|
||||
|
@ -101,9 +101,7 @@ v850_elf_check_relocs (bfd *abfd,
|
||||
/* This relocation describes which C++ vtable entries
|
||||
are actually used. Record for later use during GC. */
|
||||
case R_V850_GNU_VTENTRY:
|
||||
BFD_ASSERT (h != NULL);
|
||||
if (h != NULL
|
||||
&& !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
return FALSE;
|
||||
break;
|
||||
|
||||
|
@ -783,9 +783,7 @@ elf_vax_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec,
|
||||
/* This relocation describes which C++ vtable entries are actually
|
||||
used. Record for later use during GC. */
|
||||
case R_VAX_GNU_VTENTRY:
|
||||
BFD_ASSERT (h != NULL);
|
||||
if (h != NULL
|
||||
&& !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
return FALSE;
|
||||
break;
|
||||
|
||||
|
@ -513,9 +513,7 @@ xstormy16_elf_check_relocs (bfd *abfd,
|
||||
/* This relocation describes which C++ vtable entries are actually
|
||||
used. Record for later use during GC. */
|
||||
case R_XSTORMY16_GNU_VTENTRY:
|
||||
BFD_ASSERT (h != NULL);
|
||||
if (h != NULL
|
||||
&& !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
return FALSE;
|
||||
break;
|
||||
}
|
||||
|
@ -1102,9 +1102,7 @@ elf_xtensa_check_relocs (bfd *abfd,
|
||||
case R_XTENSA_GNU_VTENTRY:
|
||||
/* This relocation describes which C++ vtable entries are actually
|
||||
used. Record for later use during GC. */
|
||||
BFD_ASSERT (h != NULL);
|
||||
if (h != NULL
|
||||
&& !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
return FALSE;
|
||||
continue;
|
||||
|
||||
|
@ -2004,9 +2004,7 @@ mmix_elf_check_relocs (bfd *abfd,
|
||||
/* This relocation describes which C++ vtable entries are actually
|
||||
used. Record for later use during GC. */
|
||||
case R_MMIX_GNU_VTENTRY:
|
||||
BFD_ASSERT (h != NULL);
|
||||
if (h != NULL
|
||||
&& !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
return FALSE;
|
||||
break;
|
||||
}
|
||||
|
@ -4555,9 +4555,7 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
|
||||
/* This relocation describes which C++ vtable entries are actually
|
||||
used. Record for later use during GC. */
|
||||
case R_PPC64_GNU_VTENTRY:
|
||||
BFD_ASSERT (h != NULL);
|
||||
if (h != NULL
|
||||
&& !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
return FALSE;
|
||||
break;
|
||||
|
||||
|
@ -1301,9 +1301,7 @@ elf_s390_check_relocs (bfd *abfd,
|
||||
/* This relocation describes which C++ vtable entries are actually
|
||||
used. Record for later use during GC. */
|
||||
case R_390_GNU_VTENTRY:
|
||||
BFD_ASSERT (h != NULL);
|
||||
if (h != NULL
|
||||
&& !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
return FALSE;
|
||||
break;
|
||||
|
||||
|
@ -2373,9 +2373,7 @@ do_size:
|
||||
/* This relocation describes which C++ vtable entries are actually
|
||||
used. Record for later use during GC. */
|
||||
case R_X86_64_GNU_VTENTRY:
|
||||
BFD_ASSERT (h != NULL);
|
||||
if (h != NULL
|
||||
&& !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
goto error_return;
|
||||
break;
|
||||
|
||||
|
@ -13727,14 +13727,22 @@ bfd_elf_gc_record_vtinherit (bfd *abfd,
|
||||
/* Called from check_relocs to record the existence of a VTENTRY reloc. */
|
||||
|
||||
bfd_boolean
|
||||
bfd_elf_gc_record_vtentry (bfd *abfd ATTRIBUTE_UNUSED,
|
||||
asection *sec ATTRIBUTE_UNUSED,
|
||||
bfd_elf_gc_record_vtentry (bfd *abfd, asection *sec,
|
||||
struct elf_link_hash_entry *h,
|
||||
bfd_vma addend)
|
||||
{
|
||||
const struct elf_backend_data *bed = get_elf_backend_data (abfd);
|
||||
unsigned int log_file_align = bed->s->log_file_align;
|
||||
|
||||
if (!h)
|
||||
{
|
||||
/* xgettext:c-format */
|
||||
_bfd_error_handler (_("%pB: section '%pA': corrupt VTENTRY entry"),
|
||||
abfd, sec);
|
||||
bfd_set_error (bfd_error_bad_value);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (!h->u2.vtable)
|
||||
{
|
||||
h->u2.vtable = ((struct elf_link_virtual_table_entry *)
|
||||
|
@ -8992,9 +8992,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
|
||||
/* This relocation describes which C++ vtable entries are actually
|
||||
used. Record for later use during GC. */
|
||||
case R_MIPS_GNU_VTENTRY:
|
||||
BFD_ASSERT (h != NULL);
|
||||
if (h != NULL
|
||||
&& !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
|
||||
if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
|
||||
return FALSE;
|
||||
break;
|
||||
|
||||
|
@ -1837,9 +1837,7 @@ _bfd_sparc_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
|
||||
break;
|
||||
|
||||
case R_SPARC_GNU_VTENTRY:
|
||||
BFD_ASSERT (h != NULL);
|
||||
if (h != NULL
|
||||
&& !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
|
||||
return FALSE;
|
||||
break;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user