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:
parent
9d6aac5354
commit
416c34d683
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
/* 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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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] } {
|
||||
|
|
|
@ -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
|
||||
#...
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
var_attr_used_disabled;
|
||||
var_attr_used_enabled;
|
||||
func_attr_used_disabled;
|
||||
func_attr_used_enabled;
|
||||
};
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
Loading…
Reference in New Issue