X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gold%2Fgc.h;h=5f60934487ff044252ae79df0fccbcb9b2989fef;hb=abdb711e0855f0597a96db0486b598144b788212;hp=7c79c23aa955717a119a6a63cf6dcca44693e9e4;hpb=d83d54033545c0e7b668950b127753c88a33f950;p=deliverable%2Fbinutils-gdb.git diff --git a/gold/gc.h b/gold/gc.h index 7c79c23aa9..5f60934487 100644 --- a/gold/gc.h +++ b/gold/gc.h @@ -1,6 +1,6 @@ // gc.h -- garbage collection of unused sections -// Copyright (C) 2009-2018 Free Software Foundation, Inc. +// Copyright (C) 2009-2019 Free Software Foundation, Inc. // Written by Sriraman Tallam . // This file is part of gold. @@ -200,7 +200,8 @@ gc_process_relocs( bool check_section_for_function_pointers = false; if (parameters->options().icf_enabled() - && is_section_foldable_candidate(src_section_name.c_str())) + && (is_section_foldable_candidate(src_section_name) + || is_prefix_of(".eh_frame", src_section_name.c_str()))) { is_icf_tracked = true; Section_id src_id(src_obj, src_indx); @@ -247,7 +248,12 @@ gc_process_relocs( (*secvec).push_back(Section_id(src_obj, dst_indx)); else (*secvec).push_back(Section_id(NULL, 0)); - (*symvec).push_back(NULL); + // If the target of the relocation is an STT_SECTION symbol, + // make a note of that by storing -1 in the symbol vector. + if (lsym.get_st_type() == elfcpp::STT_SECTION) + (*symvec).push_back(reinterpret_cast(-1)); + else + (*symvec).push_back(NULL); (*addendvec).push_back(std::make_pair( static_cast(symvalue), static_cast(addend)));