X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gold%2Fgc.h;h=d0b16b22cdd261dc7ec792296ee15dd151f2a592;hb=4d625b70fc3fb7facc7159feb8d49b78ac6641f9;hp=2dcf61a6f3782cd224a395ccc67822a6814d321a;hpb=b05b120205e697db6291abb95a8cd2be054f99e9;p=deliverable%2Fbinutils-gdb.git diff --git a/gold/gc.h b/gold/gc.h index 2dcf61a6f3..d0b16b22cd 100644 --- a/gold/gc.h +++ b/gold/gc.h @@ -38,9 +38,6 @@ class Object; template class Sized_relobj_file; -template -struct Reloc_types; - class Output_section; class General_options; class Layout; @@ -153,12 +150,11 @@ struct Symbols_data template inline unsigned int -get_embedded_addend_size(int sh_type, int r_type, Relobj* obj) +get_embedded_addend_size(int r_type, Relobj* obj) { - if (sh_type != elfcpp::SHT_REL) - return 0; - Classify_reloc classify_reloc; - return classify_reloc.get_size_for_reloc(r_type, obj); + if (Classify_reloc::sh_type == elfcpp::SHT_REL) + return Classify_reloc::get_size_for_reloc(r_type, obj); + return 0; } // This function implements the generic part of reloc @@ -167,7 +163,7 @@ get_embedded_addend_size(int sh_type, int r_type, Relobj* obj) // garbage collection (--gc-sections) and identical code // folding (--icf). -template inline void gc_process_relocs( @@ -185,8 +181,8 @@ gc_process_relocs( { Scan scan; - typedef typename Reloc_types::Reloc Reltype; - const int reloc_size = Reloc_types::reloc_size; + typedef typename Classify_reloc::Reltype Reltype; + const int reloc_size = Classify_reloc::reloc_size; const int sym_size = elfcpp::Elf_sizes::sym_size; Icf::Sections_reachable_info* secvec = NULL; @@ -224,11 +220,10 @@ gc_process_relocs( for (size_t i = 0; i < reloc_count; ++i, prelocs += reloc_size) { Reltype reloc(prelocs); - typename elfcpp::Elf_types::Elf_WXword r_info = reloc.get_r_info(); - unsigned int r_sym = elfcpp::elf_r_sym(r_info); - unsigned int r_type = elfcpp::elf_r_type(r_info); + unsigned int r_sym = Classify_reloc::get_r_sym(&reloc); + unsigned int r_type = Classify_reloc::get_r_type(&reloc); typename elfcpp::Elf_types::Elf_Swxword addend = - Reloc_types::get_reloc_addend_noerror(&reloc); + Classify_reloc::get_r_addend(&reloc); Relobj* dst_obj; unsigned int dst_indx; typedef typename elfcpp::Elf_types::Elf_Addr Address; @@ -260,8 +255,7 @@ gc_process_relocs( convert_to_section_size_type(reloc.get_r_offset()); (*offsetvec).push_back(reloc_offset); (*reloc_addend_size_vec).push_back( - get_embedded_addend_size(sh_type, r_type, - src_obj)); + get_embedded_addend_size(r_type, src_obj)); } // When doing safe folding, check to see if this relocation is that @@ -337,8 +331,7 @@ gc_process_relocs( convert_to_section_size_type(reloc.get_r_offset()); (*offsetvec).push_back(reloc_offset); (*reloc_addend_size_vec).push_back( - get_embedded_addend_size(sh_type, r_type, - src_obj)); + get_embedded_addend_size(r_type, src_obj)); } if (dst_obj == NULL)