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