diff options
-rw-r--r-- | bfd/ChangeLog | 6 | ||||
-rw-r--r-- | bfd/elf32-i386.c | 3 | ||||
-rw-r--r-- | bfd/elf64-x86-64.c | 3 | ||||
-rw-r--r-- | ld/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | ld/testsuite/ld-ifunc/ifunc-5r-local-i386.d | 11 | ||||
-rw-r--r-- | ld/testsuite/ld-ifunc/ifunc-5r-local-x86-64.d | 10 |
6 files changed, 36 insertions, 2 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index c433df7..79a75d9 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2009-07-16 H.J. Lu <hongjiu.lu@intel.com> + + * elf32-i386.c (elf_i386_relocate_section): Don't get local + STT_GNU_IFUNC symbol for relocatable link. + * elf64-x86-64.c (elf64_x86_64_relocate_section): Likewise. + 2009-07-10 H.J. Lu <hongjiu.lu@intel.com> * bfdio.c (bfd_iovec): Add comments for bmmap. diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c index c86d00d..868e9d4 100644 --- a/bfd/elf32-i386.c +++ b/bfd/elf32-i386.c @@ -2891,7 +2891,8 @@ elf_i386_relocate_section (bfd *output_bfd, break; } } - else if (ELF32_ST_TYPE (sym->st_info) == STT_GNU_IFUNC) + else if (!info->relocatable + && ELF32_ST_TYPE (sym->st_info) == STT_GNU_IFUNC) { /* Relocate against local STT_GNU_IFUNC symbol. */ h = elf_i386_get_local_sym_hash (htab, input_bfd, diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c index 6e868b3..718f076 100644 --- a/bfd/elf64-x86-64.c +++ b/bfd/elf64-x86-64.c @@ -2612,7 +2612,8 @@ elf64_x86_64_relocate_section (bfd *output_bfd, struct bfd_link_info *info, &sec, rel); /* Relocate against local STT_GNU_IFUNC symbol. */ - if (ELF64_ST_TYPE (sym->st_info) == STT_GNU_IFUNC) + if (!info->relocatable + && ELF64_ST_TYPE (sym->st_info) == STT_GNU_IFUNC) { h = elf64_x86_64_get_local_sym_hash (htab, input_bfd, rel, FALSE); diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index 1c00f3e..78ec4a8 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-07-16 H.J. Lu <hongjiu.lu@intel.com> + + * ld-ifunc/ifunc-5r-local-i386.d: New. + * ld-ifunc/ifunc-5r-local-x86-64.d: Likewise. + 2009-07-16 Nathan Sidwell <nathan@codesourcery.com> * ld-arm/arm-target2.s: Add addend cases. diff --git a/ld/testsuite/ld-ifunc/ifunc-5r-local-i386.d b/ld/testsuite/ld-ifunc/ifunc-5r-local-i386.d new file mode 100644 index 0000000..18e1295 --- /dev/null +++ b/ld/testsuite/ld-ifunc/ifunc-5r-local-i386.d @@ -0,0 +1,11 @@ +#source: ifunc-5-local-i386.s +#ld: -r -m elf_i386 +#as: --32 +#readelf: -r --wide +#target: x86_64-*-* i?86-*-* + +Relocation section '.rel.text' at .* +[ ]+Offset[ ]+Info[ ]+Type[ ]+.* +[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_386_GOTPC[ ]+0+[ ]+_GLOBAL_OFFSET_TABLE_[ ]* +[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_386_PLT32[ ]+foo\(\)[ ]+foo[ ]* +[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_386_GOT32[ ]+foo\(\)[ ]+foo[ ]* diff --git a/ld/testsuite/ld-ifunc/ifunc-5r-local-x86-64.d b/ld/testsuite/ld-ifunc/ifunc-5r-local-x86-64.d new file mode 100644 index 0000000..e9ad214c --- /dev/null +++ b/ld/testsuite/ld-ifunc/ifunc-5r-local-x86-64.d @@ -0,0 +1,10 @@ +#source: ifunc-5-local-x86-64.s +#as: --64 +#ld: -r -melf_x86_64 +#readelf: -r --wide +#target: x86_64-*-* + +Relocation section '.rela.text' at .* +[ ]+Offset[ ]+Info[ ]+Type[ ]+.* +[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_X86_64_PLT32[ ]+foo\(\)[ ]+foo - 4 +[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_X86_64_GOTPCREL[ ]+foo\(\)[ ]+foo - 4 |