This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
The patch is to fix an gold internal error, internal error in set_current_data_size_for_child, at /usr/local/home/jingyu/opensource/binutils_trunk/src/gold/output.h:436 The error happens when set_current_data_size_for_child is called through this->rel_->add_relative(elfcpp::R_POWERPC_RELATIVE, this, off, to); through Target_powerpc<size, big_endian>::do_relax(). When the data size is updated through add_relative, the flag is_data_size_valid_ is not set to false beforehand, which triggers the assertion failure. Thanks Cary for the comments in gold/15662. Here is the updated patch. Is the patch ok? Thanks! 2013-06-24 Jing Yu <jingyu@google.com> PR gold/15662 * powerpc.cc (Target_powerpc::do_relax): Add calls to reset and finalize its relo section's data size. Index: powerpc.cc =================================================================== RCS file: /cvs/src/src/gold/powerpc.cc,v retrieving revision 1.91 diff -u -p -r1.91 powerpc.cc --- powerpc.cc 27 Apr 2013 00:53:16 -0000 1.91 +++ powerpc.cc 24 Jun 2013 20:09:03 -0000 @@ -2628,7 +2628,7 @@ Target_powerpc<size, big_endian>::do_rel && parameters->options().output_is_position_independent()) { // Fill in the BRLT relocs. - this->brlt_section_->reset_data_size(); + this->brlt_section_->reset_brlt_sizes(); for (typename Branch_lookup_table::const_iterator p = this->branch_lookup_table_.begin(); p != this->branch_lookup_table_.end(); @@ -2636,7 +2636,7 @@ Target_powerpc<size, big_endian>::do_rel { this->brlt_section_->add_reloc(p->first, p->second); } - this->brlt_section_->finalize_data_size(); + this->brlt_section_->finalize_brlt_sizes(); } return again; } @@ -3013,6 +3013,20 @@ class Output_data_brlt_powerpc : public targ_(targ) { } + void + reset_brlt_sizes() + { + this->reset_data_size(); + this->rel_->reset_data_size(); + } + + void + finalize_brlt_sizes() + { + this->finalize_data_size(); + this->rel_->finalize_data_size(); + } + // Add a reloc for an entry in the BRLT. void add_reloc(Address to, unsigned int off)
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |