aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2017-04-20 07:48:24 -0700
committerH.J. Lu <hjl.tools@gmail.com>2017-04-20 07:48:35 -0700
commit59fa66c53823dc695f78669f40ec2eebab3aec42 (patch)
tree175d8e3b6761189c2a361c6cfdb4dce606d10c38 /include
parentc76886885987e543f9162809ad86a0a37b394e82 (diff)
downloadgdb-59fa66c53823dc695f78669f40ec2eebab3aec42.zip
gdb-59fa66c53823dc695f78669f40ec2eebab3aec42.tar.gz
gdb-59fa66c53823dc695f78669f40ec2eebab3aec42.tar.bz2
Handle symbol defined in IR and referenced in DSO
We need to make an IR symbol visible if it is defined in an IR object and referenced in a dynamic object. When --as-needed is used, since linker removes the IR symbol reference of the dynamic object if the dynamic object isn't needed in the first pass, the IR definition isn't visible to the dynamic object even if the dynamic object becomes needed in the second pass. Add dynamic_ref_after_ir_def to bfd_link_hash_entry to track IR symbol which is defined in an IR object and later referenced in a dynamic object. dynamic_ref_after_ir_def is preserved when restoring the symbol table for unneeded dynamic object. bfd/ PR ld/21382 * elflink.c (elf_link_add_object_symbols): Preserve dynamic_ref_after_ir_def when restoring the symbol table for unneeded dynamic object. include/ PR ld/21382 * bfdlink.h (bfd_link_hash_entry): Add dynamic_ref_after_ir_def. ld/ PR ld/21382 * plugin.c (is_visible_from_outside): Symbol may be visible from outside if dynamic_ref_after_ir_def is set. (plugin_notice): Set dynamic_ref_after_ir_def if the symbol is defined in an IR object and referenced in a dynamic object. * testsuite/ld-plugin/lto.exp: Run PR ld/21382 tests. * testsuite/ld-plugin/pr21382a.c: New file. * testsuite/ld-plugin/pr21382b.c: Likewise.
Diffstat (limited to 'include')
-rw-r--r--include/ChangeLog5
-rw-r--r--include/bfdlink.h4
2 files changed, 9 insertions, 0 deletions
diff --git a/include/ChangeLog b/include/ChangeLog
index 90c4c8d..31dc68f 100644
--- a/include/ChangeLog
+++ b/include/ChangeLog
@@ -1,3 +1,8 @@
+2017-04-20 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/21382
+ * bfdlink.h (bfd_link_hash_entry): Add dynamic_ref_after_ir_def.
+
2017-04-19 Alan Modra <amodra@gmail.com>
* bfdlink.h (struct bfd_link_info <dynamic_undefined_weak>):
diff --git a/include/bfdlink.h b/include/bfdlink.h
index 18dea0c..cb4bad9 100644
--- a/include/bfdlink.h
+++ b/include/bfdlink.h
@@ -104,6 +104,10 @@ struct bfd_link_hash_entry
IR object file. */
unsigned int non_ir_ref : 1;
+ /* Symbol is referenced in a dynamic object after it has been defined
+ in an IR object. */
+ unsigned int dynamic_ref_after_ir_def : 1;
+
/* Symbol is a built-in define. These will be overridden by PROVIDE
in a linker script. */
unsigned int linker_def : 1;