From ce97fa81e0c46d216b80b143ad8c02fff6906fef Mon Sep 17 00:00:00 2001 From: Sriraman Tallam Date: Tue, 20 Apr 2010 21:13:30 +0000 Subject: 2010-04-18 Sriraman Tallam * icf.cc (get_section_contents): Check for preemptible functions. Ignore addend when appropriate. * symtab.cc (should_add_dynsym_entry): Add new parameter. Check for section folded. (add_from_relobj): Check for section folded. (set_dynsym_indexes): Fix call to should_add_dynsym_entry. * symtab.h (should_add_dynsym_entry): Add new parameter. * target-reloc.h (scan_relocs): Check for section folded. * x86_64.cc (Target_x86_64::Scan::possible_function_pointer_reloc): Check reloc types for function pointers in shared objects. * testsuite/Makefile.am (icf_virtual_function_folding_test): New test case. (icf_preemptible_functions_test): New test case. (icf_string_merge_test): New test case. * testsuite.Makefile.in: Regenerate. * testsuite/icf_safe_so_test.sh: Change to not fold foo_glob and bar_glob. Refactor code. * testsuite/icf_preemptible_functions_test.cc: New file. * testsuite/icf_preemptible_functions_test.sh: New file. * testsuite/icf_string_merge_test.cc: New file. * testsuite/icf_string_merge_test.sh: New file. * testsuite/icf_virtual_function_folding_test.cc: New file. * testsuite/icf_virtual_function_folding_test.sh: New file. --- gold/target-reloc.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'gold/target-reloc.h') diff --git a/gold/target-reloc.h b/gold/target-reloc.h index 510eea051fd..04854d2d60e 100644 --- a/gold/target-reloc.h +++ b/gold/target-reloc.h @@ -83,7 +83,8 @@ scan_relocs( shndx = object->adjust_sym_shndx(r_sym, shndx, &is_ordinary); if (is_ordinary && shndx != elfcpp::SHN_UNDEF - && !object->is_section_included(shndx)) + && !object->is_section_included(shndx) + && !symtab->is_section_folded(object, shndx)) { // RELOC is a relocation against a local symbol in a // section we are discarding. We can ignore this @@ -102,7 +103,6 @@ scan_relocs( continue; } - scan.local(symtab, layout, target, object, data_shndx, output_section, reloc, r_type, lsym); } -- cgit v1.2.1