* x86_64.cc (Target_x86_64::saw_tls_block_reloc_): Remove member.
[binutils-gdb.git] / gold / ChangeLog
index a56d3acc26e308d0888b154f9b0c0cab239f881b..c0dbc263bf82a0d91a1a89a4c1bb3847bd5b2c60 100644 (file)
@@ -1,3 +1,649 @@
+2010-09-14  Cary Coutant  <ccoutant@google.com>
+
+       * x86_64.cc (Target_x86_64::saw_tls_block_reloc_): Remove member.
+       (Target_x86_64::Relocate::relocate_tls): Replace check for
+       saw_tls_block_reloc_ with test for executable section.
+
+2010-09-12  Cary Coutant  <ccoutant@google.com>
+
+       * symtab.h (Symbol::needs_dynamic_reloc): Non-PIC calls from
+       position-independent executables to shared libraries need dynamic
+       relocations.
+       (Symbol::may_need_copy_reloc): Do not generate COPY relocs in
+       position-independent executables.
+       * testsuite/Makefile.am (two_file_mixed_pie_test): New test.
+       * testsuite/Makefile.in: Regenerate.
+
+2010-09-10  Nick Clifton  <nickc@redhat.com>
+
+       PR gold/11997
+       * testsuite/memory_test.t: Discard any sections that are not
+       needed.
+
+2010-09-09  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR gold/11996
+       * object.cc (Sized_relobj::do_finalize_local_symbols): Remove
+       "This::" to work around a bug in gcc 4.2.
+
+       * testsuite/ifuncmain7.c (foo_ifunc): Add __attribute__ ((used)).
+
+2010-09-09  Rafael Espindola  <espindola@google.com>
+
+       * layout.cc (Layout::attach_allocated_section_to_segment): Don't put
+       sections with different PF_X flags in the same segment.
+       (Layout::find_first_load_seg): Search all segments to find the first
+       one.
+       * options.h (rosegment): New.
+
+2010-09-08  Rafael Espindola  <espindola@google.com>
+
+       * layout.cc (Layout::set_segment_offsets): Always advance to a new page.
+
+2010-09-08  Doug Kwan  <dougkwan@google.com>
+
+       * arm.cc (Arm_exidx_cantunwind::do_print_to_mapfile): New method.
+       (Arm_relobj::do_relocate_sections): Add new parameter for output
+       file to match the parent.
+       (Target_arm::scan_reloc_section_for_stubs): Use would-be final values
+       of local symbols instead of input values.  Update code to track
+       changes in gold::relocate_section.
+       * object.cc (Sized_relobj::compute_final_local_value): New methods.
+       (Sized_relobj::compute_final_local_value_internal): New methods.
+       (Sized_relobj::do_finalize_local_symbols): Move code from loop
+       body into private version of Sized_relobj::compute_final_local_value.
+       Call the inline method.
+       * object.h (Symbol_value::Symbol_value): Define destructor.  Free
+       merged symbol value if there is one.
+       (Symbol_value::has_output_value): New method defintiion.
+       (Sized_relobj::Compute_final_local_value_status): New enum type.
+       (Sized_relobj::compute_final_local_value): New methods.
+       (Sized_relobj::compute_final_local_value_internal): New methods.
+       * Makefile.am (check_SCRIPTS): Add arm_branch_out_of_range.sh
+       and arm_cortex_a8.sh.
+       (thumb_bl_out_of_range_local, arm_cortex_a8_b_cond, arm_cortex_a8_bl,
+       arm_cortex_a8_blx, arm_cortex_a8_local, arm_corte_a8_local_reloc):
+       New tests.
+       * Makefile.in: Regenerate.
+       * testsuite/arm_bl_out_of_range.s: Update test.
+       * testsuite/thumb_bl_out_of_range.s: Ditto.
+       * testsuite/thumb_blx_out_of_range.s: Ditto.
+       * testsuite/arm_branch_out_of_range.sh: New file.
+       * testsuite/arm_cortex_a8.sh: Ditto.
+       * testsuite/arm_cortex_a8_b.s: Ditto.
+       * testsuite/arm_cortex_a8_b_cond.s: Ditto.
+       * testsuite/arm_cortex_a8_b_local.s: Ditto.
+       * testsuite/arm_cortex_a8_bl.s: Ditto.
+       * testsuite/arm_cortex_a8_blx.s: Ditto.
+       * testsuite/arm_cortex_a8_local.s: Ditto.
+       * testsuite/arm_cortex_a8_local_reloc.s: Ditto.
+       * testsuite/thumb_bl_out_of_range_local.s: Ditto.
+
+2010-09-08  Rafael Espindola  <espindola@google.com>
+
+       * Makefile.am (memory_test.stdout): Run readelf with -W.
+       * Makefile.in: Regenerate.
+       * testsuite/memory_test.sh: Make the regexps accept both 32 and
+       64 bit output.
+
+2010-09-08  Rafael Espindola  <espindola@google.com>
+
+       * script-sections.cc (Script_sections::add_memory_region): Convert
+       field precision to int.
+       * script.cc (script_set_section_region, script_set_section_region):
+       Convert field precision to int.
+
+2010-09-08  Rafael Espindola  <espindola@google.com>
+
+       * arm.cc (do_finalize_sections): Create the __exidx_start and
+       __exdix_end symbols even when the section is missing.
+
+2010-09-08  Nick Clifton  <nickc@redhat.com>
+
+       * README: Remove claim that MEMORY is not supported.
+       * expression.cc (script_exp_function_origin)
+       (script_exp_function_length): Move from here to ...
+       * script.cc: ... here.
+       (script_set_section_region, script_add_memory)
+       (script_parse_memory_attr, script_include_directive): New
+       functions.
+       * script-sections.cc
+       (class Memory_region): New class.
+       (class Output_section_definition): Add set_memory_region,
+       set_section_vma, set_section_lma and get_section_name methods.
+       (class Script_Sections): Add add_memory_region,
+       find_memory_region, find_memory_region_origin,
+       find_memory_region_length and set_memory_region methods.
+       Have set_section_addresses method walk the list of set memory
+       regions.
+       Extend the print methos to display memory regions.
+       * script-sections.h: Add prototypes for new methods.
+       Add enum for MEMORY region attributes.
+       * yyscript.y: Add support for parsing MEMORY regions.
+       * script-c.h: Add prototypes for new functions.
+       * testsuite/Makefile.am: Add test of MEMORY region functionality.
+       * testsuite/Makefile.in: Regenerate.
+       * testsuite/memory_test.sh: New script.
+       * testsuite/memory_test.s: New assembler source file.
+       * testsuite/memory_test.t: New linker script.
+
+2010-08-27  Doug Kwan  <dougkwan@google.com>
+
+       * gold/resolve.cc (Symbol_table::should_override): Let a weak
+       reference override an existing dynamic weak reference.
+       * testsuite/Makefile.am: Add new test dyn_weak_ref.
+       * testsuite/Makefile.in: Regenerate.
+       * testsuite/dyn_weak_ref.sh: New file.
+       * testsuite/dyn_weak_ref_1.c: Ditto.
+       * testsuite/dyn_weak_ref_2.c: Ditto.
+
+2010-08-27  Ian Lance Taylor  <iant@google.com>
+
+       * incremental.h (class Incremental_input_entry): Add virtual
+       destructor.
+
+2010-08-27  Ian Lance Taylor  <iant@google.com>
+
+       * testsuite/start_lib_test_3.c: Mark t3 as used.
+
+2010-08-27  Nick Clifton  <nickc@redhat.com>
+
+       * options.cc (version_script): Fix small typo in previous
+       whitespace tidyup.
+
+2010-08-25  Nick Clifton  <nickc@redhat.com>
+
+       * archive.cc: Formatting fixes: Remove whitespace between
+       typename and following asterisk.  Remove whitespace between
+       function name and opening parenthesis.
+       * archive.h: Likewise.
+       * arm.cc: Likewise.
+       * attributes.cc: Likewise.
+       * attributes.h: Likewise.
+       * common.cc: Likewise.
+       * copy-relocs.cc: Likewise.
+       * dirsearch.h: Likewise.
+       * dynobj.cc: Likewise.
+       * ehframe.cc: Likewise.
+       * ehframe.h: Likewise.
+       * expression.cc: Likewise.
+       * fileread.cc: Likewise.
+       * fileread.h: Likewise.
+       * gc.h: Likewise.
+       * gold-threads.cc: Likewise.
+       * gold.cc: Likewise.
+       * i386.cc: Likewise.
+       * icf.h: Likewise.
+       * incremental-dump.cc: Likewise.
+       * incremental.cc: Likewise.
+       * layout.cc: Likewise.
+       * layout.h: Likewise.
+       * main.cc: Likewise.
+       * merge.cc: Likewise.
+       * merge.h: Likewise.
+       * object.cc: Likewise.
+       * object.h: Likewise.
+       * options.cc: Likewise.
+       * options.h: Likewise.
+       * output.cc: Likewise.
+       * output.h: Likewise.
+       * plugin.cc: Likewise.
+       * plugin.h: Likewise.
+       * powerpc.cc: Likewise.
+       * reloc.cc: Likewise.
+       * script-c.h: Likewise.
+       * script-sections.cc: Likewise.
+       * script.cc: Likewise.
+       * stringpool.cc: Likewise.
+       * symtab.cc: Likewise.
+       * symtab.h: Likewise.
+       * target.cc: Likewise.
+       * timer.cc: Likewise.
+       * timer.h: Likewise.
+       * version.cc: Likewise.
+       * x86_64.cc: Likewise.
+
+2010-08-24  Nick Clifton  <nickc@redhat.com>
+
+       PR 11899
+       * layout.cc (segment_precedes): Sort segments by their physical
+       addresses, if they have been set.
+
+2010-08-23  Cary Coutant  <ccoutant@google.com>
+
+       * archive.cc (Lib_group::add_symbols): Lock object before deleting its
+       symbols data.
+       (Lib_group::include_member): Unlock object after deleting its
+       symbols data.
+       * testsuite/start_lib_test_3.c: Remove all global symbols to trigger
+       the bug fixed here.
+
+2010-08-19  Neil Vachharajani  <nvachhar@google.com>
+           Cary Coutant  <ccoutant@google.com>
+
+       * gold/archive.h (Add_lib_group_symbols): Add readsyms_blocker_, adjust
+       constructor, and set_blocker.
+       * gold/archive.cc (Add_lib_group_symbols::is_runnable): Also check
+       readsyms_blocker_.
+       * gold/readsyms.cc (Read_symbols::do_lib_group): Also pass
+       this->this_blocker_ to Add_lib_group_symbols::set_blocker.
+       * testsuite/Makefile.am (start_lib_test): New test case.
+       * testsuite/Makefile.in: Regenerate.
+       * testsuite/start_lib_test_main.c: New file.
+       * testsuite/start_lib_test_1.c: New file.
+       * testsuite/start_lib_test_2.c: New file.
+       * testsuite/start_lib_test_3.c: New file.
+
+2010-08-19  Ian Lance Taylor  <iant@google.com>
+
+       * Makefile.in: Rebuild with automake 1.11.1.
+       * aclocal.m4: Likewise.
+       * testsuite/Makefile.in: Likewise.
+
+2010-08-19  Ian Lance Taylor  <iant@google.com>
+
+       PR 10893
+       * i386.cc (class Output_data_plt_i386): Update declarations.
+       Define Global_ifunc and Local_ifunc types.  Add global_ifuncs_ and
+       local_ifuncs_ fields.
+       (Target_i386::do_plt_section_for_global): New function.
+       (Target_i386::do_plt_section_for_local): New function.
+       (Output_data_plt_i386::Output_data_plt_i386): Add symtab
+       parameter; change all callers.  Initialize global_ifuncs_ and
+       local_ifuncs_.  If doing a static link define __rel_iplt_start and
+       __rel_iplt_end.
+       (Output_data_plt_i386::add_entry): Handle IFUNC symbols.
+       (Output_data_plt_i386::add_local_ifunc_entry): New function.
+       (Output_data_plt_i386::do_write): Fix GOT entries for IFUNC
+       symbols.
+       (Target_i386::make_plt_section): New function, broken out of
+       make_plt_entry.  Set sh_info field of .rel.plt to point to .plt.
+       (Target_i386::make_plt_entry): Call make_plt_section.
+       (Target_i386::make_local_ifunc_plt_entry): New function.
+       (Target_i386::Scan::reloc_needs_iplt_for_ifunc): New function.
+       (Target_i386::Scan::local): Handle IFUNC symbols.  Add
+       R_386_IRELATIVE to switch.
+       (Target_i386::Scan::global): Likewise.
+       (Target_i386::Relocate::relocate): Likewise.
+       (Target_i386::Relocatable_size_for_reloc): Add R_386_IRELATIVE to
+       switch.
+       * x86_64.cc (class Output_data_plt_x86_64): Update declarations.
+       (Target_x86_64::do_plt_section_for_global): New function.
+       (Target_x86_64::do_plt_section_for_local): New function.
+       (Output_data_plt_x86_64::Output_data_plt_x86_64): Add symtab
+       parameter; change all callers.  If doing a static link define
+       __rela_iplt_start and __rela_iplt_end.
+       (Output_data_plt_x86_64::add_entry): Handle IFUNC symbols.
+       (Output_data_plt_x86_64::add_local_ifunc_entry): New function.
+       (Target_x86_64::make_plt_section): Set sh_info field of .rel.plt
+       to point to .plt.
+       (Target_x86_64::make_local_ifunc_plt_entry): New function.
+       (Target_x86_64::Scan::check_non_pic): Add R_X86_64_IRELATIVE to
+       switch.
+       (Target_x86_64::Scan::reloc_needs_iplt_for_ifunc): New function.
+       (Target_x86_64::Scan::local): Handle IFUNC symbols.  Add
+       R_X86_64_IRELATIVE to switch.
+       (Target_x86_64::Scan::global): Likewise.
+       (Target_x86_64::Relocate::relocate): Likewise.
+       (Target_x86_64::Relocatable_size_for_reloc): Add R_X86_64_IRELATIVE to
+       switch.
+       * target.h (class Target): Add plt_section_for_global and
+       plt_section_for_local functions.  Add do_plt_section_for_global
+       and do_plt_section_for_local virtual functions.
+       * symtab.h (Symbol::needs_plt_entry): Handle IFUNC symbol.  Add
+       clarifying comments.
+       (Symbol::use_plt_offset): Handle IFUNC symbol.
+       * object.cc (Sized_relobj::Sized_relobj): Initialize
+       local_plt_offsets_.
+       (Sized_relobj::local_has_plt_offset): New function.
+       (Sized_relobj::local_plt_offset): New function.
+       (Sized_relobj::set_local_plt_offset): New function.
+       (Sized_relobj::do_count): Handle IFUNC symbol.
+       * object.h (class Symbol_value): Add is_ifunc_symbol_ field.  Take
+       a bit away from input_shndx_ field.  Add set_is_func_symbol and
+       is_ifunc_symbol functions.
+       (class Sized_relobj): Update declarations.  Remove Tls_got_entry
+       and Local_tls_got_offsets.  Define Local_plt_offsets.  Add
+       local_plt_offsets_ field.
+       (Sized_relobj::clear_local_symbols): Clear local_plt_offsets_.
+       * output.h (class Output_section_data): Add non-const
+       output_section function.
+       (class Output_data_got): Update declarations.
+       (class Output_data_got::Got_entry): Add use_plt_offset_ field.
+       Add use_plt_offset parameter to global and local constructors.
+       Change all callers.  Change local_sym_index_ field to 31 bits.
+       Change GSYM_CODE and CONSTANT_CODE accordingly.
+       * output.cc (Output_data_reloc_base::do_adjust_output_section): If
+       doing a static link don't set sh_link field.
+       (Output_data_got::Got_entry::write): Use PLT offset if
+       appropriate.
+       (Output_data_got::add_global_plt): New function.
+       (Output_data_got::add_local_plt): New function.
+       * target-reloc.h (relocate_section): Handle IFUNC symbol.
+       * defstd.cc (in_section): Remove entries for __rel_iplt_start,
+       __rel_iplt_end, __rela_iplt_start, and __rela_iplt_end.
+       * configure.ac: Set IFUNC automake conditional for glibc >= 2.11.
+       * testsuite/Makefile.am: Add a bunch of IFUNC tests, all within
+       IFUNC conditional.
+       * testsuite/ifunc-sel.h: New file.
+       * testsuite/ifuncmain1.c: New file.
+       * testsuite/ifuncmain1vis.c: New file.
+       * testsuite/ifuncmod1.c: New file.
+       * testsuite/ifuncdep2.c: New file.
+       * testsuite/ifuncmain2.c: New file.
+       * testsuite/ifuncmain3.c: New file.
+       * testsuite/ifuncmod3.c: New file.
+       * testsuite/ifuncmain4.c: New file.
+       * testsuite/ifuncmain5.c: New file.
+       * testsuite/ifuncmod5.c: New file.
+       * testsuite/ifuncmain6pie.c: New file.
+       * testsuite/ifuncmod6.c: New file.
+       * testsuite/ifuncmain7.c: New file.
+       * configure, testsuite/Makefile.in: Rebuild.
+
+2010-08-18  Ian Lance Taylor  <iant@google.com>
+
+       * incremental.cc
+       (Output_section_incremental_inputs::write_input_files): Add cast
+       to avoid signed/unsigned comparison warning.
+       (Output_section_incremental_inputs::write_info_blocks): Likewise.
+
+2010-08-12  Cary Coutant  <ccoutant@google.com>
+
+       * common.cc (Sort_commons::operator()): Remove unnecessary code.
+
+2010-08-13  Ian Lance Taylor  <iant@google.com>
+
+       * testsuite/incremental_test_1.c: Add prototype to avoid warning.
+
+2010-08-12  Cary Coutant  <ccoutant@google.com>
+           Doug Kwan  <dougkwan@google.com>
+
+       * resolve.cc (Symbol_table::should_override): When a weak dynamic
+       defintion overrides non-weak undef, remember that the original undef
+       is not weak.
+       * symtab.cc (Symbol_table::sized_write_global): For undef without
+       an original weak binding, set binding to global in output.
+       * testsuite/Makefile.am: Add new test strong_ref_weak_def.
+       * testsuite/Makefile.in: Regenerate.
+       * testsuite/strong_ref_weak_def.sh: New file.
+       * testsuite/strong_ref_weak_def_1.c: Ditto.
+       * testsuite/strong_ref_weak_def_2.c: Ditto.
+
+2010-08-12  Cary Coutant  <ccoutant@google.com>
+
+       * testsuite/incremental_test.sh: Rewrite.
+       * testsuite/incremental_test_1.c: Rewrite.
+       * testsuite/incremental_test_2.c: Rewrite.
+
+2010-08-12  Cary Coutant  <ccoutant@google.com>
+
+       * arm.cc (Target_arm::got_size): Add const.
+       (Target_arm::got_entry_count): New function.
+       (Target_arm::plt_entry_count): New function.
+       (Target_arm::first_plt_entry_offset): New function.
+       (Target_arm::plt_entry_size): New function.
+       (Output_data_plt_arm::entry_count): New function.
+       (Output_data_plt_arm::first_plt_entry_offset): New function.
+       (Output_data_plt_arm::get_plt_entry_size): New function.
+       * i386.cc (Target_i386::got_size): Add const.
+       (Target_i386::got_entry_count): New function.
+       (Target_i386::plt_entry_count): New function.
+       (Target_i386::first_plt_entry_offset): New function.
+       (Target_i386::plt_entry_size): New function.
+       (Output_data_plt_i386::entry_count): New function.
+       (Output_data_plt_i386::first_plt_entry_offset): New function.
+       (Output_data_plt_i386::get_plt_entry_size): New function.
+       * incremental-dump.cc (dump_incremental_inputs): Adjust call to
+       find_incremental_inputs_sections.  Dump incremental_got_plt section.
+       * incremental.cc: Include target.h.
+       (Sized_incremental_binary::do_find_incremental_inputs_sections): Add
+       parameter.  Adjust all callers.  Find incremental_got_plt section.
+       (Incremental_inputs::create_data_sections): Create incremental_got_plt
+       section.
+       (Output_section_incremental_inputs::set_final_data_size): Calculate
+       size of incremental_got_plt section.
+       (Output_section_incremental_inputs::do_write): Write the
+       incremental_got_plt section.
+       (Got_plt_view_info): New struct.
+       (Local_got_offset_visitor): New class.
+       (Global_got_offset_visitor): New class.
+       (Global_symbol_visitor_got_plt): New class.
+       (Output_section_incremental_inputs::write_got_plt): New function.
+       * incremental.h (Incremental_binary::find_incremental_inputs_sections):
+       Add parameter.  Adjust all callers.
+       (Incremental_binary::do_find_incremental_inputs_sections): Likewise.
+       (Incremental_inputs::got_plt_section): New function.
+       (Incremental_inputs::got_plt_section_): New data member.
+       (Incremental_got_plt_reader): New class.
+       * layout.cc (Layout::create_incremental_info_sections): Add the
+       incremental_got_plt section.
+       * object.h (Got_offset_list::get_list): New function.
+       (Got offset_list::for_all_got_offsets): New function.
+       (Sized_relobj::local_got_offset_list): New function.
+       * powerpc.cc (Target_powerpc::got_size): Add const.
+       (Target_powerpc::got_entry_count): New function.
+       (Target_powerpc::plt_entry_count): New function.
+       (Target_powerpc::first_plt_entry_offset): New function.
+       (Target_powerpc::plt_entry_size): New function.
+       (Output_data_plt_powerpc::entry_count): New function.
+       (Output_data_plt_powerpc::first_plt_entry_offset): New function.
+       (Output_data_plt_powerpc::get_plt_entry_size): New function.
+       * sparc.cc (Target_sparc::got_size): Add const.
+       (Target_sparc::got_entry_count): New function.
+       (Target_sparc::plt_entry_count): New function.
+       (Target_sparc::first_plt_entry_offset): New function.
+       (Target_sparc::plt_entry_size): New function.
+       (Output_data_plt_sparc::entry_count): New function.
+       (Output_data_plt_sparc::first_plt_entry_offset): New function.
+       (Output_data_plt_sparc::get_plt_entry_size): New function.
+       * symtab.h (Symbol::got_offset_list): New function.
+       (Symbol_table::for_all_symbols): New function.
+       * target.h (Sized_target::got_entry_count): New function.
+       (Sized_target::plt_entry_count): New function.
+       (Sized_target::plt_entry_size): New function.
+       * x86_64.cc (Target_x86_64::got_size): Add const.
+       (Target_x86_64::got_entry_count): New function.
+       (Target_x86_64::plt_entry_count): New function.
+       (Target_x86_64::first_plt_entry_offset): New function.
+       (Target_x86_64::plt_entry_size): New function.
+       (Output_data_plt_x86_64::entry_count): New function.
+       (Output_data_plt_x86_64::first_plt_entry_offset): New function.
+       (Output_data_plt_x86_64::get_plt_entry_size): New function.
+
+2010-08-12  Cary Coutant  <ccoutant@google.com>
+
+       * archive.cc: Include incremental.h.
+       (Archive::Archive): Initialize incremental_info_.
+       (Archive::include_member): Record archive members in incremental info.
+       (Add_archive_symbols::run): Record begin and end of an archive in
+       incremental info.
+       (Lib_group::include_member): Record objects in incremental info.
+       * archive.h (Incremental_archive_entry): Forward declaration.
+       (Archive::set_incremental_info): New member function.
+       (Archive::incremental_info): New member function.
+       (Archive::Unused_symbol_iterator): New class.
+       (Archive::unused_symbols_begin): New member function.
+       (Archive::unused_symbols_end): New member function.
+       (Archive::incremental_info_): New data member.
+       * incremental-dump.cc (find_input_containing_global): New function.
+       (dump_incremental_inputs): Dump new incremental info sections.
+       * incremental.cc: Include symtab.h.
+       (Output_section_incremental_inputs): New class.
+       (Sized_incremental_binary::do_find_incremental_inputs_sections): Support
+       new incremental info sections.
+       (Sized_incremental_binary::do_check_inputs): Likewise.
+       (Incremental_inputs::report_archive): Remove.
+       (Incremental_inputs::report_archive_begin): New function.
+       (Incremental_inputs::report_archive_end): New function.
+       (Incremental_inputs::report_object): New function.
+       (Incremental_inputs::finalize_inputs): Remove.
+       (Incremental_inputs::report_input_section): New function.
+       (Incremental_inputs::report_script): Rewrite.
+       (Incremental_inputs::finalize): Do nothing but finalize string table.
+       (Incremental_inputs::create_incremental_inputs_section_data): Remove.
+       (Incremental_inputs::sized_create_inputs_section_data): Remove.
+       (Incremental_inputs::create_data_sections): New function.
+       (Incremental_inputs::relocs_entsize): New function.
+       (Output_section_incremental_inputs::set_final_data_size): New function.
+       (Output_section_incremental_inputs::do_write): New function.
+       (Output_section_incremental_inputs::write_header): New function.
+       (Output_section_incremental_inputs::write_input_files): New function.
+       (Output_section_incremental_inputs::write_info_blocks): New function.
+       (Output_section_incremental_inputs::write_symtab): New function.
+       * incremental.h (Incremental_script_entry): Forward declaration.
+       (Incremental_object_entry): Forward declaration.
+       (Incremental_archive_entry): Forward declaration.
+       (Incremental_inputs): Forward declaration.
+       (Incremental_inputs_header_data): Remove.
+       (Incremental_inputs_header): Remove.
+       (Incremental_inputs_header_write): Remove.
+       (Incremental_inputs_entry_data): Remove.
+       (Incremental_inputs_entry): Remove.
+       (Incremental_inputs_entry_write): Remove.
+       (enum Incremental_input_type): Add INCREMENTAL_INPUT_ARCHIVE_MEMBER.
+       (Incremental_binary::find_incremental_inputs_sections): Add parameters.
+       (Incremental_binary::do_find_incremental_inputs_sections): Likewise.
+       (Sized_ncremental_binary::do_find_incremental_inputs_sections):
+       Likewise.
+       (Incremental_input_entry): New class.
+       (Incremental_script_entry): New class.
+       (Incremental_object_entry): New class.
+       (Incremental_archive_entry): New class.
+       (Incremental_inputs::Incremental_inputs): Initialize new data members.
+       (Incremental_inputs::report_inputs): Remove.
+       (Incremental_inputs::report_archive): Remove.
+       (Incremental_inputs::report_archive_begin): New function.
+       (Incremental_inputs::report_archive_end): New function.
+       (Incremental_inputs::report_object): Change prototype.
+       (Incremental_inputs::report_input_section): New function.
+       (Incremental_inputs::report_script): Change prototype.
+       (Incremental_inputs::get_reloc_count): New function.
+       (Incremental_inputs::set_reloc_count): New function.
+       (Incremental_inputs::create_data_sections): New function.
+       (Incremental_inputs::create_incremental_inputs_section_data): Remove.
+       (Incremental_inputs::inputs_section): New function.
+       (Incremental_inputs::symtab_section): New function.
+       (Incremental_inputs::relocs_section): New function.
+       (Incremental_inputs::get_stringpool): Add const.
+       (Incremental_inputs::command_line): Add const.
+       (Incremental_inputs::inputs): Remove.
+       (Incremental_inputs::command_line_key): New function.
+       (Incremental_inputs::input_file_count): New function.
+       (Incremental_inputs::input_files): New function.
+       (Incremental_inputs::relocs_entsize): New function.
+       (Incremental_inputs::sized_create_inputs_section_data): Remove.
+       (Incremental_inputs::finalize_inputs): Remove.
+       (Incremental_inputs::Input_info): Remove.
+       (Incremental_inputs::lock_): Remove.
+       (Incremental_inputs::inputs_): Change type.
+       (Incremental_inputs::inputs_map_): Remove.
+       (Incremental_inputs::current_object_entry_): New data member.
+       (Incremental_inputs::inputs_section_): New data member.
+       (Incremental_inputs::symtab_section_): New data member.
+       (Incremental_inputs::relocs_section_): New data member.
+       (Incremental_inputs::reloc_count_): New data member.
+       (Incremental_inputs_reader): New class.
+       (Incremental_symtab_reader): New class.
+       (Incremental_relocs_reader): New class.
+       * layout.cc (Layout::finalize): Move finalization of incremental info
+       and creation of incremental info sections to follow finalization of
+       symbol table.  Set offsets for postprocessing sections.
+       (Layout::create_incremental_info_sections): Call
+       Incremental_inputs::create_data_sections.  Add incremental symtab
+       and relocs sections.  Set sh_entsize and sh_link fields.  Arrange for
+       sections to layout after input sections.
+       * layout.h (struct Timespec): Forward declaration.
+       (Layout::incremental_inputs): Add const.
+       (Layout::create_incremental_info_sections): Add parameter.
+       * main.cc (main): Remove call to Incremental_inputs::report_inputs.
+       * object.cc: Include incremental.h.
+       (Relobj::finalize_incremental_relocs): New function.
+       (Sized_relobj::do_layout): Record input sections in incremental info.
+       * object.h (Object::output_section): New function.
+       (Object::output_section_offset): Moved from Relobj.
+       (Object::get_incremental_reloc_base): New function.
+       (Object::get_incremental_reloc_count): New function.
+       (Object::do_output_section): New function.
+       (Object::do_output_section_offset): Moved from Relobj.
+       (Object::do_get_incremental_reloc_base): New function.
+       (Object::do_get_incremental_reloc_count): New function.
+       (Object::Object): Initialize new data members.
+       (Relobj::output_section): Renamed do_output_section and moved to
+       protected.
+       (Relobj::output_section_offset): Moved to Object.
+       (Relobj::do_get_incremental_reloc_base): New function.
+       (Relobj::do_get_incremental_reloc_count): New function.
+       (Relobj::allocate_incremental_reloc_counts): New function.
+       (Relobj::count_incremental_reloc): New function.
+       (Relobj::finalize_incremental_relocs): New function.
+       (Relobj::next_incremental_reloc_index): New function.
+       (Relobj::reloc_counts_): New data member.
+       (Relobj::reloc_bases_): New data member.
+       (Sized_relobj::do_relocate_sections): Add parameter.  Change caller.
+       (Sized_relobj::relocate_sections): Add parameter.  Change all callers.
+       (Sized_relobj::incremental_relocs_scan): New function.
+       (Sized_relobj::incremental_relocs_scan_reltype): New function.
+       (Sized_relobj::incremental_relocs_write): New function.
+       (Sized_relobj::incremental_relocs_write_reltype): New function.
+       * plugin.cc (Plugin_manager::add_input_file): Rewrite test for
+       incremental link.
+       * readsyms.cc (Read_symbols::do_read_symbols): Move reporting of
+       archives and object files elsewhere.
+       (Add_symbols::run): Report object files here.
+       (Finish_group::run): Report end of archive at end of group.
+       * reloc.cc: Include layout.h, incremental.h.
+       (Sized_relobj::do_read_relocs): Need relocations for incremental link.
+       (Sized_relobj::do_scan_relocs): Record relocations for incremental link.
+       (Sized_relobj::incremental_relocs_scan): New function.
+       (Sized_relobj::incremental_relocs_scan_reltype): New function.
+       (Sized_relobj::do_relocate_sections): Write incremental relocations.
+       (Sized_relobj::incremental_relocs_write): New function.
+       (Sized_relobj::incremental_relocs_write_reltype): New function.
+       * script.cc (read_input_script): Rewrite test for incremental link.
+       Change call to Incremental_inputs::report_script.
+       * symtab.h (Symbol_table::first_global_index): New function.
+       (Symbol_table::output_count): New function.
+
+2010-08-12  Doug Kwan  <dougkwan@google.com>
+
+       * arm.cc (Target_arm::merge_object_attributes): Check command line
+       options --no-wchar-size-warning and --no-enum-size-warning.
+       * options.h (General_options): Add ld-compatible options
+       --no-enum-size-warning and --no-wchar-size-warning.
+
+2010-08-04  Ian Lance Taylor  <iant@google.com>
+
+       * x86_64.cc (Target_x86_64::Scan::local): Use
+       R_X86_64_GNU_VTINHERIT instead of R_386_GNU_VTINHERIT and
+       R_X86_64_GNU_VTENTRY instead of R_386_GNU_VTENTRY.
+       (Target_x86_64::Scan::global): Likewise.
+       (Target_x86_64::Relocate::relocate): Likewise.
+       (Target_x86_64::Relocatable_size_for_reloc::get_size_for_reloc):
+       Likewise.
+
+2010-08-03  Cary Coutant  <ccoutant@google.com>
+
+       * merge.cc (Output_merge_string::do_add_input_section): Count strings
+       to reserve space in merged_strings vector. Keep total input size
+       for stats.
+       (Output_merge_string::do_print_merge_stats): Print total input size.
+       * merge.h (Output_merge_string): Add input_size_ field.
+       * stringpool.cc (Stringpool_template::string_length): Move
+       implementations out of Stringpool_template class and place in
+       stringpool.h.
+       * stringpool.h (string_length): Move out of Stringpool_template.
+
+2010-08-03  Ian Lance Taylor  <iant@google.com>
+
+       PR 11712
+       * layout.cc (relaxation_loop_body): If address of load segment is
+       set, adjust address to include headers if possible.
+
+2010-08-03  Ian Lance Taylor  <iant@google.com>
+
+       * version.cc (version_string): Bump to 1.10.
+
 2010-08-03  Ian Lance Taylor  <iant@google.com>
 
        PR 11805