2009-11-08 H.J. Lu PR ld/10911 * elflink.c (elf_link_output_extsym): Don't return on STT_GNU_IFUNC symbol when stripping. * ld-ifunc/ifunc-4a-x86.d: New. --- bfd/elflink.c +++ bfd/elflink.c @@ -8639,9 +8639,11 @@ elf_link_output_extsym (struct elf_link_hash_entry *h, void *data) strip = FALSE; /* If we're stripping it, and it's not a dynamic symbol, there's - nothing else to do unless it is a forced local symbol. */ + nothing else to do unless it is a forced local symbol or a + STT_GNU_IFUNC symbol. */ if (strip && h->dynindx == -1 + && h->type != STT_GNU_IFUNC && !h->forced_local) return TRUE; --- ld/testsuite/ld-ifunc/ifunc-4a-x86.d +++ ld/testsuite/ld-ifunc/ifunc-4a-x86.d @@ -0,0 +1,8 @@ +#ld: -s +#readelf: -r --wide +#target: x86_64-*-* i?86-*-* +#source: ifunc-4-x86.s + +#... +[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_[_0-9A-Z]+_IRELATIVE[ ]*[0-9a-f]* +#pass