diff options
author | Sriraman Tallam <tmsriram@google.com> | 2010-02-21 00:57:59 +0000 |
---|---|---|
committer | Sriraman Tallam <tmsriram@google.com> | 2010-02-21 00:57:59 +0000 |
commit | b487ad64e5aa3da0c80b8648f7079b5415c45a3a (patch) | |
tree | db254f4182cc73c2abc52dc46c266b495265654f /gold/icf.cc | |
parent | 307d2493b8685a7f69b85dc48db0df13921f0665 (diff) | |
download | gdb-b487ad64e5aa3da0c80b8648f7079b5415c45a3a.zip gdb-b487ad64e5aa3da0c80b8648f7079b5415c45a3a.tar.gz gdb-b487ad64e5aa3da0c80b8648f7079b5415c45a3a.tar.bz2 |
2010-02-20 Sriraman Tallam <tmsriram@google.com>
* gc.h (gc_process_relocs): Change vectors to point to the new list.
Add reloc offset information.
* icf.cc (get_section_contents): Change iterators to point to the new
vectors. Add reloc offset information to the contents.
* icf.h (Icf::Sections_reachable_info): New typedef.
(Icf::Sections_reachable_list): New typedef.
(Icf::Offset_info): New typedef.
(Icf::Reloc_info): New struct typedef.
(Icf::Reloc_info_list): New typedef.
(Icf::symbol_reloc_list): Delete method.
(Icf::addend_reloc_list): Delete method.
(Icf::section_reloc_list): Delete method.
(Icf::reloc_info_list): New method.
(Icf::reloc_info_list_): New member.
Diffstat (limited to 'gold/icf.cc')
-rw-r--r-- | gold/icf.cc | 37 |
1 files changed, 18 insertions, 19 deletions
diff --git a/gold/icf.cc b/gold/icf.cc index ec3269c..752aa55 100644 --- a/gold/icf.cc +++ b/gold/icf.cc @@ -248,39 +248,38 @@ get_section_contents(bool first_iteration, if (num_tracked_relocs) *num_tracked_relocs = 0; - Icf::Section_list& seclist = symtab->icf()->section_reloc_list(); - Icf::Symbol_list& symlist = symtab->icf()->symbol_reloc_list(); - Icf::Addend_list& addendlist = symtab->icf()->addend_reloc_list(); + Icf::Reloc_info_list& reloc_info_list = + symtab->icf()->reloc_info_list(); - Icf::Section_list::iterator it_seclist = seclist.find(secn); - Icf::Symbol_list::iterator it_symlist = symlist.find(secn); - Icf::Addend_list::iterator it_addendlist = addendlist.find(secn); + Icf::Reloc_info_list::iterator it_reloc_info_list = + reloc_info_list.find(secn); buffer.clear(); icf_reloc_buffer.clear(); // Process relocs and put them into the buffer. - if (it_seclist != seclist.end()) + if (it_reloc_info_list != reloc_info_list.end()) { - gold_assert(it_symlist != symlist.end()); - gold_assert(it_addendlist != addendlist.end()); - Icf::Sections_reachable_list v = it_seclist->second; - Icf::Symbol_info s = it_symlist->second; - Icf::Addend_info a = it_addendlist->second; - Icf::Sections_reachable_list::iterator it_v = v.begin(); + Icf::Sections_reachable_info v = + (it_reloc_info_list->second).section_info; + Icf::Symbol_info s = (it_reloc_info_list->second).symbol_info; + Icf::Addend_info a = (it_reloc_info_list->second).addend_info; + Icf::Offset_info o = (it_reloc_info_list->second).offset_info; + Icf::Sections_reachable_info::iterator it_v = v.begin(); Icf::Symbol_info::iterator it_s = s.begin(); Icf::Addend_info::iterator it_a = a.begin(); + Icf::Offset_info::iterator it_o = o.begin(); - for (; it_v != v.end(); ++it_v, ++it_s, ++it_a) + for (; it_v != v.end(); ++it_v, ++it_s, ++it_a, ++it_o) { - // ADDEND_STR stores the symbol value and addend, each - // atmost 16 hex digits long. it_v points to a pair + // ADDEND_STR stores the symbol value and addend and offset, + // each atmost 16 hex digits long. it_a points to a pair // where first is the symbol value and second is the // addend. - char addend_str[34]; - snprintf(addend_str, sizeof(addend_str), "%llx %llx", - (*it_a).first, (*it_a).second); + char addend_str[50]; + snprintf(addend_str, sizeof(addend_str), "%llx %llx %lux", + (*it_a).first, (*it_a).second, (*it_o)); Section_id reloc_secn(it_v->first, it_v->second); // If this reloc turns back and points to the same section, |