diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2018-03-20 03:51:26 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2018-03-20 03:51:48 -0700 |
commit | 416c34d683f2a17aefe19afb466af4316c7c603b (patch) | |
tree | 9691a2e890bc0a280025b14bb06678c1ee72e47c | |
parent | 9d6aac5354566288d7bc734213e5ed0c3cb3c4ca (diff) | |
download | gdb-416c34d683f2a17aefe19afb466af4316c7c603b.zip gdb-416c34d683f2a17aefe19afb466af4316c7c603b.tar.gz gdb-416c34d683f2a17aefe19afb466af4316c7c603b.tar.bz2 |
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.
-rw-r--r-- | bfd/ChangeLog | 6 | ||||
-rw-r--r-- | bfd/elflink.c | 7 | ||||
-rw-r--r-- | ld/ChangeLog | 9 | ||||
-rw-r--r-- | ld/testsuite/ld-plugin/lto.exp | 10 | ||||
-rw-r--r-- | ld/testsuite/ld-plugin/pr22983.d | 9 | ||||
-rw-r--r-- | ld/testsuite/ld-plugin/pr22983.t | 6 | ||||
-rw-r--r-- | ld/testsuite/ld-plugin/pr22983a.c | 14 | ||||
-rw-r--r-- | ld/testsuite/ld-plugin/pr22983b.c | 10 |
8 files changed, 70 insertions, 1 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index b94c5df..1850d20 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -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. diff --git a/bfd/elflink.c b/bfd/elflink.c index 6a3d516..ce3765e 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/ChangeLog b/ld/ChangeLog index 522d0078..2eaf710 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -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 diff --git a/ld/testsuite/ld-plugin/lto.exp b/ld/testsuite/ld-plugin/lto.exp index 7300f48..19aec3f 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 0000000..af1d710 --- /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 0000000..ca31f10 --- /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 0000000..283f263 --- /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 0000000..1b66ed8 --- /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; |