[PATCH] Set non_ir_ref_dynamic if a symbol is made dynamic

H.J. Lu hongjiu.lu@intel.com
Mon Mar 19 19:01:00 GMT 2018


If a symbol is made dynamic by --dynamic-list, it has non-IR reference.

OK for master?


H.J.
---
bfd/

	PR ld/22983
	* elflink.c (bfd_elf_link_mark_dynamic_symbol): Set
	non_ir_ref_dynamic if a symbol is made dynamic by --dynamic-list.

ld/

	PR ld/22983
	* testsuite/ld-plugin/lto.exp: Run PR ld/22983 test.
	* testsuite/ld-plugin/pr22983.d: New file.
	* testsuite/ld-plugin/pr22983.t: Likewise.
	* testsuite/ld-plugin/pr22983a.c: Likewise.
	* testsuite/ld-plugin/pr22983b.c: Likewise.
---
 bfd/elflink.c                     |  7 ++++++-
 ld/testsuite/ld-plugin/lto.exp    | 10 ++++++++++
 ld/testsuite/ld-plugin/pr22983.d  |  9 +++++++++
 ld/testsuite/ld-plugin/pr22983.t  |  6 ++++++
 ld/testsuite/ld-plugin/pr22983a.c | 14 ++++++++++++++
 ld/testsuite/ld-plugin/pr22983b.c | 10 ++++++++++
 6 files changed, 55 insertions(+), 1 deletion(-)
 create mode 100644 ld/testsuite/ld-plugin/pr22983.d
 create mode 100644 ld/testsuite/ld-plugin/pr22983.t
 create mode 100644 ld/testsuite/ld-plugin/pr22983a.c
 create mode 100644 ld/testsuite/ld-plugin/pr22983b.c

diff --git a/bfd/elflink.c b/bfd/elflink.c
index 6a3d516ba8..ce3765e45b 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -586,7 +586,12 @@ bfd_elf_link_mark_dynamic_symbol (struct bfd_link_info *info,
       || (d != NULL
 	  && h->non_elf
 	  && (*d->match) (&d->head, NULL, h->root.root.string)))
-    h->dynamic = 1;
+    {
+      h->dynamic = 1;
+      /* NB: If a symbol is made dynamic by --dynamic-list, it has
+	 non-IR reference.  */
+      h->root.non_ir_ref_dynamic = 1;
+    }
 }
 
 /* Record an assignment to a symbol made by a linker script.  We need
diff --git a/ld/testsuite/ld-plugin/lto.exp b/ld/testsuite/ld-plugin/lto.exp
index 7300f481f3..19aec3f7f2 100644
--- a/ld/testsuite/ld-plugin/lto.exp
+++ b/ld/testsuite/ld-plugin/lto.exp
@@ -573,6 +573,16 @@ run_ld_link_exec_tests $lto_run_tests
 
 if { [is_elf_format] } {
     run_ld_link_exec_tests $lto_run_elf_tests
+    run_cc_link_tests [list \
+	[list \
+	    "Build pr22983" \
+	    "-Wl,--dynamic-list,pr22983.t" \
+	    "-flto" \
+	    {pr22983a.c pr22983b.c} \
+	    {{readelf {--dyn-syms --wide} pr22983.d}} \
+	    "pr22983" \
+	] \
+    ]
 }
 
 if { [is_elf_format] && [check_lto_shared_available] } {
diff --git a/ld/testsuite/ld-plugin/pr22983.d b/ld/testsuite/ld-plugin/pr22983.d
new file mode 100644
index 0000000000..af1d710d3f
--- /dev/null
+++ b/ld/testsuite/ld-plugin/pr22983.d
@@ -0,0 +1,9 @@
+Symbol table '\.dynsym' contains [0-9]+ entries:
+ +Num: +Value +Size Type +Bind +Vis +Ndx Name
+#...
+ +[0-9]+: +[0-9a-f]+ +[0-9a-f]+ +OBJECT +GLOBAL +DEFAULT +[0-9]+ +var_attr_used_enabled
+ +[0-9]+: +[0-9a-f]+ +[0-9a-f]+ +OBJECT +GLOBAL +DEFAULT +[0-9]+ +var_attr_used_disabled
+#...
+ +[0-9]+: +[0-9a-f]+ +[0-9a-f]+ +FUNC +GLOBAL +DEFAULT +[0-9]+ +func_attr_used_enabled
+ +[0-9]+: +[0-9a-f]+ +[0-9a-f]+ +FUNC +GLOBAL +DEFAULT +[0-9]+ +func_attr_used_disabled
+#...
diff --git a/ld/testsuite/ld-plugin/pr22983.t b/ld/testsuite/ld-plugin/pr22983.t
new file mode 100644
index 0000000000..ca31f10965
--- /dev/null
+++ b/ld/testsuite/ld-plugin/pr22983.t
@@ -0,0 +1,6 @@
+{
+var_attr_used_disabled;
+var_attr_used_enabled;
+func_attr_used_disabled;
+func_attr_used_enabled;
+};
diff --git a/ld/testsuite/ld-plugin/pr22983a.c b/ld/testsuite/ld-plugin/pr22983a.c
new file mode 100644
index 0000000000..283f263bff
--- /dev/null
+++ b/ld/testsuite/ld-plugin/pr22983a.c
@@ -0,0 +1,14 @@
+#include <stdio.h>
+
+int func_attr_used_disabled(int val);
+int func_attr_used_enabled(int val);
+extern int var_attr_used_enabled;
+extern int var_attr_used_disabled;
+
+int main(int argc, const char **argv){
+	printf("%d\n", var_attr_used_disabled);
+	printf("%d\n", var_attr_used_enabled);
+	printf("%d\n", func_attr_used_disabled(1));
+	printf("%d\n", func_attr_used_enabled(1));
+	return 0;
+}
diff --git a/ld/testsuite/ld-plugin/pr22983b.c b/ld/testsuite/ld-plugin/pr22983b.c
new file mode 100644
index 0000000000..1b66ed889f
--- /dev/null
+++ b/ld/testsuite/ld-plugin/pr22983b.c
@@ -0,0 +1,10 @@
+int func_attr_used_disabled(int val){
+	return val + 1;
+}
+__attribute__((used))
+int func_attr_used_enabled(int val){
+	return val + 1;
+}
+__attribute__((used))
+int var_attr_used_enabled = 0b0101010101;
+int var_attr_used_disabled = 0b0101010101;
-- 
2.14.3



More information about the Binutils mailing list