diff options
author | Cary Coutant <ccoutant@gmail.com> | 2016-12-22 14:06:24 -0800 |
---|---|---|
committer | Cary Coutant <ccoutant@gmail.com> | 2016-12-22 16:00:06 -0800 |
commit | c4d5a76223f74930add9014f2a77339eb80b737c (patch) | |
tree | 0d2d2c9a9883fd35adf73ee40f18ee8c3268e9d3 /gold/ChangeLog | |
parent | 40d7d93ff412f4c34cde3daa04890d5cd2e0d9c9 (diff) | |
download | gdb-c4d5a76223f74930add9014f2a77339eb80b737c.zip gdb-c4d5a76223f74930add9014f2a77339eb80b737c.tar.gz gdb-c4d5a76223f74930add9014f2a77339eb80b737c.tar.bz2 |
Fix placement of forced local symbols in the dynamic symbol table.
Gold was not placing forced-local symbols (e.g., hidden visibility)
at the front of the dynamic symbol table, or including them in the
count of local symbols recorded in the .dynsym section's sh_info field.
gold/
* layout.cc (Layout::finalize): Track count of forced-local symbols
in .dynsym.
(Layout::create_symtab_sections): Add local_dynamic_count parameter;
use that instead of sh_info value.
(Layout::create_dynamic_symtab): Add pforced_local_dynamic_count
parameter; pass it to Symtab::set_dynsym_indexes(). Include forced
locals in sh_info value. Pass index of first real global to
Dynobj::create_gnu_hash_table() and Dynobj::create_elf_hash_table().
* layout.h (Layout::create_symtab_sections): Add local_dynamic_count
parameter.
(Layout::create_dynamic_symtab): Add pforced_local_dynamic_count
parameter.
* symtab.cc (Symbol_table::set_dynsym_indexes): Add pforced_local_count
parameter. Process forced-local symbols first and return the count.
(Symbol_table::finalize): Update comments.
* symtab.h (Symbol_table::set_dynsym_indexes): Add pforced_local_count
parameter.
(Symbol_table::first_dynamic_global_index_): Update comment.
(Symbol_table::dynamic_count_): Update comment.
* testsuite/Makefile.am (ifuncmod1.sh): New test case.
* testsuite/Makefile.in: Regenerate.
* testsuite/ifuncmod1.sh: New shell script.
Diffstat (limited to 'gold/ChangeLog')
-rw-r--r-- | gold/ChangeLog | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog index 9ea609e..5971af9 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,28 @@ +2016-12-22 Cary Coutant <ccoutant@gmail.com> + + * layout.cc (Layout::finalize): Track count of forced-local symbols + in .dynsym. + (Layout::create_symtab_sections): Add local_dynamic_count parameter; + use that instead of sh_info value. + (Layout::create_dynamic_symtab): Add pforced_local_dynamic_count + parameter; pass it to Symtab::set_dynsym_indexes(). Include forced + locals in sh_info value. Pass index of first real global to + Dynobj::create_gnu_hash_table() and Dynobj::create_elf_hash_table(). + * layout.h (Layout::create_symtab_sections): Add local_dynamic_count + parameter. + (Layout::create_dynamic_symtab): Add pforced_local_dynamic_count + parameter. + * symtab.cc (Symbol_table::set_dynsym_indexes): Add pforced_local_count + parameter. Process forced-local symbols first and return the count. + (Symbol_table::finalize): Update comments. + * symtab.h (Symbol_table::set_dynsym_indexes): Add pforced_local_count + parameter. + (Symbol_table::first_dynamic_global_index_): Update comment. + (Symbol_table::dynamic_count_): Update comment. + * testsuite/Makefile.am (ifuncmod1.sh): New test case. + * testsuite/Makefile.in: Regenerate. + * testsuite/ifuncmod1.sh: New shell script. + 2016-12-21 Cary Coutant <ccoutant@gmail.com> * symtab.cc (Symbol_table::define_special_symbol): Add is_forced_local |