aboutsummaryrefslogtreecommitdiff
path: root/gold/ChangeLog
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2014-11-26 11:10:29 +1030
committerAlan Modra <amodra@gmail.com>2014-11-26 13:29:29 +1030
commita3e60ddb0b43a3aed32f2982d472ab305c7e8f67 (patch)
tree85f47346b1bb39addca84555cdc14064f092258c /gold/ChangeLog
parentaa4893954a75660d2aa66245cb9d020049cb9546 (diff)
downloadgdb-a3e60ddb0b43a3aed32f2982d472ab305c7e8f67.zip
gdb-a3e60ddb0b43a3aed32f2982d472ab305c7e8f67.tar.gz
gdb-a3e60ddb0b43a3aed32f2982d472ab305c7e8f67.tar.bz2
Retry powerpc gold stub grouping when groups prove too large
An unusually large number of stubs can result in the default section group size being too large; sections plus stubs exceed the range of a branch. Restarting the relaxation pass with a smaller group size can sometimes help. * powerpc.cc (struct Stub_table_owner): New. (Powerpc_relobj): Rename stub_table_ to stub_table_index_, an unsigned int vector. Update all references. (powerpc_relobj::set_stub_table): Take an unsigned int param rather than a Stub_table. Update callers. (Powerpc_relobj::clear_stub_table): New function. (Target_powerpc): Add relax_failed_, relax_fail_count_ and stub_group_size_ vars. (Target_powerpc::new_stub_table): Delete. (max_branch_delta): New function, extracted from.. (Target_powerpc::Relocate::relocate): ..here.. (Target_powerpc::Branch_info::make_stub): ..and here. Return status on whether stub created successfully. (Stub_control::Stub_control): Add "no_size_errors" param. Move default sizing to.. (Target_powerpc::do_relax): ..here. Init stub_group_size_ and reduce on relax failure. (Target_powerpc::group_sections): Add "no_size_errors" param. Use stub_group_size_. Set up group info in a temp vector, before building Stub_table vector. Account for input sections possibly already converted to relaxed sections. (Stub_table::init): Delete. Merge into.. (Stub_table::Stub_table): ..here. (Stub_table::can_reach_stub): New function. (Stub_table::add_plt_call_entry): Add "from" parameter and return true iff stub could be reached. (Stub_table::add_long_branch_entry): Similarly. Add "r_type" param too. (Stub_table::clear_stubs): Add "all" param.
Diffstat (limited to 'gold/ChangeLog')
-rw-r--r--gold/ChangeLog32
1 files changed, 32 insertions, 0 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog
index 9b78b35..1a75a1e 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,5 +1,37 @@
2014-11-26 Alan Modra <amodra@gmail.com>
+ * powerpc.cc (struct Stub_table_owner): New.
+ (Powerpc_relobj): Rename stub_table_ to stub_table_index_, an
+ unsigned int vector. Update all references.
+ (powerpc_relobj::set_stub_table): Take an unsigned int param
+ rather than a Stub_table. Update callers.
+ (Powerpc_relobj::clear_stub_table): New function.
+ (Target_powerpc): Add relax_failed_, relax_fail_count_ and
+ stub_group_size_ vars.
+ (Target_powerpc::new_stub_table): Delete.
+ (max_branch_delta): New function, extracted from..
+ (Target_powerpc::Relocate::relocate): ..here..
+ (Target_powerpc::Branch_info::make_stub): ..and here. Return
+ status on whether stub created successfully.
+ (Stub_control::Stub_control): Add "no_size_errors" param. Move
+ default sizing to..
+ (Target_powerpc::do_relax): ..here. Init stub_group_size_ and
+ reduce on relax failure.
+ (Target_powerpc::group_sections): Add "no_size_errors" param.
+ Use stub_group_size_. Set up group info in a temp vector,
+ before building Stub_table vector. Account for input sections
+ possibly already converted to relaxed sections.
+ (Stub_table::init): Delete. Merge into..
+ (Stub_table::Stub_table): ..here.
+ (Stub_table::can_reach_stub): New function.
+ (Stub_table::add_plt_call_entry): Add "from" parameter and
+ return true iff stub could be reached.
+ (Stub_table::add_long_branch_entry): Similarly. Add "r_type"
+ param too.
+ (Stub_table::clear_stubs): Add "all" param.
+
+2014-11-26 Alan Modra <amodra@gmail.com>
+
* powerpc.cc (Stub_control::set_output_and_owner): New function.
(Target_powerpc::group_sections): Use it.