[GOLD] PowerPC relaxation corner case

It's possible for the section grouping code to decide that the last
section looked at (the first section by address) doesn't fit into a
group.  In one case that section is already a group owner and that is
handled correctly.  In other cases the section should be put into its
own group.  Like this:

	* powerpc.cc (Stub_control::set_output_and_owner): New function.
	(Target_powerpc::group_sections): Use it.
This commit is contained in:
Alan Modra 2014-11-26 10:06:07 +10:30
parent 38bd618497
commit a20605cf85
2 changed files with 14 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2014-11-26 Alan Modra <amodra@gmail.com>
* powerpc.cc (Stub_control::set_output_and_owner): New function.
(Target_powerpc::group_sections): Use it.
2014-11-25 Cary Coutant <ccoutant@google.com>
* binary.cc (Binary_to_elf::sized_convert): Add size to _start symbol.

View File

@ -2399,6 +2399,14 @@ class Stub_control
output_section()
{ return output_section_; }
void
set_output_and_owner(Output_section* o,
const Output_section::Input_section* i)
{
this->output_section_ = o;
this->owner_ = i;
}
private:
typedef enum
{
@ -2515,6 +2523,7 @@ Target_powerpc<size, big_endian>::group_sections(Layout* layout,
{
stub_table->init(stub_control.owner(),
stub_control.output_section());
stub_control.set_output_and_owner(*o, &*i);
stub_table = NULL;
}
if (stub_table == NULL)