Set non_ir_ref_dynamic if a symbol is made dynamic

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

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.
This commit is contained in:
H.J. Lu 2018-03-20 03:51:26 -07:00
parent 9d6aac5354
commit 416c34d683
8 changed files with 70 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2018-03-20 H.J. Lu <hongjiu.lu@intel.com>
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.
2018-03-19 Nick Clifton <nickc@redhat.com>
* po/es.po: Updated Spanish translation.

View File

@ -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

View File

@ -1,3 +1,12 @@
2018-03-20 H.J. Lu <hongjiu.lu@intel.com>
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.
2018-03-15 Andreas Schwab <schwab@suse.de>
PR ld/22949

View File

@ -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] } {

View File

@ -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
#...

View File

@ -0,0 +1,6 @@
{
var_attr_used_disabled;
var_attr_used_enabled;
func_attr_used_disabled;
func_attr_used_enabled;
};

View File

@ -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;
}

View File

@ -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;