gdb: add target_ops::supports_displaced_step
[deliverable/binutils-gdb.git] / gold / gc.h
index 7c79c23aa955717a119a6a63cf6dcca44693e9e4..cd5b539b4856903ee388aa83babc46ca95cb5072 100644 (file)
--- 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-2020 Free Software Foundation, Inc.
 // Written by Sriraman Tallam <tmsriram@google.com>.
 
 // 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<Symbol*>(-1));
+             else
+               (*symvec).push_back(NULL);
              (*addendvec).push_back(std::make_pair(
                                        static_cast<long long>(symvalue),
                                        static_cast<long long>(addend)));
This page took 0.023879 seconds and 4 git commands to generate.